diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f867683 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.meta \ No newline at end of file diff --git a/Editor/ShaderOptimizer.cs b/Editor/ShaderOptimizer.cs new file mode 100644 index 0000000..d6430ac --- /dev/null +++ b/Editor/ShaderOptimizer.cs @@ -0,0 +1,153 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using System.Text; +using System.Globalization; + +namespace SunaoShader +{ + public class ShaderOptimizer + { + public static bool Lock(Material material, MaterialProperty[] props) + { + // File filepaths and names + Shader shader = material.shader; + string shaderFilePath = AssetDatabase.GetAssetPath(shader); + string materialFilePath = AssetDatabase.GetAssetPath(material); + string materialFolder = Path.GetDirectoryName(materialFilePath); + string guid = Guid.NewGuid().ToString(); + string newShaderName = shader.name + ".Optimized/" + material.name + "-" + guid; + string newShaderFileName = Path.GetFileNameWithoutExtension(shaderFilePath) + "_" + material.name + "-" + guid + ".shader"; + string newShaderFilePath = materialFolder + "/Optimized/" + newShaderFileName; + + // Generate the new shader + string newShaderBody = GenerateShader(shaderFilePath, newShaderName, props); + + // Write the shader to disk + (new FileInfo(newShaderFilePath)).Directory.Create(); + try { + StreamWriter sw = new StreamWriter(newShaderFilePath); + sw.Write(newShaderBody); + sw.Close(); + } + catch (IOException e) { + Debug.LogError("Optimized shader " + newShaderFilePath + " could not be written: " + e.ToString()); + return false; + } + + AssetDatabase.Refresh(); + // Write original shader to override tag + material.SetOverrideTag("OriginalShader", shader.name); + // Write the new shader path in an override tag so it will be deleted + material.SetOverrideTag("OptimizedShaderPath", newShaderFilePath); + + // For some reason when shaders are swapped on a material the RenderType override tag gets completely deleted and render queue set back to -1 + // So these are saved as temp values and reassigned after switching shaders + string renderType = material.GetTag("RenderType", false, ""); + int renderQueue = material.renderQueue; + + // Actually switch the shader + Shader newShader = Shader.Find(newShaderName); + if (newShader == null) { + Debug.LogError("Optimized shader " + newShaderName + " could not be found"); + return false; + } + material.shader = newShader; + material.SetOverrideTag("RenderType", renderType); + material.renderQueue = renderQueue; + + return true; + } + + private static string GenerateDefines(MaterialProperty[] props) { + StringBuilder sb = new StringBuilder(); + + sb.AppendLine("#define OPTIMIZED_SHADER 1"); + foreach (MaterialProperty prop in props) { + if (prop != null && prop.type == MaterialProperty.PropType.Float) + sb.AppendLine("#define PROP_" + ToSnakeCase(prop.name) + " " + prop.floatValue); + } + + return sb.ToString(); + } + + private static string ToSnakeCase(string str) + { + Regex pattern = new Regex(@"[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+"); + return string.Join("_", pattern.Matches(str).Cast().Select(m => m.Value)).ToUpper(); + } + + private static string GenerateShader(string shaderPath, string shaderName, MaterialProperty[] props) { + string basePath = Path.GetDirectoryName(shaderPath).Replace("\\", "/") + "/"; + + Regex shaderPattern = new Regex(@"\s*Shader\s+""(.*?)""(.*)"); + Regex includePattern = new Regex(@"\s*#include\s+""(?i)(?!Assets[\\/])(.[\\/])?(.*?)"""); + Regex cgprogramPattern = new Regex(@"\s*CGPROGRAM\s*"); + + StringBuilder sb = new StringBuilder(); + List shaderLines = File.ReadAllLines(shaderPath).ToList(); + + string generatedDefines = GenerateDefines(props); + + foreach(string line in shaderLines) { + MatchCollection shaderMatches = shaderPattern.Matches(line); + MatchCollection includeMatches = includePattern.Matches(line); + + if (shaderMatches.Count > 0) { + sb.AppendLine("Shader \"" + shaderName + "\"" + shaderMatches[0].Groups[2].Captures[0].Value); + } else if (includeMatches.Count > 0) { + string path = Path.Combine(basePath, includeMatches[0].Groups[2].Captures[0].Value); + sb.AppendLine("#include \"" + path + "\""); + } else { + sb.AppendLine(line); + } + + MatchCollection matches = cgprogramPattern.Matches(line); + if (matches.Count > 0) sb.Append(generatedDefines); + } + + return sb.ToString(); + } + + public static bool Unlock(Material material) + { + // Revert to original shader + string originalShaderName = material.GetTag("OriginalShader", false, ""); + if (originalShaderName == "") { + Debug.LogError("Original shader not saved to material, could not unlock shader"); + return false; + } + + Shader orignalShader = Shader.Find(originalShaderName); + if (orignalShader == null) { + Debug.LogError("Original shader " + originalShaderName + " could not be found"); + return false; + } + + // For some reason when shaders are swapped on a material the RenderType override tag gets completely deleted and render queue set back to -1 + // So these are saved as temp values and reassigned after switching shaders + string renderType = material.GetTag("RenderType", false, ""); + int renderQueue = material.renderQueue; + material.shader = orignalShader; + material.SetOverrideTag("RenderType", renderType); + material.renderQueue = renderQueue; + + // Delete the optimized shader file + string shaderFilePath = material.GetTag("OptimizedShaderPath", false, ""); + if (shaderFilePath == "") { + Debug.LogError("Optimized shader folder could not be found, not deleting anything"); + return false; + } + + AssetDatabase.DeleteAsset(shaderFilePath); + AssetDatabase.Refresh(); + + return true; + } + } +} diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index d9162ba..2786813 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -15,6 +15,7 @@ namespace SunaoShader { public class GUI : ShaderGUI { + MaterialProperty OptimizerEnable; MaterialProperty MainTex; MaterialProperty Color; @@ -36,6 +37,10 @@ public class GUI : ShaderGUI { MaterialProperty UVAnimY; MaterialProperty UVAnimOtherTex; + MaterialProperty TanEnable; + MaterialProperty TanMode; + MaterialProperty TanMap; + MaterialProperty DecalEnable; MaterialProperty DecalTex; MaterialProperty DecalColor; @@ -69,6 +74,77 @@ public class GUI : ShaderGUI { MaterialProperty Unlit; MaterialProperty MonochromeLit; + MaterialProperty MirrorControlEnable; + MaterialProperty MirrorCopyAlpha; + MaterialProperty RealCopyAlpha; + + MaterialProperty HSVShiftEnable; + MaterialProperty HSVShiftMask; + MaterialProperty HSVShiftHue; + MaterialProperty HSVShiftSat; + MaterialProperty HSVShiftVal; + MaterialProperty HSVShiftBaseMode; + MaterialProperty HSVShiftDecalMode; + MaterialProperty HSVShiftShadeMode; + MaterialProperty HSVShiftSpecularMode; + MaterialProperty HSVShiftEmissionMode; + MaterialProperty HSVShiftOutlineMode; + MaterialProperty HSVShiftRimMode; + MaterialProperty HSVShiftParallaxMode; + MaterialProperty HSVShiftStippleMode; + MaterialProperty HSVShiftCrosshatchMode; + + MaterialProperty StippleEnable; + MaterialProperty StippleMask; + MaterialProperty StippleTexture; + MaterialProperty StippleEmissionMap; + MaterialProperty StippleSize; + MaterialProperty StippleAmount; + MaterialProperty StippleMode; + MaterialProperty StippleAnimation; + MaterialProperty StippleSpeed; + MaterialProperty StippleFrequency; + MaterialProperty StippleDisableOutline; + MaterialProperty CrosshatchEnable; + MaterialProperty CrosshatchMask; + MaterialProperty CrosshatchTexture; + MaterialProperty CrosshatchEmissionMap; + MaterialProperty CrosshatchAmount; + + MaterialProperty VertexColorThreshold; + MaterialProperty VertexColor01; + MaterialProperty VertexAlpha01; + MaterialProperty VertexColor02; + MaterialProperty VertexAlpha02; + MaterialProperty VertexColor03; + MaterialProperty VertexAlpha03; + MaterialProperty VertexColor04; + MaterialProperty VertexAlpha04; + MaterialProperty VertexColor05; + MaterialProperty VertexAlpha05; + MaterialProperty VertexColor06; + MaterialProperty VertexAlpha06; + MaterialProperty VertexColor07; + MaterialProperty VertexAlpha07; + MaterialProperty VertexColor08; + MaterialProperty VertexAlpha08; + MaterialProperty VertexColor09; + MaterialProperty VertexAlpha09; + MaterialProperty VertexColor10; + MaterialProperty VertexAlpha10; + MaterialProperty VertexColor11; + MaterialProperty VertexAlpha11; + MaterialProperty VertexColor12; + MaterialProperty VertexAlpha12; + MaterialProperty VertexColor13; + MaterialProperty VertexAlpha13; + MaterialProperty VertexColor14; + MaterialProperty VertexAlpha14; + MaterialProperty VertexColor15; + MaterialProperty VertexAlpha15; + MaterialProperty VertexColor16; + MaterialProperty VertexAlpha16; + MaterialProperty OutLineEnable; MaterialProperty OutLineMask; MaterialProperty OutLineColor; @@ -114,9 +190,20 @@ public class GUI : ShaderGUI { MaterialProperty ParallaxAnimX; MaterialProperty ParallaxAnimY; MaterialProperty ParallaxLighting; - MaterialProperty IgnoreTexAlphaPE; + MaterialProperty IgnoreTexAlphaPE; MaterialProperty ParallaxInTheDark; + MaterialProperty ToonSpecEnable; + MaterialProperty ToonSpecMode; + MaterialProperty ToonSpecMask; + MaterialProperty ToonSpecColor; + MaterialProperty ToonSpecMetallic; + MaterialProperty ToonSpecIntensity; + MaterialProperty ToonSpecRoughnessT; + MaterialProperty ToonSpecRoughnessB; + MaterialProperty ToonSpecOffset; + MaterialProperty ToonSpecSharpness; + MaterialProperty ReflectionEnable; MaterialProperty MetallicGlossMap; MaterialProperty GlossColor; @@ -177,6 +264,7 @@ public class GUI : ShaderGUI { bool ParallaxFoldout = false; bool ReflectionFoldout = false; bool RimLightFoldout = false; + bool VertexAlphaFoldout= false; bool OtherFoldout = false; bool OnceRun = true; @@ -193,7 +281,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { var mat = (Material)ME.target; bool Shader_Opaque = mat.shader.name.Contains("Opaque" ); - bool Shader_Transparent = mat.shader.name.Contains("Transparent" ); + bool Shader_Transparent = mat.shader.name.Contains("Transparent") || mat.shader.name.Contains("AlphaToCoverage") || mat.shader.name.Contains("TransClipping"); bool Shader_Cutout = mat.shader.name.Contains("Cutout" ); bool Shader_StencilOut = mat.shader.name.Contains("[Stencil Outline]"); bool Shader_Stencil = mat.shader.name.Contains("[Stencil]" ); @@ -233,6 +321,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { if ((Shader_Type) != (Previous_Type)) OnceRun = true; + OptimizerEnable = FindProperty("_OptimizerEnable" , Prop , false); MainTex = FindProperty("_MainTex" , Prop , false); Color = FindProperty("_Color" , Prop , false); @@ -254,6 +343,10 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { UVAnimY = FindProperty("_UVAnimY" , Prop , false); UVAnimOtherTex = FindProperty("_UVAnimOtherTex" , Prop , false); + TanEnable = FindProperty("_TanEnable" , Prop , false); + TanMode = FindProperty("_TanMode" , Prop , false); + TanMap = FindProperty("_TanMap" , Prop , false); + DecalEnable = FindProperty("_DecalEnable" , Prop , false); DecalTex = FindProperty("_DecalTex" , Prop , false); DecalColor = FindProperty("_DecalColor" , Prop , false); @@ -289,6 +382,77 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { Unlit = FindProperty("_Unlit" , Prop , false); MonochromeLit = FindProperty("_MonochromeLit" , Prop , false); + MirrorControlEnable = FindProperty("_MirrorControlEnable", Prop, false); + MirrorCopyAlpha = FindProperty("_MirrorCopyAlpha" , Prop , false); + RealCopyAlpha = FindProperty("_RealCopyAlpha" , Prop , false); + + HSVShiftEnable = FindProperty("_HSVShiftEnable" , Prop , false); + HSVShiftMask = FindProperty("_HSVShiftMask" , Prop , false); + HSVShiftHue = FindProperty("_HSVShiftHue" , Prop , false); + HSVShiftSat = FindProperty("_HSVShiftSat" , Prop , false); + HSVShiftVal = FindProperty("_HSVShiftVal" , Prop , false); + HSVShiftBaseMode = FindProperty("_HSVShiftBaseMode" , Prop , false); + HSVShiftDecalMode = FindProperty("_HSVShiftDecalMode" , Prop , false); + HSVShiftShadeMode = FindProperty("_HSVShiftShadeMode" , Prop , false); + HSVShiftSpecularMode = FindProperty("_HSVShiftSpecularMode" , Prop , false); + HSVShiftEmissionMode = FindProperty("_HSVShiftEmissionMode" , Prop , false); + HSVShiftOutlineMode = FindProperty("_HSVShiftOutlineMode" , Prop , false); + HSVShiftRimMode = FindProperty("_HSVShiftRimMode" , Prop , false); + HSVShiftParallaxMode = FindProperty("_HSVShiftParallaxMode" , Prop , false); + HSVShiftStippleMode = FindProperty("_HSVShiftStippleMode" , Prop , false); + HSVShiftCrosshatchMode = FindProperty("_HSVShiftCrosshatchMode" , Prop , false); + + StippleEnable = FindProperty("_StippleEnable" , Prop , false); + StippleMask = FindProperty("_StippleMask" , Prop , false); + StippleTexture = FindProperty("_StippleTexture" , Prop , false); + StippleEmissionMap = FindProperty("_StippleEmissionMap", Prop, false); + StippleSize = FindProperty("_StippleSize" , Prop , false); + StippleAmount = FindProperty("_StippleAmount" , Prop , false); + StippleMode = FindProperty("_StippleMode" , Prop , false); + StippleAnimation = FindProperty("_StippleAnimation" , Prop , false); + StippleSpeed = FindProperty("_StippleSpeed" , Prop , false); + StippleFrequency = FindProperty("_StippleFrequency" , Prop , false); + StippleDisableOutline = FindProperty("_StippleDisableOutline", Prop, false); + CrosshatchEnable = FindProperty("_CrosshatchEnable" , Prop , false); + CrosshatchMask = FindProperty("_CrosshatchMask" , Prop , false); + CrosshatchTexture = FindProperty("_CrosshatchTexture" , Prop , false); + CrosshatchEmissionMap = FindProperty("_CrosshatchEmissionMap", Prop, false); + CrosshatchAmount = FindProperty("_CrosshatchAmount" , Prop , false); + + VertexColorThreshold = FindProperty("_VertexColorThreshold", Prop, false); + VertexColor01 = FindProperty("_VertexColor01" , Prop , false); + VertexAlpha01 = FindProperty("_VertexAlpha01" , Prop , false); + VertexColor02 = FindProperty("_VertexColor02" , Prop , false); + VertexAlpha02 = FindProperty("_VertexAlpha02" , Prop , false); + VertexColor03 = FindProperty("_VertexColor03" , Prop , false); + VertexAlpha03 = FindProperty("_VertexAlpha03" , Prop , false); + VertexColor04 = FindProperty("_VertexColor04" , Prop , false); + VertexAlpha04 = FindProperty("_VertexAlpha04" , Prop , false); + VertexColor05 = FindProperty("_VertexColor05" , Prop , false); + VertexAlpha05 = FindProperty("_VertexAlpha05" , Prop , false); + VertexColor06 = FindProperty("_VertexColor06" , Prop , false); + VertexAlpha06 = FindProperty("_VertexAlpha06" , Prop , false); + VertexColor07 = FindProperty("_VertexColor07" , Prop , false); + VertexAlpha07 = FindProperty("_VertexAlpha07" , Prop , false); + VertexColor08 = FindProperty("_VertexColor08" , Prop , false); + VertexAlpha08 = FindProperty("_VertexAlpha08" , Prop , false); + VertexColor09 = FindProperty("_VertexColor09" , Prop , false); + VertexAlpha09 = FindProperty("_VertexAlpha09" , Prop , false); + VertexColor10 = FindProperty("_VertexColor10" , Prop , false); + VertexAlpha10 = FindProperty("_VertexAlpha10" , Prop , false); + VertexColor11 = FindProperty("_VertexColor11" , Prop , false); + VertexAlpha11 = FindProperty("_VertexAlpha11" , Prop , false); + VertexColor12 = FindProperty("_VertexColor12" , Prop , false); + VertexAlpha12 = FindProperty("_VertexAlpha12" , Prop , false); + VertexColor13 = FindProperty("_VertexColor13" , Prop , false); + VertexAlpha13 = FindProperty("_VertexAlpha13" , Prop , false); + VertexColor14 = FindProperty("_VertexColor14" , Prop , false); + VertexAlpha14 = FindProperty("_VertexAlpha14" , Prop , false); + VertexColor15 = FindProperty("_VertexColor15" , Prop , false); + VertexAlpha15 = FindProperty("_VertexAlpha15" , Prop , false); + VertexColor16 = FindProperty("_VertexColor16" , Prop , false); + VertexAlpha16 = FindProperty("_VertexAlpha16" , Prop , false); + OutLineEnable = FindProperty("_OutLineEnable" , Prop , false); OutLineMask = FindProperty("_OutLineMask" , Prop , false); OutLineColor = FindProperty("_OutLineColor" , Prop , false); @@ -337,6 +501,17 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { IgnoreTexAlphaPE = FindProperty("_IgnoreTexAlphaPE" , Prop , false); ParallaxInTheDark = FindProperty("_ParallaxInTheDark" , Prop , false); + ToonSpecEnable = FindProperty("_ToonSpecEnable" , Prop , false); + ToonSpecMode = FindProperty("_ToonSpecMode" , Prop , false); + ToonSpecMask = FindProperty("_ToonSpecMask" , Prop , false); + ToonSpecColor = FindProperty("_ToonSpecColor" , Prop , false); + ToonSpecMetallic = FindProperty("_ToonSpecMetallic" , Prop , false); + ToonSpecIntensity = FindProperty("_ToonSpecIntensity" , Prop , false); + ToonSpecRoughnessT = FindProperty("_ToonSpecRoughnessT", Prop, false); + ToonSpecRoughnessB = FindProperty("_ToonSpecRoughnessB", Prop, false); + ToonSpecOffset = FindProperty("_ToonSpecOffset" , Prop , false); + ToonSpecSharpness = FindProperty("_ToonSpecSharpness" , Prop , false); + ReflectionEnable = FindProperty("_ReflectionEnable" , Prop , false); MetallicGlossMap = FindProperty("_MetallicGlossMap" , Prop , false); GlossColor = FindProperty("_GlossColor" , Prop , false); @@ -440,10 +615,59 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { } - GUILayout.Label("Main", EditorStyles.boldLabel); + GUILayout.Label("Shader Optimizer", EditorStyles.boldLabel); using (new EditorGUILayout.VerticalScope("box")) { + if (OptimizerEnable.hasMixedValue) { + EditorGUI.BeginChangeCheck(); + GUILayout.Button("Lock (" + ME.targets.Length + " materials)"); + if (EditorGUI.EndChangeCheck()) { + foreach (Material m in ME.targets) { + m.SetFloat("_OptimizerEnable", 1); + if (!ShaderOptimizer.Lock(m, Prop)) + m.SetFloat("_OptimizerEnable", 0); + } + } + } else { + EditorGUI.BeginChangeCheck(); + if (OptimizerEnable.floatValue == 0) GUILayout.Button("Lock"); + else GUILayout.Button("Unlock"); + + if (EditorGUI.EndChangeCheck()) + { + if (OptimizerEnable.floatValue == 0) + { + // Optimizer disabled, lock materials + foreach (Material m in ME.targets) { + m.SetFloat("_OptimizerEnable", 1); + if (!ShaderOptimizer.Lock(m, Prop)) + m.SetFloat("_OptimizerEnable", 0); + } + } + else + { + // Optimizer enabled, unlock materials + foreach (Material m in ME.targets) { + m.SetFloat("_OptimizerEnable", 0); + if (!ShaderOptimizer.Unlock(m)) + m.SetFloat("_OptimizerEnable", 1); + } + } + } + } + } + + if (OptimizerEnable.floatValue != 0) { + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + GUILayout.Label("Sunao Shader " + Version_H + "." + Version_M + "." + Version_L , EditorStyles.boldLabel); + EditorGUILayout.EndHorizontal(); + return; + } + GUILayout.Label("Main", EditorStyles.boldLabel); + + using (new EditorGUILayout.VerticalScope("box")) { using (new EditorGUILayout.VerticalScope("box")) { GUILayout.Label("Main Color & Texture Maps", EditorStyles.boldLabel); @@ -490,7 +714,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { ME.ShaderProperty(UVScrollX , new GUIContent("Scroll X" )); ME.ShaderProperty(UVScrollY , new GUIContent("Scroll Y" )); - + ME.ShaderProperty(UVAnimation , new GUIContent("Animation Speed" )); if (UVAnimation.floatValue > 0.0f) { ME.ShaderProperty(UVAnimX , new GUIContent("Animation X Size")); @@ -498,7 +722,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { } if (UVAnimX.floatValue < 1.0f) mat.SetInt("_UVAnimX" , 1); if (UVAnimY.floatValue < 1.0f) mat.SetInt("_UVAnimY" , 1); - + ME.ShaderProperty(UVAnimOtherTex , new GUIContent("Animation Other Texture Maps")); } else { @@ -509,6 +733,18 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { } + using (new EditorGUILayout.VerticalScope("box")) { + + GUILayout.Label("Tangent Map", EditorStyles.boldLabel); + + ME.ShaderProperty(TanEnable , new GUIContent("Enable Tangent Map")); + if (TanEnable.floatValue >= 0.5f) { + ME.ShaderProperty(TanMode, new GUIContent("Tangent Map Mode")); + ME.TexturePropertySingleLine (new GUIContent("Tangent Map") , TanMap); + ME.TextureScaleOffsetProperty(TanMap); + } + } + using (new EditorGUILayout.VerticalScope("box")) { GUILayout.Label("Decal", EditorStyles.boldLabel); @@ -564,7 +800,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { ME.ShaderProperty(StencilNumb , new GUIContent("Stencil Number")); if (mat.GetInt("_StencilNumb") < 0) mat.SetInt("_StencilNumb" , 0); if (mat.GetInt("_StencilNumb") > 255) mat.SetInt("_StencilNumb" , 255); - + if (Shader_StencilRW) { ME.ShaderProperty(StencilCompMode , new GUIContent("Stencil Compare Mode")); } @@ -631,6 +867,81 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { } + GUILayout.Label("Mirror Control", EditorStyles.boldLabel); + + using (new EditorGUILayout.VerticalScope("box")) { + ME.ShaderProperty(MirrorControlEnable, new GUIContent("Enable Mirror Control")); + ME.ShaderProperty(RealCopyAlpha, new GUIContent("Real Copy Alpha")); + ME.ShaderProperty(MirrorCopyAlpha, new GUIContent("Mirror Copy Alpha")); + } + + + GUILayout.Label("HSV Adjustment", EditorStyles.boldLabel); + + using (new EditorGUILayout.VerticalScope("box")) { + using (new EditorGUILayout.VerticalScope("box")) { + + GUILayout.Label("HSV Shift", EditorStyles.boldLabel); + + ME.ShaderProperty(HSVShiftEnable, new GUIContent("Enable HSV Shift")); + ME.TexturePropertySingleLine(new GUIContent("HSV Shift Mask"), HSVShiftMask); + ME.TextureScaleOffsetProperty(HSVShiftMask); + ME.ShaderProperty(HSVShiftHue, new GUIContent("Hue Shift")); + ME.ShaderProperty(HSVShiftSat, new GUIContent("Sat Shift")); + ME.ShaderProperty(HSVShiftVal, new GUIContent("Val Shift")); + ME.ShaderProperty(HSVShiftBaseMode, new GUIContent("Base Mode")); + ME.ShaderProperty(HSVShiftDecalMode, new GUIContent("Decal Mode")); + ME.ShaderProperty(HSVShiftShadeMode, new GUIContent("Shade Mode")); + ME.ShaderProperty(HSVShiftSpecularMode, new GUIContent("Specular Mode")); + ME.ShaderProperty(HSVShiftEmissionMode, new GUIContent("Emission Mode")); + ME.ShaderProperty(HSVShiftOutlineMode, new GUIContent("Outline Mode")); + ME.ShaderProperty(HSVShiftRimMode, new GUIContent("Rim Mode")); + ME.ShaderProperty(HSVShiftParallaxMode, new GUIContent("Parallax Mode")); + ME.ShaderProperty(HSVShiftStippleMode, new GUIContent("Stipple Mode")); + ME.ShaderProperty(HSVShiftCrosshatchMode, new GUIContent("Crosshatch Mode")); + } + } + + + GUILayout.Label("Stippling & Crosshatching", EditorStyles.boldLabel); + + using (new EditorGUILayout.VerticalScope("box")) { + using (new EditorGUILayout.VerticalScope("box")) { + + GUILayout.Label("Stippling", EditorStyles.boldLabel); + + ME.ShaderProperty(StippleEnable, new GUIContent("Enable Stippling")); + ME.TexturePropertySingleLine(new GUIContent("Stipple Mask"), StippleMask); + ME.TextureScaleOffsetProperty(StippleMask); + ME.TexturePropertySingleLine(new GUIContent("Stipple Texture"), StippleTexture); + ME.TextureScaleOffsetProperty(StippleTexture); + ME.TexturePropertySingleLine(new GUIContent("Stipple Emission Mask"), StippleEmissionMap); + ME.TextureScaleOffsetProperty(StippleEmissionMap); + ME.ShaderProperty(StippleSize, new GUIContent("Stipple Size")); + ME.ShaderProperty(StippleAmount, new GUIContent("Stipple Amount")); + ME.ShaderProperty(StippleMode, new GUIContent("Stipple Mode")); + ME.ShaderProperty(StippleAnimation, new GUIContent("Stipple Animation")); + ME.ShaderProperty(StippleSpeed, new GUIContent("Stipple Speed")); + ME.ShaderProperty(StippleFrequency, new GUIContent("Stipple Frequency")); + ME.ShaderProperty(StippleDisableOutline, new GUIContent("Disable Outline")); + } + + using (new EditorGUILayout.VerticalScope("box")) { + + GUILayout.Label("Crosshatching", EditorStyles.boldLabel); + + ME.ShaderProperty(CrosshatchEnable, new GUIContent("Enable Crosshatching")); + ME.TexturePropertySingleLine(new GUIContent("Crosshatch Mask"), CrosshatchMask); + ME.TextureScaleOffsetProperty(CrosshatchMask); + ME.TexturePropertySingleLine(new GUIContent("Crosshatch Texture"), CrosshatchTexture); + ME.TextureScaleOffsetProperty(CrosshatchTexture); + ME.TexturePropertySingleLine(new GUIContent("Crosshatch Emission Mask"), CrosshatchEmissionMap); + ME.TextureScaleOffsetProperty(CrosshatchEmissionMap); + ME.ShaderProperty(CrosshatchAmount, new GUIContent("Crosshatch Amount")); + } + } + + GUILayout.Label("Outline", EditorStyles.boldLabel); using (new EditorGUILayout.VerticalScope("box")) { @@ -801,6 +1112,32 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { } + GUILayout.Label("Toon Specular", EditorStyles.boldLabel); + + using (new EditorGUILayout.VerticalScope("box")) { + + ME.ShaderProperty(ToonSpecEnable , new GUIContent("Enable Toon Specular")); + + if (ToonSpecEnable.floatValue >= 0.5f) { + ME.ShaderProperty(ToonSpecMode, new GUIContent("Specular Mode")); + ME.TexturePropertySingleLine(new GUIContent("Specular Mask"), ToonSpecMask); + ME.TextureScaleOffsetProperty(ToonSpecMask); + ME.ShaderProperty(ToonSpecColor, new GUIContent("Specular Color")); + ME.ShaderProperty(ToonSpecMetallic, new GUIContent("Metallic")); + ME.ShaderProperty(ToonSpecIntensity, new GUIContent("Intensity")); + + if (ToonSpecMode.floatValue >= 0.5f) { + ME.ShaderProperty(ToonSpecOffset, new GUIContent("Offset")); + ME.ShaderProperty(ToonSpecSharpness, new GUIContent("Sharpness")); + } + else { + ME.ShaderProperty(ToonSpecRoughnessT, new GUIContent("Roughness X")); + ME.ShaderProperty(ToonSpecRoughnessB, new GUIContent("Roughness Y")); + } + } + } + + GUILayout.Label("Reflection", EditorStyles.boldLabel); using (new EditorGUILayout.VerticalScope("box")) { @@ -913,6 +1250,114 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { } + GUILayout.Label("Vertex Alpha", EditorStyles.boldLabel); + + using (new EditorGUILayout.VerticalScope("box")) { + + if (mat.GetInt("_VertexAlphaFO") == 1) VertexAlphaFoldout = true; + + EditorGUI.indentLevel ++; + + if (VertexAlphaFoldout) { + VertexAlphaFoldout = EditorGUILayout.Foldout(VertexAlphaFoldout , "" , EditorStyles.boldFont); + } else { + VertexAlphaFoldout = EditorGUILayout.Foldout(VertexAlphaFoldout , "Show Settings" , EditorStyles.boldFont); + } + + EditorGUI.indentLevel --; + + if (VertexAlphaFoldout) { + mat.SetInt("_VertexAlphaFO" , 1); + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 1", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor01, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha01, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 2", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor02, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha02, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 3", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor03, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha03, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 4", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor04, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha04, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 5", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor05, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha05, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 6", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor06, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha06, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 7", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor07, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha07, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 8", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor08, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha08, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 9", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor09, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha09, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 10", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor10, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha10, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 11", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor11, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha11, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 12", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor12, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha12, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 13", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor13, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha13, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 14", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor14, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha14, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 15", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor15, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha15, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color 16", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColor16, new GUIContent("Color")); + ME.ShaderProperty(VertexAlpha16, new GUIContent("Alpha")); + } + using (new EditorGUILayout.VerticalScope("box")) { + GUILayout.Label("Vertex Color Threshold", EditorStyles.boldLabel); + ME.ShaderProperty(VertexColorThreshold, new GUIContent("Threshold")); + } + } else { + mat.SetInt("_VertexAlphaFO" , 0); + } + } + + GUILayout.Label("Other", EditorStyles.boldLabel); using (new EditorGUILayout.VerticalScope("box")) { @@ -1001,7 +1446,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { GUILayout.Label("Render Queue" , EditorStyles.boldLabel); ME.RenderQueueField(); - + } } else { diff --git a/README.txt b/README.txt index 5b0a028..a572c25 100644 --- a/README.txt +++ b/README.txt @@ -48,6 +48,6 @@ MIT Licenseの範囲内で自由に行うことができます。 詳しくは同梱のLICENSE及び http://suna.ooo/agenasulab/ss/LICENSE を参照して ください。 -(日本語訳: https://ja.osdn.net/projects/opensource/wiki/licenses%2FMIT_license ) +(日本語訳: https://licenses.opensource.jp/MIT/MIT.html ) -=----------------------------------------------------------------------------= \ No newline at end of file +=----------------------------------------------------------------------------= diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 8f58ffb..79b1ab3 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -9,6 +9,7 @@ #include "UnityCG.cginc" #include "AutoLight.cginc" #include "Lighting.cginc" + #include "SunaoShader_Macro.cginc" #include "SunaoShader_Function.cginc" //-------------------------------------変数宣言 @@ -52,6 +53,12 @@ uniform uint _DecalAnimX; uniform uint _DecalAnimY; +//----Tangents + uniform bool _TanEnable; + uniform uint _TanMode; + UNITY_DECLARE_TEX2D_NOSAMPLER(_TanMap); + uniform float4 _TanMap_ST; + //----Shading & Lighting UNITY_DECLARE_TEX2D_NOSAMPLER(_ShadeMask); uniform float _Shade; @@ -67,6 +74,88 @@ uniform float _Unlit; uniform bool _MonochromeLit; +//----Mirror control + uniform bool _MirrorControlEnable; + uniform float _MirrorCopyAlpha; + uniform float _RealCopyAlpha; + +//----Hue Shift + uniform bool _HSVShiftEnable; + UNITY_DECLARE_TEX2D(_HSVShiftMask); + uniform float4 _HSVShiftMask_ST; + uniform float _HSVShiftHue; + uniform float _HSVShiftSat; + uniform float _HSVShiftVal; + uniform uint _HSVShiftBaseMode; + uniform uint _HSVShiftDecalMode; + uniform uint _HSVShiftShadeMode; + uniform uint _HSVShiftSpecularMode; + uniform uint _HSVShiftEmissionMode; + uniform uint _HSVShiftOutlineMode; + uniform uint _HSVShiftRimMode; + uniform uint _HSVShiftParallaxMode; + uniform uint _HSVShiftStippleMode; + uniform uint _HSVShiftCrosshatchMode; + +//----Stippling & Crosshatching + uniform bool _StippleEnable; + UNITY_DECLARE_TEX2D_NOSAMPLER(_StippleMask); + uniform float4 _StippleMask_ST; + UNITY_DECLARE_TEX2D_NOSAMPLER(_StippleTexture); + uniform float4 _StippleTexture_ST; + UNITY_DECLARE_TEX2D_NOSAMPLER(_StippleEmissionMap); + uniform float4 _StippleEmissionMap_ST; + uniform float _StippleSize; + uniform float _StippleAmount; + uniform uint _StippleMode; + uniform float _StippleAnimation; + uniform float _StippleSpeed; + uniform float _StippleFrequency; + uniform bool _StippleDisableOutline; + uniform bool _CrosshatchEnable; + UNITY_DECLARE_TEX2D_NOSAMPLER(_CrosshatchMask); + uniform float4 _CrosshatchMask_ST; + UNITY_DECLARE_TEX2D_NOSAMPLER(_CrosshatchTexture); + uniform float4 _CrosshatchTexture_ST; + UNITY_DECLARE_TEX2D_NOSAMPLER(_CrosshatchEmissionMap); + uniform float4 _CrosshatchEmissionMap_ST; + uniform float _CrosshatchAmount; + +//----Vertex Color Alpha + uniform float _VertexColorThreshold; + uniform float3 _VertexColor01; + uniform float _VertexAlpha01; + uniform float3 _VertexColor02; + uniform float _VertexAlpha02; + uniform float3 _VertexColor03; + uniform float _VertexAlpha03; + uniform float3 _VertexColor04; + uniform float _VertexAlpha04; + uniform float3 _VertexColor05; + uniform float _VertexAlpha05; + uniform float3 _VertexColor06; + uniform float _VertexAlpha06; + uniform float3 _VertexColor07; + uniform float _VertexAlpha07; + uniform float3 _VertexColor08; + uniform float _VertexAlpha08; + uniform float3 _VertexColor09; + uniform float _VertexAlpha09; + uniform float3 _VertexColor10; + uniform float _VertexAlpha10; + uniform float3 _VertexColor11; + uniform float _VertexAlpha11; + uniform float3 _VertexColor12; + uniform float _VertexAlpha12; + uniform float3 _VertexColor13; + uniform float _VertexAlpha13; + uniform float3 _VertexColor14; + uniform float _VertexAlpha14; + uniform float3 _VertexColor15; + uniform float _VertexAlpha15; + uniform float3 _VertexColor16; + uniform float _VertexAlpha16; + //----Emission uniform bool _EmissionEnable; uniform sampler2D _EmissionMap; @@ -113,6 +202,19 @@ uniform bool _IgnoreTexAlphaPE; uniform float _ParallaxInTheDark; +//----Toon Specular + uniform bool _ToonSpecEnable; + uniform uint _ToonSpecMode; + UNITY_DECLARE_TEX2D_NOSAMPLER(_ToonSpecMask); + uniform float4 _ToonSpecMask_ST; + uniform float4 _ToonSpecColor; + uniform float _ToonSpecMetallic; + uniform float _ToonSpecIntensity; + uniform float _ToonSpecRoughnessT; + uniform float _ToonSpecRoughnessB; + uniform float _ToonSpecOffset; + uniform float _ToonSpecSharpness; + //----Reflection uniform bool _ReflectionEnable; uniform sampler2D _MetallicGlossMap; @@ -183,28 +285,32 @@ struct VIN { struct VOUT { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float4 uvanm : TEXCOORD1; - float4 decal : TEXCOORD2; - float4 decal2 : TEXCOORD3; - float4 decanm : TEXCOORD4; - float3 normal : NORMAL; - float3 color : COLOR0; - float4 tangent : TANGENT; - float3 ldir : LIGHTDIR0; - float3 view : TEXCOORD5; - float4 toon : TEXCOORD6; - float3 tanW : TEXCOORD7; - float3 tanB : TEXCOORD8; - float3 matcapv : TEXCOORD9; - float3 matcaph : TEXCOORD10; - float4 euv : TEXCOORD11; - float3 eprm : TEXCOORD12; - float4 peuv : TEXCOORD13; - float2 pduv : TEXCOORD14; - float3 peprm : TEXCOORD15; - float3 pview : TEXCOORD16; + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 uvanm : TEXCOORD1; + float4 decal : TEXCOORD2; + float4 decal2 : TEXCOORD3; + float4 decanm : TEXCOORD4; + float3 normal : NORMAL; + float3 color : COLOR0; + float4 tangent : TANGENT; + float3 ldir : LIGHTDIR0; + float3 view : TEXCOORD5; + float4 toon : TEXCOORD6; + float3 tanW : TEXCOORD7; + float3 tanB : TEXCOORD8; + float3 matcapv : TEXCOORD9; + float3 matcaph : TEXCOORD10; + float4 euv : TEXCOORD11; + float3 eprm : TEXCOORD12; + float4 peuv : TEXCOORD13; + float2 pduv : TEXCOORD14; + float3 peprm : TEXCOORD15; + float3 pview : TEXCOORD16; + float4 worldpos : TEXCOORD17; + float4 objpos : TEXCOORD18; + float4 screenpos : TEXCOORD19; + float alpha : TEXCOORD20; #ifdef PASS_FB float3 shdir : LIGHTDIR1; @@ -213,13 +319,13 @@ struct VOUT { float4 vldirX : LIGHTDIR2; float4 vldirY : LIGHTDIR3; float4 vldirZ : LIGHTDIR4; - float4 vlcorr : TEXCOORD17; - float4 vlatn : TEXCOORD18; + float4 vlcorr : TEXCOORD21; + float4 vlatn : TEXCOORD22; #endif - UNITY_FOG_COORDS(19) + UNITY_FOG_COORDS(23) #ifdef PASS_FA - LIGHTING_COORDS(20 , 21) + LIGHTING_COORDS(24 , 25) #endif }; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index a9c29a1..7fe9861 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -13,8 +13,9 @@ float4 frag (VOUT IN) : COLOR { MainUV += float2(_UVScrollX , _UVScrollY) * _Time.y; float2 SubUV = IN.uv; if (_UVAnimOtherTex) SubUV = MainUV; + float2 NormalUV = SubUV; - #if defined(TRANSPARENT) || defined(CUTOUT) + #if defined(TRANSPARENT) || defined(CUTOUT) || defined(ALPHA_TO_COVERAGE) OUT.a = saturate(UNITY_SAMPLE_TEX2D(_MainTex , MainUV).a * _Color.a * _Alpha); OUT.a *= lerp(1.0f , MonoColor(UNITY_SAMPLE_TEX2D_SAMPLER(_AlphaMask , _MainTex , SubUV).rgb) , _AlphaMaskStrength); #endif @@ -22,9 +23,52 @@ float4 frag (VOUT IN) : COLOR { float3 Color = UNITY_SAMPLE_TEX2D(_MainTex , MainUV).rgb; Color = Color * _Color.rgb * _Bright * IN.color; -//----デカール - if (_DecalEnable) { +//----Tangent map application + #if WHEN_OPT(PROP_TAN_ENABLE == 1) + OPT_IF(_TanEnable) + if (_TanMode == 0) { + float3 TanMap = UNITY_SAMPLE_TEX2D_SAMPLER(_TanMap, _MainTex, TRANSFORM_TEX(SubUV, _TanMap)); + float3x3 TBN = transpose(float3x3(IN.tangent.xyz, cross(IN.tangent.xyz, IN.normal), IN.normal)); + IN.tangent = float4(mul(TBN, float3(TanMap.rg, 0)), IN.tangent.w); + IN.tanW = UnityObjectToWorldDir(IN.tangent.xyz); + IN.tanB = cross(UnityObjectToWorldNormal(IN.normal) , IN.tanW) * IN.tangent.w * unity_WorldTransformParams.w; + NormalUV = RotateUV(NormalUV, TanMap.b * 2.0 * UNITY_PI); + } + else if (_TanMode == 1) { + float3 TanMap = UNITY_SAMPLE_TEX2D_SAMPLER(_TanMap, _MainTex, TRANSFORM_TEX(SubUV, _TanMap)); + float4 rotation = float4(IN.normal * sin(TanMap.r * UNITY_PI), cos(TanMap.r * UNITY_PI)); + IN.tangent = float4(QuatRotate(rotation, IN.tangent.xyz), IN.tangent.w); + IN.tanW = UnityObjectToWorldDir(IN.tangent.xyz); + IN.tanB = cross(UnityObjectToWorldNormal(IN.normal) , IN.tanW) * IN.tangent.w * unity_WorldTransformParams.w; + NormalUV = RotateUV(NormalUV, TanMap.g * 2.0 * UNITY_PI); + } + OPT_FI + #endif +//----HSV adjustments + #if WHEN_OPT(PROP_HSV_SHIFT_ENABLE == 1) + float3 hsvadj_masked = float3(0.0, 1.0, 1.0); + float3 hsvadj_unmasked = float3(_HSVShiftHue, _HSVShiftSat, _HSVShiftVal); + OPT_IF(_HSVShiftEnable) + float4 hsvshift_mask = UNITY_SAMPLE_TEX2D(_HSVShiftMask, TRANSFORM_TEX(SubUV, _HSVShiftMask)); + hsvadj_masked.x = lerp(0.0f, _HSVShiftHue, hsvshift_mask.r); + hsvadj_masked.y = lerp(1.0f, _HSVShiftSat, hsvshift_mask.g); + hsvadj_masked.z = lerp(1.0f, _HSVShiftVal, hsvshift_mask.b); + + if (_HSVShiftBaseMode == 1) Color.rgb = HSVAdjust(Color.rgb, hsvadj_masked); + if (_HSVShiftBaseMode == 2) Color.rgb = HSVAdjust(Color.rgb, hsvadj_unmasked); + if (_HSVShiftShadeMode == 1) _CustomShadeColor.rgb = HSVAdjust(_CustomShadeColor.rgb, hsvadj_masked); + if (_HSVShiftShadeMode == 2) _CustomShadeColor.rgb = HSVAdjust(_CustomShadeColor.rgb, hsvadj_unmasked); + if (_HSVShiftSpecularMode == 1) _ToonSpecColor.rgb = HSVAdjust(_ToonSpecColor.rgb, hsvadj_masked); + if (_HSVShiftSpecularMode == 2) _ToonSpecColor.rgb = HSVAdjust(_ToonSpecColor.rgb, hsvadj_unmasked); + if (_HSVShiftRimMode == 1) _RimLitColor.rgb = HSVAdjust(_RimLitColor.rgb, hsvadj_masked); + if (_HSVShiftRimMode == 2) _RimLitColor.rgb = HSVAdjust(_RimLitColor.rgb, hsvadj_unmasked); + OPT_FI + #endif + +//----デカール + #if WHEN_OPT(PROP_DECAL_ENABLE == 1) + OPT_IF(_DecalEnable) float4 DecalColor = float4(0.0f , 0.0f , 0.0f , 1.0f); float2 DecalUV = (float2)0.0f; @@ -59,6 +103,13 @@ float4 frag (VOUT IN) : COLOR { if (_DecalMirror == 2) DecalColor.a = DecalColor.a * (1.0f - saturate(IN.tangent.w)); if (_DecalMirror == 3) DecalColor.a = DecalColor.a * saturate(IN.tangent.w); + #if WHEN_OPT(PROP_HSV_SHIFT_ENABLE == 1) + OPT_IF(_HSVShiftEnable) + if (_HSVShiftDecalMode == 1) DecalColor.rgb = HSVAdjust(DecalColor.rgb, hsvadj_masked); + if (_HSVShiftDecalMode == 2) DecalColor.rgb = HSVAdjust(DecalColor.rgb, hsvadj_unmasked); + OPT_FI + #endif + #ifdef TRANSPARENT if (_DecalMode == 0) { Color = lerp(Color , lerp(DecalColor.rgb , Color , OUT.a) , DecalColor.a); @@ -81,14 +132,75 @@ float4 frag (VOUT IN) : COLOR { float DecalMixCol = max(Color.r , max(Color.g , Color.b)); Color = lerp(Color , DecalMixCol * DecalColor.rgb , DecalColor.a); } + OPT_FI + #endif + +//----Stippling & crosshatching + float dot_halftone = 0.0f; + float line_halftone = 0.0f; + float2 emission_scroll = float2(_EmissionScrX , _EmissionScrY) * _Time.y; + float4 stipple_color = UNITY_SAMPLE_TEX2D_SAMPLER(_StippleTexture, _MainTex, TRANSFORM_TEX(SubUV, _StippleTexture)); + float4 stipple_mask = UNITY_SAMPLE_TEX2D_SAMPLER(_StippleMask, _MainTex, TRANSFORM_TEX(SubUV, _StippleMask)); + float4 stipple_emission_map = UNITY_SAMPLE_TEX2D_SAMPLER(_StippleEmissionMap, _MainTex, TRANSFORM_TEX((SubUV + emission_scroll), _StippleEmissionMap)); + float4 crosshatch_color = UNITY_SAMPLE_TEX2D_SAMPLER(_CrosshatchTexture, _MainTex, TRANSFORM_TEX(SubUV, _CrosshatchTexture)); + float4 crosshatch_mask = UNITY_SAMPLE_TEX2D_SAMPLER(_CrosshatchMask, _MainTex, TRANSFORM_TEX(SubUV, _CrosshatchMask)); + float4 crosshatch_emission_map = UNITY_SAMPLE_TEX2D_SAMPLER(_CrosshatchEmissionMap, _MainTex, TRANSFORM_TEX(SubUV + emission_scroll, _CrosshatchEmissionMap)); + + if (_StippleEnable) { + float stipple_size = 0.0f; + if(_StippleMode == 0) stipple_size = clamp(_StippleSize + sin(_Time.y * _StippleSpeed) * _StippleAnimation, 0.0f, 1.0f); + if(_StippleMode == 1) stipple_size = clamp(_StippleSize + sin(IN.objpos.y * _StippleFrequency + _Time.y * _StippleSpeed) * _StippleAnimation, 0.0f, 1.0f); + + dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, stipple_size)); + + #if WHEN_OPT(PROP_HSV_SHIFT_ENABLE == 1) + OPT_IF(_HSVShiftEnable) + if (_HSVShiftStippleMode == 1) stipple_color.rgb = HSVAdjust(stipple_color.rgb, hsvadj_masked); + if (_HSVShiftStippleMode == 2) stipple_color.rgb = HSVAdjust(stipple_color.rgb, hsvadj_unmasked); + OPT_FI + #endif + + Color = lerp(Color, stipple_color.rgb, stipple_mask.rgb * dot_halftone); + OUT.a *= lerp(1.0f, dot_halftone, 1.0f - stipple_mask.a); + } + + if (_CrosshatchEnable) { + float line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); + + #if WHEN_OPT(PROP_HSV_SHIFT_ENABLE == 1) + OPT_IF(_HSVShiftEnable) + if (_HSVShiftCrosshatchMode == 1) crosshatch_color.rgb = HSVAdjust(crosshatch_color.rgb, hsvadj_masked); + if (_HSVShiftCrosshatchMode == 2) crosshatch_color.rgb = HSVAdjust(crosshatch_color.rgb, hsvadj_unmasked); + OPT_FI + #endif + + Color = lerp(Color, crosshatch_color.rgb, crosshatch_mask.rgb * line_halftone); + OUT.a *= lerp(1.0f, line_halftone, 1.0f - crosshatch_mask.a); } //----オクルージョン if (_OcclusionMode == 1) Color *= lerp(1.0f , UNITY_SAMPLE_TEX2D_SAMPLER(_OcclusionMap , _MainTex , SubUV).rgb , _OcclusionStrength); +//----Apply vertex alpha + OUT.a *= IN.alpha; + +// Mirror control + #if WHEN_OPT(PROP_MIRROR_CONTROL_ENABLE == 1) + OPT_IF(_MirrorControlEnable) + if (IsInMirror()) OUT.a *= _MirrorCopyAlpha; + else OUT.a *= _RealCopyAlpha; + OPT_FI + #endif //-------------------------------------カットアウト #ifdef CUTOUT - clip(OUT.a - _Cutout); + clip(OUT.a - _Cutout); + #endif + +//-------------------------------------AlphaToCoverage + #ifdef ALPHA_TO_COVERAGE + float2 screenUV = CalcScreenUV(IN.screenpos); + float dither = CalcDither(screenUV.xy); + OUT.a = OUT.a - (dither * (1.0 - OUT.a) * 0.15); #endif //-------------------------------------ノーマルマップ @@ -98,12 +210,14 @@ float4 frag (VOUT IN) : COLOR { float3 tan_sy = float3(IN.tanW.y , IN.tanB.y , Normal.y); float3 tan_sz = float3(IN.tanW.z , IN.tanB.z , Normal.z); - float2 NormalMapUV = MixingTransformTex(SubUV , _MainTex_ST , _BumpMap_ST); - float3 NormalMap = normalize(UnpackScaleNormal(tex2D(_BumpMap , NormalMapUV) , _BumpScale)); + float3 NormalMap = normalize(UnpackScaleNormal(tex2D(_BumpMap , TRANSFORM_TEX(NormalUV, _BumpMap)) , _BumpScale)); Normal.x = dot(tan_sx , NormalMap); Normal.y = dot(tan_sy , NormalMap); Normal.z = dot(tan_sz , NormalMap); +//-------------------------------------Bitangent + float3 Bitangent = cross(Normal, IN.tanW) * IN.tangent.w * unity_WorldTransformParams.w; + //-------------------------------------シェーディング float3 ShadeMask = UNITY_SAMPLE_TEX2D_SAMPLER(_ShadeMask , _MainTex , SubUV).rgb * _Shade; float3 LightBoost = 1.0f + (UNITY_SAMPLE_TEX2D_SAMPLER(_LightMask , _MainTex , SubUV).rgb * (_LightBoost - 1.0f)); @@ -121,13 +235,15 @@ float4 frag (VOUT IN) : COLOR { #endif //----トゥーンシェーディング - if (_ToonEnable) { + #if WHEN_OPT(PROP_TOON_ENABLE == 1) + OPT_IF(_ToonEnable) Diffuse = ToonCalc(Diffuse , IN.toon); #ifdef PASS_FB SHDiffuse = ToonCalc(SHDiffuse , IN.toon); VLDiffuse = ToonCalc(VLDiffuse , IN.toon); #endif - } + OPT_FI + #endif //----影の色 float3 ShadeColor = saturate(Color * 3.0f - 1.5f) * _ShadeColor; @@ -147,7 +263,8 @@ float4 frag (VOUT IN) : COLOR { #endif //----モノクロライティング - if (_MonochromeLit) { + #if WHEN_OPT(PROP_MONOCHROME_LIT == 1) + OPT_IF(_MonochromeLit) LightBase = MonoColor(LightBase); #ifdef PASS_FB VLight0 = MonoColor(VLight0); @@ -156,7 +273,8 @@ float4 frag (VOUT IN) : COLOR { VLight3 = MonoColor(VLight3); VLightBase = MonoColor(VLightBase); #endif - } + OPT_FI + #endif //----ライト反映 float3 Lighting = LightBase; @@ -198,11 +316,25 @@ float4 frag (VOUT IN) : COLOR { EmissionFlag = _EmissionEnable && _EmissionLighting; #endif - if (EmissionFlag) { + #if WHEN_OPT(PROP_EMISSION_ENABLE == 1) + OPT_IF(EmissionFlag) Emission = _Emission * _EmissionColor.rgb; Emission *= tex2D(_EmissionMap , IN.euv.xy).rgb * tex2D(_EmissionMap , IN.euv.xy).a * IN.eprm.x; Emission *= tex2D(_EmissionMap2 , IN.euv.zw).rgb * tex2D(_EmissionMap2 , IN.euv.zw).a; + #if WHEN_OPT(PROP_HSV_SHIFT_ENABLE == 1) + OPT_IF(_HSVShiftEnable) + if (_HSVShiftEmissionMode == 1) Emission.rgb = HSVAdjust(Emission.rgb, hsvadj_masked); + if (_HSVShiftEmissionMode == 2) Emission.rgb = HSVAdjust(Emission.rgb, hsvadj_unmasked); + OPT_FI + #endif + + if (_StippleEnable) + Emission = _Emission * IN.eprm.x * lerp(Emission, stipple_emission_map.rgb, stipple_mask.rgb * dot_halftone); + + if (_CrosshatchEnable) + Emission = _Emission * IN.eprm.x * lerp(Emission, crosshatch_emission_map.rgb, crosshatch_mask.rgb * line_halftone); + if (_EmissionLighting) { #ifdef PASS_FB Emission *= saturate(MonoColor(LightBase) + MonoColor(IN.shmax) + MonoColor(VLightBase)); @@ -211,7 +343,8 @@ float4 frag (VOUT IN) : COLOR { Emission *= saturate(MonoColor(LightBase)); #endif } - } + OPT_FI + #endif //-------------------------------------視差エミッション float3 Parallax = (float3)0.0f; @@ -221,7 +354,8 @@ float4 frag (VOUT IN) : COLOR { ParallaxFlag = _ParallaxEnable && _ParallaxLighting; #endif - if (ParallaxFlag) { + #if WHEN_OPT(PROP_PARALLAX_ENABLE == 1) + OPT_IF(ParallaxFlag) float Height = (1.0f - MonoColor(UNITY_SAMPLE_TEX2D_SAMPLER(_ParallaxDepthMap , _MainTex , IN.pduv).rgb)) * _ParallaxDepth; float2 ParallaxUV = IN.peuv.xy; ParallaxUV -= normalize(IN.pview).xz * Height * _ParallaxMap_ST.xy; @@ -229,6 +363,13 @@ float4 frag (VOUT IN) : COLOR { Parallax *= tex2D(_ParallaxMap , ParallaxUV).rgb * tex2D(_ParallaxMap , ParallaxUV).a * IN.peprm.x; Parallax *= tex2D(_ParallaxMap2 , IN.peuv.zw).rgb * tex2D(_ParallaxMap2 , IN.peuv.zw).a; + #if WHEN_OPT(PROP_HSV_SHIFT_ENABLE == 1) + OPT_IF(_HSVShiftEnable) + if (_HSVShiftParallaxMode == 1) Parallax.rgb = HSVAdjust(Parallax.rgb, hsvadj_masked); + if (_HSVShiftParallaxMode == 2) Parallax.rgb = HSVAdjust(Parallax.rgb, hsvadj_unmasked); + OPT_FI + #endif + if (_ParallaxLighting) { #ifdef PASS_FB Parallax *= saturate(MonoColor(LightBase) + MonoColor(IN.shmax) + MonoColor(VLightBase)); @@ -237,19 +378,75 @@ float4 frag (VOUT IN) : COLOR { Parallax *= saturate(MonoColor(LightBase)); #endif } - } + OPT_FI + #endif //-------------------------------------リフレクション - float Smoothness = 0.0f; - float3 SpecularMask = (float3)0.0f; - float3 ReflectMask = (float3)0.0f; - float MatCapSmooth = 0.0f; - float3 MatCapMask = (float3)0.0f; - float3 Specular = (float3)0.0f; - float3 Reflection = (float3)0.0f; - float3 MatCapture = (float3)0.0f; - - if (_ReflectionEnable) { + float Smoothness = 0.0f; + float3 ToonSpec = (float3)0.0f; + float3 ToonSpecMask = (float3)0.0f; + float3 ToonSpecColor = (float3)0.0f; + float3 SpecularMask = (float3)0.0f; + float3 ReflectMask = (float3)0.0f; + float MatCapSmooth = 0.0f; + float3 MatCapMask = (float3)0.0f; + float3 Specular = (float3)0.0f; + float3 Reflection = (float3)0.0f; + float3 MatCapture = (float3)0.0f; + + #if WHEN_OPT(PROP_TOON_SPEC_ENABLE == 1) + OPT_IF(_ToonSpecEnable) + ToonSpecMask = UNITY_SAMPLE_TEX2D_SAMPLER(_ToonSpecMask, _MainTex, TRANSFORM_TEX(SubUV, _ToonSpecMask)); + ToonSpecColor = lerp(_ToonSpecColor, Color, _ToonSpecMetallic); + + #if WHEN_OPT(PROP_TOON_SPEC_MODE == 0) + OPT_IF(_ToonSpecMode == 0) + float3 RLToonSpec = ToonAnisoSpecularCalc(Normal, IN.tanW, Bitangent, IN.ldir, IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * LightBase; + + #ifdef PASS_FB + float3 SHToonSpec = ToonAnisoSpecularCalc(Normal, IN.tanW, Bitangent, IN.shdir, IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * IN.shmax; + float3 VL0ToonSpec = ToonAnisoSpecularCalc(Normal, IN.tanW, Bitangent, float3(IN.vldirX.x, IN.vldirY.x, IN.vldirZ.x), IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * VLight0; + float3 VL1ToonSpec = ToonAnisoSpecularCalc(Normal, IN.tanW, Bitangent, float3(IN.vldirX.y, IN.vldirY.y, IN.vldirZ.y), IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * VLight1; + float3 VL2ToonSpec = ToonAnisoSpecularCalc(Normal, IN.tanW, Bitangent, float3(IN.vldirX.z, IN.vldirY.z, IN.vldirZ.z), IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * VLight2; + float3 VL3ToonSpec = ToonAnisoSpecularCalc(Normal, IN.tanW, Bitangent, float3(IN.vldirX.w, IN.vldirY.w, IN.vldirZ.w), IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * VLight3; + + ToonSpec = (RLToonSpec + SHToonSpec + VL0ToonSpec + VL1ToonSpec + VL2ToonSpec + VL3ToonSpec) * _ToonSpecIntensity * ToonSpecColor; + #endif + #ifdef PASS_FA + ToonSpec = RLToonSpec * _ToonSpecIntensity * ToonSpecColor; + #endif + OPT_FI + #endif + + #if WHEN_OPT(PROP_TOON_SPEC_MODE == 1) + OPT_IF(_ToonSpecMode == 1) + float3 RLToonSpec = ToonViewOffSpecularCalc(Normal, IN.ldir, IN.view, _ToonSpecSharpness, _ToonSpecOffset) * LightBase; + + #ifdef PASS_FB + float3 SHToonSpec = ToonViewOffSpecularCalc(Normal, IN.shdir, IN.view, _ToonSpecSharpness, _ToonSpecOffset) * IN.shmax; + float3 VL0ToonSpec = ToonViewOffSpecularCalc(Normal, float3(IN.vldirX.x, IN.vldirY.x, IN.vldirZ.x), IN.view, _ToonSpecSharpness, _ToonSpecOffset) * VLight0; + float3 VL1ToonSpec = ToonViewOffSpecularCalc(Normal, float3(IN.vldirX.y, IN.vldirY.y, IN.vldirZ.y), IN.view, _ToonSpecSharpness, _ToonSpecOffset) * VLight1; + float3 VL2ToonSpec = ToonViewOffSpecularCalc(Normal, float3(IN.vldirX.z, IN.vldirY.z, IN.vldirZ.z), IN.view, _ToonSpecSharpness, _ToonSpecOffset) * VLight2; + float3 VL3ToonSpec = ToonViewOffSpecularCalc(Normal, float3(IN.vldirX.w, IN.vldirY.w, IN.vldirZ.w), IN.view, _ToonSpecSharpness, _ToonSpecOffset) * VLight3; + + ToonSpec = (RLToonSpec + SHToonSpec + VL0ToonSpec + VL1ToonSpec + VL2ToonSpec + VL3ToonSpec) * _ToonSpecIntensity * ToonSpecColor; + #endif + #ifdef PASS_FA + ToonSpec = RLToonSpec * _ToonSpecIntensity * ToonSpecColor; + #endif + OPT_FI + #endif + OPT_FI + #endif + + #if WHEN_OPT(PROP_TOON_SPEC_ENABLE == 1) + OPT_IF(_ToonSpecEnable) + ToonSpecMask = UNITY_SAMPLE_TEX2D_SAMPLER(_ToonSpecMask, _MainTex, TRANSFORM_TEX(SubUV, _ToonSpecMask)); + OPT_FI + #endif + + #if WHEN_OPT(PROP_REFLECTION_ENABLE == 1) + OPT_IF(_ReflectionEnable) //----スペキュラ反射 Smoothness = tex2D(_MetallicGlossMap , SubUV).a * _GlossMapScale; SpecularMask = tex2D(_MetallicGlossMap , SubUV).rgb; @@ -320,43 +517,53 @@ float4 frag (VOUT IN) : COLOR { if (_SpecularTexColor ) Specular *= Color; if (_MetallicTexColor ) Reflection *= Color; if (_MatCapTexColor ) MatCapture *= Color; - } + OPT_FI + #endif //-------------------------------------リムライティング float3 RimLight = (float3)0.0f; #ifdef PASS_FB - if (_RimLitEnable) { + #if WHEN_OPT(PROP_RIM_LIT_ENABLE == 1) + OPT_IF(_RimLitEnable) RimLight = RimLightCalc(Normal , IN.view , _RimLit , _RimLitGradient); RimLight *= _RimLitColor.rgb * _RimLitColor.a * UNITY_SAMPLE_TEX2D_SAMPLER(_RimLitMask , _MainTex , SubUV).rgb; if (_RimLitLighthing) RimLight *= saturate(LightBase + IN.shmax + VLightBase); if (_RimLitTexColor ) RimLight *= Color; - } + OPT_FI + #endif #endif #ifdef PASS_FA - if (_RimLitEnable && _RimLitLighthing) { + #if WHEN_OPT(PROP_RIM_LIT_ENABLE == 1) + OPT_IF(_RimLitEnable && _RimLitLighthing) RimLight = RimLightCalc(Normal , IN.view , _RimLit , _RimLitGradient); RimLight *= _RimLitColor.rgb * _RimLitColor.a * UNITY_SAMPLE_TEX2D_SAMPLER(_RimLitMask , _MainTex , SubUV).rgb; RimLight *= saturate(LightBase); if (_RimLitTexColor ) RimLight *= Color; - } + OPT_FI + #endif #endif //-------------------------------------最終カラー計算 OUT.rgb = Color * Lighting; OUT.rgb = lerp(OUT.rgb , Color , _Unlit); OUT.rgb = lerp(OUT.rgb , Reflection , _Metallic * ReflectMask); + OUT.rgb += ToonSpec * ToonSpecMask.r; OUT.rgb += Specular; OUT.rgb += MatCapture; //----リムライティング混合 - if (_RimLitEnable) { + #if WHEN_OPT(PROP_RIM_LIT_ENABLE == 1) + OPT_IF(_RimLitEnable) if (_RimLitMode == 0) OUT.rgb += RimLight; if (_RimLitMode == 1) OUT.rgb *= RimLight; if (_RimLitMode == 2) OUT.rgb = saturate(OUT.rgb - RimLight); - } + OPT_FI + #endif //----エミッション混合 - if (EmissionFlag) { + + #if WHEN_OPT(PROP_EMISSION_ENABLE == 1) + OPT_IF(EmissionFlag) float EmissionRev = MonoColor(LightBase); #ifdef PASS_FB @@ -373,10 +580,12 @@ float4 frag (VOUT IN) : COLOR { OUT.rgb += (lerp(Color , Reflection , (_Metallic * ReflectMask)) + ((Specular + MatCapture) * SpecularMask)) * Emission; } if (_EmissionMode == 2) OUT.rgb = saturate(OUT.rgb - Emission); - } + OPT_FI + #endif //----視差エミッション混合 - if (ParallaxFlag) { + #if WHEN_OPT(PROP_PARALLAX_ENABLE == 1) + OPT_IF(ParallaxFlag) float ParallaxRev = MonoColor(LightBase); #ifdef PASS_FB @@ -393,7 +602,8 @@ float4 frag (VOUT IN) : COLOR { OUT.rgb += (lerp(Color , Reflection , (_Metallic * ReflectMask)) + ((Specular + MatCapture) * SpecularMask)) * Parallax; } if (_ParallaxMode == 2) OUT.rgb = saturate(OUT.rgb - Parallax); - } + OPT_FI + #endif //----オクルージョンマスク if (_OcclusionMode == 2) OUT.rgb *= lerp(1.0f , UNITY_SAMPLE_TEX2D_SAMPLER(_OcclusionMap , _MainTex , SubUV).rgb , _OcclusionStrength); @@ -462,6 +672,5 @@ float4 frag (VOUT IN) : COLOR { //-------------------------------------フォグ UNITY_APPLY_FOG(IN.fogCoord, OUT); - return OUT; } diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index 99e0386..556ba35 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -3,6 +3,22 @@ // Copyright (c) 2021 揚茄子研究所 //-------------------------------------------------------------- +//-------------------------------------Multiply quaternions +float4 MultQuat(float4 q1, float4 q2) +{ + return float4( + q1.w * q2.x + q1.x * q2.w + q1.z * q2.y - q1.y * q2.z, + q1.w * q2.y + q1.y * q2.w + q1.x * q2.z - q1.z * q2.x, + q1.w * q2.z + q1.z * q2.w + q1.y * q2.x - q1.x * q2.y, + q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z + ); +} + +//-------------------------------------Rotate by quaternion +float3 QuatRotate(float4 q, float3 v) +{ + return v + 2.0 * cross(cross(v, q.xyz) + q.w * v, q.xyz); +} //-------------------------------------モノクロカラーに変換 float MonoColor(float3 col) { @@ -125,6 +141,51 @@ float3 SpecularCalc(float3 normal , float3 ldir , float3 view , float scale) { return specular; } +//-------------------------------------GGX Anisotropic NDF +float D_GGX_Anisotropic(float at, float ab, float TdotH, float BdotH, float NdotH) { + // Burley 2012, "Physically-Based Shading at Disney" + + // The values at and ab are perceptualRoughness^2, a2 is therefore perceptualRoughness^4 + // The dot product below computes perceptualRoughness^8. We cannot fit in fp16 without clamping + // the roughness to too high values so we perform the dot product and the division in fp32 + float a2 = at * ab; + float3 d = float3(ab * TdotH, at * BdotH, a2 * NdotH); + float d2 = dot(d, d); + float b2 = a2 / d2; + return a2 * b2 * b2 * (1.0 / UNITY_PI); +} + +//-------------------------------------GGX Anisotropic visibility function +float V_SmithGGXCorrelated_Anisotropic(float at, float ab, float TdotV, float BdotV, float TdotL, float BdotL, float NdotV, float NdotL) { + // Heitz 2014, "Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs" + float lambdaV = NdotL * length(float3(at * TdotV, ab * BdotV, NdotV)); + float lambdaL = NdotV * length(float3(at * TdotL, ab * BdotL, NdotL)); + return 0.5 / (lambdaV + lambdaL); +} + +//-------------------------------------GGX Anisotropic model +float3 ToonAnisoSpecularCalc(float3 normal, float3 tangent, float3 bitangent, float3 ldir, float3 view, float roughnessT, float roughnessB) { + float3 hv = normalize(ldir + view); + + float NdotL = saturate(dot(normal, ldir)); + float NdotH = saturate(dot(normal, hv)); + + float TdotH = dot(tangent, hv); + float BdotH = dot(bitangent, hv); + + float D = D_GGX_Anisotropic(roughnessT, roughnessB, TdotH, BdotH, NdotH); + + return saturate(D * NdotL); +} + +//-------------------------------------View + offset based specular +float3 ToonViewOffSpecularCalc(float3 normal, float3 ldir, float3 view, float sharpness, float offset) { + float NdotL = dot(ldir + view, normal); + float NdotVO = dot(view + float3(0.0, offset, 0.0), normal); + + return saturate(pow(sqrt(1.0 - NdotVO * NdotVO), sharpness) * NdotL); +} + //-------------------------------------環境マッピングの計算 float3 ReflectionCalc(float3 normal , float3 view , float scale) { float3 dir = reflect(-view , normal); @@ -148,3 +209,162 @@ float RimLightCalc(float3 normal , float3 view , float power , float gradient) return orim; } + +//-------------------------------------RGB to HSV +float3 RGB2HSV(float3 c) { + half4 K = half4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + half4 p = lerp(half4(c.bg, K.wz), half4(c.gb, K.xy), step(c.b, c.g)); + half4 q = lerp(half4(p.xyw, c.r), half4(c.r, p.yzx), step(p.x, c.r)); + + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} + +//-------------------------------------HSV to RGB +float3 HSV2RGB(float3 c) { + half4 K = half4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + +//-------------------------------------Adjust a colour by HSV offset +float3 HSVAdjust(float3 color, float3 adjustment) { + float3 hsv = RGB2HSV(color); + hsv.x += fmod(adjustment.x, 360); + hsv.y = saturate(hsv.y * adjustment.y); + hsv.z *= adjustment.z; + return HSV2RGB(hsv); +} + +//-------------------------------------Linear to SRGB +float LIN2SRGB(float color) { + if (color > 0.0031308) + return 1.055 * (pow(color, (1.0 / 2.4))) - 0.055; + else + return 12.92 * color; +} + +//-------------------------------------RGB linear to SRGB +float3 LIN2SRGB(float3 color) { + return float3(LIN2SRGB(color.r), LIN2SRGB(color.g), LIN2SRGB(color.b)); +} + +//-------------------------------------Vertex colour based alpha +float VertexAlpha(float3 color, float3 comperand, float alpha, float threshold) { + if (min(length(color), length(comperand)) > 0.0) { + return lerp(1.0, alpha, step(threshold, 1.0 - length(color - LIN2SRGB(comperand)))); + } else { + return 1.0; + } +} + +//-------------------------------------Stereo correct UV by screen position +float2 CalcScreenUV(half4 screenPos) { + float2 uv = screenPos / (screenPos.w + 0.0000000001); //0.0x1 Stops division by 0 warning in console. + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= float2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + + return uv; +} + +//-------------------------------------Dithering pattern +inline float Dither8x8Bayer( int x, int y ) { + const float dither[ 64 ] = { + 1, 49, 13, 61, 4, 52, 16, 64, + 33, 17, 45, 29, 36, 20, 48, 32, + 9, 57, 5, 53, 12, 60, 8, 56, + 41, 25, 37, 21, 44, 28, 40, 24, + 3, 51, 15, 63, 2, 50, 14, 62, + 35, 19, 47, 31, 34, 18, 46, 30, + 11, 59, 7, 55, 10, 58, 6, 54, + 43, 27, 39, 23, 42, 26, 38, 22}; + int r = y * 8 + x; + return dither[r] / 64; +} + +//-------------------------------------Dithering value by screen position +float CalcDither(float2 screenPos) { + float dither = Dither8x8Bayer(fmod(screenPos.x, 8), fmod(screenPos.y, 8)); + return dither; +} + +//-------------------------------------Rotate on specified axis by specified angle +float4x4 RotationMatrix(float3 axis, float angle) { + axis = normalize(axis); + float s = sin(angle); + float c = cos(angle); + float oc = 1.0 - c; + + return float4x4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0, + oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0, + oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0, + 0.0, 0.0, 0.0, 1.0); +} + +//-------------------------------------Calculate corrected view direction to avoid poles +float3 CalcViewDir(float3 worldPos) { + float3 camDir = normalize(mul(UNITY_MATRIX_V, float4(0, 1, 0, 0)).xyz); + float3 viewDir = normalize(_WorldSpaceCameraPos - worldPos); + if (dot(camDir, float3(0.0f, 0.0f, 1.0f)) >= 0.8f) { + float val = (dot(camDir, float3(0.0f, 0.0f, 1.0f)) - 0.8f)/0.2f; + float3 target = mul(RotationMatrix(float3(1.0f, 0.0, 0), UNITY_PI * 0.5), viewDir); + return lerp(viewDir, target, smoothstep(0.0, 0.5, val)); + } + if (dot(camDir, float3(0.0f, 0.0f, -1.0f)) >= 0.8f) { + float val = (dot(camDir, float3(0.0f, 0.0f, -1.0f)) - 0.8f)/0.2f; + float3 target = mul(RotationMatrix(float3(1.0f, 0.0, 0), -UNITY_PI * 0.5), viewDir); + return lerp(viewDir, target, smoothstep(0.0, 0.5, val)); + } + return viewDir; +} + +//-------------------------------------True when rendering mirror copy +bool IsInMirror() { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; +} + +//-------------------------------------3-space to spherical coordinates +float2 SphereUV(float3 coords) { + float3 nc = normalize(coords); + float lat = acos(nc.y); + float lon = atan2(nc.z, nc.x); + float2 coord = 1.0 - (float2(lon, lat) * float2(1.0/UNITY_PI, 1.0/UNITY_PI)); + return (coord + float4(0, 1-unity_StereoEyeIndex,1,1.0).xy) * float4(0, 1-unity_StereoEyeIndex,1,1.0).zw; +} + +//-------------------------------------Apply rotation to UV +float2 RotateUV(float2 uv, float rotation) { + float mid = 0.5; + return float2( + cos(rotation) * (uv.x - mid) + sin(rotation) * (uv.y - mid) + mid, + cos(rotation) * (uv.y - mid) - sin(rotation) * (uv.x - mid) + mid + ); +} + +//-------------------------------------Stipple based halftones +float DotHalftone(float4 worldPos, float halftoneDotAmount, float scalar) { + float2 uv = SphereUV(CalcViewDir(worldPos)); + uv.xy *= halftoneDotAmount; + float2 nearest = 2 * frac(100 * uv) - 1; + float dist = length(nearest); + float dotSize = 100 * scalar; + float dotMask = step(dotSize, dist); + + return lerp(1, 1-dotMask, smoothstep(0, 0.4, 1/distance(worldPos, _WorldSpaceCameraPos)));; +} + +//-------------------------------------Crosshatch based halftones +float LineHalftone(float4 worldPos, float scalar) { + float2 uv = SphereUV(CalcViewDir(worldPos)); + uv = RotateUV(uv, -0.785398); + uv.x = sin(uv.x * scalar); + + float2 steppedUV = smoothstep(0,0.2,uv.x); + float lineMask = lerp(1, steppedUV, smoothstep(0, 0.4, 1/distance(worldPos, _WorldSpaceCameraPos))); + + return saturate(lineMask); +} diff --git a/Shader/Cginc/SunaoShader_Macro.cginc b/Shader/Cginc/SunaoShader_Macro.cginc new file mode 100644 index 0000000..bf9c858 --- /dev/null +++ b/Shader/Cginc/SunaoShader_Macro.cginc @@ -0,0 +1,14 @@ +//-------------------------------------------------------------- +// Sunao Shader Function +// Copyright (c) 2020 揚茄子研究所 +//-------------------------------------------------------------- + +#ifndef OPTIMIZED_SHADER +#define OPT_IF(x) if(x) { +#define OPT_FI } +#else +#define OPT_IF(x) +#define OPT_FI +#endif + +#define WHEN_OPT(x) !defined(OPTIMIZED_SHADER) || (x) diff --git a/Shader/Cginc/SunaoShader_OL.cginc b/Shader/Cginc/SunaoShader_OL.cginc index 1a0f0a2..feb344e 100644 --- a/Shader/Cginc/SunaoShader_OL.cginc +++ b/Shader/Cginc/SunaoShader_OL.cginc @@ -42,6 +42,62 @@ uniform bool _OutLineTexColor; uniform bool _OutLineFixScale; +//----Hue Shift + uniform bool _HSVShiftEnable; + UNITY_DECLARE_TEX2D(_HSVShiftMask); + uniform float4 _HSVShiftMask_ST; + uniform float _HSVShiftHue; + uniform float _HSVShiftSat; + uniform float _HSVShiftVal; + uniform uint _HSVShiftOutlineMode; + +//----Stippling & Crosshatching + uniform bool _StippleEnable; + uniform bool _StippleDisableOutline; + uniform float _StippleSize; + uniform float _StippleAmount; + UNITY_DECLARE_TEX2D_NOSAMPLER(_StippleMask); + uniform float4 _StippleMask_ST; + uniform bool _CrosshatchEnable; + uniform float _CrosshatchAmount; + UNITY_DECLARE_TEX2D_NOSAMPLER(_CrosshatchMask); + uniform float4 _CrosshatchMask_ST; + +//----Vertex Color Alpha + uniform float _VertexColorThreshold; + uniform float3 _VertexColor01; + uniform float _VertexAlpha01; + uniform float3 _VertexColor02; + uniform float _VertexAlpha02; + uniform float3 _VertexColor03; + uniform float _VertexAlpha03; + uniform float3 _VertexColor04; + uniform float _VertexAlpha04; + uniform float3 _VertexColor05; + uniform float _VertexAlpha05; + uniform float3 _VertexColor06; + uniform float _VertexAlpha06; + uniform float3 _VertexColor07; + uniform float _VertexAlpha07; + uniform float3 _VertexColor08; + uniform float _VertexAlpha08; + uniform float3 _VertexColor09; + uniform float _VertexAlpha09; + uniform float3 _VertexColor10; + uniform float _VertexAlpha10; + uniform float3 _VertexColor11; + uniform float _VertexAlpha11; + uniform float3 _VertexColor12; + uniform float _VertexAlpha12; + uniform float3 _VertexColor13; + uniform float _VertexAlpha13; + uniform float3 _VertexColor14; + uniform float _VertexAlpha14; + uniform float3 _VertexColor15; + uniform float _VertexAlpha15; + uniform float3 _VertexColor16; + uniform float _VertexAlpha16; + //----Other uniform float _DirectionalLight; uniform float _SHLight; @@ -66,23 +122,26 @@ //-------------------------------------頂点シェーダ入力構造体 struct VIN { - float4 vertex : POSITION; - float2 uv : TEXCOORD; - float3 normal : NORMAL; - float3 color : COLOR; + float4 vertex : POSITION; + float2 uv : TEXCOORD; + float3 normal : NORMAL; + float3 color : COLOR; }; //-------------------------------------頂点シェーダ出力構造体 struct VOUT { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float3 color : TEXCOORD1; - float mask : TEXCOORD2; - - LIGHTING_COORDS(3 , 4) - UNITY_FOG_COORDS(5) + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float3 color : TEXCOORD1; + float mask : TEXCOORD2; + float alpha : TEXCOORD3; + float4 worldpos : TEXCOORD4; + float4 screenpos : TEXCOORD5; + + LIGHTING_COORDS(6 , 7) + UNITY_FOG_COORDS(8) }; @@ -108,7 +167,7 @@ VOUT vert (VIN v) { UVAnim.xy += floor(frac(UVAnimSpeed * _Time.y) * float2(_UVAnimX , _UVAnimY)); } - + o.uv = (o.uv + UVAnim.xy) * UVAnim.zw; o.uv += float2(_UVScrollX , _UVScrollY) * _Time.y; } @@ -118,7 +177,7 @@ VOUT vert (VIN v) { //----頂点座標変換 float4 outv = (float4)0.0f; - if (_OutLineEnable) { + if (_OutLineEnable && !(_StippleEnable && _StippleDisableOutline)) { float4 fixscale; fixscale.x = length(float3(unity_ObjectToWorld[0].x , unity_ObjectToWorld[1].x , unity_ObjectToWorld[2].x)); @@ -134,10 +193,30 @@ VOUT vert (VIN v) { } o.pos = UnityObjectToClipPos(outv); float3 PosW = mul(unity_ObjectToWorld , v.vertex).xyz; + o.worldpos = mul(unity_ObjectToWorld, outv); + o.screenpos = ComputeScreenPos(o.pos); //----カラー & ライティング o.color = _OutLineColor.rgb; +//-------------------------------------vertex alpha + o.alpha = VertexAlpha(v.color, _VertexColor01, _VertexAlpha01, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor02, _VertexAlpha02, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor03, _VertexAlpha03, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor04, _VertexAlpha04, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor05, _VertexAlpha05, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor06, _VertexAlpha06, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor07, _VertexAlpha07, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor08, _VertexAlpha08, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor09, _VertexAlpha09, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor10, _VertexAlpha10, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor11, _VertexAlpha11, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor12, _VertexAlpha12, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor13, _VertexAlpha13, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor14, _VertexAlpha14, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor15, _VertexAlpha15, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor16, _VertexAlpha16, _VertexColorThreshold); + if (_OutLineTexColor) { if (_VertexColor) o.color *= v.color; o.color *= _Bright; @@ -213,6 +292,18 @@ float4 frag (VOUT IN) : COLOR { //----カラー計算 float4 OUT = float4(0.0f , 0.0f , 0.0f , 1.0f); + if (_HSVShiftEnable) { + float3 hsvadj_masked = float3(1.0, 1.0, 1.0); + float3 hsvadj_unmasked = float3(_HSVShiftHue, _HSVShiftSat, _HSVShiftVal); + float4 hsvshift_mask = UNITY_SAMPLE_TEX2D(_HSVShiftMask, TRANSFORM_TEX(IN.uv, _HSVShiftMask)); + hsvadj_masked.x = lerp(1.0f, _HSVShiftHue, hsvshift_mask.r); + hsvadj_masked.y = lerp(1.0f, _HSVShiftSat, hsvshift_mask.g); + hsvadj_masked.z = lerp(1.0f, _HSVShiftVal, hsvshift_mask.b); + + if (_HSVShiftOutlineMode == 1) IN.color.rgb = HSVAdjust(IN.color.rgb, hsvadj_masked); + if (_HSVShiftOutlineMode == 2) IN.color.rgb = HSVAdjust(IN.color.rgb, hsvadj_unmasked); + } + OUT.rgb = UNITY_SAMPLE_TEX2D_SAMPLER(_OutLineTexture , _MainTex , IN.uv) * IN.color; #ifdef PASS_OL_FA @@ -223,11 +314,28 @@ float4 frag (VOUT IN) : COLOR { OUT.rgb *= UNITY_SAMPLE_TEX2D(_MainTex , IN.uv); } - #if defined(TRANSPARENT) || defined(CUTOUT) + #if defined(TRANSPARENT) || defined(CUTOUT) || defined(ALPHA_TO_COVERAGE) OUT.a = saturate(UNITY_SAMPLE_TEX2D(_MainTex , IN.uv).a * _Color.a * _Alpha); OUT.a *= lerp(1.0f , MonoColor(UNITY_SAMPLE_TEX2D_SAMPLER(_AlphaMask , _MainTex , IN.uv).rgb) , _AlphaMaskStrength); #endif +//----Stippling & crosshatching + float dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, _StippleSize)); + float line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); + float4 stipple_mask = UNITY_SAMPLE_TEX2D_SAMPLER(_StippleMask, _MainTex, TRANSFORM_TEX(IN.uv, _StippleMask)); + float4 crosshatch_mask = UNITY_SAMPLE_TEX2D_SAMPLER(_CrosshatchMask, _MainTex, TRANSFORM_TEX(IN.uv, _CrosshatchMask)); + + if (_StippleEnable) { + OUT.a *= lerp(1.0f, dot_halftone, 1.0f - stipple_mask.a); + } + + if (_CrosshatchEnable) { + OUT.a *= lerp(1.0f, line_halftone, 1.0f - crosshatch_mask.a); + } + +//----Vertex Color Alpha + OUT.a *= IN.alpha; + //----カットアウト #ifdef CUTOUT @@ -235,6 +343,13 @@ float4 frag (VOUT IN) : COLOR { OUT.a = 1.0f; #endif +//----AlphaToCoverage + #ifdef ALPHA_TO_COVERAGE + float2 screenUV = CalcScreenUV(IN.screenpos); + float dither = CalcDither(screenUV.xy); + OUT.a = OUT.a - (dither * (1.0 - OUT.a) * 0.15); + #endif + clip(IN.mask - 0.1f); //----ガンマ修正 diff --git a/Shader/Cginc/SunaoShader_SC.cginc b/Shader/Cginc/SunaoShader_SC.cginc index 2bbe8c1..df6eccb 100644 --- a/Shader/Cginc/SunaoShader_SC.cginc +++ b/Shader/Cginc/SunaoShader_SC.cginc @@ -5,16 +5,72 @@ #include "UnityCG.cginc" + #include "UnityShaderVariables.cginc" + #include "SunaoShader_Function.cginc" + + uniform float _Alpha; + uniform float _Cutout; + +//----Stippling & Crosshatching + uniform bool _StippleEnable; + uniform float _StippleSize; + uniform float _StippleAmount; + UNITY_DECLARE_TEX2D(_StippleMask); + uniform float4 _StippleMask_ST; + uniform bool _CrosshatchEnable; + uniform float _CrosshatchAmount; + UNITY_DECLARE_TEX2D(_CrosshatchMask); + uniform float4 _CrosshatchMask_ST; + +//----Vertex Color Alpha + uniform float _VertexColorThreshold; + uniform float3 _VertexColor01; + uniform float _VertexAlpha01; + uniform float3 _VertexColor02; + uniform float _VertexAlpha02; + uniform float3 _VertexColor03; + uniform float _VertexAlpha03; + uniform float3 _VertexColor04; + uniform float _VertexAlpha04; + uniform float3 _VertexColor05; + uniform float _VertexAlpha05; + uniform float3 _VertexColor06; + uniform float _VertexAlpha06; + uniform float3 _VertexColor07; + uniform float _VertexAlpha07; + uniform float3 _VertexColor08; + uniform float _VertexAlpha08; + uniform float3 _VertexColor09; + uniform float _VertexAlpha09; + uniform float3 _VertexColor10; + uniform float _VertexAlpha10; + uniform float3 _VertexColor11; + uniform float _VertexAlpha11; + uniform float3 _VertexColor12; + uniform float _VertexAlpha12; + uniform float3 _VertexColor13; + uniform float _VertexAlpha13; + uniform float3 _VertexColor14; + uniform float _VertexAlpha14; + uniform float3 _VertexColor15; + uniform float _VertexAlpha15; + uniform float3 _VertexColor16; + uniform float _VertexAlpha16; + struct VIN { float4 vertex : POSITION; float2 uv : TEXCOORD0; + float3 color : COLOR; }; struct VOUT { V2F_SHADOW_CASTER; float2 uv : TEXCOORD1; + float4 worldpos : TEXCOORD2; + float4 screenpos : TEXCOORD3; + float alpha : TEXCOORD4; }; @@ -22,6 +78,25 @@ VOUT vert (VIN v) { VOUT o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.uv; + o.worldpos = mul(unity_ObjectToWorld, v.vertex); + o.screenpos = ComputeScreenPos(o.pos); + o.alpha = VertexAlpha(v.color, _VertexColor01, _VertexAlpha01, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor02, _VertexAlpha02, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor03, _VertexAlpha03, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor04, _VertexAlpha04, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor05, _VertexAlpha05, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor06, _VertexAlpha06, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor07, _VertexAlpha07, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor08, _VertexAlpha08, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor09, _VertexAlpha09, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor10, _VertexAlpha10, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor11, _VertexAlpha11, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor12, _VertexAlpha12, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor13, _VertexAlpha13, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor14, _VertexAlpha14, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor15, _VertexAlpha15, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor16, _VertexAlpha16, _VertexColorThreshold); + TRANSFER_SHADOW_CASTER(o) return o; @@ -29,5 +104,36 @@ VOUT vert (VIN v) { float4 frag (VOUT IN) : COLOR { + float alpha = _Alpha; + +//----Stippling & crosshatching + float dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, _StippleSize)); + float line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); + float4 stipple_mask = UNITY_SAMPLE_TEX2D(_StippleMask, TRANSFORM_TEX(IN.uv, _StippleMask)); + float4 crosshatch_mask = UNITY_SAMPLE_TEX2D(_CrosshatchMask, TRANSFORM_TEX(IN.uv, _CrosshatchMask)); + + if (_StippleEnable) { + alpha *= lerp(1.0f, dot_halftone, 1.0f - stipple_mask.a); + } + + if (_CrosshatchEnable) { + alpha *= lerp(1.0f, line_halftone, 1.0f - crosshatch_mask.a); + } + +//----Vertex Color Alpha + alpha *= IN.alpha; + +//-------------------------------------カットアウト + #ifdef CUTOUT + clip(alpha - _Cutout); + #endif + +//-------------------------------------AlphaToCoverage + #ifdef ALPHA_TO_COVERAGE + float2 screenUV = CalcScreenUV(IN.screenpos); + float dither = CalcDither(screenUV.xy); + clip(alpha - 0.5); + #endif + SHADOW_CASTER_FRAGMENT(IN) } diff --git a/Shader/Cginc/SunaoShader_Vert.cginc b/Shader/Cginc/SunaoShader_Vert.cginc index e696822..934e100 100644 --- a/Shader/Cginc/SunaoShader_Vert.cginc +++ b/Shader/Cginc/SunaoShader_Vert.cginc @@ -11,6 +11,9 @@ VOUT vert (VIN v) { //-------------------------------------頂点座標変換 o.pos = UnityObjectToClipPos(v.vertex); float3 PosW = mul(unity_ObjectToWorld , v.vertex).xyz; + o.worldpos = mul(unity_ObjectToWorld, v.vertex); + o.objpos = normalize(v.vertex); + o.screenpos = ComputeScreenPos(o.pos); //-------------------------------------UV o.uv = (v.uv * _MainTex_ST.xy) + _MainTex_ST.zw; @@ -34,6 +37,24 @@ VOUT vert (VIN v) { o.color = (float3)1.0f; if (_VertexColor) o.color = v.color; +//-------------------------------------vertex alpha + o.alpha = VertexAlpha(v.color, _VertexColor01, _VertexAlpha01, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor02, _VertexAlpha02, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor03, _VertexAlpha03, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor04, _VertexAlpha04, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor05, _VertexAlpha05, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor06, _VertexAlpha06, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor07, _VertexAlpha07, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor08, _VertexAlpha08, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor09, _VertexAlpha09, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor10, _VertexAlpha10, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor11, _VertexAlpha11, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor12, _VertexAlpha12, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor13, _VertexAlpha13, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor14, _VertexAlpha14, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor15, _VertexAlpha15, _VertexColorThreshold) * + VertexAlpha(v.color, _VertexColor16, _VertexAlpha16, _VertexColorThreshold); + //-------------------------------------デカール o.decal = (float4)1.0f; diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader new file mode 100644 index 0000000..0653544 --- /dev/null +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -0,0 +1,531 @@ +//-------------------------------------------------------------- +// Sunao Shader Ver 1.4.2 +// +// Copyright (c) 2021 揚茄子研究所 +// Twitter : @SUNAO_VRC +// VRChat : SUNAO_ +// +// This software is released under the MIT License. +// see LICENSE or http://suna.ooo/agenasulab/ss/LICENSE +//-------------------------------------------------------------- + +Shader "Sunao Shader/AlphaToCoverage" { + + + Properties { + [SToggle] + _OptimizerEnable ("Enable Optimizer" , int) = 0 + + [NoScaleOffset] + _MainTex ("Main Texture" , 2D) = "white" {} + _Color ("Color" , Color) = (1,1,1,1) + _Alpha ("Alpha" , Range( 0.0, 2.0)) = 1.0 + _Cutout ("Cutout" , Range( 0.0, 1.0)) = 0.5 + + [Normal] + _BumpMap ("Normal Map" , 2D) = "bump" {} + [NoScaleOffset] + _OcclusionMap ("Occlusion" , 2D) = "white" {} + [NoScaleOffset] + _AlphaMask ("Alpha Mask" , 2D) = "white" {} + + _Bright ("Brightness" , Range( 0.0, 1.0)) = 1.0 + _BumpScale ("Normal Map Scale" , Range(-2.0, 2.0)) = 1.0 + _OcclusionStrength ("Occlusion Strength" , Range( 0.0, 1.0)) = 1.0 + [Enum(SH Light, 0 , Main Texture , 1 , Final Color , 2)] + _OcclusionMode ("Occlusion Mode " , int) = 0 + _AlphaMaskStrength ("Alpha Mask Strength" , Range( 0.0, 1.0)) = 1.0 + [SToggle] + _VertexColor ("Use Vertex Color" , int) = 0 + + _UVScrollX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _UVScrollY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _UVAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _UVAnimX ("Animation X Size" , int) = 1 + _UVAnimY ("Animation Y Size" , int) = 1 + [SToggle] + _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Tangent Map , 0 , Rotation Map , 1)] + _TanMode ("Tangent Map Mode" , int) = 0 + _TanMap ("Tangent Map" , 2D) = "black" {} + + [SToggle] + _DecalEnable ("Enable Decal" , int) = 0 + _DecalTex ("Decal Texture" , 2D) = "white" {} + _DecalColor ("Decal Color" , Color) = (1,1,1,1) + _DecalPosX ("Position X" , Range( 0.0, 1.0)) = 0.5 + _DecalPosY ("Position Y" , Range( 0.0, 1.0)) = 0.5 + _DecalSizeX ("Size X" , Range( 0.0, 1.0)) = 0.5 + _DecalSizeY ("Size Y" , Range( 0.0, 1.0)) = 0.5 + _DecalRotation ("Rotation" , Range(-180.0, 180.0)) = 0.0 + + [Enum(Override , 0 , Add , 1 , Multiply , 2 , Multiply(Mono) , 3)] + _DecalMode ("Decal Mode" , int) = 0 + [Enum(Normal , 0 , Fixed , 1 , Mirror1 , 2 , Mirror2 , 3 , Copy(Mirror) , 4 , Copy(Fixed) , 5)] + _DecalMirror ("Decal Mirror Mode" , int) = 0 + + _DecalScrollX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _DecalScrollY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _DecalAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _DecalAnimX ("Animation X Size" , int) = 1 + _DecalAnimY ("Animation Y Size" , int) = 1 + + + _StencilNumb ("Stencil Number" , int) = 4 + [Enum(NotEqual , 6 , Equal , 3 , Less , 2 , LessEqual , 4 , Greater , 5 , GreaterEqual , 7)] + _StencilCompMode ("Stencil Compare Mode" , int) = 6 + + + [NoScaleOffset] + _ShadeMask ("Shade Mask" , 2D) = "white" {} + _Shade ("Shade Strength" , Range( 0.0, 1.0)) = 0.3 + _ShadeWidth ("Shade Width" , Range( 0.0, 2.0)) = 0.75 + _ShadeGradient ("Shade Gradient" , Range( 0.0, 2.0)) = 0.75 + _ShadeColor ("Shade Color" , Range( 0.0, 1.0)) = 0.5 + _CustomShadeColor ("Custom Shade Color" , Color) = (0,0,0,0) + + [SToggle] + _ToonEnable ("Enable Toon Shading" , int) = 0 + [IntRange] + _Toon ("Toon" , Range( 0.0, 9.0)) = 9.0 + _ToonSharpness ("Toon Sharpness" , Range( 0.0, 1.0)) = 1.0 + + [NoScaleOffset] + _LightMask ("Lighting Boost Mask" , 2D) = "black" {} + _LightBoost ("Lighting Boost" , Range( 1.0, 5.0)) = 3.0 + _Unlit ("Unlighting" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _MonochromeLit ("Monochrome Lighting" , int) = 0 + + + [SToggle] + _MirrorControlEnable ("Enable Mirror Control" , int) = 0 + _RealCopyAlpha ("Real Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + _MirrorCopyAlpha ("Mirror Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + + + [SToggle] + _HSVShiftEnable ("Enable HSV Shift" , int) = 0 + _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} + _HSVShiftHue ("Hue Shift" , Range( 0.0, 1.0)) = 0.0 + _HSVShiftSat ("Sat Shift" , Range( 0.0, 3.0)) = 1.0 + _HSVShiftVal ("Val Shift" , Range( 0.0, 3.0)) = 1.0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftDecalMode ("Decal Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftSpecularMode ("Specular Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + + + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleEmissionMap ("Stipple Emission Mask" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 + [Enum(Uniform , 0 , Wave , 1)] + _StippleMode ("Stipple Mode" , int) = 1 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 + [SToggle] + _StippleDisableOutline ("Stipple Disable Outline", int) = 1 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + + + _VertexColorThreshold ("Vertex Alpha 1", Range(0.0, 1.0)) = 0.9999 + _VertexColor01 ("Vertex Color 1" , Color) = (0,0,0) + _VertexAlpha01 ("Vertex Alpha 1" , Range(0.0, 1.0)) = 1.0 + _VertexColor02 ("Vertex Color 2" , Color) = (0,0,0) + _VertexAlpha02 ("Vertex Alpha 2" , Range(0.0, 1.0)) = 1.0 + _VertexColor03 ("Vertex Color 3" , Color) = (0,0,0) + _VertexAlpha03 ("Vertex Alpha 3" , Range(0.0, 1.0)) = 1.0 + _VertexColor04 ("Vertex Color 4" , Color) = (0,0,0) + _VertexAlpha04 ("Vertex Alpha 4" , Range(0.0, 1.0)) = 1.0 + _VertexColor05 ("Vertex Color 5" , Color) = (0,0,0) + _VertexAlpha05 ("Vertex Alpha 5" , Range(0.0, 1.0)) = 1.0 + _VertexColor06 ("Vertex Color 6" , Color) = (0,0,0) + _VertexAlpha06 ("Vertex Alpha 6" , Range(0.0, 1.0)) = 1.0 + _VertexColor07 ("Vertex Color 7" , Color) = (0,0,0) + _VertexAlpha07 ("Vertex Alpha 7" , Range(0.0, 1.0)) = 1.0 + _VertexColor08 ("Vertex Color 8" , Color) = (0,0,0) + _VertexAlpha08 ("Vertex Alpha 8" , Range(0.0, 1.0)) = 1.0 + _VertexColor09 ("Vertex Color 9" , Color) = (0,0,0) + _VertexAlpha09 ("Vertex Alpha 9" , Range(0.0, 1.0)) = 1.0 + _VertexColor10 ("Vertex Color 10" , Color) = (0,0,0) + _VertexAlpha10 ("Vertex Alpha 10" , Range(0.0, 1.0)) = 1.0 + _VertexColor11 ("Vertex Color 11" , Color) = (0,0,0) + _VertexAlpha11 ("Vertex Alpha 11" , Range(0.0, 1.0)) = 1.0 + _VertexColor12 ("Vertex Color 12" , Color) = (0,0,0) + _VertexAlpha12 ("Vertex Alpha 12" , Range(0.0, 1.0)) = 1.0 + _VertexColor13 ("Vertex Color 13" , Color) = (0,0,0) + _VertexAlpha13 ("Vertex Alpha 13" , Range(0.0, 1.0)) = 1.0 + _VertexColor14 ("Vertex Color 14" , Color) = (0,0,0) + _VertexAlpha14 ("Vertex Alpha 14" , Range(0.0, 1.0)) = 1.0 + _VertexColor15 ("Vertex Color 15" , Color) = (0,0,0) + _VertexAlpha15 ("Vertex Alpha 15" , Range(0.0, 1.0)) = 1.0 + _VertexColor16 ("Vertex Color 16" , Color) = (0,0,0) + _VertexAlpha16 ("Vertex Alpha 16" , Range(0.0, 1.0)) = 1.0 + + + [SToggle] + _OutLineEnable ("Enable Outline" , int) = 0 + [NoScaleOffset] + _OutLineMask ("Outline Mask" , 2D) = "white" {} + _OutLineColor ("Outline Color" , Color) = (0,0,0,1) + _OutLineSize ("Outline Scale" , Range( 0.0, 1.0)) = 0.1 + [SToggle] + _OutLineLighthing ("Use Light Color" , int) = 1 + [SToggle] + _OutLineTexColor ("Use Main Texture" , int) = 0 + [NoScaleOffset] + _OutLineTexture ("Outline Texture" , 2D) = "white" {} + [SToggle] + _OutLineFixScale ("x10 Scale" , int) = 0 + + + [SToggle] + _EmissionEnable ("Enable Emission" , int) = 0 + _EmissionMap ("Emission Mask" , 2D) = "white" {} + [HDR] + _EmissionColor ("Emission Color" , Color) = (1,1,1) + _Emission ("Emission Intensity" , Range( 0.0, 2.0)) = 1.0 + + _EmissionMap2 ("2nd Emission Mask" , 2D) = "white" {} + [Enum(Add , 0 ,Multiply , 1 , Minus , 2)] + _EmissionMode ("Emission Mode" , int) = 0 + _EmissionBlink ("Blink" , Range( 0.0, 1.0)) = 0.0 + _EmissionFrequency ("Frequency" , Range( 0.0, 5.0)) = 1.0 + [Enum(Sine , 0 , Saw , 1 , SawR , 2 , Square , 3)] + _EmissionWaveform ("Waveform" , int) = 0 + _EmissionScrX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _EmissionScrY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _EmissionAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _EmissionAnimX ("Animation X Size" , int) = 1 + _EmissionAnimY ("Animation Y Size" , int) = 1 + + [SToggle] + _EmissionLighting ("Use Lighting" , int) = 0 + [SToggle] + _IgnoreTexAlphaE ("Ignore Texture Alpha" , int) = 0 + _EmissionInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + + + [SToggle] + _ParallaxEnable ("Enable Parallax Emission" , int) = 0 + _ParallaxMap ("Parallax Emission Texture" , 2D) = "white" {} + [HDR] + _ParallaxColor ("Emission Color" , Color) = (1,1,1) + _ParallaxEmission ("Emission Intensity" , Range( 0.0, 2.0)) = 1.0 + _ParallaxDepth ("Parallax Depth" , Range( 0.0, 1.0)) = 1.0 + + _ParallaxDepthMap ("Parallax Depth Mask" , 2D) = "black" {} + _ParallaxMap2 ("2nd Parallax Emission Mask", 2D) = "white" {} + [Enum(Add , 0 ,Multiply , 1 , Minus , 2)] + _ParallaxMode ("Emission Mode" , int) = 0 + _ParallaxBlink ("Blink" , Range( 0.0, 1.0)) = 0.0 + _ParallaxFrequency ("Frequency" , Range( 0.0, 5.0)) = 1.0 + [Enum(Sine , 0 , Saw , 1 , SawR , 2 , Square , 3)] + _ParallaxWaveform ("Waveform" , int) = 0 + _ParallaxPhaseOfs ("Phase Offset" , Range( 0.0, 1.0)) = 0.0 + _ParallaxScrX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _ParallaxScrY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _ParallaxAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _ParallaxAnimX ("Animation X Size" , int) = 1 + _ParallaxAnimY ("Animation Y Size" , int) = 1 + + [SToggle] + _ParallaxLighting ("Use Lighting" , int) = 0 + [SToggle] + _IgnoreTexAlphaPE ("Ignore Texture Alpha" , int) = 0 + _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + + + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + [Enum(GGX, 0 , View Offset , 1)] + _ToonSpecMode ("Specular Mode" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecMetallic ("Specular Metallic" , Range( 0.0, 1.0)) = 0.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 0.1 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.02 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + + [SToggle] + _ReflectionEnable ("Enable Reflection" , int) = 0 + [NoScaleOffset] + _MetallicGlossMap ("Reflection Mask" , 2D) = "white" {} + _GlossColor ("Reflection Color" , Color) = (1,1,1,1) + _Specular ("Specular Intensity" , Range( 0.0, 2.0)) = 1.0 + _Metallic ("Metallic" , Range( 0.0, 1.0)) = 0.5 + _MatCapStrength ("MatCap Strength" , Range( 0.0, 2.0)) = 1.0 + _GlossMapScale ("Smoothness" , Range( 0.0, 1.0)) = 0.75 + [NoScaleOffset] + _MatCap ("MatCap Texture" , 2D) = "black" {} + _MatCapColor ("MatCap Color" , Color) = (1,1,1,1) + [SToggle] + _MatCapMaskEnable ("Use Reflection Mask" , int) = 1 + [NoScaleOffset] + _MatCapMask ("MatCap Mask" , 2D) = "white" {} + _MatCapStrength ("MatCap Strength" , Range( 0.0, 2.0)) = 1.0 + [SToggle] + _ToonGlossEnable ("Enable Toon Reflection" , int) = 0 + [IntRange] + _ToonGloss ("Toon" , Range( 0.0, 9.0)) = 9.0 + [SToggle] + _SpecularTexColor ("Tex Color for Specular" , int) = 0 + [SToggle] + _MetallicTexColor ("Tex Color for Metallic" , int) = 1 + [SToggle] + _MatCapTexColor ("Tex Color for MatCap" , int) = 0 + [SToggle] + _SpecularSH ("SH Light Specular" , int) = 1 + [SToggle] + _SpecularMask ("Use Mask for Specular" , int) = 1 + [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] + _ReflectLit ("Light Color for Reflection", int) = 3 + [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] + _MatCapLit ("Light Color for MatCap" , int) = 3 + [SToggle] + _IgnoreTexAlphaR ("Ignore Texture Alpha" , int) = 0 + + + [SToggle] + _RimLitEnable ("Enable Rim Light" , int) = 0 + [NoScaleOffset] + _RimLitMask ("Rim Light Mask" , 2D) = "white" {} + [HDR] + _RimLitColor ("Rim Light Color" , Color) = (1,1,1,1) + _RimLit ("Rim Lighting" , Range( 0.0, 2.0)) = 1.0 + _RimLitGradient ("Rim Light Gradient" , Range( 0.0, 2.0)) = 1.0 + [SToggle] + _RimLitLighthing ("Use Light Color" , int) = 1 + [SToggle] + _RimLitTexColor ("Use Main Texture" , int) = 0 + [Enum(Add , 0 , Multiply , 1 , Minus , 2)] + _RimLitMode ("Rim Light Mode" , int) = 0 + [SToggle] + _IgnoreTexAlphaRL ("Ignore Texture Alpha" , int) = 0 + + + [Enum(Off , 0 , Back , 2 , Front , 1)] + _Culling ("Culling" , int) = 2 + + [SToggle] + _EnableZWrite ("Enable Z Write" , int) = 1 + + _DirectionalLight ("Directional Light" , Range( 0.0, 2.0)) = 1.0 + _SHLight ("SH Light" , Range( 0.0, 2.0)) = 1.0 + _PointLight ("Point Light" , Range( 0.0, 2.0)) = 1.0 + [SToggle] + _LightLimitter ("Light Limitter" , int) = 1 + _MinimumLight ("Minimum Light Limit" , Range( 0.0, 1.0)) = 0.0 + [Enum(Add , 0 , Max , 4)] + _BlendOperation ("ForwardAdd Blend Mode" , int) = 4 + + [SToggle] + _EnableGammaFix ("Enable Gamma Fix" , int) = 0 + _GammaR ("R Gamma" , Range( 0.0, 5.0)) = 1.0 + _GammaG ("G Gamma" , Range( 0.0, 5.0)) = 1.0 + _GammaB ("B Gamma" , Range( 0.0, 5.0)) = 1.0 + + [SToggle] + _EnableBlightFix ("Enable Brightness Fix" , int) = 0 + _BlightOutput ("Output Brightness" , Range( 0.0, 5.0)) = 1.0 + _BlightOffset ("Brightness Offset" , Range(-5.0, 5.0)) = 0.0 + + [SToggle] + _LimitterEnable ("Enable Limitter" , int) = 0 + _LimitterMax ("Limitter Max" , Range( 0.0, 5.0)) = 1.0 + + + [HideInInspector] _MainFO ("Main FO" , int) = 0 + [HideInInspector] _DecalFO ("Decal FO" , int) = 0 + [HideInInspector] _ShadingFO ("Shading FO" , int) = 0 + [HideInInspector] _OutlineFO ("Outline FO" , int) = 0 + [HideInInspector] _EmissionFO ("Emission FO" , int) = 0 + [HideInInspector] _ParallaxFO ("Parallax FO" , int) = 0 + [HideInInspector] _ReflectionFO ("Reflection FO" , int) = 0 + [HideInInspector] _RimLightingFO ("Rim Lighting FO" , int) = 0 + [HideInInspector] _VertexAlphaFO ("Vertex Alpha FO" , int) = 0 + [HideInInspector] _OtherSettingsFO ("Other Settings FO" , int) = 0 + + [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 1 + + [HideInInspector] _VersionH ("Version H" , int) = 1 + [HideInInspector] _VersionM ("Version M" , int) = 4 + [HideInInspector] _VersionL ("Version L" , int) = 2 + + } + + + + SubShader { + + LOD 0 + + AlphaToMask On + + Tags { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "Queue" = "AlphaTest" + } + + Pass { + Tags { + "LightMode" = "ForwardBase" + } + + Cull [_Culling] + ZWrite [_EnableZWrite] + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_FB + #define ALPHA_TO_COVERAGE + + #include "./cginc/SunaoShader_Core.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ForwardBase" + } + + Cull Front + ZWrite [_EnableZWrite] + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_OL_FB + #define ALPHA_TO_COVERAGE + + #include "./cginc/SunaoShader_OL.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ForwardAdd" + } + + Cull [_Culling] + BlendOp [_BlendOperation] + Blend One One + ZWrite Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdadd + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_FA + #define ALPHA_TO_COVERAGE + + #include "./cginc/SunaoShader_Core.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ForwardAdd" + } + + Cull Front + BlendOp [_BlendOperation] + Blend One One + ZWrite Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdadd + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_OL_FA + #define ALPHA_TO_COVERAGE + + #include "./cginc/SunaoShader_OL.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ShadowCaster" + } + + ZWrite On + ZTest LEqual + AlphaToMask Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_shadowcaster + #pragma target 4.5 + + #define PASS_SC + #define ALPHA_TO_COVERAGE + + #include "./cginc/SunaoShader_SC.cginc" + + ENDCG + } + } + + Fallback "Transparent/Diffuse" + + CustomEditor "SunaoShader.GUI" +} diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader new file mode 100644 index 0000000..a178cae --- /dev/null +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -0,0 +1,546 @@ +//-------------------------------------------------------------- +// Sunao Shader Ver 1.4.2 +// +// Copyright (c) 2021 揚茄子研究所 +// Twitter : @SUNAO_VRC +// VRChat : SUNAO_ +// +// This software is released under the MIT License. +// see LICENSE or http://suna.ooo/agenasulab/ss/LICENSE +//-------------------------------------------------------------- + +Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { + + + Properties { + [SToggle] + _OptimizerEnable ("Enable Optimizer" , int) = 0 + + [NoScaleOffset] + _MainTex ("Main Texture" , 2D) = "white" {} + _Color ("Color" , Color) = (1,1,1,1) + _Alpha ("Alpha" , Range( 0.0, 2.0)) = 1.0 + _Cutout ("Cutout" , Range( 0.0, 1.0)) = 0.5 + + [Normal] + _BumpMap ("Normal Map" , 2D) = "bump" {} + [NoScaleOffset] + _OcclusionMap ("Occlusion" , 2D) = "white" {} + [NoScaleOffset] + _AlphaMask ("Alpha Mask" , 2D) = "white" {} + + _Bright ("Brightness" , Range( 0.0, 1.0)) = 1.0 + _BumpScale ("Normal Map Scale" , Range(-2.0, 2.0)) = 1.0 + _OcclusionStrength ("Occlusion Strength" , Range( 0.0, 1.0)) = 1.0 + [Enum(SH Light, 0 , Main Texture , 1 , Final Color , 2)] + _OcclusionMode ("Occlusion Mode " , int) = 0 + _AlphaMaskStrength ("Alpha Mask Strength" , Range( 0.0, 1.0)) = 1.0 + [SToggle] + _VertexColor ("Use Vertex Color" , int) = 0 + + _UVScrollX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _UVScrollY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _UVAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _UVAnimX ("Animation X Size" , int) = 1 + _UVAnimY ("Animation Y Size" , int) = 1 + [SToggle] + _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Tangent Map , 0 , Rotation Map , 1)] + _TanMode ("Tangent Map Mode" , int) = 0 + _TanMap ("Tangent Map" , 2D) = "black" {} + + [SToggle] + _DecalEnable ("Enable Decal" , int) = 0 + _DecalTex ("Decal Texture" , 2D) = "white" {} + _DecalColor ("Decal Color" , Color) = (1,1,1,1) + _DecalPosX ("Position X" , Range( 0.0, 1.0)) = 0.5 + _DecalPosY ("Position Y" , Range( 0.0, 1.0)) = 0.5 + _DecalSizeX ("Size X" , Range( 0.0, 1.0)) = 0.5 + _DecalSizeY ("Size Y" , Range( 0.0, 1.0)) = 0.5 + _DecalRotation ("Rotation" , Range(-180.0, 180.0)) = 0.0 + + [Enum(Override , 0 , Add , 1 , Multiply , 2 , Multiply(Mono) , 3)] + _DecalMode ("Decal Mode" , int) = 0 + [Enum(Normal , 0 , Fixed , 1 , Mirror1 , 2 , Mirror2 , 3 , Copy(Mirror) , 4 , Copy(Fixed) , 5)] + _DecalMirror ("Decal Mirror Mode" , int) = 0 + + _DecalScrollX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _DecalScrollY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _DecalAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _DecalAnimX ("Animation X Size" , int) = 1 + _DecalAnimY ("Animation Y Size" , int) = 1 + + + _StencilNumb ("Stencil Number" , int) = 4 + [Enum(NotEqual , 6 , Equal , 3 , Less , 2 , LessEqual , 4 , Greater , 5 , GreaterEqual , 7)] + _StencilCompMode ("Stencil Compare Mode" , int) = 6 + + + [NoScaleOffset] + _ShadeMask ("Shade Mask" , 2D) = "white" {} + _Shade ("Shade Strength" , Range( 0.0, 1.0)) = 0.3 + _ShadeWidth ("Shade Width" , Range( 0.0, 2.0)) = 0.75 + _ShadeGradient ("Shade Gradient" , Range( 0.0, 2.0)) = 0.75 + _ShadeColor ("Shade Color" , Range( 0.0, 1.0)) = 0.5 + _CustomShadeColor ("Custom Shade Color" , Color) = (0,0,0,0) + + [SToggle] + _ToonEnable ("Enable Toon Shading" , int) = 0 + [IntRange] + _Toon ("Toon" , Range( 0.0, 9.0)) = 9.0 + _ToonSharpness ("Toon Sharpness" , Range( 0.0, 1.0)) = 1.0 + + [NoScaleOffset] + _LightMask ("Lighting Boost Mask" , 2D) = "black" {} + _LightBoost ("Lighting Boost" , Range( 1.0, 5.0)) = 3.0 + _Unlit ("Unlighting" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _MonochromeLit ("Monochrome Lighting" , int) = 0 + + + [SToggle] + _MirrorControlEnable ("Enable Mirror Control" , int) = 0 + _RealCopyAlpha ("Real Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + _MirrorCopyAlpha ("Mirror Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + + + [SToggle] + _HSVShiftEnable ("Enable HSV Shift" , int) = 0 + _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} + _HSVShiftHue ("Hue Shift" , Range( 0.0, 1.0)) = 0.0 + _HSVShiftSat ("Sat Shift" , Range( 0.0, 3.0)) = 1.0 + _HSVShiftVal ("Val Shift" , Range( 0.0, 3.0)) = 1.0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftDecalMode ("Decal Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftSpecularMode ("Specular Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + + + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleEmissionMap ("Stipple Emission Mask" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 + [Enum(Uniform , 0 , Wave , 1)] + _StippleMode ("Stipple Mode" , int) = 1 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 + [SToggle] + _StippleDisableOutline ("Stipple Disable Outline", int) = 1 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + + + _VertexColorThreshold ("Vertex Alpha 1", Range(0.0, 1.0)) = 0.9999 + _VertexColor01 ("Vertex Color 1" , Color) = (0,0,0) + _VertexAlpha01 ("Vertex Alpha 1" , Range(0.0, 1.0)) = 1.0 + _VertexColor02 ("Vertex Color 2" , Color) = (0,0,0) + _VertexAlpha02 ("Vertex Alpha 2" , Range(0.0, 1.0)) = 1.0 + _VertexColor03 ("Vertex Color 3" , Color) = (0,0,0) + _VertexAlpha03 ("Vertex Alpha 3" , Range(0.0, 1.0)) = 1.0 + _VertexColor04 ("Vertex Color 4" , Color) = (0,0,0) + _VertexAlpha04 ("Vertex Alpha 4" , Range(0.0, 1.0)) = 1.0 + _VertexColor05 ("Vertex Color 5" , Color) = (0,0,0) + _VertexAlpha05 ("Vertex Alpha 5" , Range(0.0, 1.0)) = 1.0 + _VertexColor06 ("Vertex Color 6" , Color) = (0,0,0) + _VertexAlpha06 ("Vertex Alpha 6" , Range(0.0, 1.0)) = 1.0 + _VertexColor07 ("Vertex Color 7" , Color) = (0,0,0) + _VertexAlpha07 ("Vertex Alpha 7" , Range(0.0, 1.0)) = 1.0 + _VertexColor08 ("Vertex Color 8" , Color) = (0,0,0) + _VertexAlpha08 ("Vertex Alpha 8" , Range(0.0, 1.0)) = 1.0 + _VertexColor09 ("Vertex Color 9" , Color) = (0,0,0) + _VertexAlpha09 ("Vertex Alpha 9" , Range(0.0, 1.0)) = 1.0 + _VertexColor10 ("Vertex Color 10" , Color) = (0,0,0) + _VertexAlpha10 ("Vertex Alpha 10" , Range(0.0, 1.0)) = 1.0 + _VertexColor11 ("Vertex Color 11" , Color) = (0,0,0) + _VertexAlpha11 ("Vertex Alpha 11" , Range(0.0, 1.0)) = 1.0 + _VertexColor12 ("Vertex Color 12" , Color) = (0,0,0) + _VertexAlpha12 ("Vertex Alpha 12" , Range(0.0, 1.0)) = 1.0 + _VertexColor13 ("Vertex Color 13" , Color) = (0,0,0) + _VertexAlpha13 ("Vertex Alpha 13" , Range(0.0, 1.0)) = 1.0 + _VertexColor14 ("Vertex Color 14" , Color) = (0,0,0) + _VertexAlpha14 ("Vertex Alpha 14" , Range(0.0, 1.0)) = 1.0 + _VertexColor15 ("Vertex Color 15" , Color) = (0,0,0) + _VertexAlpha15 ("Vertex Alpha 15" , Range(0.0, 1.0)) = 1.0 + _VertexColor16 ("Vertex Color 16" , Color) = (0,0,0) + _VertexAlpha16 ("Vertex Alpha 16" , Range(0.0, 1.0)) = 1.0 + + + [SToggle] + _OutLineEnable ("Enable Outline" , int) = 0 + [NoScaleOffset] + _OutLineMask ("Outline Mask" , 2D) = "white" {} + _OutLineColor ("Outline Color" , Color) = (0,0,0,1) + _OutLineSize ("Outline Scale" , Range( 0.0, 1.0)) = 0.1 + [SToggle] + _OutLineLighthing ("Use Light Color" , int) = 1 + [SToggle] + _OutLineTexColor ("Use Main Texture" , int) = 0 + [NoScaleOffset] + _OutLineTexture ("Outline Texture" , 2D) = "white" {} + [SToggle] + _OutLineFixScale ("x10 Scale" , int) = 0 + + + [SToggle] + _EmissionEnable ("Enable Emission" , int) = 0 + _EmissionMap ("Emission Mask" , 2D) = "white" {} + [HDR] + _EmissionColor ("Emission Color" , Color) = (1,1,1) + _Emission ("Emission Intensity" , Range( 0.0, 2.0)) = 1.0 + + _EmissionMap2 ("2nd Emission Mask" , 2D) = "white" {} + [Enum(Add , 0 ,Multiply , 1 , Minus , 2)] + _EmissionMode ("Emission Mode" , int) = 0 + _EmissionBlink ("Blink" , Range( 0.0, 1.0)) = 0.0 + _EmissionFrequency ("Frequency" , Range( 0.0, 5.0)) = 1.0 + [Enum(Sine , 0 , Saw , 1 , SawR , 2 , Square , 3)] + _EmissionWaveform ("Waveform" , int) = 0 + _EmissionScrX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _EmissionScrY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _EmissionAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _EmissionAnimX ("Animation X Size" , int) = 1 + _EmissionAnimY ("Animation Y Size" , int) = 1 + + [SToggle] + _EmissionLighting ("Use Lighting" , int) = 0 + [SToggle] + _IgnoreTexAlphaE ("Ignore Texture Alpha" , int) = 0 + _EmissionInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + + + [SToggle] + _ParallaxEnable ("Enable Parallax Emission" , int) = 0 + _ParallaxMap ("Parallax Emission Texture" , 2D) = "white" {} + [HDR] + _ParallaxColor ("Emission Color" , Color) = (1,1,1) + _ParallaxEmission ("Emission Intensity" , Range( 0.0, 2.0)) = 1.0 + _ParallaxDepth ("Parallax Depth" , Range( 0.0, 1.0)) = 1.0 + + _ParallaxDepthMap ("Parallax Depth Mask" , 2D) = "black" {} + _ParallaxMap2 ("2nd Parallax Emission Mask", 2D) = "white" {} + [Enum(Add , 0 ,Multiply , 1 , Minus , 2)] + _ParallaxMode ("Emission Mode" , int) = 0 + _ParallaxBlink ("Blink" , Range( 0.0, 1.0)) = 0.0 + _ParallaxFrequency ("Frequency" , Range( 0.0, 5.0)) = 1.0 + [Enum(Sine , 0 , Saw , 1 , SawR , 2 , Square , 3)] + _ParallaxWaveform ("Waveform" , int) = 0 + _ParallaxPhaseOfs ("Phase Offset" , Range( 0.0, 1.0)) = 0.0 + _ParallaxScrX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _ParallaxScrY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _ParallaxAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _ParallaxAnimX ("Animation X Size" , int) = 1 + _ParallaxAnimY ("Animation Y Size" , int) = 1 + + [SToggle] + _ParallaxLighting ("Use Lighting" , int) = 0 + [SToggle] + _IgnoreTexAlphaPE ("Ignore Texture Alpha" , int) = 0 + _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + + + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + [Enum(GGX, 0 , View Offset , 1)] + _ToonSpecMode ("Specular Mode" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecMetallic ("Specular Metallic" , Range( 0.0, 1.0)) = 0.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 0.1 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.02 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + + [SToggle] + _ReflectionEnable ("Enable Reflection" , int) = 0 + [NoScaleOffset] + _MetallicGlossMap ("Reflection Mask" , 2D) = "white" {} + _GlossColor ("Reflection Color" , Color) = (1,1,1,1) + _Specular ("Specular Intensity" , Range( 0.0, 2.0)) = 1.0 + _Metallic ("Metallic" , Range( 0.0, 1.0)) = 0.5 + _MatCapStrength ("MatCap Strength" , Range( 0.0, 2.0)) = 1.0 + _GlossMapScale ("Smoothness" , Range( 0.0, 1.0)) = 0.75 + [NoScaleOffset] + _MatCap ("MatCap Texture" , 2D) = "black" {} + _MatCapColor ("MatCap Color" , Color) = (1,1,1,1) + [SToggle] + _MatCapMaskEnable ("Use Reflection Mask" , int) = 1 + [NoScaleOffset] + _MatCapMask ("MatCap Mask" , 2D) = "white" {} + _MatCapStrength ("MatCap Strength" , Range( 0.0, 2.0)) = 1.0 + [SToggle] + _ToonGlossEnable ("Enable Toon Reflection" , int) = 0 + [IntRange] + _ToonGloss ("Toon" , Range( 0.0, 9.0)) = 9.0 + [SToggle] + _SpecularTexColor ("Tex Color for Specular" , int) = 0 + [SToggle] + _MetallicTexColor ("Tex Color for Metallic" , int) = 1 + [SToggle] + _MatCapTexColor ("Tex Color for MatCap" , int) = 0 + [SToggle] + _SpecularSH ("SH Light Specular" , int) = 1 + [SToggle] + _SpecularMask ("Use Mask for Specular" , int) = 1 + [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] + _ReflectLit ("Light Color for Reflection", int) = 3 + [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] + _MatCapLit ("Light Color for MatCap" , int) = 3 + [SToggle] + _IgnoreTexAlphaR ("Ignore Texture Alpha" , int) = 0 + + + [SToggle] + _RimLitEnable ("Enable Rim Light" , int) = 0 + [NoScaleOffset] + _RimLitMask ("Rim Light Mask" , 2D) = "white" {} + [HDR] + _RimLitColor ("Rim Light Color" , Color) = (1,1,1,1) + _RimLit ("Rim Lighting" , Range( 0.0, 2.0)) = 1.0 + _RimLitGradient ("Rim Light Gradient" , Range( 0.0, 2.0)) = 1.0 + [SToggle] + _RimLitLighthing ("Use Light Color" , int) = 1 + [SToggle] + _RimLitTexColor ("Use Main Texture" , int) = 0 + [Enum(Add , 0 , Multiply , 1 , Minus , 2)] + _RimLitMode ("Rim Light Mode" , int) = 0 + [SToggle] + _IgnoreTexAlphaRL ("Ignore Texture Alpha" , int) = 0 + + + [Enum(Off , 0 , Back , 2 , Front , 1)] + _Culling ("Culling" , int) = 2 + + [SToggle] + _EnableZWrite ("Enable Z Write" , int) = 1 + + _DirectionalLight ("Directional Light" , Range( 0.0, 2.0)) = 1.0 + _SHLight ("SH Light" , Range( 0.0, 2.0)) = 1.0 + _PointLight ("Point Light" , Range( 0.0, 2.0)) = 1.0 + [SToggle] + _LightLimitter ("Light Limitter" , int) = 1 + _MinimumLight ("Minimum Light Limit" , Range( 0.0, 1.0)) = 0.0 + [Enum(Add , 0 , Max , 4)] + _BlendOperation ("ForwardAdd Blend Mode" , int) = 4 + + [SToggle] + _EnableGammaFix ("Enable Gamma Fix" , int) = 0 + _GammaR ("R Gamma" , Range( 0.0, 5.0)) = 1.0 + _GammaG ("G Gamma" , Range( 0.0, 5.0)) = 1.0 + _GammaB ("B Gamma" , Range( 0.0, 5.0)) = 1.0 + + [SToggle] + _EnableBlightFix ("Enable Brightness Fix" , int) = 0 + _BlightOutput ("Output Brightness" , Range( 0.0, 5.0)) = 1.0 + _BlightOffset ("Brightness Offset" , Range(-5.0, 5.0)) = 0.0 + + [SToggle] + _LimitterEnable ("Enable Limitter" , int) = 0 + _LimitterMax ("Limitter Max" , Range( 0.0, 5.0)) = 1.0 + + + [HideInInspector] _MainFO ("Main FO" , int) = 0 + [HideInInspector] _DecalFO ("Decal FO" , int) = 0 + [HideInInspector] _ShadingFO ("Shading FO" , int) = 0 + [HideInInspector] _OutlineFO ("Outline FO" , int) = 0 + [HideInInspector] _EmissionFO ("Emission FO" , int) = 0 + [HideInInspector] _ParallaxFO ("Parallax FO" , int) = 0 + [HideInInspector] _ReflectionFO ("Reflection FO" , int) = 0 + [HideInInspector] _RimLightingFO ("Rim Lighting FO" , int) = 0 + [HideInInspector] _VertexAlphaFO ("Vertex Alpha FO" , int) = 0 + [HideInInspector] _OtherSettingsFO ("Other Settings FO" , int) = 0 + + [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 1 + + [HideInInspector] _VersionH ("Version H" , int) = 1 + [HideInInspector] _VersionM ("Version M" , int) = 4 + [HideInInspector] _VersionL ("Version L" , int) = 2 + + } + + + + SubShader { + + LOD 0 + + AlphaToMask On + + Tags { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "Queue" = "AlphaTest" + } + + Pass { + Tags { + "LightMode" = "ForwardBase" + } + + Cull [_Culling] + ZWrite [_EnableZWrite] + + Stencil { + Ref [_StencilNumb] + Comp Always + Pass Replace + } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_FB + #define ALPHA_TO_COVERAGE + + #include "./cginc/SunaoShader_Core.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ForwardBase" + } + + Cull Front + ZWrite [_EnableZWrite] + + Stencil { + Ref [_StencilNumb] + Comp NotEqual + } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_OL_FB + #define ALPHA_TO_COVERAGE + + #include "./cginc/SunaoShader_OL.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ForwardAdd" + } + + Cull Front + BlendOp [_BlendOperation] + Blend One One + ZWrite Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdadd + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_FA + #define ALPHA_TO_COVERAGE + + #include "./cginc/SunaoShader_Core.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ForwardAdd" + } + + Cull Front + BlendOp [_BlendOperation] + Blend One One + ZWrite Off + + Stencil { + Ref [_StencilNumb] + Comp NotEqual + } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdadd + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_OL_FA + #define ALPHA_TO_COVERAGE + + #include "./cginc/SunaoShader_OL.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ShadowCaster" + } + + ZWrite On + ZTest LEqual + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_shadowcaster + #pragma target 4.5 + + #define PASS_SC + #define ALPHA_TO_COVERAGE + + #include "./cginc/SunaoShader_SC.cginc" + + ENDCG + } + } + + Fallback "Transparent/Diffuse" + + CustomEditor "SunaoShader.GUI" +} diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index d12d9ff..28d3d1d 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -13,6 +13,8 @@ Shader "Sunao Shader/Cutout" { Properties { + [SToggle] + _OptimizerEnable ("Enable Optimizer" , int) = 0 [NoScaleOffset] _MainTex ("Main Texture" , 2D) = "white" {} @@ -44,6 +46,11 @@ Shader "Sunao Shader/Cutout" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Tangent Map , 0 , Rotation Map , 1)] + _TanMode ("Tangent Map Mode" , int) = 0 + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 @@ -94,6 +101,97 @@ Shader "Sunao Shader/Cutout" { _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _MirrorControlEnable ("Enable Mirror Control" , int) = 0 + _RealCopyAlpha ("Real Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + _MirrorCopyAlpha ("Mirror Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + + + [SToggle] + _HSVShiftEnable ("Enable HSV Shift" , int) = 0 + _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} + _HSVShiftHue ("Hue Shift" , Range( 0.0, 1.0)) = 0.0 + _HSVShiftSat ("Sat Shift" , Range( 0.0, 3.0)) = 1.0 + _HSVShiftVal ("Val Shift" , Range( 0.0, 3.0)) = 1.0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftDecalMode ("Decal Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftSpecularMode ("Specular Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + + + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleEmissionMap ("Stipple Emission Mask" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 + [Enum(Uniform , 0 , Wave , 1)] + _StippleMode ("Stipple Mode" , int) = 1 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 + [SToggle] + _StippleDisableOutline ("Stipple Disable Outline", int) = 1 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + + + _VertexColorThreshold ("Vertex Alpha 1", Range(0.0, 1.0)) = 0.9999 + _VertexColor01 ("Vertex Color 1" , Color) = (0,0,0) + _VertexAlpha01 ("Vertex Alpha 1" , Range(0.0, 1.0)) = 1.0 + _VertexColor02 ("Vertex Color 2" , Color) = (0,0,0) + _VertexAlpha02 ("Vertex Alpha 2" , Range(0.0, 1.0)) = 1.0 + _VertexColor03 ("Vertex Color 3" , Color) = (0,0,0) + _VertexAlpha03 ("Vertex Alpha 3" , Range(0.0, 1.0)) = 1.0 + _VertexColor04 ("Vertex Color 4" , Color) = (0,0,0) + _VertexAlpha04 ("Vertex Alpha 4" , Range(0.0, 1.0)) = 1.0 + _VertexColor05 ("Vertex Color 5" , Color) = (0,0,0) + _VertexAlpha05 ("Vertex Alpha 5" , Range(0.0, 1.0)) = 1.0 + _VertexColor06 ("Vertex Color 6" , Color) = (0,0,0) + _VertexAlpha06 ("Vertex Alpha 6" , Range(0.0, 1.0)) = 1.0 + _VertexColor07 ("Vertex Color 7" , Color) = (0,0,0) + _VertexAlpha07 ("Vertex Alpha 7" , Range(0.0, 1.0)) = 1.0 + _VertexColor08 ("Vertex Color 8" , Color) = (0,0,0) + _VertexAlpha08 ("Vertex Alpha 8" , Range(0.0, 1.0)) = 1.0 + _VertexColor09 ("Vertex Color 9" , Color) = (0,0,0) + _VertexAlpha09 ("Vertex Alpha 9" , Range(0.0, 1.0)) = 1.0 + _VertexColor10 ("Vertex Color 10" , Color) = (0,0,0) + _VertexAlpha10 ("Vertex Alpha 10" , Range(0.0, 1.0)) = 1.0 + _VertexColor11 ("Vertex Color 11" , Color) = (0,0,0) + _VertexAlpha11 ("Vertex Alpha 11" , Range(0.0, 1.0)) = 1.0 + _VertexColor12 ("Vertex Color 12" , Color) = (0,0,0) + _VertexAlpha12 ("Vertex Alpha 12" , Range(0.0, 1.0)) = 1.0 + _VertexColor13 ("Vertex Color 13" , Color) = (0,0,0) + _VertexAlpha13 ("Vertex Alpha 13" , Range(0.0, 1.0)) = 1.0 + _VertexColor14 ("Vertex Color 14" , Color) = (0,0,0) + _VertexAlpha14 ("Vertex Alpha 14" , Range(0.0, 1.0)) = 1.0 + _VertexColor15 ("Vertex Color 15" , Color) = (0,0,0) + _VertexAlpha15 ("Vertex Alpha 15" , Range(0.0, 1.0)) = 1.0 + _VertexColor16 ("Vertex Color 16" , Color) = (0,0,0) + _VertexAlpha16 ("Vertex Alpha 16" , Range(0.0, 1.0)) = 1.0 + + [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 [NoScaleOffset] @@ -167,6 +265,21 @@ Shader "Sunao Shader/Cutout" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + [Enum(GGX, 0 , View Offset , 1)] + _ToonSpecMode ("Specular Mode" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecMetallic ("Specular Metallic" , Range( 0.0, 1.0)) = 0.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 0.1 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.02 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] @@ -262,6 +375,7 @@ Shader "Sunao Shader/Cutout" { [HideInInspector] _ParallaxFO ("Parallax FO" , int) = 0 [HideInInspector] _ReflectionFO ("Reflection FO" , int) = 0 [HideInInspector] _RimLightingFO ("Rim Lighting FO" , int) = 0 + [HideInInspector] _VertexAlphaFO ("Vertex Alpha FO" , int) = 0 [HideInInspector] _OtherSettingsFO ("Other Settings FO" , int) = 0 [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 2 @@ -400,6 +514,7 @@ Shader "Sunao Shader/Cutout" { #pragma target 4.5 #define PASS_SC + #define CUTOUT #include "./cginc/SunaoShader_SC.cginc" diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index 99ce1a2..96725ef 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -13,6 +13,8 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { Properties { + [SToggle] + _OptimizerEnable ("Enable Optimizer" , int) = 0 [NoScaleOffset] _MainTex ("Main Texture" , 2D) = "white" {} @@ -44,6 +46,11 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Tangent Map , 0 , Rotation Map , 1)] + _TanMode ("Tangent Map Mode" , int) = 0 + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 @@ -94,6 +101,97 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _MirrorControlEnable ("Enable Mirror Control" , int) = 0 + _RealCopyAlpha ("Real Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + _MirrorCopyAlpha ("Mirror Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + + + [SToggle] + _HSVShiftEnable ("Enable HSV Shift" , int) = 0 + _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} + _HSVShiftHue ("Hue Shift" , Range( 0.0, 1.0)) = 0.0 + _HSVShiftSat ("Sat Shift" , Range( 0.0, 3.0)) = 1.0 + _HSVShiftVal ("Val Shift" , Range( 0.0, 3.0)) = 1.0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftDecalMode ("Decal Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftSpecularMode ("Specular Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + + + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleEmissionMap ("Stipple Emission Mask" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 + [Enum(Uniform , 0 , Wave , 1)] + _StippleMode ("Stipple Mode" , int) = 1 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 + [SToggle] + _StippleDisableOutline ("Stipple Disable Outline", int) = 1 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + + + _VertexColorThreshold ("Vertex Alpha 1", Range(0.0, 1.0)) = 0.9999 + _VertexColor01 ("Vertex Color 1" , Color) = (0,0,0) + _VertexAlpha01 ("Vertex Alpha 1" , Range(0.0, 1.0)) = 1.0 + _VertexColor02 ("Vertex Color 2" , Color) = (0,0,0) + _VertexAlpha02 ("Vertex Alpha 2" , Range(0.0, 1.0)) = 1.0 + _VertexColor03 ("Vertex Color 3" , Color) = (0,0,0) + _VertexAlpha03 ("Vertex Alpha 3" , Range(0.0, 1.0)) = 1.0 + _VertexColor04 ("Vertex Color 4" , Color) = (0,0,0) + _VertexAlpha04 ("Vertex Alpha 4" , Range(0.0, 1.0)) = 1.0 + _VertexColor05 ("Vertex Color 5" , Color) = (0,0,0) + _VertexAlpha05 ("Vertex Alpha 5" , Range(0.0, 1.0)) = 1.0 + _VertexColor06 ("Vertex Color 6" , Color) = (0,0,0) + _VertexAlpha06 ("Vertex Alpha 6" , Range(0.0, 1.0)) = 1.0 + _VertexColor07 ("Vertex Color 7" , Color) = (0,0,0) + _VertexAlpha07 ("Vertex Alpha 7" , Range(0.0, 1.0)) = 1.0 + _VertexColor08 ("Vertex Color 8" , Color) = (0,0,0) + _VertexAlpha08 ("Vertex Alpha 8" , Range(0.0, 1.0)) = 1.0 + _VertexColor09 ("Vertex Color 9" , Color) = (0,0,0) + _VertexAlpha09 ("Vertex Alpha 9" , Range(0.0, 1.0)) = 1.0 + _VertexColor10 ("Vertex Color 10" , Color) = (0,0,0) + _VertexAlpha10 ("Vertex Alpha 10" , Range(0.0, 1.0)) = 1.0 + _VertexColor11 ("Vertex Color 11" , Color) = (0,0,0) + _VertexAlpha11 ("Vertex Alpha 11" , Range(0.0, 1.0)) = 1.0 + _VertexColor12 ("Vertex Color 12" , Color) = (0,0,0) + _VertexAlpha12 ("Vertex Alpha 12" , Range(0.0, 1.0)) = 1.0 + _VertexColor13 ("Vertex Color 13" , Color) = (0,0,0) + _VertexAlpha13 ("Vertex Alpha 13" , Range(0.0, 1.0)) = 1.0 + _VertexColor14 ("Vertex Color 14" , Color) = (0,0,0) + _VertexAlpha14 ("Vertex Alpha 14" , Range(0.0, 1.0)) = 1.0 + _VertexColor15 ("Vertex Color 15" , Color) = (0,0,0) + _VertexAlpha15 ("Vertex Alpha 15" , Range(0.0, 1.0)) = 1.0 + _VertexColor16 ("Vertex Color 16" , Color) = (0,0,0) + _VertexAlpha16 ("Vertex Alpha 16" , Range(0.0, 1.0)) = 1.0 + + [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 [NoScaleOffset] @@ -167,6 +265,21 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + [Enum(GGX, 0 , View Offset , 1)] + _ToonSpecMode ("Specular Mode" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecMetallic ("Specular Metallic" , Range( 0.0, 1.0)) = 0.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 0.1 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.02 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] @@ -262,6 +375,7 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [HideInInspector] _ParallaxFO ("Parallax FO" , int) = 0 [HideInInspector] _ReflectionFO ("Reflection FO" , int) = 0 [HideInInspector] _RimLightingFO ("Rim Lighting FO" , int) = 0 + [HideInInspector] _VertexAlphaFO ("Vertex Alpha FO" , int) = 0 [HideInInspector] _OtherSettingsFO ("Other Settings FO" , int) = 0 [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 5 @@ -416,6 +530,7 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { #pragma target 4.5 #define PASS_SC + #define CUTOUT #include "./cginc/SunaoShader_SC.cginc" diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 96db729..367cdef 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -13,6 +13,8 @@ Shader "Sunao Shader/Opaque" { Properties { + [SToggle] + _OptimizerEnable ("Enable Optimizer" , int) = 0 [NoScaleOffset] _MainTex ("Main Texture" , 2D) = "white" {} @@ -44,6 +46,11 @@ Shader "Sunao Shader/Opaque" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Tangent Map , 0 , Rotation Map , 1)] + _TanMode ("Tangent Map Mode" , int) = 0 + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 @@ -94,6 +101,97 @@ Shader "Sunao Shader/Opaque" { _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _MirrorControlEnable ("Enable Mirror Control" , int) = 0 + _RealCopyAlpha ("Real Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + _MirrorCopyAlpha ("Mirror Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + + + [SToggle] + _HSVShiftEnable ("Enable HSV Shift" , int) = 0 + _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} + _HSVShiftHue ("Hue Shift" , Range( 0.0, 1.0)) = 0.0 + _HSVShiftSat ("Sat Shift" , Range( 0.0, 3.0)) = 1.0 + _HSVShiftVal ("Val Shift" , Range( 0.0, 3.0)) = 1.0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftDecalMode ("Decal Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftSpecularMode ("Specular Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + + + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleEmissionMap ("Stipple Emission Mask" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 + [Enum(Uniform , 0 , Wave , 1)] + _StippleMode ("Stipple Mode" , int) = 1 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 + [SToggle] + _StippleDisableOutline ("Stipple Disable Outline", int) = 1 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + + + _VertexColorThreshold ("Vertex Alpha 1", Range(0.0, 1.0)) = 0.9999 + _VertexColor01 ("Vertex Color 1" , Color) = (0,0,0) + _VertexAlpha01 ("Vertex Alpha 1" , Range(0.0, 1.0)) = 1.0 + _VertexColor02 ("Vertex Color 2" , Color) = (0,0,0) + _VertexAlpha02 ("Vertex Alpha 2" , Range(0.0, 1.0)) = 1.0 + _VertexColor03 ("Vertex Color 3" , Color) = (0,0,0) + _VertexAlpha03 ("Vertex Alpha 3" , Range(0.0, 1.0)) = 1.0 + _VertexColor04 ("Vertex Color 4" , Color) = (0,0,0) + _VertexAlpha04 ("Vertex Alpha 4" , Range(0.0, 1.0)) = 1.0 + _VertexColor05 ("Vertex Color 5" , Color) = (0,0,0) + _VertexAlpha05 ("Vertex Alpha 5" , Range(0.0, 1.0)) = 1.0 + _VertexColor06 ("Vertex Color 6" , Color) = (0,0,0) + _VertexAlpha06 ("Vertex Alpha 6" , Range(0.0, 1.0)) = 1.0 + _VertexColor07 ("Vertex Color 7" , Color) = (0,0,0) + _VertexAlpha07 ("Vertex Alpha 7" , Range(0.0, 1.0)) = 1.0 + _VertexColor08 ("Vertex Color 8" , Color) = (0,0,0) + _VertexAlpha08 ("Vertex Alpha 8" , Range(0.0, 1.0)) = 1.0 + _VertexColor09 ("Vertex Color 9" , Color) = (0,0,0) + _VertexAlpha09 ("Vertex Alpha 9" , Range(0.0, 1.0)) = 1.0 + _VertexColor10 ("Vertex Color 10" , Color) = (0,0,0) + _VertexAlpha10 ("Vertex Alpha 10" , Range(0.0, 1.0)) = 1.0 + _VertexColor11 ("Vertex Color 11" , Color) = (0,0,0) + _VertexAlpha11 ("Vertex Alpha 11" , Range(0.0, 1.0)) = 1.0 + _VertexColor12 ("Vertex Color 12" , Color) = (0,0,0) + _VertexAlpha12 ("Vertex Alpha 12" , Range(0.0, 1.0)) = 1.0 + _VertexColor13 ("Vertex Color 13" , Color) = (0,0,0) + _VertexAlpha13 ("Vertex Alpha 13" , Range(0.0, 1.0)) = 1.0 + _VertexColor14 ("Vertex Color 14" , Color) = (0,0,0) + _VertexAlpha14 ("Vertex Alpha 14" , Range(0.0, 1.0)) = 1.0 + _VertexColor15 ("Vertex Color 15" , Color) = (0,0,0) + _VertexAlpha15 ("Vertex Alpha 15" , Range(0.0, 1.0)) = 1.0 + _VertexColor16 ("Vertex Color 16" , Color) = (0,0,0) + _VertexAlpha16 ("Vertex Alpha 16" , Range(0.0, 1.0)) = 1.0 + + [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 [NoScaleOffset] @@ -167,6 +265,21 @@ Shader "Sunao Shader/Opaque" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + [Enum(GGX, 0 , View Offset , 1)] + _ToonSpecMode ("Specular Mode" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecMetallic ("Specular Metallic" , Range( 0.0, 1.0)) = 0.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 0.1 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.02 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] @@ -262,6 +375,7 @@ Shader "Sunao Shader/Opaque" { [HideInInspector] _ParallaxFO ("Parallax FO" , int) = 0 [HideInInspector] _ReflectionFO ("Reflection FO" , int) = 0 [HideInInspector] _RimLightingFO ("Rim Lighting FO" , int) = 0 + [HideInInspector] _VertexAlphaFO ("Vertex Alpha FO" , int) = 0 [HideInInspector] _OtherSettingsFO ("Other Settings FO" , int) = 0 [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index dd9ce7e..7297a13 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -13,6 +13,8 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { Properties { + [SToggle] + _OptimizerEnable ("Enable Optimizer" , int) = 0 [NoScaleOffset] _MainTex ("Main Texture" , 2D) = "white" {} @@ -44,6 +46,11 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Tangent Map , 0 , Rotation Map , 1)] + _TanMode ("Tangent Map Mode" , int) = 0 + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 @@ -94,6 +101,97 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _MirrorControlEnable ("Enable Mirror Control" , int) = 0 + _RealCopyAlpha ("Real Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + _MirrorCopyAlpha ("Mirror Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + + + [SToggle] + _HSVShiftEnable ("Enable HSV Shift" , int) = 0 + _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} + _HSVShiftHue ("Hue Shift" , Range( 0.0, 1.0)) = 0.0 + _HSVShiftSat ("Sat Shift" , Range( 0.0, 3.0)) = 1.0 + _HSVShiftVal ("Val Shift" , Range( 0.0, 3.0)) = 1.0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftDecalMode ("Decal Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftSpecularMode ("Specular Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + + + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleEmissionMap ("Stipple Emission Mask" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 + [Enum(Uniform , 0 , Wave , 1)] + _StippleMode ("Stipple Mode" , int) = 1 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 + [SToggle] + _StippleDisableOutline ("Stipple Disable Outline", int) = 1 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + + + _VertexColorThreshold ("Vertex Alpha 1", Range(0.0, 1.0)) = 0.9999 + _VertexColor01 ("Vertex Color 1" , Color) = (0,0,0) + _VertexAlpha01 ("Vertex Alpha 1" , Range(0.0, 1.0)) = 1.0 + _VertexColor02 ("Vertex Color 2" , Color) = (0,0,0) + _VertexAlpha02 ("Vertex Alpha 2" , Range(0.0, 1.0)) = 1.0 + _VertexColor03 ("Vertex Color 3" , Color) = (0,0,0) + _VertexAlpha03 ("Vertex Alpha 3" , Range(0.0, 1.0)) = 1.0 + _VertexColor04 ("Vertex Color 4" , Color) = (0,0,0) + _VertexAlpha04 ("Vertex Alpha 4" , Range(0.0, 1.0)) = 1.0 + _VertexColor05 ("Vertex Color 5" , Color) = (0,0,0) + _VertexAlpha05 ("Vertex Alpha 5" , Range(0.0, 1.0)) = 1.0 + _VertexColor06 ("Vertex Color 6" , Color) = (0,0,0) + _VertexAlpha06 ("Vertex Alpha 6" , Range(0.0, 1.0)) = 1.0 + _VertexColor07 ("Vertex Color 7" , Color) = (0,0,0) + _VertexAlpha07 ("Vertex Alpha 7" , Range(0.0, 1.0)) = 1.0 + _VertexColor08 ("Vertex Color 8" , Color) = (0,0,0) + _VertexAlpha08 ("Vertex Alpha 8" , Range(0.0, 1.0)) = 1.0 + _VertexColor09 ("Vertex Color 9" , Color) = (0,0,0) + _VertexAlpha09 ("Vertex Alpha 9" , Range(0.0, 1.0)) = 1.0 + _VertexColor10 ("Vertex Color 10" , Color) = (0,0,0) + _VertexAlpha10 ("Vertex Alpha 10" , Range(0.0, 1.0)) = 1.0 + _VertexColor11 ("Vertex Color 11" , Color) = (0,0,0) + _VertexAlpha11 ("Vertex Alpha 11" , Range(0.0, 1.0)) = 1.0 + _VertexColor12 ("Vertex Color 12" , Color) = (0,0,0) + _VertexAlpha12 ("Vertex Alpha 12" , Range(0.0, 1.0)) = 1.0 + _VertexColor13 ("Vertex Color 13" , Color) = (0,0,0) + _VertexAlpha13 ("Vertex Alpha 13" , Range(0.0, 1.0)) = 1.0 + _VertexColor14 ("Vertex Color 14" , Color) = (0,0,0) + _VertexAlpha14 ("Vertex Alpha 14" , Range(0.0, 1.0)) = 1.0 + _VertexColor15 ("Vertex Color 15" , Color) = (0,0,0) + _VertexAlpha15 ("Vertex Alpha 15" , Range(0.0, 1.0)) = 1.0 + _VertexColor16 ("Vertex Color 16" , Color) = (0,0,0) + _VertexAlpha16 ("Vertex Alpha 16" , Range(0.0, 1.0)) = 1.0 + + [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 [NoScaleOffset] @@ -167,6 +265,21 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + [Enum(GGX, 0 , View Offset , 1)] + _ToonSpecMode ("Specular Mode" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecMetallic ("Specular Metallic" , Range( 0.0, 1.0)) = 0.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 0.1 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.02 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] @@ -262,6 +375,7 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [HideInInspector] _ParallaxFO ("Parallax FO" , int) = 0 [HideInInspector] _ReflectionFO ("Reflection FO" , int) = 0 [HideInInspector] _RimLightingFO ("Rim Lighting FO" , int) = 0 + [HideInInspector] _VertexAlphaFO ("Vertex Alpha FO" , int) = 0 [HideInInspector] _OtherSettingsFO ("Other Settings FO" , int) = 0 [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 3 diff --git a/Shader/Sunao_Shader_Stencil_R.shader b/Shader/Sunao_Shader_Stencil_R.shader index 8ab0a98..a1720a4 100644 --- a/Shader/Sunao_Shader_Stencil_R.shader +++ b/Shader/Sunao_Shader_Stencil_R.shader @@ -13,6 +13,8 @@ Shader "Sunao Shader/[Stencil]/Read" { Properties { + [SToggle] + _OptimizerEnable ("Enable Optimizer" , int) = 0 [NoScaleOffset] _MainTex ("Main Texture" , 2D) = "white" {} @@ -44,6 +46,11 @@ Shader "Sunao Shader/[Stencil]/Read" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Tangent Map , 0 , Rotation Map , 1)] + _TanMode ("Tangent Map Mode" , int) = 0 + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 @@ -94,6 +101,97 @@ Shader "Sunao Shader/[Stencil]/Read" { _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _MirrorControlEnable ("Enable Mirror Control" , int) = 0 + _RealCopyAlpha ("Real Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + _MirrorCopyAlpha ("Mirror Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + + + [SToggle] + _HSVShiftEnable ("Enable HSV Shift" , int) = 0 + _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} + _HSVShiftHue ("Hue Shift" , Range( 0.0, 1.0)) = 0.0 + _HSVShiftSat ("Sat Shift" , Range( 0.0, 3.0)) = 1.0 + _HSVShiftVal ("Val Shift" , Range( 0.0, 3.0)) = 1.0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftDecalMode ("Decal Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftSpecularMode ("Specular Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + + + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleEmissionMap ("Stipple Emission Mask" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 + [Enum(Uniform , 0 , Wave , 1)] + _StippleMode ("Stipple Mode" , int) = 1 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 + [SToggle] + _StippleDisableOutline ("Stipple Disable Outline", int) = 1 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + + + _VertexColorThreshold ("Vertex Alpha 1", Range(0.0, 1.0)) = 0.9999 + _VertexColor01 ("Vertex Color 1" , Color) = (0,0,0) + _VertexAlpha01 ("Vertex Alpha 1" , Range(0.0, 1.0)) = 1.0 + _VertexColor02 ("Vertex Color 2" , Color) = (0,0,0) + _VertexAlpha02 ("Vertex Alpha 2" , Range(0.0, 1.0)) = 1.0 + _VertexColor03 ("Vertex Color 3" , Color) = (0,0,0) + _VertexAlpha03 ("Vertex Alpha 3" , Range(0.0, 1.0)) = 1.0 + _VertexColor04 ("Vertex Color 4" , Color) = (0,0,0) + _VertexAlpha04 ("Vertex Alpha 4" , Range(0.0, 1.0)) = 1.0 + _VertexColor05 ("Vertex Color 5" , Color) = (0,0,0) + _VertexAlpha05 ("Vertex Alpha 5" , Range(0.0, 1.0)) = 1.0 + _VertexColor06 ("Vertex Color 6" , Color) = (0,0,0) + _VertexAlpha06 ("Vertex Alpha 6" , Range(0.0, 1.0)) = 1.0 + _VertexColor07 ("Vertex Color 7" , Color) = (0,0,0) + _VertexAlpha07 ("Vertex Alpha 7" , Range(0.0, 1.0)) = 1.0 + _VertexColor08 ("Vertex Color 8" , Color) = (0,0,0) + _VertexAlpha08 ("Vertex Alpha 8" , Range(0.0, 1.0)) = 1.0 + _VertexColor09 ("Vertex Color 9" , Color) = (0,0,0) + _VertexAlpha09 ("Vertex Alpha 9" , Range(0.0, 1.0)) = 1.0 + _VertexColor10 ("Vertex Color 10" , Color) = (0,0,0) + _VertexAlpha10 ("Vertex Alpha 10" , Range(0.0, 1.0)) = 1.0 + _VertexColor11 ("Vertex Color 11" , Color) = (0,0,0) + _VertexAlpha11 ("Vertex Alpha 11" , Range(0.0, 1.0)) = 1.0 + _VertexColor12 ("Vertex Color 12" , Color) = (0,0,0) + _VertexAlpha12 ("Vertex Alpha 12" , Range(0.0, 1.0)) = 1.0 + _VertexColor13 ("Vertex Color 13" , Color) = (0,0,0) + _VertexAlpha13 ("Vertex Alpha 13" , Range(0.0, 1.0)) = 1.0 + _VertexColor14 ("Vertex Color 14" , Color) = (0,0,0) + _VertexAlpha14 ("Vertex Alpha 14" , Range(0.0, 1.0)) = 1.0 + _VertexColor15 ("Vertex Color 15" , Color) = (0,0,0) + _VertexAlpha15 ("Vertex Alpha 15" , Range(0.0, 1.0)) = 1.0 + _VertexColor16 ("Vertex Color 16" , Color) = (0,0,0) + _VertexAlpha16 ("Vertex Alpha 16" , Range(0.0, 1.0)) = 1.0 + + [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 [NoScaleOffset] @@ -167,6 +265,21 @@ Shader "Sunao Shader/[Stencil]/Read" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + [Enum(GGX, 0 , View Offset , 1)] + _ToonSpecMode ("Specular Mode" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecMetallic ("Specular Metallic" , Range( 0.0, 1.0)) = 0.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 0.1 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.02 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] diff --git a/Shader/Sunao_Shader_Stencil_W.shader b/Shader/Sunao_Shader_Stencil_W.shader index 86687cc..61d5e81 100644 --- a/Shader/Sunao_Shader_Stencil_W.shader +++ b/Shader/Sunao_Shader_Stencil_W.shader @@ -13,6 +13,8 @@ Shader "Sunao Shader/[Stencil]/Write" { Properties { + [SToggle] + _OptimizerEnable ("Enable Optimizer" , int) = 0 [NoScaleOffset] _MainTex ("Main Texture" , 2D) = "white" {} @@ -44,6 +46,11 @@ Shader "Sunao Shader/[Stencil]/Write" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Tangent Map , 0 , Rotation Map , 1)] + _TanMode ("Tangent Map Mode" , int) = 0 + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 @@ -94,6 +101,97 @@ Shader "Sunao Shader/[Stencil]/Write" { _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _MirrorControlEnable ("Enable Mirror Control" , int) = 0 + _RealCopyAlpha ("Real Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + _MirrorCopyAlpha ("Mirror Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + + + [SToggle] + _HSVShiftEnable ("Enable HSV Shift" , int) = 0 + _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} + _HSVShiftHue ("Hue Shift" , Range( 0.0, 1.0)) = 0.0 + _HSVShiftSat ("Sat Shift" , Range( 0.0, 3.0)) = 1.0 + _HSVShiftVal ("Val Shift" , Range( 0.0, 3.0)) = 1.0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftDecalMode ("Decal Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftSpecularMode ("Specular Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + + + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleEmissionMap ("Stipple Emission Mask" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 + [Enum(Uniform , 0 , Wave , 1)] + _StippleMode ("Stipple Mode" , int) = 1 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 + [SToggle] + _StippleDisableOutline ("Stipple Disable Outline", int) = 1 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + + + _VertexColorThreshold ("Vertex Alpha 1", Range(0.0, 1.0)) = 0.9999 + _VertexColor01 ("Vertex Color 1" , Color) = (0,0,0) + _VertexAlpha01 ("Vertex Alpha 1" , Range(0.0, 1.0)) = 1.0 + _VertexColor02 ("Vertex Color 2" , Color) = (0,0,0) + _VertexAlpha02 ("Vertex Alpha 2" , Range(0.0, 1.0)) = 1.0 + _VertexColor03 ("Vertex Color 3" , Color) = (0,0,0) + _VertexAlpha03 ("Vertex Alpha 3" , Range(0.0, 1.0)) = 1.0 + _VertexColor04 ("Vertex Color 4" , Color) = (0,0,0) + _VertexAlpha04 ("Vertex Alpha 4" , Range(0.0, 1.0)) = 1.0 + _VertexColor05 ("Vertex Color 5" , Color) = (0,0,0) + _VertexAlpha05 ("Vertex Alpha 5" , Range(0.0, 1.0)) = 1.0 + _VertexColor06 ("Vertex Color 6" , Color) = (0,0,0) + _VertexAlpha06 ("Vertex Alpha 6" , Range(0.0, 1.0)) = 1.0 + _VertexColor07 ("Vertex Color 7" , Color) = (0,0,0) + _VertexAlpha07 ("Vertex Alpha 7" , Range(0.0, 1.0)) = 1.0 + _VertexColor08 ("Vertex Color 8" , Color) = (0,0,0) + _VertexAlpha08 ("Vertex Alpha 8" , Range(0.0, 1.0)) = 1.0 + _VertexColor09 ("Vertex Color 9" , Color) = (0,0,0) + _VertexAlpha09 ("Vertex Alpha 9" , Range(0.0, 1.0)) = 1.0 + _VertexColor10 ("Vertex Color 10" , Color) = (0,0,0) + _VertexAlpha10 ("Vertex Alpha 10" , Range(0.0, 1.0)) = 1.0 + _VertexColor11 ("Vertex Color 11" , Color) = (0,0,0) + _VertexAlpha11 ("Vertex Alpha 11" , Range(0.0, 1.0)) = 1.0 + _VertexColor12 ("Vertex Color 12" , Color) = (0,0,0) + _VertexAlpha12 ("Vertex Alpha 12" , Range(0.0, 1.0)) = 1.0 + _VertexColor13 ("Vertex Color 13" , Color) = (0,0,0) + _VertexAlpha13 ("Vertex Alpha 13" , Range(0.0, 1.0)) = 1.0 + _VertexColor14 ("Vertex Color 14" , Color) = (0,0,0) + _VertexAlpha14 ("Vertex Alpha 14" , Range(0.0, 1.0)) = 1.0 + _VertexColor15 ("Vertex Color 15" , Color) = (0,0,0) + _VertexAlpha15 ("Vertex Alpha 15" , Range(0.0, 1.0)) = 1.0 + _VertexColor16 ("Vertex Color 16" , Color) = (0,0,0) + _VertexAlpha16 ("Vertex Alpha 16" , Range(0.0, 1.0)) = 1.0 + + [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 [NoScaleOffset] @@ -167,6 +265,21 @@ Shader "Sunao Shader/[Stencil]/Write" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + [Enum(GGX, 0 , View Offset , 1)] + _ToonSpecMode ("Specular Mode" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecMetallic ("Specular Metallic" , Range( 0.0, 1.0)) = 0.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 0.1 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.02 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] diff --git a/Shader/Sunao_Shader_TransClipping.shader b/Shader/Sunao_Shader_TransClipping.shader new file mode 100644 index 0000000..1c84d22 --- /dev/null +++ b/Shader/Sunao_Shader_TransClipping.shader @@ -0,0 +1,529 @@ +//-------------------------------------------------------------- +// Sunao Shader Ver 1.4.2 +// +// Copyright (c) 2021 揚茄子研究所 +// Twitter : @SUNAO_VRC +// VRChat : SUNAO_ +// +// This software is released under the MIT License. +// see LICENSE or http://suna.ooo/agenasulab/ss/LICENSE +//-------------------------------------------------------------- + +Shader "Sunao Shader/TransClipping" { + + + Properties { + [SToggle] + _OptimizerEnable ("Enable Optimizer" , int) = 0 + + [NoScaleOffset] + _MainTex ("Main Texture" , 2D) = "white" {} + _Color ("Color" , Color) = (1,1,1,1) + _Alpha ("Alpha" , Range( 0.0, 2.0)) = 1.0 + _Cutout ("Cutout" , Range( 0.0, 1.0)) = 0.5 + + [Normal] + _BumpMap ("Normal Map" , 2D) = "bump" {} + [NoScaleOffset] + _OcclusionMap ("Occlusion" , 2D) = "white" {} + [NoScaleOffset] + _AlphaMask ("Alpha Mask" , 2D) = "white" {} + + _Bright ("Brightness" , Range( 0.0, 1.0)) = 1.0 + _BumpScale ("Normal Map Scale" , Range(-2.0, 2.0)) = 1.0 + _OcclusionStrength ("Occlusion Strength" , Range( 0.0, 1.0)) = 1.0 + [Enum(SH Light, 0 , Main Texture , 1 , Final Color , 2)] + _OcclusionMode ("Occlusion Mode " , int) = 0 + _AlphaMaskStrength ("Alpha Mask Strength" , Range( 0.0, 1.0)) = 1.0 + [SToggle] + _VertexColor ("Use Vertex Color" , int) = 0 + + _UVScrollX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _UVScrollY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _UVAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _UVAnimX ("Animation X Size" , int) = 1 + _UVAnimY ("Animation Y Size" , int) = 1 + [SToggle] + _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Tangent Map , 0 , Rotation Map , 1)] + _TanMode ("Tangent Map Mode" , int) = 0 + _TanMap ("Tangent Map" , 2D) = "black" {} + + [SToggle] + _DecalEnable ("Enable Decal" , int) = 0 + _DecalTex ("Decal Texture" , 2D) = "white" {} + _DecalColor ("Decal Color" , Color) = (1,1,1,1) + _DecalPosX ("Position X" , Range( 0.0, 1.0)) = 0.5 + _DecalPosY ("Position Y" , Range( 0.0, 1.0)) = 0.5 + _DecalSizeX ("Size X" , Range( 0.0, 1.0)) = 0.5 + _DecalSizeY ("Size Y" , Range( 0.0, 1.0)) = 0.5 + _DecalRotation ("Rotation" , Range(-180.0, 180.0)) = 0.0 + + [Enum(Override , 0 , Add , 1 , Multiply , 2 , Multiply(Mono) , 3)] + _DecalMode ("Decal Mode" , int) = 0 + [Enum(Normal , 0 , Fixed , 1 , Mirror1 , 2 , Mirror2 , 3 , Copy(Mirror) , 4 , Copy(Fixed) , 5)] + _DecalMirror ("Decal Mirror Mode" , int) = 0 + + _DecalScrollX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _DecalScrollY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _DecalAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _DecalAnimX ("Animation X Size" , int) = 1 + _DecalAnimY ("Animation Y Size" , int) = 1 + + + _StencilNumb ("Stencil Number" , int) = 4 + [Enum(NotEqual , 6 , Equal , 3 , Less , 2 , LessEqual , 4 , Greater , 5 , GreaterEqual , 7)] + _StencilCompMode ("Stencil Compare Mode" , int) = 6 + + + [NoScaleOffset] + _ShadeMask ("Shade Mask" , 2D) = "white" {} + _Shade ("Shade Strength" , Range( 0.0, 1.0)) = 0.3 + _ShadeWidth ("Shade Width" , Range( 0.0, 2.0)) = 0.75 + _ShadeGradient ("Shade Gradient" , Range( 0.0, 2.0)) = 0.75 + _ShadeColor ("Shade Color" , Range( 0.0, 1.0)) = 0.5 + _CustomShadeColor ("Custom Shade Color" , Color) = (0,0,0,0) + + [SToggle] + _ToonEnable ("Enable Toon Shading" , int) = 0 + [IntRange] + _Toon ("Toon" , Range( 0.0, 9.0)) = 9.0 + _ToonSharpness ("Toon Sharpness" , Range( 0.0, 1.0)) = 1.0 + + [NoScaleOffset] + _LightMask ("Lighting Boost Mask" , 2D) = "black" {} + _LightBoost ("Lighting Boost" , Range( 1.0, 5.0)) = 3.0 + _Unlit ("Unlighting" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _MonochromeLit ("Monochrome Lighting" , int) = 0 + + + [SToggle] + _MirrorControlEnable ("Enable Mirror Control" , int) = 0 + _RealCopyAlpha ("Real Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + _MirrorCopyAlpha ("Mirror Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + + + [SToggle] + _HSVShiftEnable ("Enable HSV Shift" , int) = 0 + _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} + _HSVShiftHue ("Hue Shift" , Range( 0.0, 1.0)) = 0.0 + _HSVShiftSat ("Sat Shift" , Range( 0.0, 3.0)) = 1.0 + _HSVShiftVal ("Val Shift" , Range( 0.0, 3.0)) = 1.0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftDecalMode ("Decal Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftSpecularMode ("Specular Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + + + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleEmissionMap ("Stipple Emission Mask" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 + [Enum(Uniform , 0 , Wave , 1)] + _StippleMode ("Stipple Mode" , int) = 1 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 + [SToggle] + _StippleDisableOutline ("Stipple Disable Outline", int) = 1 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + + + _VertexColorThreshold ("Vertex Alpha 1", Range(0.0, 1.0)) = 0.9999 + _VertexColor01 ("Vertex Color 1" , Color) = (0,0,0) + _VertexAlpha01 ("Vertex Alpha 1" , Range(0.0, 1.0)) = 1.0 + _VertexColor02 ("Vertex Color 2" , Color) = (0,0,0) + _VertexAlpha02 ("Vertex Alpha 2" , Range(0.0, 1.0)) = 1.0 + _VertexColor03 ("Vertex Color 3" , Color) = (0,0,0) + _VertexAlpha03 ("Vertex Alpha 3" , Range(0.0, 1.0)) = 1.0 + _VertexColor04 ("Vertex Color 4" , Color) = (0,0,0) + _VertexAlpha04 ("Vertex Alpha 4" , Range(0.0, 1.0)) = 1.0 + _VertexColor05 ("Vertex Color 5" , Color) = (0,0,0) + _VertexAlpha05 ("Vertex Alpha 5" , Range(0.0, 1.0)) = 1.0 + _VertexColor06 ("Vertex Color 6" , Color) = (0,0,0) + _VertexAlpha06 ("Vertex Alpha 6" , Range(0.0, 1.0)) = 1.0 + _VertexColor07 ("Vertex Color 7" , Color) = (0,0,0) + _VertexAlpha07 ("Vertex Alpha 7" , Range(0.0, 1.0)) = 1.0 + _VertexColor08 ("Vertex Color 8" , Color) = (0,0,0) + _VertexAlpha08 ("Vertex Alpha 8" , Range(0.0, 1.0)) = 1.0 + _VertexColor09 ("Vertex Color 9" , Color) = (0,0,0) + _VertexAlpha09 ("Vertex Alpha 9" , Range(0.0, 1.0)) = 1.0 + _VertexColor10 ("Vertex Color 10" , Color) = (0,0,0) + _VertexAlpha10 ("Vertex Alpha 10" , Range(0.0, 1.0)) = 1.0 + _VertexColor11 ("Vertex Color 11" , Color) = (0,0,0) + _VertexAlpha11 ("Vertex Alpha 11" , Range(0.0, 1.0)) = 1.0 + _VertexColor12 ("Vertex Color 12" , Color) = (0,0,0) + _VertexAlpha12 ("Vertex Alpha 12" , Range(0.0, 1.0)) = 1.0 + _VertexColor13 ("Vertex Color 13" , Color) = (0,0,0) + _VertexAlpha13 ("Vertex Alpha 13" , Range(0.0, 1.0)) = 1.0 + _VertexColor14 ("Vertex Color 14" , Color) = (0,0,0) + _VertexAlpha14 ("Vertex Alpha 14" , Range(0.0, 1.0)) = 1.0 + _VertexColor15 ("Vertex Color 15" , Color) = (0,0,0) + _VertexAlpha15 ("Vertex Alpha 15" , Range(0.0, 1.0)) = 1.0 + _VertexColor16 ("Vertex Color 16" , Color) = (0,0,0) + _VertexAlpha16 ("Vertex Alpha 16" , Range(0.0, 1.0)) = 1.0 + + + [SToggle] + _OutLineEnable ("Enable Outline" , int) = 0 + [NoScaleOffset] + _OutLineMask ("Outline Mask" , 2D) = "white" {} + _OutLineColor ("Outline Color" , Color) = (0,0,0,1) + _OutLineSize ("Outline Scale" , Range( 0.0, 1.0)) = 0.1 + [SToggle] + _OutLineLighthing ("Use Light Color" , int) = 1 + [SToggle] + _OutLineTexColor ("Use Main Texture" , int) = 0 + [NoScaleOffset] + _OutLineTexture ("Outline Texture" , 2D) = "white" {} + [SToggle] + _OutLineFixScale ("x10 Scale" , int) = 0 + + + [SToggle] + _EmissionEnable ("Enable Emission" , int) = 0 + _EmissionMap ("Emission Mask" , 2D) = "white" {} + [HDR] + _EmissionColor ("Emission Color" , Color) = (1,1,1) + _Emission ("Emission Intensity" , Range( 0.0, 2.0)) = 1.0 + + _EmissionMap2 ("2nd Emission Mask" , 2D) = "white" {} + [Enum(Add , 0 ,Multiply , 1 , Minus , 2)] + _EmissionMode ("Emission Mode" , int) = 0 + _EmissionBlink ("Blink" , Range( 0.0, 1.0)) = 0.0 + _EmissionFrequency ("Frequency" , Range( 0.0, 5.0)) = 1.0 + [Enum(Sine , 0 , Saw , 1 , SawR , 2 , Square , 3)] + _EmissionWaveform ("Waveform" , int) = 0 + _EmissionScrX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _EmissionScrY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _EmissionAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _EmissionAnimX ("Animation X Size" , int) = 1 + _EmissionAnimY ("Animation Y Size" , int) = 1 + + [SToggle] + _EmissionLighting ("Use Lighting" , int) = 0 + [SToggle] + _IgnoreTexAlphaE ("Ignore Texture Alpha" , int) = 0 + _EmissionInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + + + [SToggle] + _ParallaxEnable ("Enable Parallax Emission" , int) = 0 + _ParallaxMap ("Parallax Emission Texture" , 2D) = "white" {} + [HDR] + _ParallaxColor ("Emission Color" , Color) = (1,1,1) + _ParallaxEmission ("Emission Intensity" , Range( 0.0, 2.0)) = 1.0 + _ParallaxDepth ("Parallax Depth" , Range( 0.0, 1.0)) = 1.0 + + _ParallaxDepthMap ("Parallax Depth Mask" , 2D) = "black" {} + _ParallaxMap2 ("2nd Parallax Emission Mask", 2D) = "white" {} + [Enum(Add , 0 ,Multiply , 1 , Minus , 2)] + _ParallaxMode ("Emission Mode" , int) = 0 + _ParallaxBlink ("Blink" , Range( 0.0, 1.0)) = 0.0 + _ParallaxFrequency ("Frequency" , Range( 0.0, 5.0)) = 1.0 + [Enum(Sine , 0 , Saw , 1 , SawR , 2 , Square , 3)] + _ParallaxWaveform ("Waveform" , int) = 0 + _ParallaxPhaseOfs ("Phase Offset" , Range( 0.0, 1.0)) = 0.0 + _ParallaxScrX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _ParallaxScrY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _ParallaxAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _ParallaxAnimX ("Animation X Size" , int) = 1 + _ParallaxAnimY ("Animation Y Size" , int) = 1 + + [SToggle] + _ParallaxLighting ("Use Lighting" , int) = 0 + [SToggle] + _IgnoreTexAlphaPE ("Ignore Texture Alpha" , int) = 0 + _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + + + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + [Enum(GGX, 0 , View Offset , 1)] + _ToonSpecMode ("Specular Mode" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecMetallic ("Specular Metallic" , Range( 0.0, 1.0)) = 0.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 0.1 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.02 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + + [SToggle] + _ReflectionEnable ("Enable Reflection" , int) = 0 + [NoScaleOffset] + _MetallicGlossMap ("Reflection Mask" , 2D) = "white" {} + [NoScaleOffset] + _GlossColor ("Reflection Color" , Color) = (1,1,1,1) + _Specular ("Specular Intensity" , Range( 0.0, 2.0)) = 1.0 + _Metallic ("Metallic" , Range( 0.0, 1.0)) = 0.5 + _GlossMapScale ("Smoothness" , Range( 0.0, 1.0)) = 0.75 + [NoScaleOffset] + _MatCap ("MatCap Texture" , 2D) = "black" {} + _MatCapColor ("MatCap Color" , Color) = (1,1,1,1) + [SToggle] + _MatCapMaskEnable ("Use Reflection Mask" , int) = 1 + [NoScaleOffset] + _MatCapMask ("MatCap Mask" , 2D) = "white" {} + _MatCapStrength ("MatCap Strength" , Range( 0.0, 2.0)) = 1.0 + [SToggle] + _ToonGlossEnable ("Enable Toon Reflection" , int) = 0 + [IntRange] + _ToonGloss ("Toon" , Range( 0.0, 9.0)) = 9.0 + [SToggle] + _SpecularTexColor ("Tex Color for Specular" , int) = 0 + [SToggle] + _MetallicTexColor ("Tex Color for Metallic" , int) = 1 + [SToggle] + _MatCapTexColor ("Tex Color for MatCap" , int) = 0 + [SToggle] + _SpecularSH ("SH Light Specular" , int) = 1 + [SToggle] + _SpecularMask ("Use Mask for Specular" , int) = 1 + [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] + _ReflectLit ("Light Color for Reflection", int) = 3 + [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] + _MatCapLit ("Light Color for MatCap" , int) = 3 + [SToggle] + _IgnoreTexAlphaR ("Ignore Texture Alpha" , int) = 0 + + + [SToggle] + _RimLitEnable ("Enable Rim Light" , int) = 0 + [NoScaleOffset] + _RimLitMask ("Rim Light Mask" , 2D) = "white" {} + [HDR] + _RimLitColor ("Rim Light Color" , Color) = (1,1,1,1) + _RimLit ("Rim Lighting" , Range( 0.0, 2.0)) = 1.0 + _RimLitGradient ("Rim Light Gradient" , Range( 0.0, 2.0)) = 1.0 + [SToggle] + _RimLitLighthing ("Use Light Color" , int) = 1 + [SToggle] + _RimLitTexColor ("Use Main Texture" , int) = 0 + [Enum(Add , 0 , Multiply , 1 , Minus , 2)] + _RimLitMode ("Rim Light Mode" , int) = 0 + [SToggle] + _IgnoreTexAlphaRL ("Ignore Texture Alpha" , int) = 0 + + + [Enum(Off , 0 , Back , 2 , Front , 1)] + _Culling ("Culling" , int) = 2 + + [SToggle] + _EnableZWrite ("Enable Z Write" , int) = 1 + + _DirectionalLight ("Directional Light" , Range( 0.0, 2.0)) = 1.0 + _SHLight ("SH Light" , Range( 0.0, 2.0)) = 1.0 + _PointLight ("Point Light" , Range( 0.0, 2.0)) = 1.0 + [SToggle] + _LightLimitter ("Light Limitter" , int) = 1 + _MinimumLight ("Minimum Light Limit" , Range( 0.0, 1.0)) = 0.0 + [Enum(Add , 0 , Max , 4)] + _BlendOperation ("ForwardAdd Blend Mode" , int) = 4 + + [SToggle] + _EnableGammaFix ("Enable Gamma Fix" , int) = 0 + _GammaR ("R Gamma" , Range( 0.0, 5.0)) = 1.0 + _GammaG ("G Gamma" , Range( 0.0, 5.0)) = 1.0 + _GammaB ("B Gamma" , Range( 0.0, 5.0)) = 1.0 + + [SToggle] + _EnableBlightFix ("Enable Brightness Fix" , int) = 0 + _BlightOutput ("Output Brightness" , Range( 0.0, 5.0)) = 1.0 + _BlightOffset ("Brightness Offset" , Range(-5.0, 5.0)) = 0.0 + + [SToggle] + _LimitterEnable ("Enable Limitter" , int) = 0 + _LimitterMax ("Limitter Max" , Range( 0.0, 5.0)) = 1.0 + + + [HideInInspector] _MainFO ("Main FO" , int) = 0 + [HideInInspector] _DecalFO ("Decal FO" , int) = 0 + [HideInInspector] _ShadingFO ("Shading FO" , int) = 0 + [HideInInspector] _OutlineFO ("Outline FO" , int) = 0 + [HideInInspector] _EmissionFO ("Emission FO" , int) = 0 + [HideInInspector] _ParallaxFO ("Parallax FO" , int) = 0 + [HideInInspector] _ReflectionFO ("Reflection FO" , int) = 0 + [HideInInspector] _RimLightingFO ("Rim Lighting FO" , int) = 0 + [HideInInspector] _VertexAlphaFO ("Vertex Alpha FO" , int) = 0 + [HideInInspector] _OtherSettingsFO ("Other Settings FO" , int) = 0 + + [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 1 + + [HideInInspector] _VersionH ("Version H" , int) = 1 + [HideInInspector] _VersionM ("Version M" , int) = 4 + [HideInInspector] _VersionL ("Version L" , int) = 2 + + } + + + + SubShader { + + LOD 0 + + Tags { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "Queue" = "AlphaTest+50" + } + + Pass { + Tags { + "LightMode" = "ForwardBase" + } + + Cull [_Culling] + Blend SrcAlpha OneMinusSrcAlpha + ZWrite [_EnableZWrite] + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_FB + #define TRANSPARENT + + #include "./cginc/SunaoShader_Core.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ForwardBase" + } + + Cull Front + Blend SrcAlpha OneMinusSrcAlpha + ZWrite [_EnableZWrite] + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_OL_FB + #define TRANSPARENT + + #include "./cginc/SunaoShader_OL.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ForwardAdd" + } + + Cull [_Culling] + BlendOp [_BlendOperation] + Blend SrcAlpha One + ZWrite Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdadd + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_FA + #define TRANSPARENT + + #include "./cginc/SunaoShader_Core.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ForwardAdd" + } + + Cull Front + BlendOp [_BlendOperation] + Blend SrcAlpha One + ZWrite Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdadd + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_OL_FA + #define TRANSPARENT + + #include "./cginc/SunaoShader_OL.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ShadowCaster" + } + + ZWrite On + ZTest LEqual + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_shadowcaster + #pragma target 4.5 + + #define PASS_SC + + #include "./cginc/SunaoShader_SC.cginc" + + ENDCG + } + } + + Fallback "Transparent/Diffuse" + + CustomEditor "SunaoShader.GUI" +} diff --git a/Shader/Sunao_Shader_TransClipping_SO.shader b/Shader/Sunao_Shader_TransClipping_SO.shader new file mode 100644 index 0000000..503b56d --- /dev/null +++ b/Shader/Sunao_Shader_TransClipping_SO.shader @@ -0,0 +1,548 @@ +//-------------------------------------------------------------- +// Sunao Shader Ver 1.4.2 +// +// Copyright (c) 2021 揚茄子研究所 +// Twitter : @SUNAO_VRC +// VRChat : SUNAO_ +// +// This software is released under the MIT License. +// see LICENSE or http://suna.ooo/agenasulab/ss/LICENSE +//-------------------------------------------------------------- + +Shader "Sunao Shader/[Stencil Outline]/TransClipping" { + + + Properties { + [SToggle] + _OptimizerEnable ("Enable Optimizer" , int) = 0 + + [NoScaleOffset] + _MainTex ("Main Texture" , 2D) = "white" {} + _Color ("Color" , Color) = (1,1,1,1) + _Alpha ("Alpha" , Range( 0.0, 2.0)) = 1.0 + _Cutout ("Cutout" , Range( 0.0, 1.0)) = 0.5 + + [Normal] + _BumpMap ("Normal Map" , 2D) = "bump" {} + [NoScaleOffset] + _OcclusionMap ("Occlusion" , 2D) = "white" {} + [NoScaleOffset] + _AlphaMask ("Alpha Mask" , 2D) = "white" {} + + _Bright ("Brightness" , Range( 0.0, 1.0)) = 1.0 + _BumpScale ("Normal Map Scale" , Range(-2.0, 2.0)) = 1.0 + _OcclusionStrength ("Occlusion Strength" , Range( 0.0, 1.0)) = 1.0 + [Enum(SH Light, 0 , Main Texture , 1 , Final Color , 2)] + _OcclusionMode ("Occlusion Mode " , int) = 0 + _AlphaMaskStrength ("Alpha Mask Strength" , Range( 0.0, 1.0)) = 1.0 + [SToggle] + _VertexColor ("Use Vertex Color" , int) = 0 + + _UVScrollX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _UVScrollY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _UVAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _UVAnimX ("Animation X Size" , int) = 1 + _UVAnimY ("Animation Y Size" , int) = 1 + [SToggle] + _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Tangent Map , 0 , Rotation Map , 1)] + _TanMode ("Tangent Map Mode" , int) = 0 + _TanMap ("Tangent Map" , 2D) = "black" {} + + [SToggle] + _DecalEnable ("Enable Decal" , int) = 0 + _DecalTex ("Decal Texture" , 2D) = "white" {} + _DecalColor ("Decal Color" , Color) = (1,1,1,1) + _DecalPosX ("Position X" , Range( 0.0, 1.0)) = 0.5 + _DecalPosY ("Position Y" , Range( 0.0, 1.0)) = 0.5 + _DecalSizeX ("Size X" , Range( 0.0, 1.0)) = 0.5 + _DecalSizeY ("Size Y" , Range( 0.0, 1.0)) = 0.5 + _DecalRotation ("Rotation" , Range(-180.0, 180.0)) = 0.0 + + [Enum(Override , 0 , Add , 1 , Multiply , 2 , Multiply(Mono) , 3)] + _DecalMode ("Decal Mode" , int) = 0 + [Enum(Normal , 0 , Fixed , 1 , Mirror1 , 2 , Mirror2 , 3 , Copy(Mirror) , 4 , Copy(Fixed) , 5)] + _DecalMirror ("Decal Mirror Mode" , int) = 0 + + _DecalScrollX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _DecalScrollY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _DecalAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _DecalAnimX ("Animation X Size" , int) = 1 + _DecalAnimY ("Animation Y Size" , int) = 1 + + + _StencilNumb ("Stencil Number" , int) = 4 + [Enum(NotEqual , 6 , Equal , 3 , Less , 2 , LessEqual , 4 , Greater , 5 , GreaterEqual , 7)] + _StencilCompMode ("Stencil Compare Mode" , int) = 6 + + + [NoScaleOffset] + _ShadeMask ("Shade Mask" , 2D) = "white" {} + _Shade ("Shade Strength" , Range( 0.0, 1.0)) = 0.3 + _ShadeWidth ("Shade Width" , Range( 0.0, 2.0)) = 0.75 + _ShadeGradient ("Shade Gradient" , Range( 0.0, 2.0)) = 0.75 + _ShadeColor ("Shade Color" , Range( 0.0, 1.0)) = 0.5 + _CustomShadeColor ("Custom Shade Color" , Color) = (0,0,0,0) + + [SToggle] + _ToonEnable ("Enable Toon Shading" , int) = 0 + [IntRange] + _Toon ("Toon" , Range( 0.0, 9.0)) = 9.0 + _ToonSharpness ("Toon Sharpness" , Range( 0.0, 1.0)) = 1.0 + + [NoScaleOffset] + _LightMask ("Lighting Boost Mask" , 2D) = "black" {} + _LightBoost ("Lighting Boost" , Range( 1.0, 5.0)) = 3.0 + _Unlit ("Unlighting" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _MonochromeLit ("Monochrome Lighting" , int) = 0 + + + [SToggle] + _MirrorControlEnable ("Enable Mirror Control" , int) = 0 + _RealCopyAlpha ("Real Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + _MirrorCopyAlpha ("Mirror Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + + + [SToggle] + _HSVShiftEnable ("Enable HSV Shift" , int) = 0 + _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} + _HSVShiftHue ("Hue Shift" , Range( 0.0, 1.0)) = 0.0 + _HSVShiftSat ("Sat Shift" , Range( 0.0, 3.0)) = 1.0 + _HSVShiftVal ("Val Shift" , Range( 0.0, 3.0)) = 1.0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftDecalMode ("Decal Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftSpecularMode ("Specular Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + + + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleEmissionMap ("Stipple Emission Mask" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 + [Enum(Uniform , 0 , Wave , 1)] + _StippleMode ("Stipple Mode" , int) = 1 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 + [SToggle] + _StippleDisableOutline ("Stipple Disable Outline", int) = 1 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + + + _VertexColorThreshold ("Vertex Alpha 1", Range(0.0, 1.0)) = 0.9999 + _VertexColor01 ("Vertex Color 1" , Color) = (0,0,0) + _VertexAlpha01 ("Vertex Alpha 1" , Range(0.0, 1.0)) = 1.0 + _VertexColor02 ("Vertex Color 2" , Color) = (0,0,0) + _VertexAlpha02 ("Vertex Alpha 2" , Range(0.0, 1.0)) = 1.0 + _VertexColor03 ("Vertex Color 3" , Color) = (0,0,0) + _VertexAlpha03 ("Vertex Alpha 3" , Range(0.0, 1.0)) = 1.0 + _VertexColor04 ("Vertex Color 4" , Color) = (0,0,0) + _VertexAlpha04 ("Vertex Alpha 4" , Range(0.0, 1.0)) = 1.0 + _VertexColor05 ("Vertex Color 5" , Color) = (0,0,0) + _VertexAlpha05 ("Vertex Alpha 5" , Range(0.0, 1.0)) = 1.0 + _VertexColor06 ("Vertex Color 6" , Color) = (0,0,0) + _VertexAlpha06 ("Vertex Alpha 6" , Range(0.0, 1.0)) = 1.0 + _VertexColor07 ("Vertex Color 7" , Color) = (0,0,0) + _VertexAlpha07 ("Vertex Alpha 7" , Range(0.0, 1.0)) = 1.0 + _VertexColor08 ("Vertex Color 8" , Color) = (0,0,0) + _VertexAlpha08 ("Vertex Alpha 8" , Range(0.0, 1.0)) = 1.0 + _VertexColor09 ("Vertex Color 9" , Color) = (0,0,0) + _VertexAlpha09 ("Vertex Alpha 9" , Range(0.0, 1.0)) = 1.0 + _VertexColor10 ("Vertex Color 10" , Color) = (0,0,0) + _VertexAlpha10 ("Vertex Alpha 10" , Range(0.0, 1.0)) = 1.0 + _VertexColor11 ("Vertex Color 11" , Color) = (0,0,0) + _VertexAlpha11 ("Vertex Alpha 11" , Range(0.0, 1.0)) = 1.0 + _VertexColor12 ("Vertex Color 12" , Color) = (0,0,0) + _VertexAlpha12 ("Vertex Alpha 12" , Range(0.0, 1.0)) = 1.0 + _VertexColor13 ("Vertex Color 13" , Color) = (0,0,0) + _VertexAlpha13 ("Vertex Alpha 13" , Range(0.0, 1.0)) = 1.0 + _VertexColor14 ("Vertex Color 14" , Color) = (0,0,0) + _VertexAlpha14 ("Vertex Alpha 14" , Range(0.0, 1.0)) = 1.0 + _VertexColor15 ("Vertex Color 15" , Color) = (0,0,0) + _VertexAlpha15 ("Vertex Alpha 15" , Range(0.0, 1.0)) = 1.0 + _VertexColor16 ("Vertex Color 16" , Color) = (0,0,0) + _VertexAlpha16 ("Vertex Alpha 16" , Range(0.0, 1.0)) = 1.0 + + + [SToggle] + _OutLineEnable ("Enable Outline" , int) = 0 + [NoScaleOffset] + _OutLineMask ("Outline Mask" , 2D) = "white" {} + _OutLineColor ("Outline Color" , Color) = (0,0,0,1) + _OutLineSize ("Outline Scale" , Range( 0.0, 1.0)) = 0.1 + [SToggle] + _OutLineLighthing ("Use Light Color" , int) = 1 + [SToggle] + _OutLineTexColor ("Use Main Texture" , int) = 0 + [NoScaleOffset] + _OutLineTexture ("Outline Texture" , 2D) = "white" {} + [SToggle] + _OutLineFixScale ("x10 Scale" , int) = 0 + + + [SToggle] + _EmissionEnable ("Enable Emission" , int) = 0 + _EmissionMap ("Emission Mask" , 2D) = "white" {} + [HDR] + _EmissionColor ("Emission Color" , Color) = (1,1,1) + _Emission ("Emission Intensity" , Range( 0.0, 2.0)) = 1.0 + + _EmissionMap2 ("2nd Emission Mask" , 2D) = "white" {} + [Enum(Add , 0 ,Multiply , 1 , Minus , 2)] + _EmissionMode ("Emission Mode" , int) = 0 + _EmissionBlink ("Blink" , Range( 0.0, 1.0)) = 0.0 + _EmissionFrequency ("Frequency" , Range( 0.0, 5.0)) = 1.0 + [Enum(Sine , 0 , Saw , 1 , SawR , 2 , Square , 3)] + _EmissionWaveform ("Waveform" , int) = 0 + _EmissionScrX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _EmissionScrY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _EmissionAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _EmissionAnimX ("Animation X Size" , int) = 1 + _EmissionAnimY ("Animation Y Size" , int) = 1 + + [SToggle] + _EmissionLighting ("Use Lighting" , int) = 0 + [SToggle] + _IgnoreTexAlphaE ("Ignore Texture Alpha" , int) = 0 + _EmissionInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + + + [SToggle] + _ParallaxEnable ("Enable Parallax Emission" , int) = 0 + _ParallaxMap ("Parallax Emission Texture" , 2D) = "white" {} + [HDR] + _ParallaxColor ("Emission Color" , Color) = (1,1,1) + _ParallaxEmission ("Emission Intensity" , Range( 0.0, 2.0)) = 1.0 + _ParallaxDepth ("Parallax Depth" , Range( 0.0, 1.0)) = 1.0 + + _ParallaxDepthMap ("Parallax Depth Mask" , 2D) = "black" {} + _ParallaxMap2 ("2nd Parallax Emission Mask", 2D) = "white" {} + [Enum(Add , 0 ,Multiply , 1 , Minus , 2)] + _ParallaxMode ("Emission Mode" , int) = 0 + _ParallaxBlink ("Blink" , Range( 0.0, 1.0)) = 0.0 + _ParallaxFrequency ("Frequency" , Range( 0.0, 5.0)) = 1.0 + [Enum(Sine , 0 , Saw , 1 , SawR , 2 , Square , 3)] + _ParallaxWaveform ("Waveform" , int) = 0 + _ParallaxPhaseOfs ("Phase Offset" , Range( 0.0, 1.0)) = 0.0 + _ParallaxScrX ("Scroll X" , Range(-10.0, 10.0)) = 0.0 + _ParallaxScrY ("Scroll Y" , Range(-10.0, 10.0)) = 0.0 + _ParallaxAnimation ("Animation Speed" , Range( 0.0, 10.0)) = 0.0 + _ParallaxAnimX ("Animation X Size" , int) = 1 + _ParallaxAnimY ("Animation Y Size" , int) = 1 + + [SToggle] + _ParallaxLighting ("Use Lighting" , int) = 0 + [SToggle] + _IgnoreTexAlphaPE ("Ignore Texture Alpha" , int) = 0 + _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + + + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + [Enum(GGX, 0 , View Offset , 1)] + _ToonSpecMode ("Specular Mode" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecMetallic ("Specular Metallic" , Range( 0.0, 1.0)) = 0.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 0.1 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.02 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + + [SToggle] + _ReflectionEnable ("Enable Reflection" , int) = 0 + [NoScaleOffset] + _MetallicGlossMap ("Reflection Mask" , 2D) = "white" {} + [NoScaleOffset] + _GlossColor ("Reflection Color" , Color) = (1,1,1,1) + _Specular ("Specular Intensity" , Range( 0.0, 2.0)) = 1.0 + _Metallic ("Metallic" , Range( 0.0, 1.0)) = 0.5 + _GlossMapScale ("Smoothness" , Range( 0.0, 1.0)) = 0.75 + [NoScaleOffset] + _MatCap ("MatCap Texture" , 2D) = "black" {} + _MatCapColor ("MatCap Color" , Color) = (1,1,1,1) + [SToggle] + _MatCapMaskEnable ("Use Reflection Mask" , int) = 1 + [NoScaleOffset] + _MatCapMask ("MatCap Mask" , 2D) = "white" {} + _MatCapStrength ("MatCap Strength" , Range( 0.0, 2.0)) = 1.0 + [SToggle] + _ToonGlossEnable ("Enable Toon Reflection" , int) = 0 + [IntRange] + _ToonGloss ("Toon" , Range( 0.0, 9.0)) = 9.0 + [SToggle] + _SpecularTexColor ("Tex Color for Specular" , int) = 0 + [SToggle] + _MetallicTexColor ("Tex Color for Metallic" , int) = 1 + [SToggle] + _MatCapTexColor ("Tex Color for MatCap" , int) = 0 + [SToggle] + _SpecularSH ("SH Light Specular" , int) = 1 + [SToggle] + _SpecularMask ("Use Mask for Specular" , int) = 1 + [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] + _ReflectLit ("Light Color for Reflection", int) = 3 + [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] + _MatCapLit ("Light Color for MatCap" , int) = 3 + [SToggle] + _IgnoreTexAlphaR ("Ignore Texture Alpha" , int) = 0 + + + [SToggle] + _RimLitEnable ("Enable Rim Light" , int) = 0 + [NoScaleOffset] + _RimLitMask ("Rim Light Mask" , 2D) = "white" {} + [HDR] + _RimLitColor ("Rim Light Color" , Color) = (1,1,1,1) + _RimLit ("Rim Lighting" , Range( 0.0, 2.0)) = 1.0 + _RimLitGradient ("Rim Light Gradient" , Range( 0.0, 2.0)) = 1.0 + [SToggle] + _RimLitLighthing ("Use Light Color" , int) = 1 + [SToggle] + _RimLitTexColor ("Use Main Texture" , int) = 0 + [Enum(Add , 0 , Multiply , 1 , Minus , 2)] + _RimLitMode ("Rim Light Mode" , int) = 0 + [SToggle] + _IgnoreTexAlphaRL ("Ignore Texture Alpha" , int) = 0 + + + [Enum(Off , 0 , Back , 2 , Front , 1)] + _Culling ("Culling" , int) = 2 + + [SToggle] + _EnableZWrite ("Enable Z Write" , int) = 1 + + _DirectionalLight ("Directional Light" , Range( 0.0, 2.0)) = 1.0 + _SHLight ("SH Light" , Range( 0.0, 2.0)) = 1.0 + _PointLight ("Point Light" , Range( 0.0, 2.0)) = 1.0 + [SToggle] + _LightLimitter ("Light Limitter" , int) = 1 + _MinimumLight ("Minimum Light Limit" , Range( 0.0, 1.0)) = 0.0 + [Enum(Add , 0 , Max , 4)] + _BlendOperation ("ForwardAdd Blend Mode" , int) = 4 + + [SToggle] + _EnableGammaFix ("Enable Gamma Fix" , int) = 0 + _GammaR ("R Gamma" , Range( 0.0, 5.0)) = 1.0 + _GammaG ("G Gamma" , Range( 0.0, 5.0)) = 1.0 + _GammaB ("B Gamma" , Range( 0.0, 5.0)) = 1.0 + + [SToggle] + _EnableBlightFix ("Enable Brightness Fix" , int) = 0 + _BlightOutput ("Output Brightness" , Range( 0.0, 5.0)) = 1.0 + _BlightOffset ("Brightness Offset" , Range(-5.0, 5.0)) = 0.0 + + [SToggle] + _LimitterEnable ("Enable Limitter" , int) = 0 + _LimitterMax ("Limitter Max" , Range( 0.0, 5.0)) = 1.0 + + + [HideInInspector] _MainFO ("Main FO" , int) = 0 + [HideInInspector] _DecalFO ("Decal FO" , int) = 0 + [HideInInspector] _ShadingFO ("Shading FO" , int) = 0 + [HideInInspector] _OutlineFO ("Outline FO" , int) = 0 + [HideInInspector] _EmissionFO ("Emission FO" , int) = 0 + [HideInInspector] _ParallaxFO ("Parallax FO" , int) = 0 + [HideInInspector] _ReflectionFO ("Reflection FO" , int) = 0 + [HideInInspector] _RimLightingFO ("Rim Lighting FO" , int) = 0 + [HideInInspector] _VertexAlphaFO ("Vertex Alpha FO" , int) = 0 + [HideInInspector] _OtherSettingsFO ("Other Settings FO" , int) = 0 + + [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 1 + + [HideInInspector] _VersionH ("Version H" , int) = 1 + [HideInInspector] _VersionM ("Version M" , int) = 4 + [HideInInspector] _VersionL ("Version L" , int) = 2 + + } + + + + SubShader { + + LOD 0 + + Tags { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "Queue" = "AlphaTest+50" + } + + Pass { + Tags { + "LightMode" = "ForwardBase" + } + + Cull [_Culling] + Blend SrcAlpha OneMinusSrcAlpha + ZWrite [_EnableZWrite] + + Stencil { + Ref [_StencilNumb] + Comp Always + Pass Replace + } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + #pragma target 4.5 + + #define TRANSPARENT + + #define PASS_FB + + #include "./cginc/SunaoShader_Core.cginc" + + ENDCG + } + + + + Pass { + Tags { + "LightMode" = "ForwardBase" + } + + Cull Front + Blend SrcAlpha OneMinusSrcAlpha + ZWrite [_EnableZWrite] + + Stencil { + Ref [_StencilNumb] + Comp NotEqual + } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_OL_FB + #define TRANSPARENT + + #include "./cginc/SunaoShader_OL.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ForwardAdd" + } + + Cull [_Culling] + BlendOp [_BlendOperation] + Blend SrcAlpha One + ZWrite Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdadd + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_FA + #define TRANSPARENT + + #include "./cginc/SunaoShader_Core.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ForwardAdd" + } + + Cull Front + BlendOp [_BlendOperation] + Blend SrcAlpha One + ZWrite Off + + Stencil { + Ref [_StencilNumb] + Comp NotEqual + } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdadd + #pragma multi_compile_fog + #pragma target 4.5 + + #define PASS_OL_FA + #define TRANSPARENT + + #include "./cginc/SunaoShader_OL.cginc" + + ENDCG + } + + + Pass { + Tags { + "LightMode" = "ShadowCaster" + } + + ZWrite On + ZTest LEqual + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_shadowcaster + #pragma target 4.5 + + #define PASS_SC + #define ALPHA_TO_COVERAGE + + #include "./cginc/SunaoShader_SC.cginc" + + ENDCG + } + } + + Fallback "Transparent/Diffuse" + + CustomEditor "SunaoShader.GUI" +} diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 6e04cc0..947994a 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -13,6 +13,8 @@ Shader "Sunao Shader/Transparent" { Properties { + [SToggle] + _OptimizerEnable ("Enable Optimizer" , int) = 0 [NoScaleOffset] _MainTex ("Main Texture" , 2D) = "white" {} @@ -44,6 +46,11 @@ Shader "Sunao Shader/Transparent" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Tangent Map , 0 , Rotation Map , 1)] + _TanMode ("Tangent Map Mode" , int) = 0 + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 @@ -94,6 +101,97 @@ Shader "Sunao Shader/Transparent" { _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _MirrorControlEnable ("Enable Mirror Control" , int) = 0 + _RealCopyAlpha ("Real Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + _MirrorCopyAlpha ("Mirror Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + + + [SToggle] + _HSVShiftEnable ("Enable HSV Shift" , int) = 0 + _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} + _HSVShiftHue ("Hue Shift" , Range( 0.0, 1.0)) = 0.0 + _HSVShiftSat ("Sat Shift" , Range( 0.0, 3.0)) = 1.0 + _HSVShiftVal ("Val Shift" , Range( 0.0, 3.0)) = 1.0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftDecalMode ("Decal Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftSpecularMode ("Specular Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + + + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleEmissionMap ("Stipple Emission Mask" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 + [Enum(Uniform , 0 , Wave , 1)] + _StippleMode ("Stipple Mode" , int) = 1 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 + [SToggle] + _StippleDisableOutline ("Stipple Disable Outline", int) = 1 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + + + _VertexColorThreshold ("Vertex Alpha 1", Range(0.0, 1.0)) = 0.9999 + _VertexColor01 ("Vertex Color 1" , Color) = (0,0,0) + _VertexAlpha01 ("Vertex Alpha 1" , Range(0.0, 1.0)) = 1.0 + _VertexColor02 ("Vertex Color 2" , Color) = (0,0,0) + _VertexAlpha02 ("Vertex Alpha 2" , Range(0.0, 1.0)) = 1.0 + _VertexColor03 ("Vertex Color 3" , Color) = (0,0,0) + _VertexAlpha03 ("Vertex Alpha 3" , Range(0.0, 1.0)) = 1.0 + _VertexColor04 ("Vertex Color 4" , Color) = (0,0,0) + _VertexAlpha04 ("Vertex Alpha 4" , Range(0.0, 1.0)) = 1.0 + _VertexColor05 ("Vertex Color 5" , Color) = (0,0,0) + _VertexAlpha05 ("Vertex Alpha 5" , Range(0.0, 1.0)) = 1.0 + _VertexColor06 ("Vertex Color 6" , Color) = (0,0,0) + _VertexAlpha06 ("Vertex Alpha 6" , Range(0.0, 1.0)) = 1.0 + _VertexColor07 ("Vertex Color 7" , Color) = (0,0,0) + _VertexAlpha07 ("Vertex Alpha 7" , Range(0.0, 1.0)) = 1.0 + _VertexColor08 ("Vertex Color 8" , Color) = (0,0,0) + _VertexAlpha08 ("Vertex Alpha 8" , Range(0.0, 1.0)) = 1.0 + _VertexColor09 ("Vertex Color 9" , Color) = (0,0,0) + _VertexAlpha09 ("Vertex Alpha 9" , Range(0.0, 1.0)) = 1.0 + _VertexColor10 ("Vertex Color 10" , Color) = (0,0,0) + _VertexAlpha10 ("Vertex Alpha 10" , Range(0.0, 1.0)) = 1.0 + _VertexColor11 ("Vertex Color 11" , Color) = (0,0,0) + _VertexAlpha11 ("Vertex Alpha 11" , Range(0.0, 1.0)) = 1.0 + _VertexColor12 ("Vertex Color 12" , Color) = (0,0,0) + _VertexAlpha12 ("Vertex Alpha 12" , Range(0.0, 1.0)) = 1.0 + _VertexColor13 ("Vertex Color 13" , Color) = (0,0,0) + _VertexAlpha13 ("Vertex Alpha 13" , Range(0.0, 1.0)) = 1.0 + _VertexColor14 ("Vertex Color 14" , Color) = (0,0,0) + _VertexAlpha14 ("Vertex Alpha 14" , Range(0.0, 1.0)) = 1.0 + _VertexColor15 ("Vertex Color 15" , Color) = (0,0,0) + _VertexAlpha15 ("Vertex Alpha 15" , Range(0.0, 1.0)) = 1.0 + _VertexColor16 ("Vertex Color 16" , Color) = (0,0,0) + _VertexAlpha16 ("Vertex Alpha 16" , Range(0.0, 1.0)) = 1.0 + + [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 [NoScaleOffset] @@ -167,6 +265,21 @@ Shader "Sunao Shader/Transparent" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + [Enum(GGX, 0 , View Offset , 1)] + _ToonSpecMode ("Specular Mode" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecMetallic ("Specular Metallic" , Range( 0.0, 1.0)) = 0.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 0.1 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.02 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] @@ -262,6 +375,7 @@ Shader "Sunao Shader/Transparent" { [HideInInspector] _ParallaxFO ("Parallax FO" , int) = 0 [HideInInspector] _ReflectionFO ("Reflection FO" , int) = 0 [HideInInspector] _RimLightingFO ("Rim Lighting FO" , int) = 0 + [HideInInspector] _VertexAlphaFO ("Vertex Alpha FO" , int) = 0 [HideInInspector] _OtherSettingsFO ("Other Settings FO" , int) = 0 [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 1 diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 8e6454b..fef93f4 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -13,6 +13,8 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { Properties { + [SToggle] + _OptimizerEnable ("Enable Optimizer" , int) = 0 [NoScaleOffset] _MainTex ("Main Texture" , 2D) = "white" {} @@ -44,6 +46,11 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Tangent Map , 0 , Rotation Map , 1)] + _TanMode ("Tangent Map Mode" , int) = 0 + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 @@ -94,6 +101,97 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _MirrorControlEnable ("Enable Mirror Control" , int) = 0 + _RealCopyAlpha ("Real Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + _MirrorCopyAlpha ("Mirror Copy Alpha" , Range( 0.0, 1.0)) = 1.0 + + + [SToggle] + _HSVShiftEnable ("Enable HSV Shift" , int) = 0 + _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} + _HSVShiftHue ("Hue Shift" , Range( 0.0, 1.0)) = 0.0 + _HSVShiftSat ("Sat Shift" , Range( 0.0, 3.0)) = 1.0 + _HSVShiftVal ("Val Shift" , Range( 0.0, 3.0)) = 1.0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftDecalMode ("Decal Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftSpecularMode ("Specular Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + + + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleEmissionMap ("Stipple Emission Mask" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 + [Enum(Uniform , 0 , Wave , 1)] + _StippleMode ("Stipple Mode" , int) = 1 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 + [SToggle] + _StippleDisableOutline ("Stipple Disable Outline", int) = 1 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + + + _VertexColorThreshold ("Vertex Alpha 1", Range(0.0, 1.0)) = 0.9999 + _VertexColor01 ("Vertex Color 1" , Color) = (0,0,0) + _VertexAlpha01 ("Vertex Alpha 1" , Range(0.0, 1.0)) = 1.0 + _VertexColor02 ("Vertex Color 2" , Color) = (0,0,0) + _VertexAlpha02 ("Vertex Alpha 2" , Range(0.0, 1.0)) = 1.0 + _VertexColor03 ("Vertex Color 3" , Color) = (0,0,0) + _VertexAlpha03 ("Vertex Alpha 3" , Range(0.0, 1.0)) = 1.0 + _VertexColor04 ("Vertex Color 4" , Color) = (0,0,0) + _VertexAlpha04 ("Vertex Alpha 4" , Range(0.0, 1.0)) = 1.0 + _VertexColor05 ("Vertex Color 5" , Color) = (0,0,0) + _VertexAlpha05 ("Vertex Alpha 5" , Range(0.0, 1.0)) = 1.0 + _VertexColor06 ("Vertex Color 6" , Color) = (0,0,0) + _VertexAlpha06 ("Vertex Alpha 6" , Range(0.0, 1.0)) = 1.0 + _VertexColor07 ("Vertex Color 7" , Color) = (0,0,0) + _VertexAlpha07 ("Vertex Alpha 7" , Range(0.0, 1.0)) = 1.0 + _VertexColor08 ("Vertex Color 8" , Color) = (0,0,0) + _VertexAlpha08 ("Vertex Alpha 8" , Range(0.0, 1.0)) = 1.0 + _VertexColor09 ("Vertex Color 9" , Color) = (0,0,0) + _VertexAlpha09 ("Vertex Alpha 9" , Range(0.0, 1.0)) = 1.0 + _VertexColor10 ("Vertex Color 10" , Color) = (0,0,0) + _VertexAlpha10 ("Vertex Alpha 10" , Range(0.0, 1.0)) = 1.0 + _VertexColor11 ("Vertex Color 11" , Color) = (0,0,0) + _VertexAlpha11 ("Vertex Alpha 11" , Range(0.0, 1.0)) = 1.0 + _VertexColor12 ("Vertex Color 12" , Color) = (0,0,0) + _VertexAlpha12 ("Vertex Alpha 12" , Range(0.0, 1.0)) = 1.0 + _VertexColor13 ("Vertex Color 13" , Color) = (0,0,0) + _VertexAlpha13 ("Vertex Alpha 13" , Range(0.0, 1.0)) = 1.0 + _VertexColor14 ("Vertex Color 14" , Color) = (0,0,0) + _VertexAlpha14 ("Vertex Alpha 14" , Range(0.0, 1.0)) = 1.0 + _VertexColor15 ("Vertex Color 15" , Color) = (0,0,0) + _VertexAlpha15 ("Vertex Alpha 15" , Range(0.0, 1.0)) = 1.0 + _VertexColor16 ("Vertex Color 16" , Color) = (0,0,0) + _VertexAlpha16 ("Vertex Alpha 16" , Range(0.0, 1.0)) = 1.0 + + [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 [NoScaleOffset] @@ -167,6 +265,21 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + [Enum(GGX, 0 , View Offset , 1)] + _ToonSpecMode ("Specular Mode" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecMetallic ("Specular Metallic" , Range( 0.0, 1.0)) = 0.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 0.1 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.02 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] @@ -262,6 +375,7 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [HideInInspector] _ParallaxFO ("Parallax FO" , int) = 0 [HideInInspector] _ReflectionFO ("Reflection FO" , int) = 0 [HideInInspector] _RimLightingFO ("Rim Lighting FO" , int) = 0 + [HideInInspector] _VertexAlphaFO ("Vertex Alpha FO" , int) = 0 [HideInInspector] _OtherSettingsFO ("Other Settings FO" , int) = 0 [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 4