static void SetupMaterialWithBlendMode(Material material, SDFBlendMode blendMode) { switch (blendMode) { case SDFBlendMode.Cutout: material.SetInt("_SrcBlend", (int)BlendMode.One); material.SetInt("_DstBlend", (int)BlendMode.Zero); material.SetInt("_ZWrite", 1); material.EnableKeyword("_ALPHATEST_ON"); material.DisableKeyword("_ALPHABLEND_ON"); material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); material.renderQueue = 2450; break; case SDFBlendMode.Fade: material.SetInt("_SrcBlend", (int)BlendMode.SrcAlpha); material.SetInt("_DstBlend", (int)BlendMode.OneMinusSrcAlpha); material.SetInt("_ZWrite", 0); material.DisableKeyword("_ALPHATEST_ON"); material.EnableKeyword("_ALPHABLEND_ON"); material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); material.renderQueue = 3000; break; case SDFBlendMode.Transparent: material.SetInt("_SrcBlend", (int)BlendMode.One); material.SetInt("_DstBlend", (int)BlendMode.OneMinusSrcAlpha); material.SetInt("_ZWrite", 0); material.DisableKeyword("_ALPHATEST_ON"); material.DisableKeyword("_ALPHABLEND_ON"); material.EnableKeyword("_ALPHAPREMULTIPLY_ON"); material.renderQueue = 3000; break; } }
void BlendModePopup() { MaterialProperty blendMode = Get(SP.Mode); EditorGUI.showMixedValue = blendMode.hasMixedValue; SDFBlendMode mode = (SDFBlendMode)blendMode.floatValue; EditorGUI.BeginChangeCheck(); mode = (SDFBlendMode)EditorGUILayout.Popup("Rendering Mode", (int)mode, Styles.blendNames); if (EditorGUI.EndChangeCheck()) { editor.RegisterPropertyChangeUndo("Rendering Mode"); blendMode.floatValue = (float)mode; } if (mode != SDFBlendMode.Cutout && !isUI) { editor.ShaderProperty(Get(SP.SemitransparentShadows), "Semitransp. Shadows"); } EditorGUI.showMixedValue = false; }