Пример #1
0
    public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
    {
        this.materialEditor = materialEditor;
        material            = materialEditor.target as Material;

        // Init
        Prop.Initialize(properties);
        Layout.Initialize(materialEditor);
        ShaderSetup.Initialize(materialEditor);
        if (!ShaderSetup.isProjector)
        {
            bmode = ShaderSetup.GetBlendMode();
        }

        if (firstTimeApply)
        {
            ShaderSetup.MaterialChanged();
            firstTimeApply = false;
        }

        EditorGUI.BeginChangeCheck();
        DrawGUI();
        if (EditorGUI.EndChangeCheck())
        {
            ShaderSetup.MaterialChanged();
        }
    }
Пример #2
0
    void DrawGUI()
    {
        var renderModeDrawer = ShaderSetup.isProjector ? Prop._ModeProj
            : (ShaderSetup.isDX11 && !ShaderSetup.isUnlit ? null : Prop._ModeStd);

        if (Prop._Mode.Draw(0, renderModeDrawer))
        {
            bmode = ShaderSetup.GetBlendMode();
            ShaderSetup.SetZWrite(); //only set zwrite when changing the render mode, because there is a zwrite option in the GUI
            if (bmode == WFABlendMode.CutoutTwoSided)
            {
                Prop._Cull._int = (int)CullMode.Back;
            }
        }

        if (bmode == WFABlendMode.Cutout || bmode == WFABlendMode.CutoutTwoSided)
        {
            Prop._Cutoff.Draw(indentation: 2);
        }

        EditorGUILayout.Space();

        if (Layout.BeginFold("Wireframe"))
        {
            DrawWireframeGUI();
        }
        Layout.EndFold();

        if (!ShaderSetup.isProjector)
        {
            if (Layout.BeginFold("Surface"))
            {
                DrawSurfaceGUI();
            }
            Layout.EndFold();
        }

        if (Layout.BeginFold("Glow"))
        {
            DrawGlowGUI();
        }
        Layout.EndFold();

        if (!ShaderSetup.isProjector && !ShaderSetup.isMobile)
        {
            if (Layout.BeginFold("Fade"))
            {
                DrawFadeGUI();
            }
            Layout.EndFold();
        }

        if (Layout.BeginFold("Preferences"))
        {
            DrawPrefGUI();
        }
        Layout.EndFold();
    }
Пример #3
0
        static Material[] ApplyMaterials(Material[] materials)
        {
            if (materials == null || materials.Length == 0)
            {
                throw new MissingException("Materials are missing.");
            }
            for (int i = 0; i < materials.Length; i++)
            {
                var mat = materials[i];
                if (mat == null)
                {
                    throw new MissingException("Materials are missing.");
                }

                Material newMat;
                if (AssetDatabase.GetAssetPath(mat) == "Resources/unity_builtin_extra")
                {
                    var matFolder  = CreateFolder(dstFolder, "Materials");
                    var matDstPath = matFolder + "/" + Suffix(mat.name) + ".mat";
                    newMat = AssetDatabase.LoadAssetAtPath <Material>(matDstPath);
                    if (newMat == null)
                    {
                        newMat = new Material(defaultShader);
                        AssetDatabase.CreateAsset(newMat, matDstPath);
                        newMat = AssetDatabase.LoadAssetAtPath <Material>(matDstPath);
                    }
                }
                else
                {
                    var matDstPath = SetupPaths(mat, isMaterial: true);
                    newMat        = CopyAssetUnlessExists <Material>(srcPath, matDstPath);
                    newMat.shader = defaultShader;
                }

                var wireMode = BakeWindow.bakingMode;
                if (wireMode == BakingMode.AngleThreshold)
                {
                    wireMode = BakingMode.Barycentric;
                }
                newMat.SetInt("_WMode", (int)wireMode);
                newMat.SetFloat("_Channel", (int)BakeWindow.channel);
                ShaderSetup.Initialize(newMat, newMat.shader);
                ShaderSetup.MaterialChanged();

                materials[i] = newMat;
            }
            return(materials);
        }
Пример #4
0
    public override void AssignNewShaderToMaterial(Material material, Shader oldShader, Shader newShader)
    {
        ShaderSetup.Initialize(material, newShader);

        if (ShaderSetup.isProjector)
        {
            material.SetFloat("_Mode", (float)WFABlendMode.Fade);
            base.AssignNewShaderToMaterial(material, oldShader, newShader);
            ShaderSetup.MaterialChanged();
            return;
        }

        // _Emission property is lost after assigning this shader to the material
        // thus transfer it before assigning the new shader
        if (material.HasProperty("_Emission"))
        {
            material.SetColor("_EmissionColor", material.GetColor("_Emission"));
        }

        base.AssignNewShaderToMaterial(material, oldShader, newShader);

        if (oldShader == null || !oldShader.name.Contains("Legacy Shaders/"))
        {
            ShaderSetup.MaterialChanged();
            return;
        }

        var blendMode = WFABlendMode.Opaque;

        if (oldShader.name.Contains("/Transparent/Cutout/"))
        {
            blendMode = WFABlendMode.Cutout;
        }
        else if (oldShader.name.Contains("/Transparent/"))
        {
            // NOTE: legacy shaders did not provide physically based transparency
            // therefore Fade mode
            blendMode = WFABlendMode.Fade;
        }
        material.SetFloat("_Mode", (float)blendMode);

        ShaderSetup.SetZWrite();
        ShaderSetup.MaterialChanged();
    }