Files
beyond/Assets/ThirdParty/Lux URP Essentials/Scripts/Editor/LuxURPCustomGlassShaderGUI.cs
2024-11-20 15:21:28 +01:00

92 lines
3.6 KiB
C#

using UnityEngine;
using UnityEditor;
public class LuxURPCustomGlassShaderGUI : ShaderGUI
{
public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
{
base.OnGUI(materialEditor, properties);
Material material = materialEditor.target as Material;
// Blending
int blendMode = (int)material.GetFloat("_Blend");
// None
if (blendMode == 0) {
material.SetFloat("_SrcBlend", 1.0f);
material.SetFloat("_DstBlend", 0.0f);
material.DisableKeyword("_FINALALPHA");
material.DisableKeyword("_ADDITIVE");
}
// Alpha blending
else if (blendMode == 1) {
material.SetFloat("_SrcBlend", (float)UnityEngine.Rendering.BlendMode.SrcAlpha);
material.SetFloat("_DstBlend", (float)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
material.EnableKeyword("_FINALALPHA");
material.DisableKeyword("_ADDITIVE");
}
// Additive
else {
material.SetFloat("_SrcBlend", (float)UnityEngine.Rendering.BlendMode.SrcAlpha);
material.SetFloat("_DstBlend", (float)UnityEngine.Rendering.BlendMode.One);
material.EnableKeyword("_FINALALPHA");
material.EnableKeyword("_ADDITIVE");
}
// Double sided
if (material.HasProperty("_Cull")) {
var _Culling = ShaderGUI.FindProperty("_Cull", properties);
if(_Culling.floatValue == 0.0f) {
if (material.doubleSidedGI == false) {
Debug.Log ("Material " + material.name + ": Double Sided Global Illumination enabled.", (Object)material);
}
material.doubleSidedGI = true;
}
else {
if (material.doubleSidedGI == true) {
Debug.Log ("Material " + material.name + ": Double Sided Global Illumination disabled.", (Object)material);
}
material.doubleSidedGI = false;
}
}
// Get RenderQueue Offset - if any
int QueueOffset = 0;
if ( material.HasProperty("_QueueOffset") ) {
QueueOffset = material.GetInt("_QueueOffset");
}
// 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 );
}
}
}
// Needed to make the Selection Outline work
if (material.HasProperty("_MainTex") && material.HasProperty("_BaseMap") ) {
// Alpha might be stored in the Mask Map
bool copyMaskMap = false;
if(material.HasProperty("_AlphaFromMaskMap") && material.HasProperty("_MaskMap")) {
if (material.GetFloat("_AlphaFromMaskMap") == 1.0) {
copyMaskMap = true;
}
}
if (copyMaskMap) {
if (material.GetTexture("_MaskMap") != null) {
material.SetTexture("_MainTex", material.GetTexture("_MaskMap"));
}
}
else {
if (material.GetTexture("_BaseMap") != null) {
material.SetTexture("_MainTex", material.GetTexture("_BaseMap"));
}
}
}
}
}