static void SetupMaterialWithBlendMode(Material material, SuberspectiveBlendMode blendMode) { void SetMaterialSettings( string renderType, string portalTag, BlendOp blendOp, BlendMode srcBlend, BlendMode dstBlend, bool zWrite, bool alphaPremultiplyOn, bool alphaTestOn, int renderQueue) { material.SetOverrideTag("RenderType", renderType); material.SetOverrideTag("PortalTag", portalTag); material.SetInt("__BlendOp", (int)blendOp); material.SetInt("__SrcBlend", (int)srcBlend); material.SetInt("__DstBlend", (int)dstBlend); material.SetInt("__ZWrite", zWrite ? 1 : 0); if (alphaPremultiplyOn) material.EnableKeyword("_ALPHAPREMULTIPLY_ON"); else material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); if (alphaTestOn) material.EnableKeyword("_ALPHATEST_ON"); else material.DisableKeyword("_ALPHATEST_ON"); material.renderQueue = renderQueue; } switch (blendMode) { case SuberspectiveBlendMode.Opaque: SetMaterialSettings("", "", BlendOp.Add, BlendMode.One, BlendMode.Zero, true, false, true, -1); break; case SuberspectiveBlendMode.Transparent: SetMaterialSettings("Transparent", "", BlendOp.Multiply, BlendMode.SrcAlpha, BlendMode.OneMinusSrcAlpha, false, true, false, (int)RenderQueue.Transparent); break; case SuberspectiveBlendMode.CullEverything: SetMaterialSettings("CullEverything", "CullEverything", BlendOp.Add, BlendMode.One, BlendMode.Zero, true, false, true, (int)RenderQueue.Geometry + 1); break; case SuberspectiveBlendMode.InvertColors: SetMaterialSettings("Transparent", "", BlendOp.Subtract, BlendMode.One, BlendMode.One, false, false, false, (int)RenderQueue.Transparent); break; } }
void SuberspectiveBlendModePopup(Material material) { EditorGUI.showMixedValue = blendMode.hasMixedValue; SuberspectiveBlendMode mode = (SuberspectiveBlendMode) blendMode.floatValue; EditorGUI.BeginChangeCheck(); mode = (SuberspectiveBlendMode) EditorGUILayout.Popup(blendModeText, (int) mode, blendNames); if (EditorGUI.EndChangeCheck()) { editor.RegisterPropertyChangeUndo(blendModeText); blendMode.floatValue = (float) mode; } SetupMaterialWithBlendMode(material, mode); EditorGUI.showMixedValue = false; }