//Z write is on then private static void SetRenderType(Material material, string renderType, bool useCustomRenderQueue) { //Want a check box to say if should use Sprite render queue (for custom writing depth and normals) bool zWrite = material.GetFloat("_ZWrite") > 0.0f; if (useCustomRenderQueue) { //If sprite has fixed normals then assign custom render type so we can write its correct normal with soft edges eNormalsMode normalsMode = GetMaterialNormalsMode(material); switch (normalsMode) { case eNormalsMode.FixedNormalsViewSpace: renderType = "SpriteViewSpaceFixedNormal"; break; case eNormalsMode.FixedNormalsModelSpace: renderType = "SpriteModelSpaceFixedNormal"; break; case eNormalsMode.MeshNormals: { //If sprite doesn't write to depth assign custom render type so we can write its depth with soft edges if (!zWrite) { renderType = "Sprite"; } } break; } } //If we don't write to depth set tag so custom shaders can write to depth themselves material.SetOverrideTag("AlphaDepth", zWrite ? "False" : "True"); material.SetOverrideTag("RenderType", renderType); }
private static void SetNormalsMode(Material material, eNormalsMode normalsMode, bool allowBackFaceRendering) { SetKeyword(material, "_FIXED_NORMALS_VIEWSPACE", normalsMode == eNormalsMode.FixedNormalsViewSpace && !allowBackFaceRendering); SetKeyword(material, "_FIXED_NORMALS_VIEWSPACE_BACKFACE", normalsMode == eNormalsMode.FixedNormalsViewSpace && allowBackFaceRendering); SetKeyword(material, "_FIXED_NORMALS_MODELSPACE", normalsMode == eNormalsMode.FixedNormalsModelSpace && !allowBackFaceRendering); SetKeyword(material, "_FIXED_NORMALS_MODELSPACE_BACKFACE", normalsMode == eNormalsMode.FixedNormalsModelSpace && allowBackFaceRendering); }
private static void SetNormalsMode(MaterialEditor materialEditor, eNormalsMode normalsMode, bool allowBackFaceRendering) { SetNormalsMode((Material)materialEditor.target, normalsMode, allowBackFaceRendering); foreach (Material material in materialEditor.targets) { SetNormalsMode(material, normalsMode, allowBackFaceRendering); } }
protected virtual bool RenderNormalsProperties() { bool dataChanged = false; eNormalsMode normalsMode = GetMaterialNormalsMode((Material)_materialEditor.target); bool mixedNormalsMode = false; foreach (Material material in _materialEditor.targets) { if (normalsMode != GetMaterialNormalsMode(material)) { mixedNormalsMode = true; break; } } EditorGUI.BeginChangeCheck(); EditorGUI.showMixedValue = mixedNormalsMode; bool fixedNormals = BoldToggleField(_fixedNormalText, normalsMode != eNormalsMode.MeshNormals); if (EditorGUI.EndChangeCheck()) { normalsMode = fixedNormals ? eNormalsMode.FixedNormalsViewSpace : eNormalsMode.MeshNormals; SetNormalsMode(_materialEditor, normalsMode, false); _fixedNormal.vectorValue = new Vector4(0.0f, 0.0f, normalsMode == eNormalsMode.FixedNormalsViewSpace ? 1.0f : -1.0f, 1.0f); mixedNormalsMode = false; dataChanged = true; } if (fixedNormals) { //Show drop down for normals space EditorGUI.BeginChangeCheck(); EditorGUI.showMixedValue = mixedNormalsMode; normalsMode = (eNormalsMode)EditorGUILayout.Popup(_fixedNormalSpaceText, (int)normalsMode, _fixedNormalSpaceOptions); if (EditorGUI.EndChangeCheck()) { SetNormalsMode((Material)_materialEditor.target, normalsMode, GetMaterialFixedNormalsBackfaceRenderingOn((Material)_materialEditor.target)); foreach (Material material in _materialEditor.targets) { SetNormalsMode(material, normalsMode, GetMaterialFixedNormalsBackfaceRenderingOn(material)); } //Reset fixed normal to default (Vector3.forward for model-space, -Vector3.forward for view-space). _fixedNormal.vectorValue = new Vector4(0.0f, 0.0f, normalsMode == eNormalsMode.FixedNormalsViewSpace ? 1.0f : -1.0f, 1.0f); mixedNormalsMode = false; dataChanged = true; } //Show fixed normal EditorGUI.BeginChangeCheck(); EditorGUI.showMixedValue = _fixedNormal.hasMixedValue; Vector3 normal = EditorGUILayout.Vector3Field(_fixedNormalDirectionText, _fixedNormal.vectorValue); if (EditorGUI.EndChangeCheck()) { _fixedNormal.vectorValue = new Vector4(normal.x, normal.y, normal.z, 1.0f); dataChanged = true; } //Show adjust for back face rendering { bool fixBackFaceRendering = GetMaterialFixedNormalsBackfaceRenderingOn((Material)_materialEditor.target); bool mixedBackFaceRendering = false; foreach (Material material in _materialEditor.targets) { if (fixBackFaceRendering != GetMaterialFixedNormalsBackfaceRenderingOn(material)) { mixedBackFaceRendering = true; break; } } EditorGUI.BeginChangeCheck(); EditorGUI.showMixedValue = mixedBackFaceRendering; bool backRendering = EditorGUILayout.Toggle(_adjustBackfaceTangentText, fixBackFaceRendering); if (EditorGUI.EndChangeCheck()) { SetNormalsMode(_materialEditor, normalsMode, backRendering); dataChanged = true; } } } EditorGUI.showMixedValue = false; return(dataChanged); }