예제 #1
0
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


        void GeometryTypeCH(List <MaterialProperty> allProps, STCGeometryType[] geomTypes)
        {
            //--------------

            STCGeometryType setGeomType = (STCGeometryType)EditorGUILayout.EnumPopup("Geometry Type", geomTypes[0]);

            if (EditorGUI.EndChangeCheck())
            {
                bool shouldEnableAlphaTest = ShouldEnableAlphaTest(setGeomType);
                UnityEngine.Rendering.CullMode cullMode = shouldEnableAlphaTest ? UnityEngine.Rendering.CullMode.Off : UnityEngine.Rendering.CullMode.Back;

                foreach (Material m in targets.Cast <Material>())
                {
                    if (shouldEnableAlphaTest)
                    {
                        m.SetOverrideTag("RenderType", "treeTransparentCutout");
                    }
                    for (int i = 0; i < STCGTypeString.Length; ++i)
                    {
                        m.DisableKeyword(STCGTypeString[i]);
                    }
                    m.EnableKeyword(STCGTypeString[(int)setGeomType]);
                    m.renderQueue = shouldEnableAlphaTest ? (int)UnityEngine.Rendering.RenderQueue.AlphaTest : (int)UnityEngine.Rendering.RenderQueue.Geometry;
                    m.SetInt("_Cull", (int)cullMode);
                }
            }
            EditorGUI.showMixedValue = false;

            MaterialProperty culling = allProps.Find(prop => prop.name == "_Cull");

            if (culling != null)
            {
                allProps.Remove(culling);
                ShaderProperty(culling, culling.displayName);
            }

            //--------------
        }
예제 #2
0
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


        public override void OnInspectorGUI()
        {
            //--------------

            SetDefaultGUIWidths();
            serializedObject.Update();
            SerializedProperty shaderFind = serializedObject.FindProperty("m_Shader");

            if (!isVisible || shaderFind.hasMultipleDifferentValues || shaderFind.objectReferenceValue == null)
            {
                return;
            }

            //--------------

            List <MaterialProperty> allProps = new List <MaterialProperty>(GetMaterialProperties(targets));

            billboard = allProps.Find(prop => prop.name == "_Shadow_Cutoff") == null;

            //--------------

            STCGeometryType[] geomTypes = new STCGeometryType[targets.Length];
            for (int i = 0; i < targets.Length; ++i)
            {
                geomTypes[i] = STCGeometryType.Branch;
                for (int j = 0; j < STCGTypeString.Length; ++j)
                {
                    if (((Material)targets[i]).shaderKeywords.Contains(STCGTypeString[j]))
                    {
                        geomTypes[i] = (STCGeometryType)j;
                        break;
                    }
                }
            }

            //--------------

            EditorGUI.showMixedValue = geomTypes.Distinct().Count() > 1;
            EditorGUI.BeginChangeCheck();
            Header();

            //--------------

            if (billboard == false) // Not Billboard
            {
                EditorGUILayout.LabelField("Geometry Type & Culling:", EditorStyles.boldLabel);
                DrawUILine(smLineColor, 1, smLinePadding);
                GeometryTypeCH(allProps, geomTypes);
                DrawUILine(bgLineColor, 2, bgLinePadding);
            }

            //--------------

            EditorGUILayout.LabelField("Texture and Color Settings:", EditorStyles.boldLabel);
            DrawUILine(smLineColor, 1, smLinePadding);
            MainTexture(allProps, geomTypes);
            SpecularMap(allProps);
            OcclusionMap(allProps);
            EmissionMap(allProps);
            BumpMap(allProps);
            DrawUILine(bgLineColor, 2, bgLinePadding);

            //--------------

            EditorGUILayout.LabelField("Color and Light Tuning:", EditorStyles.boldLabel);
            DrawUILine(smLineColor, 1, smLinePadding);
            ColorLightTuning(allProps);
            DrawUILine(bgLineColor, 2, bgLinePadding);

            //--------------

            EditorGUILayout.LabelField("Wind Settings:", EditorStyles.boldLabel);
            DrawUILine(smLineColor, 1, smLinePadding);
            WindSettings(allProps);

            //--------------

            foreach (MaterialProperty prop in allProps)
            {
                if ((prop.flags & MaterialProperty.PropFlags.HideInInspector) != 0)
                {
                    continue;
                }
                ShaderProperty(prop, prop.displayName);
            }

            //--------------

            Information();
            RenderQueueField();
            EnableInstancingField();
            DoubleSidedGIField();
            EditorGUILayout.Space();
            EditorGUILayout.Space();

            //--------------
        }
예제 #3
0
 bool ShouldEnableAlphaTest(STCGeometryType geomType)
 {
     return(geomType == STCGeometryType.Frond || geomType == STCGeometryType.Leaf);
 }