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); } }
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)); }
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); }
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)); }