예제 #1
0
    //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);
    }
예제 #2
0
 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);
 }
예제 #3
0
    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);
        }
    }
예제 #4
0
    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);
    }