Esempio n. 1
0
        static void CompositeCategoryTag(StreamWriter sw, CategoryBlock categoryBlock)
        {
            sw.WriteLine("\t\tTags");
            sw.WriteLine("\t\t{");
            foreach (string tag in categoryBlock.Tags)
            {
                sw.WriteLine("\t\t\t" + tag);
            }
            sw.WriteLine("\t\t}");
            sw.WriteLine("\t\tLighting Off");
            sw.WriteLine("\t\tFog { Mode Off }");
            sw.WriteLine("\t\tCull " + categoryBlock.CullMode.ToString());
            sw.WriteLine("\t\tZWrite " + (categoryBlock.ZWrite ? "On" : "Off"));
            switch (categoryBlock.ZTest)
            {
            case (UnityEngine.Rendering.CompareFunction.Always):
            case (UnityEngine.Rendering.CompareFunction.Equal):
            case (UnityEngine.Rendering.CompareFunction.Greater):
            case (UnityEngine.Rendering.CompareFunction.Less):
            case (UnityEngine.Rendering.CompareFunction.Never):
            case (UnityEngine.Rendering.CompareFunction.NotEqual):
                sw.WriteLine("\t\tZTest " + categoryBlock.ZTest.ToString());
                break;

            case (UnityEngine.Rendering.CompareFunction.LessEqual):
                sw.WriteLine("\t\tZTest LEqual");
                break;

            case (UnityEngine.Rendering.CompareFunction.GreaterEqual):
                sw.WriteLine("\t\tZTest GEqual");
                break;

            case (UnityEngine.Rendering.CompareFunction.Disabled):
                sw.WriteLine("\t\tZTest Always");
                break;
            }
            ;
            if ((categoryBlock.SrcBlendMode == UnityEngine.Rendering.BlendMode.One) && (categoryBlock.DstBlendMode == UnityEngine.Rendering.BlendMode.Zero))
            {
                sw.WriteLine("\t\tBlend Off");
            }
            else
            {
                sw.WriteLine("\t\tBlend " + categoryBlock.SrcBlendMode + " " + categoryBlock.DstBlendMode);
                sw.WriteLine("\t\tBlendOp " + categoryBlock.BlendOpMode);
            }
        }
Esempio n. 2
0
        public static Shader Composite(Material material, string dir, string includeFile, string keywordPrefix, List <ShaderProperty> properties, CategoryBlock categoryBlock, List <LOD> lods, out string filePath)
        {
            string shaderName = GenerateShaderName(material);

            return(Composite(shaderName, material, dir, includeFile, keywordPrefix, properties, categoryBlock, lods, out filePath));
        }
Esempio n. 3
0
        public static Shader CompositeOcclusion(string shaderName, Material material, string dir, string includeFile, string keywordPrefix, List <ShaderProperty> properties, CategoryBlock categoryBlock, List <LOD> lods, out string filePath)
        {
#if SHADER_COMPOSITOR_DEBUG
            UnityEngine.Debug.LogWarning("Compositing shader " + shaderName + " for " + material.name);
#endif
            string shaderfilename = shaderName.Replace("/", "_");
            filePath = dir + shaderfilename + ".shader";

            StreamWriter sw = File.CreateText(filePath);

            //SHADER NAME
            sw.WriteLine("Shader \"" + shaderName + "\"");
            sw.WriteLine("{");

            {
                //SHADER PROPERTIES
                CompositeProperty(sw, properties);

                //SHADER CATEGORY
                sw.WriteLine("\tCategory");
                sw.WriteLine("\t{");

                {
                    //TAGS
                    CompositeCategoryTag(sw, categoryBlock);

                    //SUBSHADERS
                    CompositeCategorySubshader(sw, material, includeFile, lods, true);
                }

                sw.WriteLine("\t}");

                //FALLBACK
                if ((categoryBlock.SrcBlendMode == UnityEngine.Rendering.BlendMode.One) && (categoryBlock.DstBlendMode == UnityEngine.Rendering.BlendMode.Zero))
                {
                    sw.WriteLine("\tFallBack \"Diffuse\"");
                }
            }

            sw.WriteLine("}");
            sw.Close();

            //trigger a refresh due to newly saved shader
            AssetDatabase.Refresh();

            Shader result = Shader.Find(shaderName);
            if (result == null)
            {
                UnityEngine.Debug.LogError("Something went wrong compositing " + shaderName);
            }

            return(result);
        }
Esempio n. 4
0
        public static Shader Composite(Material material, string dir, string includeFile, string keywordPrefix, List <ShaderProperty> properties, CategoryBlock categoryBlock, List <LOD> lods)
        {
            string filePath = string.Empty;

            return(Composite(material, dir, includeFile, keywordPrefix, properties, categoryBlock, lods, out filePath));
        }