99 lines
4.0 KiB
C#
99 lines
4.0 KiB
C#
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 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |