123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- using UnityEngine;
- using UnityEditor;
-
- public class LuxURPCustomBillboardShaderGUI : ShaderGUI
- {
- public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
- {
- base.OnGUI(materialEditor, properties);
- Material material = materialEditor.target as Material;
- var _Surface = ShaderGUI.FindProperty("_Surface", properties);
- int QueueOffset = material.GetInt("_QueueOffset");
-
- // Alpha Testing
- if(_Surface.floatValue == 0.0f) {
- material.EnableKeyword("_ALPHATEST_ON");
- material.DisableKeyword("_APPLYFOGADDITIVELY");
- if (material.GetInt("_ApplyFog") == 1) {
- material.EnableKeyword("_APPLYFOG");
- material.DisableKeyword("_APPLYFOGADDITIVELY");
- }
- material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.AlphaTest + QueueOffset;
- material.SetOverrideTag("RenderType", "TransparentCutout");
- material.SetInt("_ZWrite", 1);
- material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
- material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
- material.SetShaderPassEnabled("ShadowCaster", true);
- }
- // Alpha Blending
- else {
- material.DisableKeyword("_ALPHATEST_ON");
- material.renderQueue = (int) UnityEngine.Rendering.RenderQueue.Transparent + QueueOffset;
- material.SetOverrideTag("RenderType", "Transparent");
- material.SetInt("_ZWrite", 0);
- if (material.GetInt("_Blend") == 0) {
- material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
- material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
- material.DisableKeyword("_APPLYFOGADDITIVELY");
- if (material.GetInt("_ApplyFog") == 1) {
- material.EnableKeyword("_APPLYFOG");
- }
- else {
- material.DisableKeyword("_APPLYFOG");
- }
- }
- else if (material.GetInt("_Blend") == 1) {
- material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
- material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One);
- material.DisableKeyword("_APPLYFOG");
- if (material.GetInt("_ApplyFog") == 1) {
- material.EnableKeyword("_APPLYFOGADDITIVELY");
- }
- else {
- material.DisableKeyword("_APPLYFOGADDITIVELY");
- }
- }
- else {
- material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor);
- material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One);
- material.DisableKeyword("_APPLYFOG");
- if (material.GetInt("_ApplyFog") == 1) {
- material.EnableKeyword("_APPLYFOGADDITIVELY");
- }
- else {
- material.DisableKeyword("_APPLYFOGADDITIVELY");
- }
- }
- material.SetShaderPassEnabled("ShadowCaster", false);
- }
- if (material.HasProperty("_Culling")) {
- var _Culling = ShaderGUI.FindProperty("_Culling", properties);
- if(_Culling.floatValue == 0.0f) {
- if (material.doubleSidedGI == false) {
- Debug.Log ("Double Sided Global Illumination enabled.");
- }
- material.doubleSidedGI = true;
- }
- }
- // Get rid of the normal map issue
- if ( material.HasProperty("_BumpMap") ) {
- if (material.HasProperty("_ApplyNormal") ) {
- if ( material.GetFloat("_ApplyNormal") == 0.0f && material.GetTexture("_BumpMap") == null ) {
- //material.SetTexture("_BumpMap", Texture2D.normalTexture); // Is not linear?!
- material.SetTexture("_BumpMap", Resources.Load("LuxURPdefaultBump") as Texture2D );
- }
- }
- }
- }
- }
|