protected static void SetupMaterialWithRenderingMode(Material material, RenderingMode mode, CustomRenderingMode customMode, int renderQueueOverride) { switch (mode) { case RenderingMode.Opaque: { material.SetOverrideTag(Styles.renderTypeName, Styles.renderingModeNames[(int)RenderingMode.Opaque]); material.SetInt(Styles.customRenderingModeName, (int)CustomRenderingMode.Opaque); material.SetInt(Styles.sourceBlendName, (int)UnityEngine.Rendering.BlendMode.One); material.SetInt(Styles.destinationBlendName, (int)UnityEngine.Rendering.BlendMode.Zero); material.SetInt(Styles.blendOperationName, (int)UnityEngine.Rendering.BlendOp.Add); material.SetInt(Styles.depthTestName, (int)UnityEngine.Rendering.CompareFunction.LessEqual); material.SetInt(Styles.depthWriteName, (int)DepthWrite.On); material.SetInt(Styles.colorWriteMaskName, (int)UnityEngine.Rendering.ColorWriteMask.All); material.DisableKeyword(Styles.alphaTestOnName); material.DisableKeyword(Styles.alphaBlendOnName); material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)UnityEngine.Rendering.RenderQueue.Geometry; } break; case RenderingMode.TransparentCutout: { material.SetOverrideTag(Styles.renderTypeName, Styles.renderingModeNames[(int)RenderingMode.TransparentCutout]); material.SetInt(Styles.customRenderingModeName, (int)CustomRenderingMode.TransparentCutout); material.SetInt(Styles.sourceBlendName, (int)UnityEngine.Rendering.BlendMode.One); material.SetInt(Styles.destinationBlendName, (int)UnityEngine.Rendering.BlendMode.Zero); material.SetInt(Styles.blendOperationName, (int)UnityEngine.Rendering.BlendOp.Add); material.SetInt(Styles.depthTestName, (int)UnityEngine.Rendering.CompareFunction.LessEqual); material.SetInt(Styles.depthWriteName, (int)DepthWrite.On); material.SetInt(Styles.colorWriteMaskName, (int)UnityEngine.Rendering.ColorWriteMask.All); material.EnableKeyword(Styles.alphaTestOnName); material.DisableKeyword(Styles.alphaBlendOnName); material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)UnityEngine.Rendering.RenderQueue.AlphaTest; } break; case RenderingMode.Transparent: { material.SetOverrideTag(Styles.renderTypeName, Styles.renderingModeNames[(int)RenderingMode.Transparent]); material.SetInt(Styles.customRenderingModeName, (int)CustomRenderingMode.Transparent); material.SetInt(Styles.sourceBlendName, (int)UnityEngine.Rendering.BlendMode.SrcAlpha); material.SetInt(Styles.destinationBlendName, (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); material.SetInt(Styles.blendOperationName, (int)UnityEngine.Rendering.BlendOp.Add); material.SetInt(Styles.depthTestName, (int)UnityEngine.Rendering.CompareFunction.LessEqual); material.SetInt(Styles.depthWriteName, (int)DepthWrite.Off); material.SetInt(Styles.colorWriteMaskName, (int)UnityEngine.Rendering.ColorWriteMask.All); material.DisableKeyword(Styles.alphaTestOnName); material.EnableKeyword(Styles.alphaBlendOnName); material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)UnityEngine.Rendering.RenderQueue.Transparent; } break; case RenderingMode.PremultipliedTransparent: { material.SetOverrideTag(Styles.renderTypeName, Styles.renderingModeNames[(int)RenderingMode.Transparent]); material.SetInt(Styles.customRenderingModeName, (int)CustomRenderingMode.Transparent); material.SetInt(Styles.sourceBlendName, (int)UnityEngine.Rendering.BlendMode.One); material.SetInt(Styles.destinationBlendName, (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); material.SetInt(Styles.blendOperationName, (int)UnityEngine.Rendering.BlendOp.Add); material.SetInt(Styles.depthTestName, (int)UnityEngine.Rendering.CompareFunction.LessEqual); material.SetInt(Styles.depthWriteName, (int)DepthWrite.Off); material.SetInt(Styles.colorWriteMaskName, (int)UnityEngine.Rendering.ColorWriteMask.All); material.DisableKeyword(Styles.alphaTestOnName); material.EnableKeyword(Styles.alphaBlendOnName); material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)UnityEngine.Rendering.RenderQueue.Transparent; } break; case RenderingMode.Additive: { material.SetOverrideTag(Styles.renderTypeName, Styles.renderingModeNames[(int)RenderingMode.Transparent]); material.SetInt(Styles.customRenderingModeName, (int)CustomRenderingMode.Transparent); material.SetInt(Styles.sourceBlendName, (int)UnityEngine.Rendering.BlendMode.One); material.SetInt(Styles.destinationBlendName, (int)UnityEngine.Rendering.BlendMode.One); material.SetInt(Styles.blendOperationName, (int)UnityEngine.Rendering.BlendOp.Add); material.SetInt(Styles.depthTestName, (int)UnityEngine.Rendering.CompareFunction.LessEqual); material.SetInt(Styles.depthWriteName, (int)DepthWrite.Off); material.SetInt(Styles.colorWriteMaskName, (int)UnityEngine.Rendering.ColorWriteMask.All); material.DisableKeyword(Styles.alphaTestOnName); material.EnableKeyword(Styles.alphaBlendOnName); material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)UnityEngine.Rendering.RenderQueue.Transparent; } break; case RenderingMode.Custom: { material.SetOverrideTag(Styles.renderTypeName, Styles.customRenderingModeNames[(int)customMode]); // _SrcBlend, _DstBlend, _BlendOp, _ZTest, _ZWrite, _ColorWriteMask are controlled by UI. switch (customMode) { case CustomRenderingMode.Opaque: { material.DisableKeyword(Styles.alphaTestOnName); material.DisableKeyword(Styles.alphaBlendOnName); } break; case CustomRenderingMode.TransparentCutout: { material.EnableKeyword(Styles.alphaTestOnName); material.DisableKeyword(Styles.alphaBlendOnName); } break; case CustomRenderingMode.Transparent: { material.DisableKeyword(Styles.alphaTestOnName); material.EnableKeyword(Styles.alphaBlendOnName); } break; } material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : material.renderQueue; } break; } }
protected void FluentOptions(MaterialEditor materialEditor, Material material) { EditorGUILayout.Space(); GUILayout.Label(Styles.fluentOptionsTitle, EditorStyles.boldLabel, new GUILayoutOption[0]); RenderingMode mode = (RenderingMode)renderingMode.floatValue; CustomRenderingMode customMode = (CustomRenderingMode)customRenderingMode.floatValue; materialEditor.ShaderProperty(hoverLight, Styles.hoverLight); if (PropertyEnabled(hoverLight)) { materialEditor.ShaderProperty(enableHoverColorOverride, Styles.enableHoverColorOverride, 2); if (PropertyEnabled(enableHoverColorOverride)) { materialEditor.ShaderProperty(hoverColorOverride, Styles.hoverColorOverride, 4); } if (mode == RenderingMode.Transparent || (mode == RenderingMode.Custom && customMode == CustomRenderingMode.Transparent)) { materialEditor.ShaderProperty(hoverLightOpaque, Styles.hoverLightOpaque, 2); } if (PropertyEnabled(hoverLightOpaque)) { materialEditor.ShaderProperty(enableHoverColorOpaqueOverride, Styles.enableHoverColorOpaqueOverride, 4); if (PropertyEnabled(enableHoverColorOpaqueOverride)) { materialEditor.ShaderProperty(hoverColorOverrideOpaque, Styles.hoverColorOpaqueOverride, 6); } } } materialEditor.ShaderProperty(roundCorners, Styles.roundCorners); if (PropertyEnabled(roundCorners)) { materialEditor.ShaderProperty(roundCornerRadius, Styles.roundCornerRadius, 2); materialEditor.ShaderProperty(roundCornerMargin, Styles.roundCornerMargin, 2); } materialEditor.ShaderProperty(borderLight, Styles.borderLight); if (PropertyEnabled(borderLight)) { if (PropertyEnabled(hoverLight)) { materialEditor.ShaderProperty(borderLightUsesHoverColor, Styles.borderLightUsesHoverColor, 2); } if (mode == RenderingMode.TransparentCutout || mode == RenderingMode.Transparent || (mode == RenderingMode.Custom && customMode == CustomRenderingMode.TransparentCutout) || (mode == RenderingMode.Custom && customMode == CustomRenderingMode.Transparent)) { materialEditor.ShaderProperty(borderLightOpaque, Styles.borderLightOpaque, 2); } materialEditor.ShaderProperty(borderWidth, Styles.borderWidth, 2); if (!PropertyEnabled(borderLightOpaque)) { materialEditor.ShaderProperty(borderMinValue, Styles.borderMinValue, 2); } } if (PropertyEnabled(roundCorners) || PropertyEnabled(borderLight)) { materialEditor.ShaderProperty(edgeSmoothingValue, Styles.edgeSmoothingValue); } materialEditor.ShaderProperty(innerGlow, Styles.innerGlow); if (PropertyEnabled(innerGlow)) { materialEditor.ShaderProperty(innerGlowColor, Styles.innerGlowColor, 2); } materialEditor.ShaderProperty(environmentColoring, Styles.environmentColoring); if (PropertyEnabled(environmentColoring)) { materialEditor.ShaderProperty(environmentColorThreshold, Styles.environmentColorThreshold, 2); materialEditor.ShaderProperty(environmentColorIntensity, Styles.environmentColorIntensity, 2); materialEditor.ShaderProperty(environmentColorX, Styles.environmentColorX, 2); materialEditor.ShaderProperty(environmentColorY, Styles.environmentColorY, 2); materialEditor.ShaderProperty(environmentColorZ, Styles.environmentColorZ, 2); } }
protected void FluentOptions(MaterialEditor materialEditor, Material material) { EditorGUILayout.Space(); GUILayout.Label(Styles.fluentOptionsTitle, EditorStyles.boldLabel); RenderingMode mode = (RenderingMode)renderingMode.floatValue; CustomRenderingMode customMode = (CustomRenderingMode)customRenderingMode.floatValue; materialEditor.ShaderProperty(hoverLight, Styles.hoverLight); if (PropertyEnabled(hoverLight)) { // GUILayout.Box(string.Format(Styles.propertiesComponentHelp, nameof(HoverLight), Styles.hoverLight.text), EditorStyles.helpBox, new GUILayoutOption[0]); materialEditor.ShaderProperty(enableHoverColorOverride, Styles.enableHoverColorOverride, 2); if (PropertyEnabled(enableHoverColorOverride)) { materialEditor.ShaderProperty(hoverColorOverride, Styles.hoverColorOverride, 4); } } materialEditor.ShaderProperty(proximityLight, Styles.proximityLight); if (PropertyEnabled(proximityLight)) { materialEditor.ShaderProperty(enableProximityLightColorOverride, Styles.enableProximityLightColorOverride, 2); if (PropertyEnabled(enableProximityLightColorOverride)) { materialEditor.ShaderProperty(proximityLightCenterColorOverride, Styles.proximityLightCenterColorOverride, 4); materialEditor.ShaderProperty(proximityLightMiddleColorOverride, Styles.proximityLightMiddleColorOverride, 4); materialEditor.ShaderProperty(proximityLightOuterColorOverride, Styles.proximityLightOuterColorOverride, 4); } materialEditor.ShaderProperty(proximityLightSubtractive, Styles.proximityLightSubtractive, 2); materialEditor.ShaderProperty(proximityLightTwoSided, Styles.proximityLightTwoSided, 2); // GUILayout.Box(string.Format(Styles.propertiesComponentHelp, nameof(ProximityLight), Styles.proximityLight.text), EditorStyles.helpBox, new GUILayoutOption[0]); } materialEditor.ShaderProperty(borderLight, Styles.borderLight); if (PropertyEnabled(borderLight)) { materialEditor.ShaderProperty(borderWidth, Styles.borderWidth, 2); materialEditor.ShaderProperty(borderMinValue, Styles.borderMinValue, 2); materialEditor.ShaderProperty(borderLightReplacesAlbedo, Styles.borderLightReplacesAlbedo, 2); if (PropertyEnabled(hoverLight) && PropertyEnabled(enableHoverColorOverride)) { materialEditor.ShaderProperty(borderLightUsesHoverColor, Styles.borderLightUsesHoverColor, 2); } if (mode == RenderingMode.TransparentCutout || mode == RenderingMode.Transparent || (mode == RenderingMode.Custom && customMode == CustomRenderingMode.TransparentCutout) || (mode == RenderingMode.Custom && customMode == CustomRenderingMode.Transparent)) { materialEditor.ShaderProperty(borderLightOpaque, Styles.borderLightOpaque, 2); if (PropertyEnabled(borderLightOpaque)) { materialEditor.ShaderProperty(borderLightOpaqueAlpha, Styles.borderLightOpaqueAlpha, 4); } } } if (PropertyEnabled(hoverLight) || PropertyEnabled(proximityLight) || PropertyEnabled(borderLight)) { materialEditor.ShaderProperty(fluentLightIntensity, Styles.fluentLightIntensity); } materialEditor.ShaderProperty(roundCorners, Styles.roundCorners); if (PropertyEnabled(roundCorners)) { materialEditor.ShaderProperty(roundCornerRadius, Styles.roundCornerRadius, 2); materialEditor.ShaderProperty(roundCornerMargin, Styles.roundCornerMargin, 2); } if (PropertyEnabled(roundCorners) || PropertyEnabled(borderLight)) { materialEditor.ShaderProperty(edgeSmoothingValue, Styles.edgeSmoothingValue); } materialEditor.ShaderProperty(innerGlow, Styles.innerGlow); if (PropertyEnabled(innerGlow)) { materialEditor.ShaderProperty(innerGlowColor, Styles.innerGlowColor, 2); materialEditor.ShaderProperty(innerGlowPower, Styles.innerGlowPower, 2); } materialEditor.ShaderProperty(iridescence, Styles.iridescence); if (PropertyEnabled(iridescence)) { EditorGUI.indentLevel += 2; materialEditor.TexturePropertySingleLine(Styles.iridescentSpectrumMap, iridescentSpectrumMap); EditorGUI.indentLevel -= 2; materialEditor.ShaderProperty(iridescenceIntensity, Styles.iridescenceIntensity, 2); materialEditor.ShaderProperty(iridescenceThreshold, Styles.iridescenceThreshold, 2); materialEditor.ShaderProperty(iridescenceAngle, Styles.iridescenceAngle, 2); } materialEditor.ShaderProperty(environmentColoring, Styles.environmentColoring); if (PropertyEnabled(environmentColoring)) { materialEditor.ShaderProperty(environmentColorThreshold, Styles.environmentColorThreshold, 2); materialEditor.ShaderProperty(environmentColorIntensity, Styles.environmentColorIntensity, 2); materialEditor.ShaderProperty(environmentColorX, Styles.environmentColorX, 2); materialEditor.ShaderProperty(environmentColorY, Styles.environmentColorY, 2); materialEditor.ShaderProperty(environmentColorZ, Styles.environmentColorZ, 2); } }
protected static void SetupMaterialWithRenderingMode(Material material, RenderingMode mode, CustomRenderingMode customMode, int renderQueueOverride) { // If we aren't switching to Custom, then set default values for all RenderingMode types. Otherwise keep whatever user had before if (mode != RenderingMode.Custom) { material.SetInt(BaseStyles.blendOperationName, (int)BlendOp.Add); material.SetInt(BaseStyles.depthTestName, (int)CompareFunction.LessEqual); material.SetFloat(BaseStyles.depthOffsetFactorName, 0.0f); material.SetFloat(BaseStyles.depthOffsetUnitsName, 0.0f); material.SetInt(BaseStyles.colorWriteMaskName, (int)ColorWriteMask.All); } switch (mode) { case RenderingMode.Opaque: { material.SetOverrideTag(BaseStyles.renderTypeName, BaseStyles.renderingModeNames[(int)RenderingMode.Opaque]); material.SetInt(BaseStyles.customRenderingModeName, (int)CustomRenderingMode.Opaque); material.SetInt(BaseStyles.sourceBlendName, (int)BlendMode.One); material.SetInt(BaseStyles.destinationBlendName, (int)BlendMode.Zero); material.SetInt(BaseStyles.depthWriteName, (int)DepthWrite.On); material.DisableKeyword(BaseStyles.alphaTestOnName); material.DisableKeyword(BaseStyles.alphaBlendOnName); material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)RenderQueue.Geometry; break; } case RenderingMode.Cutout: { material.SetOverrideTag(BaseStyles.renderTypeName, BaseStyles.renderingModeNames[(int)RenderingMode.Cutout]); material.SetInt(BaseStyles.customRenderingModeName, (int)CustomRenderingMode.Cutout); material.SetInt(BaseStyles.sourceBlendName, (int)BlendMode.One); material.SetInt(BaseStyles.destinationBlendName, (int)BlendMode.Zero); material.SetInt(BaseStyles.depthWriteName, (int)DepthWrite.On); material.EnableKeyword(BaseStyles.alphaTestOnName); material.DisableKeyword(BaseStyles.alphaBlendOnName); material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)RenderQueue.AlphaTest; break; } case RenderingMode.Fade: { material.SetOverrideTag(BaseStyles.renderTypeName, BaseStyles.renderingModeNames[(int)RenderingMode.Fade]); material.SetInt(BaseStyles.customRenderingModeName, (int)CustomRenderingMode.Fade); material.SetInt(BaseStyles.sourceBlendName, (int)BlendMode.SrcAlpha); material.SetInt(BaseStyles.destinationBlendName, (int)BlendMode.OneMinusSrcAlpha); material.SetInt(BaseStyles.depthWriteName, (int)DepthWrite.Off); material.DisableKeyword(BaseStyles.alphaTestOnName); material.EnableKeyword(BaseStyles.alphaBlendOnName); material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)RenderQueue.Transparent; break; } case RenderingMode.Transparent: { material.SetOverrideTag(BaseStyles.renderTypeName, BaseStyles.renderingModeNames[(int)RenderingMode.Fade]); material.SetInt(BaseStyles.customRenderingModeName, (int)CustomRenderingMode.Fade); material.SetInt(BaseStyles.sourceBlendName, (int)BlendMode.One); material.SetInt(BaseStyles.destinationBlendName, (int)BlendMode.OneMinusSrcAlpha); material.SetInt(BaseStyles.depthWriteName, (int)DepthWrite.Off); material.DisableKeyword(BaseStyles.alphaTestOnName); material.EnableKeyword(BaseStyles.alphaBlendOnName); material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)RenderQueue.Transparent; break; } case RenderingMode.Additive: { material.SetOverrideTag(BaseStyles.renderTypeName, BaseStyles.renderingModeNames[(int)RenderingMode.Fade]); material.SetInt(BaseStyles.customRenderingModeName, (int)CustomRenderingMode.Fade); material.SetInt(BaseStyles.sourceBlendName, (int)BlendMode.One); material.SetInt(BaseStyles.destinationBlendName, (int)BlendMode.One); material.SetInt(BaseStyles.depthWriteName, (int)DepthWrite.Off); material.DisableKeyword(BaseStyles.alphaTestOnName); material.EnableKeyword(BaseStyles.alphaBlendOnName); material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)RenderQueue.Transparent; break; } case RenderingMode.Custom: { material.SetOverrideTag(BaseStyles.renderTypeName, BaseStyles.customRenderingModeNames[(int)customMode]); // _SrcBlend, _DstBlend, _BlendOp, _ZTest, _ZWrite, _ColorWriteMask are controlled by UI. switch (customMode) { case CustomRenderingMode.Opaque: { material.DisableKeyword(BaseStyles.alphaTestOnName); material.DisableKeyword(BaseStyles.alphaBlendOnName); break; } case CustomRenderingMode.Cutout: { material.EnableKeyword(BaseStyles.alphaTestOnName); material.DisableKeyword(BaseStyles.alphaBlendOnName); break; } case CustomRenderingMode.Fade: { material.DisableKeyword(BaseStyles.alphaTestOnName); material.EnableKeyword(BaseStyles.alphaBlendOnName); break; } } material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : material.renderQueue; break; } } }
protected void FluentOptions(MaterialEditor materialEditor, Material material) { EditorGUILayout.Space(); GUILayout.Label(Styles.fluentOptionsTitle, EditorStyles.boldLabel); RenderingMode mode = (RenderingMode)renderingMode.floatValue; CustomRenderingMode customMode = (CustomRenderingMode)customRenderingMode.floatValue; materialEditor.ShaderProperty(hoverLight, Styles.hoverLight); if (PropertyEnabled(hoverLight)) { GUILayout.Box(string.Format(Styles.propertiesComponentHelp, nameof(HoverLight), Styles.hoverLight.text), EditorStyles.helpBox, new GUILayoutOption[0]); materialEditor.ShaderProperty(enableHoverColorOverride, Styles.enableHoverColorOverride, 2); if (PropertyEnabled(enableHoverColorOverride)) { materialEditor.ShaderProperty(hoverColorOverride, Styles.hoverColorOverride, 4); } } materialEditor.ShaderProperty(proximityLight, Styles.proximityLight); if (PropertyEnabled(proximityLight)) { materialEditor.ShaderProperty(enableProximityLightColorOverride, Styles.enableProximityLightColorOverride, 2); if (PropertyEnabled(enableProximityLightColorOverride)) { materialEditor.ShaderProperty(proximityLightCenterColorOverride, Styles.proximityLightCenterColorOverride, 4); materialEditor.ShaderProperty(proximityLightMiddleColorOverride, Styles.proximityLightMiddleColorOverride, 4); materialEditor.ShaderProperty(proximityLightOuterColorOverride, Styles.proximityLightOuterColorOverride, 4); } materialEditor.ShaderProperty(proximityLightSubtractive, Styles.proximityLightSubtractive, 2); materialEditor.ShaderProperty(proximityLightTwoSided, Styles.proximityLightTwoSided, 2); GUILayout.Box(string.Format(Styles.propertiesComponentHelp, nameof(ProximityLight), Styles.proximityLight.text), EditorStyles.helpBox, new GUILayoutOption[0]); } if (PropertyEnabled(hoverLight) || PropertyEnabled(proximityLight)) { materialEditor.ShaderProperty(fluentLightIntensity, Styles.fluentLightIntensity); } materialEditor.ShaderProperty(innerGlow, Styles.innerGlow); if (PropertyEnabled(innerGlow)) { materialEditor.ShaderProperty(innerGlowColor, Styles.innerGlowColor, 2); materialEditor.ShaderProperty(innerGlowPower, Styles.innerGlowPower, 2); } materialEditor.ShaderProperty(environmentColoring, Styles.environmentColoring); if (PropertyEnabled(environmentColoring)) { materialEditor.ShaderProperty(environmentColorThreshold, Styles.environmentColorThreshold, 2); materialEditor.ShaderProperty(environmentColorIntensity, Styles.environmentColorIntensity, 2); materialEditor.ShaderProperty(environmentColorX, Styles.environmentColorX, 2); materialEditor.ShaderProperty(environmentColorY, Styles.environmentColorY, 2); materialEditor.ShaderProperty(environmentColorZ, Styles.environmentColorZ, 2); } }