92 lines
3.6 KiB
C#
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"));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |