From f502c92d0b3173a904d771e7c254ee16b0af5eb0 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Wed, 5 Aug 2020 20:53:38 -0400 Subject: [PATCH 01/56] Added AlphaToCoverage shaders --- Shader/Sunao_Shader_AlphaToCoverage.shader | 395 +++++++++++++++++ Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 414 ++++++++++++++++++ 2 files changed, 809 insertions(+) create mode 100644 Shader/Sunao_Shader_AlphaToCoverage.shader create mode 100644 Shader/Sunao_Shader_AlphaToCoverage_SO.shader diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader new file mode 100644 index 0000000..58ea1a8 --- /dev/null +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -0,0 +1,395 @@ +//-------------------------------------------------------------- +// Sunao Shader Ver 1.3.2 +// +// Copyright (c) 2020 揚茄子研究所 +// Twitter : @SUNAO_VRC +// VRChat : SUNAO_ +// +// This software is released under the MIT License. +// see LICENSE or http://sunao.orz.hm/agenasulab/ss/LICENSE +//-------------------------------------------------------------- + +Shader "Sunao Shader/AlphaToCoverage" { + + + Properties { + + [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 + + [NoScaleOffset][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] + _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)] + _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 + + + [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] + _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 Mask" , 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] + _ReflectionEnable ("Enable Reflection" , int) = 0 + [NoScaleOffset] + _MetallicGlossMap ("Reflection Mask" , 2D) = "white" {} + [NoScaleOffset] + _MatCap ("Material Capture" , 2D) = "black" {} + _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 + [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) = 0 + [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 + + [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] _OtherSettingsFO ("Other Settings FO" , int) = 0 + + [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 1 + + [HideInInspector] _VersionH ("Version H" , int) = 0 + [HideInInspector] _VersionM ("Version M" , int) = 0 + [HideInInspector] _VersionL ("Version L" , int) = 0 + + } + + + + SubShader { + + LOD 0 + + AlphaToMask On + + Tags { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "Queue" = "AlphaTest" + } + + 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 Front + 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" = "ForwardAdd" + } + + Cull [_Culling] + 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" = "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_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader new file mode 100644 index 0000000..00fc8d0 --- /dev/null +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -0,0 +1,414 @@ +//-------------------------------------------------------------- +// Sunao Shader Ver 1.3.2 +// +// Copyright (c) 2020 揚茄子研究所 +// Twitter : @SUNAO_VRC +// VRChat : SUNAO_ +// +// This software is released under the MIT License. +// see LICENSE or http://sunao.orz.hm/agenasulab/ss/LICENSE +//-------------------------------------------------------------- + +Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { + + + Properties { + + [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 + + [NoScaleOffset][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] + _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)] + _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 + + + [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] + _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 Mask" , 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] + _ReflectionEnable ("Enable Reflection" , int) = 0 + [NoScaleOffset] + _MetallicGlossMap ("Reflection Mask" , 2D) = "white" {} + [NoScaleOffset] + _MatCap ("Material Capture" , 2D) = "black" {} + _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 + [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) = 0 + [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 + + [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] _OtherSettingsFO ("Other Settings FO" , int) = 0 + + [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 1 + + [HideInInspector] _VersionH ("Version H" , int) = 0 + [HideInInspector] _VersionM ("Version M" , int) = 0 + [HideInInspector] _VersionL ("Version L" , int) = 0 + + } + + + + SubShader { + + LOD 0 + + AlphaToMask On + + Tags { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "Queue" = "AlphaTest" + } + + Pass { + Tags { + "LightMode" = "ForwardBase" + } + + Cull [_Culling] + Blend SrcAlpha OneMinusSrcAlpha + ZWrite [_EnableZWrite] + + Stencil { + Ref 2 + 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 2 + 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 Front + Blend SrcAlpha One + ZWrite Off + + Stencil { + Ref 2 + 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" = "ForwardAdd" + } + + Cull [_Culling] + 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" = "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" +} + \ No newline at end of file From 75d0983ed7df76fed90e46c2a64f2677eb147cc1 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Thu, 6 Aug 2020 21:44:02 -0400 Subject: [PATCH 02/56] Added some test stippling code --- Editor/SunaoShaderGUI.cs | 2 +- Shader/Cginc/SunaoShader_Core.cginc | 49 +++++++++---------- Shader/Cginc/SunaoShader_Frag.cginc | 1 + Shader/Cginc/SunaoShader_Function.cginc | 56 ++++++++++++++++++++++ Shader/Cginc/SunaoShader_SC.cginc | 9 ++++ Shader/Cginc/SunaoShader_Vert.cginc | 1 + Shader/Sunao_Shader_AlphaToCoverage.shader | 7 ++- 7 files changed, 96 insertions(+), 29 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index d9162ba..a7d0339 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -193,7 +193,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"); 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]" ); diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 8f58ffb..307318c 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -183,28 +183,29 @@ 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; #ifdef PASS_FB float3 shdir : LIGHTDIR1; @@ -213,8 +214,8 @@ struct VOUT { float4 vldirX : LIGHTDIR2; float4 vldirY : LIGHTDIR3; float4 vldirZ : LIGHTDIR4; - float4 vlcorr : TEXCOORD17; - float4 vlatn : TEXCOORD18; + float4 vlcorr : TEXCOORD18; + float4 vlatn : TEXCOORD19; #endif UNITY_FOG_COORDS(19) diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index a9c29a1..78dfc6b 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -462,6 +462,7 @@ float4 frag (VOUT IN) : COLOR { //-------------------------------------フォグ UNITY_APPLY_FOG(IN.fogCoord, OUT); + OUT.a = OUT.a * DotHalftone(IN.worldpos, 10, 0.0075); return OUT; } diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index 99e0386..521ee8b 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -148,3 +148,59 @@ float RimLightCalc(float3 normal , float3 view , float power , float gradient) return orim; } + +half3 calcViewDir(half3 worldPos) +{ + half3 viewDir = _WorldSpaceCameraPos - worldPos; + return normalize(viewDir); +} + +bool IsInMirror() +{ + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; +} + +// Halftone functions, finish implementing later.. Not correct right now. +float2 SphereUV( float3 coords /*viewDir?*/) +{ + 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; +} + +half2 rotateUV(half2 uv, half rotation) +{ + half mid = 0.5; + return half2( + cos(rotation) * (uv.x - mid) + sin(rotation) * (uv.y - mid) + mid, + cos(rotation) * (uv.y - mid) - sin(rotation) * (uv.x - mid) + mid + ); +} + +half DotHalftone(float4 worldPos, half halftoneDotAmount, half scalar) +{ + bool inMirror = IsInMirror(); + half2 uv = SphereUV(calcViewDir(worldPos)); + uv.xy *= halftoneDotAmount; + half2 nearest = 2 * frac(100 * uv) - 1; + half dist = length(nearest); + half dotSize = 100 * scalar; + half dotMask = step(dotSize, dist); + + return lerp(1, 1-dotMask, smoothstep(0, 0.4, 1/distance(worldPos, _WorldSpaceCameraPos)));; +} + +half LineHalftone(float4 worldPos, half scalar) +{ + bool inMirror = IsInMirror(); + half2 uv = SphereUV(calcViewDir(worldPos)); + uv = rotateUV(uv, -0.785398); + uv.x = sin(uv.x * scalar); + + half2 steppedUV = smoothstep(0,0.2,uv.x); + half lineMask = lerp(1, steppedUV, smoothstep(0, 0.4, 1/distance(worldPos, _WorldSpaceCameraPos))); + + return saturate(lineMask); +} diff --git a/Shader/Cginc/SunaoShader_SC.cginc b/Shader/Cginc/SunaoShader_SC.cginc index 2bbe8c1..adb2e99 100644 --- a/Shader/Cginc/SunaoShader_SC.cginc +++ b/Shader/Cginc/SunaoShader_SC.cginc @@ -5,6 +5,11 @@ #include "UnityCG.cginc" + #include "UnityShaderVariables.cginc" + #include "SunaoShader_Function.cginc" + + uniform float _Alpha; + uniform float _Cutout; struct VIN { float4 vertex : POSITION; @@ -15,6 +20,7 @@ struct VIN { struct VOUT { V2F_SHADOW_CASTER; float2 uv : TEXCOORD1; + float4 worldpos : TEXCOORD2; }; @@ -22,6 +28,7 @@ VOUT vert (VIN v) { VOUT o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.uv; + o.worldpos = mul(unity_ObjectToWorld, v.vertex); TRANSFER_SHADOW_CASTER(o) return o; @@ -29,5 +36,7 @@ VOUT vert (VIN v) { float4 frag (VOUT IN) : COLOR { + half alpha = DotHalftone(IN.worldpos, 10, 0.0075); + clip(alpha * _Alpha - _Cutout); SHADOW_CASTER_FRAGMENT(IN) } diff --git a/Shader/Cginc/SunaoShader_Vert.cginc b/Shader/Cginc/SunaoShader_Vert.cginc index e696822..f11207e 100644 --- a/Shader/Cginc/SunaoShader_Vert.cginc +++ b/Shader/Cginc/SunaoShader_Vert.cginc @@ -11,6 +11,7 @@ VOUT vert (VIN v) { //-------------------------------------頂点座標変換 o.pos = UnityObjectToClipPos(v.vertex); float3 PosW = mul(unity_ObjectToWorld , v.vertex).xyz; + o.worldpos = mul(unity_ObjectToWorld, v.vertex); //-------------------------------------UV o.uv = (v.uv * _MainTex_ST.xy) + _MainTex_ST.zw; diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 58ea1a8..2f51987 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -273,7 +273,6 @@ Shader "Sunao Shader/AlphaToCoverage" { } Cull [_Culling] - Blend SrcAlpha OneMinusSrcAlpha ZWrite [_EnableZWrite] CGPROGRAM @@ -298,7 +297,6 @@ Shader "Sunao Shader/AlphaToCoverage" { } Cull Front - Blend SrcAlpha OneMinusSrcAlpha ZWrite [_EnableZWrite] CGPROGRAM @@ -323,7 +321,7 @@ Shader "Sunao Shader/AlphaToCoverage" { } Cull Front - Blend SrcAlpha One + Blend One One ZWrite Off CGPROGRAM @@ -348,7 +346,7 @@ Shader "Sunao Shader/AlphaToCoverage" { } Cull [_Culling] - Blend SrcAlpha One + Blend One One ZWrite Off CGPROGRAM @@ -374,6 +372,7 @@ Shader "Sunao Shader/AlphaToCoverage" { ZWrite On ZTest LEqual + AlphaToMask Off CGPROGRAM #pragma vertex vert From f46ff457079a0f663e667be2a57776f9153cfc18 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Thu, 6 Aug 2020 21:54:13 -0400 Subject: [PATCH 03/56] Updated gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore 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 From 228012594bd3a0ee10ec8ceed94ef94583637860 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Thu, 6 Aug 2020 22:56:19 -0400 Subject: [PATCH 04/56] Added toggles for stippling & crosshatching --- Editor/SunaoShaderGUI.cs | 23 +++++++++++++++---- Shader/Cginc/SunaoShader_Core.cginc | 4 ++++ Shader/Cginc/SunaoShader_Frag.cginc | 4 +++- Shader/Sunao_Shader_AlphaToCoverage.shader | 4 ++++ Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 7 ++++-- Shader/Sunao_Shader_Cutout.shader | 4 ++++ Shader/Sunao_Shader_Cutout_SO.shader | 4 ++++ Shader/Sunao_Shader_Opaque.shader | 4 ++++ Shader/Sunao_Shader_Opaque_SO.shader | 4 ++++ Shader/Sunao_Shader_Transparent.shader | 4 ++++ Shader/Sunao_Shader_Transparent_SO.shader | 4 ++++ 11 files changed, 59 insertions(+), 7 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index a7d0339..43881d7 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -69,6 +69,9 @@ public class GUI : ShaderGUI { MaterialProperty Unlit; MaterialProperty MonochromeLit; + MaterialProperty StippleEnable; + MaterialProperty CrosshatchEnable; + MaterialProperty OutLineEnable; MaterialProperty OutLineMask; MaterialProperty OutLineColor; @@ -114,7 +117,7 @@ public class GUI : ShaderGUI { MaterialProperty ParallaxAnimX; MaterialProperty ParallaxAnimY; MaterialProperty ParallaxLighting; - MaterialProperty IgnoreTexAlphaPE; + MaterialProperty IgnoreTexAlphaPE; MaterialProperty ParallaxInTheDark; MaterialProperty ReflectionEnable; @@ -289,6 +292,9 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { Unlit = FindProperty("_Unlit" , Prop , false); MonochromeLit = FindProperty("_MonochromeLit" , Prop , false); + StippleEnable = FindProperty("_StippleEnable" , Prop , false); + CrosshatchEnable = FindProperty("_CrosshatchEnable" , Prop , false); + OutLineEnable = FindProperty("_OutLineEnable" , Prop , false); OutLineMask = FindProperty("_OutLineMask" , Prop , false); OutLineColor = FindProperty("_OutLineColor" , Prop , false); @@ -490,7 +496,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 +504,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 { @@ -631,6 +637,15 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { } + GUILayout.Label("Stippling", EditorStyles.boldLabel); + + using (new EditorGUILayout.VerticalScope("box")) { + + ME.ShaderProperty(StippleEnable, new GUIContent("Enable Stippling")); + ME.ShaderProperty(CrosshatchEnable, new GUIContent("Enable Crosshatching")); + } + + GUILayout.Label("Outline", EditorStyles.boldLabel); using (new EditorGUILayout.VerticalScope("box")) { @@ -1001,7 +1016,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { GUILayout.Label("Render Queue" , EditorStyles.boldLabel); ME.RenderQueueField(); - + } } else { diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 307318c..423bd61 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -67,6 +67,10 @@ uniform float _Unlit; uniform bool _MonochromeLit; +//----Stippling + uniform bool _StippleEnable; + uniform bool _CrosshatchEnable; + //----Emission uniform bool _EmissionEnable; uniform sampler2D _EmissionMap; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 78dfc6b..fb45459 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -462,7 +462,9 @@ float4 frag (VOUT IN) : COLOR { //-------------------------------------フォグ UNITY_APPLY_FOG(IN.fogCoord, OUT); - OUT.a = OUT.a * DotHalftone(IN.worldpos, 10, 0.0075); + if (_StippleEnable) { + OUT.a = OUT.a * DotHalftone(IN.worldpos, 10, 0.0075); + } return OUT; } diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 2f51987..da55e02 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -87,6 +87,10 @@ Shader "Sunao Shader/AlphaToCoverage" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 00fc8d0..48be167 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -87,6 +87,10 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 @@ -288,7 +292,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { #pragma multi_compile_fwdbase #pragma multi_compile_fog #pragma target 4.5 - + #define TRANSPARENT #define PASS_FB @@ -411,4 +415,3 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { CustomEditor "SunaoShader.GUI" } - \ No newline at end of file diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index d12d9ff..6f01b47 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -93,6 +93,10 @@ Shader "Sunao Shader/Cutout" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index 99ce1a2..46e0056 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -93,6 +93,10 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 96db729..8fa765c 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -93,6 +93,10 @@ Shader "Sunao Shader/Opaque" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index dd9ce7e..40b415d 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -93,6 +93,10 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 6e04cc0..00af612 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -93,6 +93,10 @@ Shader "Sunao Shader/Transparent" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 8e6454b..e5772fa 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -93,6 +93,10 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _StippleEnable ("Enable Stippling" , int) = 0 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 From 01f04c106637a0f0c8637d82907bb58f987271b5 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Fri, 7 Aug 2020 15:15:04 -0400 Subject: [PATCH 05/56] Added Stipple & Crosshatch mask/texture & settings --- Editor/SunaoShaderGUI.cs | 37 +++++++++++++++++-- Shader/Cginc/SunaoShader_Core.cginc | 9 ++++- Shader/Cginc/SunaoShader_Frag.cginc | 21 ++++++++++- Shader/Cginc/SunaoShader_SC.cginc | 21 ++++++++++- Shader/Sunao_Shader_AlphaToCoverage.shader | 7 ++++ Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 7 ++++ Shader/Sunao_Shader_Cutout.shader | 11 +++++- Shader/Sunao_Shader_Cutout_SO.shader | 7 ++++ Shader/Sunao_Shader_Opaque.shader | 7 ++++ Shader/Sunao_Shader_Opaque_SO.shader | 7 ++++ Shader/Sunao_Shader_Transparent.shader | 7 ++++ Shader/Sunao_Shader_Transparent_SO.shader | 7 ++++ 12 files changed, 139 insertions(+), 9 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 43881d7..48a91b5 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -70,7 +70,14 @@ public class GUI : ShaderGUI { MaterialProperty MonochromeLit; MaterialProperty StippleEnable; + MaterialProperty StippleMask; + MaterialProperty StippleTexture; + MaterialProperty StippleSize; + MaterialProperty StippleAmount; MaterialProperty CrosshatchEnable; + MaterialProperty CrosshatchMask; + MaterialProperty CrosshatchTexture; + MaterialProperty CrosshatchAmount; MaterialProperty OutLineEnable; MaterialProperty OutLineMask; @@ -293,7 +300,14 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { MonochromeLit = FindProperty("_MonochromeLit" , Prop , false); StippleEnable = FindProperty("_StippleEnable" , Prop , false); + StippleMask = FindProperty("_StippleMask" , Prop , false); + StippleTexture = FindProperty("_StippleTexture" , Prop , false); + StippleSize = FindProperty("_StippleSize" , Prop , false); + StippleAmount = FindProperty("_StippleAmount" , Prop , false); CrosshatchEnable = FindProperty("_CrosshatchEnable" , Prop , false); + CrosshatchMask = FindProperty("_CrosshatchMask" , Prop , false); + CrosshatchTexture = FindProperty("_CrosshatchTexture" , Prop , false); + CrosshatchAmount = FindProperty("_CrosshatchAmount" , Prop , false); OutLineEnable = FindProperty("_OutLineEnable" , Prop , false); OutLineMask = FindProperty("_OutLineMask" , Prop , false); @@ -637,12 +651,29 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { } - GUILayout.Label("Stippling", EditorStyles.boldLabel); + 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.TexturePropertySingleLine(new GUIContent("Stipple Texture"), StippleTexture); + ME.ShaderProperty(StippleSize, new GUIContent("Stipple Size")); + ME.ShaderProperty(StippleAmount, new GUIContent("Stipple Amount")); + } - ME.ShaderProperty(StippleEnable, new GUIContent("Enable Stippling")); - ME.ShaderProperty(CrosshatchEnable, new GUIContent("Enable Crosshatching")); + 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.TexturePropertySingleLine(new GUIContent("Crosshatch Texture"), CrosshatchTexture); + ME.ShaderProperty(CrosshatchAmount, new GUIContent("Crosshatch Amount")); + } } diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 423bd61..ab56c74 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -67,9 +67,16 @@ uniform float _Unlit; uniform bool _MonochromeLit; -//----Stippling +//----Stippling & Crosshatching uniform bool _StippleEnable; + UNITY_DECLARE_TEX2D_NOSAMPLER(_StippleMask); + UNITY_DECLARE_TEX2D_NOSAMPLER(_StippleTexture); + uniform float _StippleSize; + uniform float _StippleAmount; uniform bool _CrosshatchEnable; + UNITY_DECLARE_TEX2D_NOSAMPLER(_CrosshatchMask); + UNITY_DECLARE_TEX2D_NOSAMPLER(_CrosshatchTexture); + uniform float _CrosshatchAmount; //----Emission uniform bool _EmissionEnable; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index fb45459..448ab8f 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -83,6 +83,20 @@ float4 frag (VOUT IN) : COLOR { } } +//----Stippling & crosshatching + half dot_halftone = 1.0f; + half line_halftone = 1.0f; + + if (_StippleEnable) { + dot_halftone = DotHalftone(IN.worldpos, lerp(1, 10, _StippleAmount), lerp(0, 0.015, _StippleSize)); + Color = lerp(Color, UNITY_SAMPLE_TEX2D_SAMPLER(_StippleTexture, _MainTex , SubUV).rgb, UNITY_SAMPLE_TEX2D_SAMPLER(_StippleMask, _MainTex , SubUV).rgb * dot_halftone); + } + + if (_CrosshatchEnable) { + line_halftone = LineHalftone(IN.worldpos, lerp(500, 6000, _CrosshatchAmount)); + Color = lerp(Color, UNITY_SAMPLE_TEX2D_SAMPLER(_CrosshatchTexture, _MainTex , SubUV).rgb, UNITY_SAMPLE_TEX2D_SAMPLER(_CrosshatchMask, _MainTex , SubUV).rgb * line_halftone); + } + //----オクルージョン if (_OcclusionMode == 1) Color *= lerp(1.0f , UNITY_SAMPLE_TEX2D_SAMPLER(_OcclusionMap , _MainTex , SubUV).rgb , _OcclusionStrength); @@ -462,8 +476,13 @@ float4 frag (VOUT IN) : COLOR { //-------------------------------------フォグ UNITY_APPLY_FOG(IN.fogCoord, OUT); +//----Stippling & halftone alpha if (_StippleEnable) { - OUT.a = OUT.a * DotHalftone(IN.worldpos, 10, 0.0075); + OUT.a *= lerp(1.0f, dot_halftone, 1.0f - UNITY_SAMPLE_TEX2D_SAMPLER(_StippleMask, _MainTex , SubUV).a); + } + + if (_CrosshatchEnable) { + OUT.a *= lerp(1.0f, line_halftone, 1.0f - UNITY_SAMPLE_TEX2D_SAMPLER(_CrosshatchMask, _MainTex , SubUV).a); } return OUT; diff --git a/Shader/Cginc/SunaoShader_SC.cginc b/Shader/Cginc/SunaoShader_SC.cginc index adb2e99..168bcb5 100644 --- a/Shader/Cginc/SunaoShader_SC.cginc +++ b/Shader/Cginc/SunaoShader_SC.cginc @@ -10,6 +10,13 @@ uniform float _Alpha; uniform float _Cutout; + uniform bool _StippleEnable; + uniform float _StippleSize; + uniform float _StippleAmount; + UNITY_DECLARE_TEX2D(_StippleMask); + uniform bool _CrosshatchEnable; + uniform float _CrosshatchAmount; + UNITY_DECLARE_TEX2D(_CrosshatchMask); struct VIN { float4 vertex : POSITION; @@ -36,7 +43,17 @@ VOUT vert (VIN v) { float4 frag (VOUT IN) : COLOR { - half alpha = DotHalftone(IN.worldpos, 10, 0.0075); - clip(alpha * _Alpha - _Cutout); + if (_StippleEnable) { + half halftone = DotHalftone(IN.worldpos, lerp(1, 10, _StippleAmount), lerp(0, 0.015, _StippleSize)); + float alpha = lerp(1.0f, halftone, 1.0f - UNITY_SAMPLE_TEX2D(_StippleMask, IN.uv).a); + clip(alpha * _Alpha - _Cutout); + } + + if (_CrosshatchEnable) { + half halftone = LineHalftone(IN.worldpos, lerp(500, 6000, _CrosshatchAmount)); + float alpha = lerp(1.0f, halftone, 1.0f - UNITY_SAMPLE_TEX2D(_CrosshatchMask, IN.uv).a); + clip(alpha * _Alpha - _Cutout); + } + SHADOW_CASTER_FRAGMENT(IN) } diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index da55e02..ae1c478 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -89,8 +89,15 @@ Shader "Sunao Shader/AlphaToCoverage" { [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 48be167..7673717 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -89,8 +89,15 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 6f01b47..477086f 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -95,8 +95,15 @@ Shader "Sunao Shader/Cutout" { [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 - [SToggle] - _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 + [SToggle] + _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index 46e0056..ff80a8b 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -95,8 +95,15 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 8fa765c..8085ebc 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -95,8 +95,15 @@ Shader "Sunao Shader/Opaque" { [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index 40b415d..e7e41d1 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -95,8 +95,15 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 00af612..df47e53 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -95,8 +95,15 @@ Shader "Sunao Shader/Transparent" { [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index e5772fa..8116551 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -95,8 +95,15 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 + _StippleMask ("Stipple Mask" , 2D) = "white" {} + _StippleTexture ("Stipple Texture" , 2D) = "black" {} + _StippleSize ("Stipple Size" , Range( 0.0, 1.0)) = 0.5 + _StippleAmount ("Stipple Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 + _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} + _CrosshatchTexture ("Crosshatch Texture" , 2D) = "black" {} + _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 [SToggle] _OutLineEnable ("Enable Outline" , int) = 0 From 3fbe9967f26f7362de51995cc02c22247cfc5c78 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Fri, 7 Aug 2020 21:51:27 -0400 Subject: [PATCH 06/56] Move texture accesses outside of conditionals --- Shader/Cginc/SunaoShader_Core.cginc | 4 ++++ Shader/Cginc/SunaoShader_Frag.cginc | 23 ++++++++++------------- Shader/Cginc/SunaoShader_Function.cginc | 2 -- Shader/Cginc/SunaoShader_SC.cginc | 11 +++++++---- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index ab56c74..70d8190 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -70,12 +70,16 @@ //----Stippling & Crosshatching uniform bool _StippleEnable; UNITY_DECLARE_TEX2D_NOSAMPLER(_StippleMask); + uniform float4 _StippleMask_ST; UNITY_DECLARE_TEX2D_NOSAMPLER(_StippleTexture); + uniform float4 _StippleTexture_ST; uniform float _StippleSize; uniform float _StippleAmount; uniform bool _CrosshatchEnable; UNITY_DECLARE_TEX2D_NOSAMPLER(_CrosshatchMask); + uniform float4 _CrosshatchMask_ST; UNITY_DECLARE_TEX2D_NOSAMPLER(_CrosshatchTexture); + uniform float4 _CrosshatchTexture_ST; uniform float _CrosshatchAmount; //----Emission diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 448ab8f..3bf6d6d 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -84,18 +84,15 @@ float4 frag (VOUT IN) : COLOR { } //----Stippling & crosshatching - half dot_halftone = 1.0f; - half line_halftone = 1.0f; + half dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, _StippleSize)); + half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); + 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, _StippleTexture)); + 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)); - if (_StippleEnable) { - dot_halftone = DotHalftone(IN.worldpos, lerp(1, 10, _StippleAmount), lerp(0, 0.015, _StippleSize)); - Color = lerp(Color, UNITY_SAMPLE_TEX2D_SAMPLER(_StippleTexture, _MainTex , SubUV).rgb, UNITY_SAMPLE_TEX2D_SAMPLER(_StippleMask, _MainTex , SubUV).rgb * dot_halftone); - } - - if (_CrosshatchEnable) { - line_halftone = LineHalftone(IN.worldpos, lerp(500, 6000, _CrosshatchAmount)); - Color = lerp(Color, UNITY_SAMPLE_TEX2D_SAMPLER(_CrosshatchTexture, _MainTex , SubUV).rgb, UNITY_SAMPLE_TEX2D_SAMPLER(_CrosshatchMask, _MainTex , SubUV).rgb * line_halftone); - } + if (_StippleEnable) Color = lerp(Color, stipple_color.rgb, stipple_mask.rgb * dot_halftone); + if (_CrosshatchEnable) Color = lerp(Color, crosshatch_color.rgb, crosshatch_mask.rgb * line_halftone); //----オクルージョン if (_OcclusionMode == 1) Color *= lerp(1.0f , UNITY_SAMPLE_TEX2D_SAMPLER(_OcclusionMap , _MainTex , SubUV).rgb , _OcclusionStrength); @@ -478,11 +475,11 @@ float4 frag (VOUT IN) : COLOR { //----Stippling & halftone alpha if (_StippleEnable) { - OUT.a *= lerp(1.0f, dot_halftone, 1.0f - UNITY_SAMPLE_TEX2D_SAMPLER(_StippleMask, _MainTex , SubUV).a); + OUT.a *= lerp(1.0f, dot_halftone, 1.0f - stipple_mask.a); } if (_CrosshatchEnable) { - OUT.a *= lerp(1.0f, line_halftone, 1.0f - UNITY_SAMPLE_TEX2D_SAMPLER(_CrosshatchMask, _MainTex , SubUV).a); + OUT.a *= lerp(1.0f, line_halftone, 1.0f - crosshatch_mask.a); } return OUT; diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index 521ee8b..7b6fa71 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -181,7 +181,6 @@ half2 rotateUV(half2 uv, half rotation) half DotHalftone(float4 worldPos, half halftoneDotAmount, half scalar) { - bool inMirror = IsInMirror(); half2 uv = SphereUV(calcViewDir(worldPos)); uv.xy *= halftoneDotAmount; half2 nearest = 2 * frac(100 * uv) - 1; @@ -194,7 +193,6 @@ half DotHalftone(float4 worldPos, half halftoneDotAmount, half scalar) half LineHalftone(float4 worldPos, half scalar) { - bool inMirror = IsInMirror(); half2 uv = SphereUV(calcViewDir(worldPos)); uv = rotateUV(uv, -0.785398); uv.x = sin(uv.x * scalar); diff --git a/Shader/Cginc/SunaoShader_SC.cginc b/Shader/Cginc/SunaoShader_SC.cginc index 168bcb5..55eb8d0 100644 --- a/Shader/Cginc/SunaoShader_SC.cginc +++ b/Shader/Cginc/SunaoShader_SC.cginc @@ -43,15 +43,18 @@ VOUT vert (VIN v) { float4 frag (VOUT IN) : COLOR { + half dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, _StippleSize)); + half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); + float4 stipple_mask = UNITY_SAMPLE_TEX2D(_StippleMask, IN.uv); + float4 crosshatch_mask = UNITY_SAMPLE_TEX2D(_CrosshatchMask, IN.uv); + if (_StippleEnable) { - half halftone = DotHalftone(IN.worldpos, lerp(1, 10, _StippleAmount), lerp(0, 0.015, _StippleSize)); - float alpha = lerp(1.0f, halftone, 1.0f - UNITY_SAMPLE_TEX2D(_StippleMask, IN.uv).a); + float alpha = lerp(1.0f, dot_halftone, 1.0f - stipple_mask.a); clip(alpha * _Alpha - _Cutout); } if (_CrosshatchEnable) { - half halftone = LineHalftone(IN.worldpos, lerp(500, 6000, _CrosshatchAmount)); - float alpha = lerp(1.0f, halftone, 1.0f - UNITY_SAMPLE_TEX2D(_CrosshatchMask, IN.uv).a); + float alpha = lerp(1.0f, line_halftone, 1.0f - crosshatch_mask.a); clip(alpha * _Alpha - _Cutout); } From 61a371937995ee3ab438f0f0b61f71a9df29003f Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sat, 8 Aug 2020 04:32:59 -0400 Subject: [PATCH 07/56] Added stipple/crosshatch emission map support --- Editor/SunaoShaderGUI.cs | 6 ++++++ Shader/Cginc/SunaoShader_Core.cginc | 4 ++++ Shader/Cginc/SunaoShader_Frag.cginc | 5 +++++ Shader/Sunao_Shader_AlphaToCoverage.shader | 2 ++ Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 2 ++ Shader/Sunao_Shader_Cutout.shader | 2 ++ Shader/Sunao_Shader_Cutout_SO.shader | 2 ++ Shader/Sunao_Shader_Opaque.shader | 2 ++ Shader/Sunao_Shader_Opaque_SO.shader | 2 ++ Shader/Sunao_Shader_Transparent.shader | 2 ++ Shader/Sunao_Shader_Transparent_SO.shader | 2 ++ 11 files changed, 31 insertions(+) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 48a91b5..897ef24 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -72,11 +72,13 @@ public class GUI : ShaderGUI { MaterialProperty StippleEnable; MaterialProperty StippleMask; MaterialProperty StippleTexture; + MaterialProperty StippleEmissionMap; MaterialProperty StippleSize; MaterialProperty StippleAmount; MaterialProperty CrosshatchEnable; MaterialProperty CrosshatchMask; MaterialProperty CrosshatchTexture; + MaterialProperty CrosshatchEmissionMap; MaterialProperty CrosshatchAmount; MaterialProperty OutLineEnable; @@ -302,11 +304,13 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { 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); 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); OutLineEnable = FindProperty("_OutLineEnable" , Prop , false); @@ -661,6 +665,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { ME.ShaderProperty(StippleEnable, new GUIContent("Enable Stippling")); ME.TexturePropertySingleLine(new GUIContent("Stipple Mask"), StippleMask); ME.TexturePropertySingleLine(new GUIContent("Stipple Texture"), StippleTexture); + ME.TexturePropertySingleLine(new GUIContent("Stipple Emission Mask"), StippleEmissionMap); ME.ShaderProperty(StippleSize, new GUIContent("Stipple Size")); ME.ShaderProperty(StippleAmount, new GUIContent("Stipple Amount")); } @@ -672,6 +677,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { ME.ShaderProperty(CrosshatchEnable, new GUIContent("Enable Crosshatching")); ME.TexturePropertySingleLine(new GUIContent("Crosshatch Mask"), CrosshatchMask); ME.TexturePropertySingleLine(new GUIContent("Crosshatch Texture"), CrosshatchTexture); + ME.TexturePropertySingleLine(new GUIContent("Crosshatch Emission Mask"), CrosshatchEmissionMap); ME.ShaderProperty(CrosshatchAmount, new GUIContent("Crosshatch Amount")); } } diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 70d8190..81e8167 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -73,6 +73,8 @@ 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 bool _CrosshatchEnable; @@ -80,6 +82,8 @@ 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; //----Emission diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 3bf6d6d..398a33e 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -88,8 +88,10 @@ float4 frag (VOUT IN) : COLOR { half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); 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, _StippleTexture)); + float4 stipple_emission_map = UNITY_SAMPLE_TEX2D_SAMPLER(_StippleEmissionMap, _MainTex, TRANSFORM_TEX(SubUV, _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, _CrosshatchEmissionMap)); if (_StippleEnable) Color = lerp(Color, stipple_color.rgb, stipple_mask.rgb * dot_halftone); if (_CrosshatchEnable) Color = lerp(Color, crosshatch_color.rgb, crosshatch_mask.rgb * line_halftone); @@ -214,6 +216,9 @@ float4 frag (VOUT IN) : COLOR { 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 (_StippleEnable) Emission = lerp(Emission, stipple_emission_map.rgb, stipple_mask.rgb * dot_halftone); + if (_CrosshatchEnable) Emission = 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)); diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index ae1c478..b248714 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -91,12 +91,14 @@ Shader "Sunao Shader/AlphaToCoverage" { _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 [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 [SToggle] diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 7673717..5f49295 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -91,12 +91,14 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _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 [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 [SToggle] diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 477086f..074aef9 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -97,12 +97,14 @@ Shader "Sunao Shader/Cutout" { _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 [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 [SToggle] diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index ff80a8b..d0916d4 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -97,12 +97,14 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { _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 [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 [SToggle] diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 8085ebc..a7505f2 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -97,12 +97,14 @@ Shader "Sunao Shader/Opaque" { _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 [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 [SToggle] diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index e7e41d1..fa73eee 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -97,12 +97,14 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { _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 [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 [SToggle] diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index df47e53..e0390ad 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -97,12 +97,14 @@ Shader "Sunao Shader/Transparent" { _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 [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 [SToggle] diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 8116551..344a160 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -97,12 +97,14 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { _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 [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 [SToggle] From 05f723440ea7f0bf232c26c9c7da21a23f092fa2 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sat, 8 Aug 2020 10:01:35 -0400 Subject: [PATCH 08/56] Add emission intensity and animation --- Shader/Cginc/SunaoShader_Frag.cginc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 398a33e..4aa6553 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -216,8 +216,11 @@ float4 frag (VOUT IN) : COLOR { 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 (_StippleEnable) Emission = lerp(Emission, stipple_emission_map.rgb, stipple_mask.rgb * dot_halftone); - if (_CrosshatchEnable) Emission = lerp(Emission, crosshatch_emission_map.rgb, crosshatch_mask.rgb * line_halftone); + 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 From 92a92ef7e57cb53b949a10214d108834b687d5a4 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sun, 9 Aug 2020 16:29:32 -0400 Subject: [PATCH 09/56] Emission scroll & stipple animation --- Editor/SunaoShaderGUI.cs | 6 ++++++ Shader/Cginc/SunaoShader_Core.cginc | 2 ++ Shader/Cginc/SunaoShader_Frag.cginc | 5 +++-- Shader/Sunao_Shader_AlphaToCoverage.shader | 2 ++ Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 2 ++ Shader/Sunao_Shader_Cutout.shader | 2 ++ Shader/Sunao_Shader_Cutout_SO.shader | 2 ++ Shader/Sunao_Shader_Opaque.shader | 2 ++ Shader/Sunao_Shader_Opaque_SO.shader | 2 ++ Shader/Sunao_Shader_Transparent.shader | 2 ++ Shader/Sunao_Shader_Transparent_SO.shader | 2 ++ 11 files changed, 27 insertions(+), 2 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 897ef24..700b8e3 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -75,6 +75,8 @@ public class GUI : ShaderGUI { MaterialProperty StippleEmissionMap; MaterialProperty StippleSize; MaterialProperty StippleAmount; + MaterialProperty StippleAnimation; + MaterialProperty StippleFrequency; MaterialProperty CrosshatchEnable; MaterialProperty CrosshatchMask; MaterialProperty CrosshatchTexture; @@ -307,6 +309,8 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { StippleEmissionMap = FindProperty("_StippleEmissionMap", Prop, false); StippleSize = FindProperty("_StippleSize" , Prop , false); StippleAmount = FindProperty("_StippleAmount" , Prop , false); + StippleAnimation = FindProperty("_StippleAnimation" , Prop , false); + StippleFrequency = FindProperty("_StippleFrequency" , Prop , false); CrosshatchEnable = FindProperty("_CrosshatchEnable" , Prop , false); CrosshatchMask = FindProperty("_CrosshatchMask" , Prop , false); CrosshatchTexture = FindProperty("_CrosshatchTexture" , Prop , false); @@ -668,6 +672,8 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { ME.TexturePropertySingleLine(new GUIContent("Stipple Emission Mask"), StippleEmissionMap); ME.ShaderProperty(StippleSize, new GUIContent("Stipple Size")); ME.ShaderProperty(StippleAmount, new GUIContent("Stipple Amount")); + ME.ShaderProperty(StippleAnimation, new GUIContent("Stipple Animation")); + ME.ShaderProperty(StippleFrequency, new GUIContent("Stipple Frequency")); } using (new EditorGUILayout.VerticalScope("box")) { diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 81e8167..dd182be 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -77,6 +77,8 @@ uniform float4 _StippleEmissionMap_ST; uniform float _StippleSize; uniform float _StippleAmount; + uniform float _StippleAnimation; + uniform float _StippleFrequency; uniform bool _CrosshatchEnable; UNITY_DECLARE_TEX2D_NOSAMPLER(_CrosshatchMask); uniform float4 _CrosshatchMask_ST; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 4aa6553..adf1899 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -86,12 +86,13 @@ float4 frag (VOUT IN) : COLOR { //----Stippling & crosshatching half dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, _StippleSize)); half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); + 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, _StippleTexture)); - float4 stipple_emission_map = UNITY_SAMPLE_TEX2D_SAMPLER(_StippleEmissionMap, _MainTex, TRANSFORM_TEX(SubUV, _StippleEmissionMap)); + 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, _CrosshatchEmissionMap)); + float4 crosshatch_emission_map = UNITY_SAMPLE_TEX2D_SAMPLER(_CrosshatchEmissionMap, _MainTex, TRANSFORM_TEX(SubUV + emission_scroll, _CrosshatchEmissionMap)); if (_StippleEnable) Color = lerp(Color, stipple_color.rgb, stipple_mask.rgb * dot_halftone); if (_CrosshatchEnable) Color = lerp(Color, crosshatch_color.rgb, crosshatch_mask.rgb * line_halftone); diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index b248714..77f7119 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -94,6 +94,8 @@ Shader "Sunao Shader/AlphaToCoverage" { _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 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 5f49295..efeaaab 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -94,6 +94,8 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _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 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 074aef9..bebd8c1 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -100,6 +100,8 @@ Shader "Sunao Shader/Cutout" { _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 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index d0916d4..217c63b 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -100,6 +100,8 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { _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 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index a7505f2..5530e5b 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -100,6 +100,8 @@ Shader "Sunao Shader/Opaque" { _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 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index fa73eee..8c1a518 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -100,6 +100,8 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { _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 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index e0390ad..ac383ae 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -100,6 +100,8 @@ Shader "Sunao Shader/Transparent" { _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 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 344a160..80ba007 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -100,6 +100,8 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { _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 + _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} From 1a2f228faca830ec60b5afa955e229bea07295e0 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sun, 9 Aug 2020 18:03:24 -0400 Subject: [PATCH 10/56] Add "wave" stipple animation --- Shader/Cginc/SunaoShader_Core.cginc | 5 +++-- Shader/Cginc/SunaoShader_Frag.cginc | 3 ++- Shader/Cginc/SunaoShader_Vert.cginc | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index dd182be..9b08902 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -227,6 +227,7 @@ struct VOUT { float3 peprm : TEXCOORD15; float3 pview : TEXCOORD16; float4 worldpos : TEXCOORD17; + float4 objpos : TEXCOORD18; #ifdef PASS_FB float3 shdir : LIGHTDIR1; @@ -235,8 +236,8 @@ struct VOUT { float4 vldirX : LIGHTDIR2; float4 vldirY : LIGHTDIR3; float4 vldirZ : LIGHTDIR4; - float4 vlcorr : TEXCOORD18; - float4 vlatn : TEXCOORD19; + float4 vlcorr : TEXCOORD19; + float4 vlatn : TEXCOORD20; #endif UNITY_FOG_COORDS(19) diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index adf1899..02263f5 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -84,7 +84,8 @@ float4 frag (VOUT IN) : COLOR { } //----Stippling & crosshatching - half dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, _StippleSize)); + float stipple_size = clamp(_StippleSize + sin(IN.objpos.y * 30 + _Time.y * _StippleFrequency) * _StippleAnimation, 0.0f, 1.0f); + half dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, stipple_size)); half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); float2 emission_scroll = float2(_EmissionScrX , _EmissionScrY) * _Time.y; float4 stipple_color = UNITY_SAMPLE_TEX2D_SAMPLER(_StippleTexture, _MainTex, TRANSFORM_TEX(SubUV, _StippleTexture)); diff --git a/Shader/Cginc/SunaoShader_Vert.cginc b/Shader/Cginc/SunaoShader_Vert.cginc index f11207e..c24d5d8 100644 --- a/Shader/Cginc/SunaoShader_Vert.cginc +++ b/Shader/Cginc/SunaoShader_Vert.cginc @@ -12,6 +12,7 @@ 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); //-------------------------------------UV o.uv = (v.uv * _MainTex_ST.xy) + _MainTex_ST.zw; From cd40a2e85863a14885740e70d40dc5bdd4c29b43 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Mon, 10 Aug 2020 21:24:33 -0400 Subject: [PATCH 11/56] Added stipple mode & speed/freq settings --- Editor/SunaoShaderGUI.cs | 6 ++++++ Shader/Cginc/SunaoShader_Core.cginc | 2 ++ Shader/Cginc/SunaoShader_Frag.cginc | 5 ++++- Shader/Sunao_Shader_AlphaToCoverage.shader | 7 +++++-- Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 7 +++++-- Shader/Sunao_Shader_Cutout.shader | 7 +++++-- Shader/Sunao_Shader_Cutout_SO.shader | 7 +++++-- Shader/Sunao_Shader_Opaque.shader | 7 +++++-- Shader/Sunao_Shader_Opaque_SO.shader | 7 +++++-- Shader/Sunao_Shader_Transparent.shader | 7 +++++-- Shader/Sunao_Shader_Transparent_SO.shader | 7 +++++-- 11 files changed, 52 insertions(+), 17 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 700b8e3..361aadf 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -75,7 +75,9 @@ public class GUI : ShaderGUI { MaterialProperty StippleEmissionMap; MaterialProperty StippleSize; MaterialProperty StippleAmount; + MaterialProperty StippleMode; MaterialProperty StippleAnimation; + MaterialProperty StippleSpeed; MaterialProperty StippleFrequency; MaterialProperty CrosshatchEnable; MaterialProperty CrosshatchMask; @@ -309,7 +311,9 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { 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); CrosshatchEnable = FindProperty("_CrosshatchEnable" , Prop , false); CrosshatchMask = FindProperty("_CrosshatchMask" , Prop , false); @@ -672,7 +676,9 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { ME.TexturePropertySingleLine(new GUIContent("Stipple Emission Mask"), 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")); } diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 9b08902..0951e98 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -77,7 +77,9 @@ uniform float4 _StippleEmissionMap_ST; uniform float _StippleSize; uniform float _StippleAmount; + uniform uint _StippleMode; uniform float _StippleAnimation; + uniform float _StippleSpeed; uniform float _StippleFrequency; uniform bool _CrosshatchEnable; UNITY_DECLARE_TEX2D_NOSAMPLER(_CrosshatchMask); diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 02263f5..7bccdf2 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -84,7 +84,10 @@ float4 frag (VOUT IN) : COLOR { } //----Stippling & crosshatching - float stipple_size = clamp(_StippleSize + sin(IN.objpos.y * 30 + _Time.y * _StippleFrequency) * _StippleAnimation, 0.0f, 1.0f); + 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); + half dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, stipple_size)); half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); float2 emission_scroll = float2(_EmissionScrX , _EmissionScrY) * _Time.y; diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 77f7119..008419f 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -94,8 +94,11 @@ Shader "Sunao Shader/AlphaToCoverage" { _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 - _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 - _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 + [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, 10.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index efeaaab..f46eede 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -94,8 +94,11 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _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 - _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 - _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 + [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, 10.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index bebd8c1..dd263fa 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -100,8 +100,11 @@ Shader "Sunao Shader/Cutout" { _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 - _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 - _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 + [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, 10.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index 217c63b..0c89463 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -100,8 +100,11 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { _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 - _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 - _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 + [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, 10.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 5530e5b..15adbff 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -100,8 +100,11 @@ Shader "Sunao Shader/Opaque" { _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 - _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 - _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 + [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, 10.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index 8c1a518..0a704c0 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -100,8 +100,11 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { _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 - _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 - _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 + [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, 10.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index ac383ae..d9edd54 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -100,8 +100,11 @@ Shader "Sunao Shader/Transparent" { _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 - _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 - _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 + [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, 10.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 80ba007..6722a7e 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -100,8 +100,11 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { _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 - _StippleAnimation ("Stipple Animation" , Range(0.0, 1.0)) = 0.0 - _StippleFrequency ("Stipple Frequency" , Range(0.0, 10.0)) = 1.0 + [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, 10.0)) = 1.0 + _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 _CrosshatchMask ("Crosshatch Mask" , 2D) = "white" {} From 3863a7cbd23a94975cc68346db77721756a94e24 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Mon, 10 Aug 2020 21:34:09 -0400 Subject: [PATCH 12/56] Raise max stipple speed --- Shader/Sunao_Shader_AlphaToCoverage.shader | 2 +- Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 2 +- Shader/Sunao_Shader_Cutout.shader | 2 +- Shader/Sunao_Shader_Cutout_SO.shader | 2 +- Shader/Sunao_Shader_Opaque.shader | 2 +- Shader/Sunao_Shader_Opaque_SO.shader | 2 +- Shader/Sunao_Shader_Transparent.shader | 2 +- Shader/Sunao_Shader_Transparent_SO.shader | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 008419f..1b92609 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -97,7 +97,7 @@ Shader "Sunao Shader/AlphaToCoverage" { [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, 10.0)) = 1.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index f46eede..ca633ee 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -97,7 +97,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [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, 10.0)) = 1.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index dd263fa..1d53b7a 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -103,7 +103,7 @@ Shader "Sunao Shader/Cutout" { [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, 10.0)) = 1.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index 0c89463..ff246e9 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -103,7 +103,7 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [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, 10.0)) = 1.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 15adbff..2201b6c 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -103,7 +103,7 @@ Shader "Sunao Shader/Opaque" { [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, 10.0)) = 1.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index 0a704c0..c380530 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -103,7 +103,7 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [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, 10.0)) = 1.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index d9edd54..59075f5 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -103,7 +103,7 @@ Shader "Sunao Shader/Transparent" { [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, 10.0)) = 1.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 6722a7e..ab9360e 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -103,7 +103,7 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [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, 10.0)) = 1.0 + _StippleSpeed ("Stipple Speed" , Range(0.0, 50.0)) = 1.0 _StippleFrequency ("Stipple Frequency" , Range(0.0, 200.0)) = 30.0 [SToggle] _CrosshatchEnable ("Enable Crosshatching" , int) = 0 From cf362518f0afc8c1e1224793762f3a61e091d9b5 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Thu, 13 Aug 2020 12:47:58 -0400 Subject: [PATCH 13/56] Added fix to avoid poles --- Shader/Cginc/SunaoShader_Function.cginc | 28 +++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index 7b6fa71..ce6e27a 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -149,10 +149,34 @@ float RimLightCalc(float3 normal , float3 view , float power , float gradient) return orim; } +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); +} + half3 calcViewDir(half3 worldPos) { - half3 viewDir = _WorldSpaceCameraPos - worldPos; - return normalize(viewDir); + half3 camDir = normalize(mul(UNITY_MATRIX_V, float4(0, 1, 0, 0)).xyz); + half3 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; } bool IsInMirror() From 2f2dc09dadad9078e614ac8beb0d91cb000bcc66 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Mon, 24 Aug 2020 16:09:21 -0400 Subject: [PATCH 14/56] Add tiling/offset to GUI --- Editor/SunaoShaderGUI.cs | 6 ++++++ Shader/Cginc/SunaoShader_Frag.cginc | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 361aadf..21bc470 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -672,8 +672,11 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { 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")); @@ -688,8 +691,11 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { 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")); } } diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 7bccdf2..4e6bd4a 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -92,8 +92,8 @@ float4 frag (VOUT IN) : COLOR { half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); 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, _StippleTexture)); - float4 stipple_emission_map = UNITY_SAMPLE_TEX2D_SAMPLER(_StippleEmissionMap, _MainTex, TRANSFORM_TEX(SubUV + emission_scroll, _StippleEmissionMap)); + 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)); From 0849e41f8406d86f1632d9dfd02a4e51dd849c94 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Mon, 24 Aug 2020 17:22:49 -0400 Subject: [PATCH 15/56] Added Hue Shift functionality --- Editor/SunaoShaderGUI.cs | 23 +++++++++++++++++++ Shader/Cginc/SunaoShader_Core.cginc | 6 +++++ Shader/Cginc/SunaoShader_Frag.cginc | 4 ++++ Shader/Cginc/SunaoShader_Function.cginc | 8 +++++++ Shader/Sunao_Shader_AlphaToCoverage.shader | 5 ++++ Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 5 ++++ Shader/Sunao_Shader_Cutout.shader | 5 ++++ Shader/Sunao_Shader_Cutout_SO.shader | 5 ++++ Shader/Sunao_Shader_Opaque.shader | 5 ++++ Shader/Sunao_Shader_Opaque_SO.shader | 5 ++++ Shader/Sunao_Shader_Transparent.shader | 5 ++++ Shader/Sunao_Shader_Transparent_SO.shader | 5 ++++ 12 files changed, 81 insertions(+) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 21bc470..ed5efbf 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -69,6 +69,10 @@ public class GUI : ShaderGUI { MaterialProperty Unlit; MaterialProperty MonochromeLit; + MaterialProperty HueShiftEnable; + MaterialProperty HueShiftMask; + MaterialProperty HueShiftAmount; + MaterialProperty StippleEnable; MaterialProperty StippleMask; MaterialProperty StippleTexture; @@ -305,6 +309,10 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { Unlit = FindProperty("_Unlit" , Prop , false); MonochromeLit = FindProperty("_MonochromeLit" , Prop , false); + HueShiftEnable = FindProperty("_HueShiftEnable" , Prop , false); + HueShiftMask = FindProperty("_HueShiftMask" , Prop , false); + HueShiftAmount = FindProperty("_HueShiftAmount" , Prop , false); + StippleEnable = FindProperty("_StippleEnable" , Prop , false); StippleMask = FindProperty("_StippleMask" , Prop , false); StippleTexture = FindProperty("_StippleTexture" , Prop , false); @@ -701,6 +709,21 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { } + GUILayout.Label("Hue Adjustment", EditorStyles.boldLabel); + + using (new EditorGUILayout.VerticalScope("box")) { + using (new EditorGUILayout.VerticalScope("box")) { + + GUILayout.Label("Hue Shift", EditorStyles.boldLabel); + + ME.ShaderProperty(HueShiftEnable, new GUIContent("Enable Hue Shift")); + ME.TexturePropertySingleLine(new GUIContent("Hue Shift Mask"), HueShiftMask); + ME.TextureScaleOffsetProperty(HueShiftMask); + ME.ShaderProperty(HueShiftAmount, new GUIContent("Hue Shift Amount")); + } + } + + GUILayout.Label("Outline", EditorStyles.boldLabel); using (new EditorGUILayout.VerticalScope("box")) { diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 0951e98..704f91a 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -67,6 +67,12 @@ uniform float _Unlit; uniform bool _MonochromeLit; +//----Hue Shift + uniform bool _HueShiftEnable; + UNITY_DECLARE_TEX2D_NOSAMPLER(_HueShiftMask); + uniform float4 _HueShiftMask_ST; + uniform float _HueShiftAmount; + //----Stippling & Crosshatching uniform bool _StippleEnable; UNITY_DECLARE_TEX2D_NOSAMPLER(_StippleMask); diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 4e6bd4a..e90d752 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -83,6 +83,10 @@ float4 frag (VOUT IN) : COLOR { } } +//----Hue adjustments + float4 hueshift_mask = UNITY_SAMPLE_TEX2D_SAMPLER(_HueShiftMask, _MainTex, TRANSFORM_TEX(SubUV, _HueShiftMask)); + if(_HueShiftEnable) Color.rgb = lerp(Color.rgb, HueShift(Color.rgb, _HueShiftAmount), hueshift_mask.r); + //----Stippling & crosshatching float stipple_size = 0.0f; if(_StippleMode == 0) stipple_size = clamp(_StippleSize + sin(_Time.y * _StippleSpeed) * _StippleAnimation, 0.0f, 1.0f); diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index ce6e27a..d8cc32f 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -149,6 +149,14 @@ float RimLightCalc(float3 normal , float3 view , float power , float gradient) return orim; } +float3 HueShift(float3 color, float hue) +{ + hue *= 2 * UNITY_PI; + float3 k = float3(0.57735, 0.57735, 0.57735); + float cosAngle = cos(hue); + return float3(color * cosAngle + cross(k, color) * sin(hue) + k * dot(k, color) * (1.0 - cosAngle)); +} + float4x4 rotationMatrix(float3 axis, float angle) { axis = normalize(axis); diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 1b92609..f870a98 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -87,6 +87,11 @@ Shader "Sunao Shader/AlphaToCoverage" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _HueShiftEnable ("Enable Hue Shift" , int) = 0 + _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} + _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index ca633ee..1203562 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -87,6 +87,11 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _HueShiftEnable ("Enable Hue Shift" , int) = 0 + _HueShiftMask ("Hue Shift Mask" , 2D) = "black" {} + _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 1d53b7a..87e64b1 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -93,6 +93,11 @@ Shader "Sunao Shader/Cutout" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _HueShiftEnable ("Enable Hue Shift" , int) = 0 + _HueShiftMask ("Hue Shift Mask" , 2D) = "black" {} + _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index ff246e9..fa93ded 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -93,6 +93,11 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _HueShiftEnable ("Enable Hue Shift" , int) = 0 + _HueShiftMask ("Hue Shift Mask" , 2D) = "black" {} + _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 2201b6c..9c5d369 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -93,6 +93,11 @@ Shader "Sunao Shader/Opaque" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _HueShiftEnable ("Enable Hue Shift" , int) = 0 + _HueShiftMask ("Hue Shift Mask" , 2D) = "black" {} + _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index c380530..b0965fd 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -93,6 +93,11 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _HueShiftEnable ("Enable Hue Shift" , int) = 0 + _HueShiftMask ("Hue Shift Mask" , 2D) = "black" {} + _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 59075f5..2e97ab8 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -93,6 +93,11 @@ Shader "Sunao Shader/Transparent" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _HueShiftEnable ("Enable Hue Shift" , int) = 0 + _HueShiftMask ("Hue Shift Mask" , 2D) = "black" {} + _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index ab9360e..6641072 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -93,6 +93,11 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] + _HueShiftEnable ("Enable Hue Shift" , int) = 0 + _HueShiftMask ("Hue Shift Mask" , 2D) = "black" {} + _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} From 962f6f2e144dcef16f375ec63c07668adbd65e9f Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Mon, 24 Aug 2020 19:28:16 -0400 Subject: [PATCH 16/56] Added Hue Shift modes --- Editor/SunaoShaderGUI.cs | 42 ++++++++++++------- Shader/Cginc/SunaoShader_Core.cginc | 4 ++ Shader/Cginc/SunaoShader_Frag.cginc | 24 +++++++++++ Shader/Sunao_Shader_AlphaToCoverage.shader | 8 ++++ Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 10 ++++- Shader/Sunao_Shader_Cutout.shader | 8 +++- Shader/Sunao_Shader_Cutout_SO.shader | 10 ++++- Shader/Sunao_Shader_Opaque.shader | 10 ++++- Shader/Sunao_Shader_Opaque_SO.shader | 10 ++++- Shader/Sunao_Shader_Transparent.shader | 10 ++++- Shader/Sunao_Shader_Transparent_SO.shader | 10 ++++- 11 files changed, 124 insertions(+), 22 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index ed5efbf..63d2a6f 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -72,6 +72,10 @@ public class GUI : ShaderGUI { MaterialProperty HueShiftEnable; MaterialProperty HueShiftMask; MaterialProperty HueShiftAmount; + MaterialProperty HueShiftShadeMode; + MaterialProperty HueShiftEmissionMode; + MaterialProperty HueShiftOutlineMode; + MaterialProperty HueShiftRimMode; MaterialProperty StippleEnable; MaterialProperty StippleMask; @@ -312,6 +316,10 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { HueShiftEnable = FindProperty("_HueShiftEnable" , Prop , false); HueShiftMask = FindProperty("_HueShiftMask" , Prop , false); HueShiftAmount = FindProperty("_HueShiftAmount" , Prop , false); + HueShiftShadeMode = FindProperty("_HueShiftShadeMode" , Prop , false); + HueShiftEmissionMode = FindProperty("_HueShiftEmissionMode" , Prop , false); + HueShiftOutlineMode = FindProperty("_HueShiftOutlineMode" , Prop , false); + HueShiftRimMode = FindProperty("_HueShiftRimMode" , Prop , false); StippleEnable = FindProperty("_StippleEnable" , Prop , false); StippleMask = FindProperty("_StippleMask" , Prop , false); @@ -671,6 +679,25 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { } + GUILayout.Label("Hue Adjustment", EditorStyles.boldLabel); + + using (new EditorGUILayout.VerticalScope("box")) { + using (new EditorGUILayout.VerticalScope("box")) { + + GUILayout.Label("Hue Shift", EditorStyles.boldLabel); + + ME.ShaderProperty(HueShiftEnable, new GUIContent("Enable Hue Shift")); + ME.TexturePropertySingleLine(new GUIContent("Hue Shift Mask"), HueShiftMask); + ME.TextureScaleOffsetProperty(HueShiftMask); + ME.ShaderProperty(HueShiftAmount, new GUIContent("Hue Shift Amount")); + ME.ShaderProperty(HueShiftShadeMode, new GUIContent("Shade Mode")); + ME.ShaderProperty(HueShiftEmissionMode, new GUIContent("Emission Mode")); + ME.ShaderProperty(HueShiftOutlineMode, new GUIContent("Outline Mode")); + ME.ShaderProperty(HueShiftRimMode, new GUIContent("Rim Mode")); + } + } + + GUILayout.Label("Stippling & Crosshatching", EditorStyles.boldLabel); using (new EditorGUILayout.VerticalScope("box")) { @@ -709,21 +736,6 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { } - GUILayout.Label("Hue Adjustment", EditorStyles.boldLabel); - - using (new EditorGUILayout.VerticalScope("box")) { - using (new EditorGUILayout.VerticalScope("box")) { - - GUILayout.Label("Hue Shift", EditorStyles.boldLabel); - - ME.ShaderProperty(HueShiftEnable, new GUIContent("Enable Hue Shift")); - ME.TexturePropertySingleLine(new GUIContent("Hue Shift Mask"), HueShiftMask); - ME.TextureScaleOffsetProperty(HueShiftMask); - ME.ShaderProperty(HueShiftAmount, new GUIContent("Hue Shift Amount")); - } - } - - GUILayout.Label("Outline", EditorStyles.boldLabel); using (new EditorGUILayout.VerticalScope("box")) { diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 704f91a..aaedcfb 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -72,6 +72,10 @@ UNITY_DECLARE_TEX2D_NOSAMPLER(_HueShiftMask); uniform float4 _HueShiftMask_ST; uniform float _HueShiftAmount; + uniform uint _HueShiftShadeMode; + uniform uint _HueShiftEmissionMode; + uniform uint _HueShiftOutlineMode; + uniform uint _HueShiftRimMode; //----Stippling & Crosshatching uniform bool _StippleEnable; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index e90d752..91bdebd 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -152,6 +152,14 @@ float4 frag (VOUT IN) : COLOR { } //----影の色 + if (_HueShiftEnable) { + if (_HueShiftShadeMode == 1) + _CustomShadeColor.rgb = lerp(_CustomShadeColor.rgb, HueShift(_CustomShadeColor.rgb, _HueShiftAmount), hueshift_mask.r); + + if (_HueShiftShadeMode == 2) + _CustomShadeColor.rgb = HueShift(_CustomShadeColor.rgb, _HueShiftAmount); + } + float3 ShadeColor = saturate(Color * 3.0f - 1.5f) * _ShadeColor; ShadeColor = lerp(ShadeColor , _CustomShadeColor.rgb , _CustomShadeColor.a); @@ -225,6 +233,14 @@ float4 frag (VOUT IN) : COLOR { 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(_HueShiftEnable) { + if (_HueShiftEmissionMode == 1) + Emission.rgb = lerp(Emission.rgb, HueShift(Emission.rgb, _HueShiftAmount), hueshift_mask.r); + + if (_HueShiftEmissionMode == 2) + Emission.rgb = HueShift(Emission.rgb, _HueShiftAmount); + } + if (_StippleEnable) Emission = _Emission * IN.eprm.x * lerp(Emission, stipple_emission_map.rgb, stipple_mask.rgb * dot_halftone); @@ -351,6 +367,14 @@ float4 frag (VOUT IN) : COLOR { } //-------------------------------------リムライティング + if (_RimLitEnable && _HueShiftEnable) { + if (_HueShiftRimMode == 1) + _RimLitColor.rgb = lerp(_RimLitColor.rgb, HueShift(_RimLitColor.rgb, _HueShiftAmount), hueshift_mask.r); + + if (_HueShiftRimMode == 2) + _RimLitColor.rgb = HueShift(_RimLitColor.rgb, _HueShiftAmount); + } + float3 RimLight = (float3)0.0f; #ifdef PASS_FB if (_RimLitEnable) { diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index f870a98..73a58f9 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -91,6 +91,14 @@ Shader "Sunao Shader/AlphaToCoverage" { _HueShiftEnable ("Enable Hue Shift" , int) = 0 _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftRimMode ("Rim Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 1203562..619c29b 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -89,8 +89,16 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [SToggle] _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "black" {} + _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftRimMode ("Rim Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 87e64b1..8251db7 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -95,8 +95,14 @@ Shader "Sunao Shader/Cutout" { [SToggle] _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "black" {} + _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftRimMode ("Rim Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index fa93ded..b3865e9 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -95,8 +95,16 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [SToggle] _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "black" {} + _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftRimMode ("Rim Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 9c5d369..94358e3 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -95,8 +95,16 @@ Shader "Sunao Shader/Opaque" { [SToggle] _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "black" {} + _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftRimMode ("Rim Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index b0965fd..92ffa16 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -95,8 +95,16 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [SToggle] _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "black" {} + _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftRimMode ("Rim Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 2e97ab8..d5c3433 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -95,8 +95,16 @@ Shader "Sunao Shader/Transparent" { [SToggle] _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "black" {} + _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftRimMode ("Rim Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 6641072..21098a2 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -95,8 +95,16 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [SToggle] _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "black" {} + _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftEmissionMode ("Emission Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftOutlineMode ("Outline Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftRimMode ("Rim Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 From b0901b4bf3e2d8f31047db79c324343fb53f2a59 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Mon, 24 Aug 2020 22:16:06 -0400 Subject: [PATCH 17/56] Add Base, Stipple & Crosshatch modes & fix outline --- Editor/SunaoShaderGUI.cs | 9 +++++ Shader/Cginc/SunaoShader_Core.cginc | 3 ++ Shader/Cginc/SunaoShader_Frag.cginc | 33 +++++++++++++++++-- Shader/Cginc/SunaoShader_OL.cginc | 19 ++++++++++- Shader/Sunao_Shader_AlphaToCoverage.shader | 6 ++++ Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 6 ++++ Shader/Sunao_Shader_Cutout_SO.shader | 6 ++++ Shader/Sunao_Shader_Opaque.shader | 6 ++++ Shader/Sunao_Shader_Opaque_SO.shader | 6 ++++ Shader/Sunao_Shader_Transparent.shader | 6 ++++ Shader/Sunao_Shader_Transparent_SO.shader | 6 ++++ 11 files changed, 102 insertions(+), 4 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 63d2a6f..8135ab1 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -72,10 +72,13 @@ public class GUI : ShaderGUI { MaterialProperty HueShiftEnable; MaterialProperty HueShiftMask; MaterialProperty HueShiftAmount; + MaterialProperty HueShiftBaseMode; MaterialProperty HueShiftShadeMode; MaterialProperty HueShiftEmissionMode; MaterialProperty HueShiftOutlineMode; MaterialProperty HueShiftRimMode; + MaterialProperty HueShiftStippleMode; + MaterialProperty HueShiftCrosshatchMode; MaterialProperty StippleEnable; MaterialProperty StippleMask; @@ -316,10 +319,13 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { HueShiftEnable = FindProperty("_HueShiftEnable" , Prop , false); HueShiftMask = FindProperty("_HueShiftMask" , Prop , false); HueShiftAmount = FindProperty("_HueShiftAmount" , Prop , false); + HueShiftBaseMode = FindProperty("_HueShiftBaseMode" , Prop , false); HueShiftShadeMode = FindProperty("_HueShiftShadeMode" , Prop , false); HueShiftEmissionMode = FindProperty("_HueShiftEmissionMode" , Prop , false); HueShiftOutlineMode = FindProperty("_HueShiftOutlineMode" , Prop , false); HueShiftRimMode = FindProperty("_HueShiftRimMode" , Prop , false); + HueShiftStippleMode = FindProperty("_HueShiftStippleMode" , Prop , false); + HueShiftCrosshatchMode = FindProperty("_HueShiftCrosshatchMode" , Prop , false); StippleEnable = FindProperty("_StippleEnable" , Prop , false); StippleMask = FindProperty("_StippleMask" , Prop , false); @@ -690,10 +696,13 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { ME.TexturePropertySingleLine(new GUIContent("Hue Shift Mask"), HueShiftMask); ME.TextureScaleOffsetProperty(HueShiftMask); ME.ShaderProperty(HueShiftAmount, new GUIContent("Hue Shift Amount")); + ME.ShaderProperty(HueShiftBaseMode, new GUIContent("Base Mode")); ME.ShaderProperty(HueShiftShadeMode, new GUIContent("Shade Mode")); ME.ShaderProperty(HueShiftEmissionMode, new GUIContent("Emission Mode")); ME.ShaderProperty(HueShiftOutlineMode, new GUIContent("Outline Mode")); ME.ShaderProperty(HueShiftRimMode, new GUIContent("Rim Mode")); + ME.ShaderProperty(HueShiftStippleMode, new GUIContent("Stipple Mode")); + ME.ShaderProperty(HueShiftCrosshatchMode, new GUIContent("Crosshatch Mode")); } } diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index aaedcfb..07f4c56 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -72,10 +72,13 @@ UNITY_DECLARE_TEX2D_NOSAMPLER(_HueShiftMask); uniform float4 _HueShiftMask_ST; uniform float _HueShiftAmount; + uniform uint _HueShiftBaseMode; uniform uint _HueShiftShadeMode; uniform uint _HueShiftEmissionMode; uniform uint _HueShiftOutlineMode; uniform uint _HueShiftRimMode; + uniform uint _HueShiftStippleMode; + uniform uint _HueShiftCrosshatchMode; //----Stippling & Crosshatching uniform bool _StippleEnable; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 91bdebd..7b40fdf 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -85,7 +85,13 @@ float4 frag (VOUT IN) : COLOR { //----Hue adjustments float4 hueshift_mask = UNITY_SAMPLE_TEX2D_SAMPLER(_HueShiftMask, _MainTex, TRANSFORM_TEX(SubUV, _HueShiftMask)); - if(_HueShiftEnable) Color.rgb = lerp(Color.rgb, HueShift(Color.rgb, _HueShiftAmount), hueshift_mask.r); + if(_HueShiftEnable) { + if (_HueShiftBaseMode == 1) + Color.rgb = lerp(Color.rgb, HueShift(Color.rgb, _HueShiftAmount), hueshift_mask.r); + + if (_HueShiftBaseMode == 2) + Color.rgb =HueShift(Color.rgb, _HueShiftAmount); + } //----Stippling & crosshatching float stipple_size = 0.0f; @@ -102,8 +108,29 @@ float4 frag (VOUT IN) : COLOR { 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) Color = lerp(Color, stipple_color.rgb, stipple_mask.rgb * dot_halftone); - if (_CrosshatchEnable) Color = lerp(Color, crosshatch_color.rgb, crosshatch_mask.rgb * line_halftone); + if (_StippleEnable) { + if(_HueShiftEnable) { + if (_HueShiftStippleMode == 1) + stipple_color.rgb = lerp(stipple_color.rgb, HueShift(stipple_color.rgb, _HueShiftAmount), hueshift_mask.r); + + if (_HueShiftStippleMode == 2) + stipple_color.rgb = HueShift(stipple_color.rgb, _HueShiftAmount); + } + + Color = lerp(Color, stipple_color.rgb, stipple_mask.rgb * dot_halftone); + } + + if (_CrosshatchEnable) { + if(_HueShiftEnable) { + if (_HueShiftCrosshatchMode == 1) + crosshatch_color.rgb = lerp(crosshatch_color.rgb, HueShift(crosshatch_color.rgb, _HueShiftAmount), hueshift_mask.r); + + if (_HueShiftCrosshatchMode == 2) + crosshatch_color.rgb = HueShift(crosshatch_color.rgb, _HueShiftAmount); + } + + Color = lerp(Color, crosshatch_color.rgb, crosshatch_mask.rgb * line_halftone); + } //----オクルージョン if (_OcclusionMode == 1) Color *= lerp(1.0f , UNITY_SAMPLE_TEX2D_SAMPLER(_OcclusionMap , _MainTex , SubUV).rgb , _OcclusionStrength); diff --git a/Shader/Cginc/SunaoShader_OL.cginc b/Shader/Cginc/SunaoShader_OL.cginc index 1a0f0a2..42978a9 100644 --- a/Shader/Cginc/SunaoShader_OL.cginc +++ b/Shader/Cginc/SunaoShader_OL.cginc @@ -42,6 +42,13 @@ uniform bool _OutLineTexColor; uniform bool _OutLineFixScale; +//----Hue Shift + uniform bool _HueShiftEnable; + UNITY_DECLARE_TEX2D_NOSAMPLER(_HueShiftMask); + uniform float4 _HueShiftMask_ST; + uniform float _HueShiftAmount; + uniform uint _HueShiftOutlineMode; + //----Other uniform float _DirectionalLight; uniform float _SHLight; @@ -108,7 +115,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; } @@ -213,6 +220,16 @@ float4 frag (VOUT IN) : COLOR { //----カラー計算 float4 OUT = float4(0.0f , 0.0f , 0.0f , 1.0f); + if (_HueShiftEnable) { + float4 hueshift_mask = UNITY_SAMPLE_TEX2D_SAMPLER(_HueShiftMask, _MainTex, TRANSFORM_TEX(IN.uv, _HueShiftMask)); + + if (_HueShiftOutlineMode == 1) + IN.color.rgb = lerp(IN.color.rgb, HueShift(IN.color.rgb, _HueShiftAmount), hueshift_mask.r); + + if (_HueShiftOutlineMode == 2) + IN.color.rgb = HueShift(IN.color.rgb, _HueShiftAmount); + } + OUT.rgb = UNITY_SAMPLE_TEX2D_SAMPLER(_OutLineTexture , _MainTex , IN.uv) * IN.color; #ifdef PASS_OL_FA diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 73a58f9..69966c8 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -92,6 +92,8 @@ Shader "Sunao Shader/AlphaToCoverage" { _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftEmissionMode ("Emission Mode" , int) = 0 @@ -99,6 +101,10 @@ Shader "Sunao Shader/AlphaToCoverage" { _HueShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 619c29b..3d79f02 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -92,6 +92,8 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftEmissionMode ("Emission Mode" , int) = 0 @@ -99,6 +101,10 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _HueShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index b3865e9..4bec36b 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -98,6 +98,8 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftEmissionMode ("Emission Mode" , int) = 0 @@ -105,6 +107,10 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { _HueShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 94358e3..42799bf 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -98,6 +98,8 @@ Shader "Sunao Shader/Opaque" { _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftEmissionMode ("Emission Mode" , int) = 0 @@ -105,6 +107,10 @@ Shader "Sunao Shader/Opaque" { _HueShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index 92ffa16..6609961 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -98,6 +98,8 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftEmissionMode ("Emission Mode" , int) = 0 @@ -105,6 +107,10 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { _HueShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index d5c3433..1d66421 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -98,6 +98,8 @@ Shader "Sunao Shader/Transparent" { _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftEmissionMode ("Emission Mode" , int) = 0 @@ -105,6 +107,10 @@ Shader "Sunao Shader/Transparent" { _HueShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 21098a2..75290f0 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -98,6 +98,8 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftEmissionMode ("Emission Mode" , int) = 0 @@ -105,6 +107,10 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { _HueShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 From 90eb042d7cadcc44058ae9ae7d03654fe9de7d1f Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Mon, 24 Aug 2020 23:14:38 -0400 Subject: [PATCH 18/56] Add parallax mode --- Editor/SunaoShaderGUI.cs | 3 +++ Shader/Cginc/SunaoShader_Core.cginc | 1 + Shader/Cginc/SunaoShader_Frag.cginc | 8 ++++++++ Shader/Sunao_Shader_AlphaToCoverage.shader | 2 ++ Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 2 ++ Shader/Sunao_Shader_Cutout.shader | 10 ++++++++++ Shader/Sunao_Shader_Cutout_SO.shader | 2 ++ Shader/Sunao_Shader_Opaque.shader | 2 ++ Shader/Sunao_Shader_Opaque_SO.shader | 2 ++ Shader/Sunao_Shader_Transparent.shader | 2 ++ Shader/Sunao_Shader_Transparent_SO.shader | 2 ++ 11 files changed, 36 insertions(+) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 8135ab1..238ab80 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -77,6 +77,7 @@ public class GUI : ShaderGUI { MaterialProperty HueShiftEmissionMode; MaterialProperty HueShiftOutlineMode; MaterialProperty HueShiftRimMode; + MaterialProperty HueShiftParallaxMode; MaterialProperty HueShiftStippleMode; MaterialProperty HueShiftCrosshatchMode; @@ -324,6 +325,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { HueShiftEmissionMode = FindProperty("_HueShiftEmissionMode" , Prop , false); HueShiftOutlineMode = FindProperty("_HueShiftOutlineMode" , Prop , false); HueShiftRimMode = FindProperty("_HueShiftRimMode" , Prop , false); + HueShiftParallaxMode = FindProperty("_HueShiftParallaxMode" , Prop , false); HueShiftStippleMode = FindProperty("_HueShiftStippleMode" , Prop , false); HueShiftCrosshatchMode = FindProperty("_HueShiftCrosshatchMode" , Prop , false); @@ -701,6 +703,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { ME.ShaderProperty(HueShiftEmissionMode, new GUIContent("Emission Mode")); ME.ShaderProperty(HueShiftOutlineMode, new GUIContent("Outline Mode")); ME.ShaderProperty(HueShiftRimMode, new GUIContent("Rim Mode")); + ME.ShaderProperty(HueShiftParallaxMode, new GUIContent("Parallax Mode")); ME.ShaderProperty(HueShiftStippleMode, new GUIContent("Stipple Mode")); ME.ShaderProperty(HueShiftCrosshatchMode, new GUIContent("Crosshatch Mode")); } diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 07f4c56..cefc00c 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -77,6 +77,7 @@ uniform uint _HueShiftEmissionMode; uniform uint _HueShiftOutlineMode; uniform uint _HueShiftRimMode; + uniform uint _HueShiftParallaxMode; uniform uint _HueShiftStippleMode; uniform uint _HueShiftCrosshatchMode; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 7b40fdf..a506556 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -300,6 +300,14 @@ 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 (_HueShiftEnable) { + if (_HueShiftParallaxMode == 1) + Parallax.rgb = lerp(Parallax.rgb, HueShift(Parallax.rgb, _HueShiftAmount), hueshift_mask.r); + + if (_HueShiftParallaxMode == 2) + Parallax.rgb = HueShift(Parallax.rgb, _HueShiftAmount); + } + if (_ParallaxLighting) { #ifdef PASS_FB Parallax *= saturate(MonoColor(LightBase) + MonoColor(IN.shmax) + MonoColor(VLightBase)); diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 69966c8..1804d28 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -102,6 +102,8 @@ Shader "Sunao Shader/AlphaToCoverage" { [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 3d79f02..2c29f0d 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -102,6 +102,8 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 8251db7..14a9e68 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -98,11 +98,21 @@ Shader "Sunao Shader/Cutout" { _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftBaseMode ("Base Mode" , int) = 1 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftEmissionMode ("Emission Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftStippleMode ("Stipple Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index 4bec36b..358bd02 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -108,6 +108,8 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 42799bf..aede41d 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -108,6 +108,8 @@ Shader "Sunao Shader/Opaque" { [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index 6609961..b761e1c 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -108,6 +108,8 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 1d66421..8158563 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -108,6 +108,8 @@ Shader "Sunao Shader/Transparent" { [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 75290f0..287f124 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -108,6 +108,8 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] + _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 From 07f06b52d599cc04c9274ae932a1446a459851fd Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Tue, 25 Aug 2020 18:51:12 -0400 Subject: [PATCH 19/56] Added full HSV control --- Editor/SunaoShaderGUI.cs | 80 ++++++++++--------- Shader/Cginc/SunaoShader_Core.cginc | 26 +++--- Shader/Cginc/SunaoShader_Frag.cginc | 73 +++++++---------- Shader/Cginc/SunaoShader_Function.cginc | 27 +++++-- Shader/Cginc/SunaoShader_OL.cginc | 28 ++++--- Shader/Sunao_Shader_AlphaToCoverage.shader | 24 +++--- Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 24 +++--- Shader/Sunao_Shader_Cutout.shader | 24 +++--- Shader/Sunao_Shader_Cutout_SO.shader | 24 +++--- Shader/Sunao_Shader_Opaque.shader | 24 +++--- Shader/Sunao_Shader_Opaque_SO.shader | 24 +++--- Shader/Sunao_Shader_Transparent.shader | 24 +++--- Shader/Sunao_Shader_Transparent_SO.shader | 24 +++--- 13 files changed, 228 insertions(+), 198 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 238ab80..09f7c8a 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -69,17 +69,19 @@ public class GUI : ShaderGUI { MaterialProperty Unlit; MaterialProperty MonochromeLit; - MaterialProperty HueShiftEnable; - MaterialProperty HueShiftMask; - MaterialProperty HueShiftAmount; - MaterialProperty HueShiftBaseMode; - MaterialProperty HueShiftShadeMode; - MaterialProperty HueShiftEmissionMode; - MaterialProperty HueShiftOutlineMode; - MaterialProperty HueShiftRimMode; - MaterialProperty HueShiftParallaxMode; - MaterialProperty HueShiftStippleMode; - MaterialProperty HueShiftCrosshatchMode; + MaterialProperty HSVShiftEnable; + MaterialProperty HSVShiftMask; + MaterialProperty HSVShiftHue; + MaterialProperty HSVShiftSat; + MaterialProperty HSVShiftVal; + MaterialProperty HSVShiftBaseMode; + MaterialProperty HSVShiftShadeMode; + MaterialProperty HSVShiftEmissionMode; + MaterialProperty HSVShiftOutlineMode; + MaterialProperty HSVShiftRimMode; + MaterialProperty HSVShiftParallaxMode; + MaterialProperty HSVShiftStippleMode; + MaterialProperty HSVShiftCrosshatchMode; MaterialProperty StippleEnable; MaterialProperty StippleMask; @@ -317,17 +319,19 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { Unlit = FindProperty("_Unlit" , Prop , false); MonochromeLit = FindProperty("_MonochromeLit" , Prop , false); - HueShiftEnable = FindProperty("_HueShiftEnable" , Prop , false); - HueShiftMask = FindProperty("_HueShiftMask" , Prop , false); - HueShiftAmount = FindProperty("_HueShiftAmount" , Prop , false); - HueShiftBaseMode = FindProperty("_HueShiftBaseMode" , Prop , false); - HueShiftShadeMode = FindProperty("_HueShiftShadeMode" , Prop , false); - HueShiftEmissionMode = FindProperty("_HueShiftEmissionMode" , Prop , false); - HueShiftOutlineMode = FindProperty("_HueShiftOutlineMode" , Prop , false); - HueShiftRimMode = FindProperty("_HueShiftRimMode" , Prop , false); - HueShiftParallaxMode = FindProperty("_HueShiftParallaxMode" , Prop , false); - HueShiftStippleMode = FindProperty("_HueShiftStippleMode" , Prop , false); - HueShiftCrosshatchMode = FindProperty("_HueShiftCrosshatchMode" , 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); + HSVShiftShadeMode = FindProperty("_HSVShiftShadeMode" , 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); @@ -687,25 +691,27 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { } - GUILayout.Label("Hue Adjustment", EditorStyles.boldLabel); + GUILayout.Label("HSV Adjustment", EditorStyles.boldLabel); using (new EditorGUILayout.VerticalScope("box")) { using (new EditorGUILayout.VerticalScope("box")) { - GUILayout.Label("Hue Shift", EditorStyles.boldLabel); - - ME.ShaderProperty(HueShiftEnable, new GUIContent("Enable Hue Shift")); - ME.TexturePropertySingleLine(new GUIContent("Hue Shift Mask"), HueShiftMask); - ME.TextureScaleOffsetProperty(HueShiftMask); - ME.ShaderProperty(HueShiftAmount, new GUIContent("Hue Shift Amount")); - ME.ShaderProperty(HueShiftBaseMode, new GUIContent("Base Mode")); - ME.ShaderProperty(HueShiftShadeMode, new GUIContent("Shade Mode")); - ME.ShaderProperty(HueShiftEmissionMode, new GUIContent("Emission Mode")); - ME.ShaderProperty(HueShiftOutlineMode, new GUIContent("Outline Mode")); - ME.ShaderProperty(HueShiftRimMode, new GUIContent("Rim Mode")); - ME.ShaderProperty(HueShiftParallaxMode, new GUIContent("Parallax Mode")); - ME.ShaderProperty(HueShiftStippleMode, new GUIContent("Stipple Mode")); - ME.ShaderProperty(HueShiftCrosshatchMode, new GUIContent("Crosshatch Mode")); + 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(HSVShiftShadeMode, new GUIContent("Shade 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")); } } diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index cefc00c..942a9f2 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -68,18 +68,20 @@ uniform bool _MonochromeLit; //----Hue Shift - uniform bool _HueShiftEnable; - UNITY_DECLARE_TEX2D_NOSAMPLER(_HueShiftMask); - uniform float4 _HueShiftMask_ST; - uniform float _HueShiftAmount; - uniform uint _HueShiftBaseMode; - uniform uint _HueShiftShadeMode; - uniform uint _HueShiftEmissionMode; - uniform uint _HueShiftOutlineMode; - uniform uint _HueShiftRimMode; - uniform uint _HueShiftParallaxMode; - uniform uint _HueShiftStippleMode; - uniform uint _HueShiftCrosshatchMode; + uniform bool _HSVShiftEnable; + UNITY_DECLARE_TEX2D_NOSAMPLER(_HSVShiftMask); + uniform float4 _HSVShiftMask_ST; + uniform float _HSVShiftHue; + uniform float _HSVShiftSat; + uniform float _HSVShiftVal; + uniform uint _HSVShiftBaseMode; + uniform uint _HSVShiftShadeMode; + uniform uint _HSVShiftEmissionMode; + uniform uint _HSVShiftOutlineMode; + uniform uint _HSVShiftRimMode; + uniform uint _HSVShiftParallaxMode; + uniform uint _HSVShiftStippleMode; + uniform uint _HSVShiftCrosshatchMode; //----Stippling & Crosshatching uniform bool _StippleEnable; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index a506556..6bf9e19 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -83,14 +83,17 @@ float4 frag (VOUT IN) : COLOR { } } -//----Hue adjustments - float4 hueshift_mask = UNITY_SAMPLE_TEX2D_SAMPLER(_HueShiftMask, _MainTex, TRANSFORM_TEX(SubUV, _HueShiftMask)); - if(_HueShiftEnable) { - if (_HueShiftBaseMode == 1) - Color.rgb = lerp(Color.rgb, HueShift(Color.rgb, _HueShiftAmount), hueshift_mask.r); - - if (_HueShiftBaseMode == 2) - Color.rgb =HueShift(Color.rgb, _HueShiftAmount); +//----HSV adjustments + float3 hsvadj_masked = float3(0.0, 1.0, 1.0); + float3 hsvadj_unmasked = float3(_HSVShiftHue, _HSVShiftSat, _HSVShiftVal); + if (_HSVShiftEnable) { + float4 hsvshift_mask = UNITY_SAMPLE_TEX2D_SAMPLER(_HSVShiftMask, _MainTex, 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); } //----Stippling & crosshatching @@ -109,24 +112,18 @@ float4 frag (VOUT IN) : COLOR { float4 crosshatch_emission_map = UNITY_SAMPLE_TEX2D_SAMPLER(_CrosshatchEmissionMap, _MainTex, TRANSFORM_TEX(SubUV + emission_scroll, _CrosshatchEmissionMap)); if (_StippleEnable) { - if(_HueShiftEnable) { - if (_HueShiftStippleMode == 1) - stipple_color.rgb = lerp(stipple_color.rgb, HueShift(stipple_color.rgb, _HueShiftAmount), hueshift_mask.r); - - if (_HueShiftStippleMode == 2) - stipple_color.rgb = HueShift(stipple_color.rgb, _HueShiftAmount); + 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); } Color = lerp(Color, stipple_color.rgb, stipple_mask.rgb * dot_halftone); } if (_CrosshatchEnable) { - if(_HueShiftEnable) { - if (_HueShiftCrosshatchMode == 1) - crosshatch_color.rgb = lerp(crosshatch_color.rgb, HueShift(crosshatch_color.rgb, _HueShiftAmount), hueshift_mask.r); - - if (_HueShiftCrosshatchMode == 2) - crosshatch_color.rgb = HueShift(crosshatch_color.rgb, _HueShiftAmount); + 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); } Color = lerp(Color, crosshatch_color.rgb, crosshatch_mask.rgb * line_halftone); @@ -179,12 +176,9 @@ float4 frag (VOUT IN) : COLOR { } //----影の色 - if (_HueShiftEnable) { - if (_HueShiftShadeMode == 1) - _CustomShadeColor.rgb = lerp(_CustomShadeColor.rgb, HueShift(_CustomShadeColor.rgb, _HueShiftAmount), hueshift_mask.r); - - if (_HueShiftShadeMode == 2) - _CustomShadeColor.rgb = HueShift(_CustomShadeColor.rgb, _HueShiftAmount); + if (_HSVShiftEnable) { + if (_HSVShiftShadeMode == 1) _CustomShadeColor.rgb = HSVAdjust(_CustomShadeColor.rgb, hsvadj_masked); + if (_HSVShiftShadeMode == 2) _CustomShadeColor.rgb = HSVAdjust(_CustomShadeColor.rgb, hsvadj_unmasked); } float3 ShadeColor = saturate(Color * 3.0f - 1.5f) * _ShadeColor; @@ -260,12 +254,9 @@ float4 frag (VOUT IN) : COLOR { 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(_HueShiftEnable) { - if (_HueShiftEmissionMode == 1) - Emission.rgb = lerp(Emission.rgb, HueShift(Emission.rgb, _HueShiftAmount), hueshift_mask.r); - - if (_HueShiftEmissionMode == 2) - Emission.rgb = HueShift(Emission.rgb, _HueShiftAmount); + if(_HSVShiftEnable) { + if (_HSVShiftEmissionMode == 1) Emission.rgb = HSVAdjust(Emission.rgb, hsvadj_masked); + if (_HSVShiftEmissionMode == 2) Emission.rgb = HSVAdjust(Emission.rgb, hsvadj_unmasked); } if (_StippleEnable) @@ -300,12 +291,9 @@ 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 (_HueShiftEnable) { - if (_HueShiftParallaxMode == 1) - Parallax.rgb = lerp(Parallax.rgb, HueShift(Parallax.rgb, _HueShiftAmount), hueshift_mask.r); - - if (_HueShiftParallaxMode == 2) - Parallax.rgb = HueShift(Parallax.rgb, _HueShiftAmount); + if (_HSVShiftEnable) { + if (_HSVShiftParallaxMode == 1) Parallax.rgb = HSVAdjust(Parallax.rgb, hsvadj_masked); + if (_HSVShiftParallaxMode == 2) Parallax.rgb = HSVAdjust(Parallax.rgb, hsvadj_unmasked); } if (_ParallaxLighting) { @@ -402,12 +390,9 @@ float4 frag (VOUT IN) : COLOR { } //-------------------------------------リムライティング - if (_RimLitEnable && _HueShiftEnable) { - if (_HueShiftRimMode == 1) - _RimLitColor.rgb = lerp(_RimLitColor.rgb, HueShift(_RimLitColor.rgb, _HueShiftAmount), hueshift_mask.r); - - if (_HueShiftRimMode == 2) - _RimLitColor.rgb = HueShift(_RimLitColor.rgb, _HueShiftAmount); + if (_RimLitEnable && _HSVShiftEnable) { + if (_HSVShiftRimMode == 1) _RimLitColor.rgb = HSVAdjust(_RimLitColor.rgb, hsvadj_masked); + if (_HSVShiftRimMode == 2) _RimLitColor.rgb = HSVAdjust(_RimLitColor.rgb, hsvadj_unmasked); } float3 RimLight = (float3)0.0f; diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index d8cc32f..872dd7d 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -149,12 +149,29 @@ float RimLightCalc(float3 normal , float3 view , float power , float gradient) return orim; } -float3 HueShift(float3 color, float hue) +half3 RGB2HSV(half3 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 half3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} + +half3 HSV2RGB(half3 c) { + half4 K = half4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + half3 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); +} + +float3 HSVAdjust(float3 color, float3 adjustment) { - hue *= 2 * UNITY_PI; - float3 k = float3(0.57735, 0.57735, 0.57735); - float cosAngle = cos(hue); - return float3(color * cosAngle + cross(k, color) * sin(hue) + k * dot(k, color) * (1.0 - cosAngle)); + float3 hsv = RGB2HSV(color); + hsv.x += fmod(adjustment.x, 360); + hsv.y = saturate(hsv.y * adjustment.y); + hsv.z *= adjustment.z; + return HSV2RGB(hsv); } float4x4 rotationMatrix(float3 axis, float angle) diff --git a/Shader/Cginc/SunaoShader_OL.cginc b/Shader/Cginc/SunaoShader_OL.cginc index 42978a9..051581c 100644 --- a/Shader/Cginc/SunaoShader_OL.cginc +++ b/Shader/Cginc/SunaoShader_OL.cginc @@ -43,11 +43,13 @@ uniform bool _OutLineFixScale; //----Hue Shift - uniform bool _HueShiftEnable; - UNITY_DECLARE_TEX2D_NOSAMPLER(_HueShiftMask); - uniform float4 _HueShiftMask_ST; - uniform float _HueShiftAmount; - uniform uint _HueShiftOutlineMode; + uniform bool _HSVShiftEnable; + UNITY_DECLARE_TEX2D_NOSAMPLER(_HSVShiftMask); + uniform float4 _HSVShiftMask_ST; + uniform float _HSVShiftHue; + uniform float _HSVShiftSat; + uniform float _HSVShiftVal; + uniform uint _HSVShiftOutlineMode; //----Other uniform float _DirectionalLight; @@ -220,14 +222,16 @@ float4 frag (VOUT IN) : COLOR { //----カラー計算 float4 OUT = float4(0.0f , 0.0f , 0.0f , 1.0f); - if (_HueShiftEnable) { - float4 hueshift_mask = UNITY_SAMPLE_TEX2D_SAMPLER(_HueShiftMask, _MainTex, TRANSFORM_TEX(IN.uv, _HueShiftMask)); + 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_SAMPLER(_HSVShiftMask, _MainTex, 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 (_HueShiftOutlineMode == 1) - IN.color.rgb = lerp(IN.color.rgb, HueShift(IN.color.rgb, _HueShiftAmount), hueshift_mask.r); - - if (_HueShiftOutlineMode == 2) - IN.color.rgb = HueShift(IN.color.rgb, _HueShiftAmount); + 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; diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 1804d28..c3a4080 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -88,25 +88,27 @@ Shader "Sunao Shader/AlphaToCoverage" { _MonochromeLit ("Monochrome Lighting" , int) = 0 [SToggle] - _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} - _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + _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)] - _HueShiftBaseMode ("Base Mode" , int) = 1 + _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftShadeMode ("Shade Mode" , int) = 0 + _HSVShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftEmissionMode ("Emission Mode" , int) = 0 + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftOutlineMode ("Outline Mode" , int) = 0 + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftRimMode ("Rim Mode" , int) = 0 + _HSVShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftStippleMode ("Stipple Mode" , int) = 0 + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 2c29f0d..61f7d96 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -88,25 +88,27 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _MonochromeLit ("Monochrome Lighting" , int) = 0 [SToggle] - _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} - _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + _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)] - _HueShiftBaseMode ("Base Mode" , int) = 1 + _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftShadeMode ("Shade Mode" , int) = 0 + _HSVShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftEmissionMode ("Emission Mode" , int) = 0 + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftOutlineMode ("Outline Mode" , int) = 0 + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftRimMode ("Rim Mode" , int) = 0 + _HSVShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftStippleMode ("Stipple Mode" , int) = 0 + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 14a9e68..b0097cc 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -94,25 +94,27 @@ Shader "Sunao Shader/Cutout" { _MonochromeLit ("Monochrome Lighting" , int) = 0 [SToggle] - _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} - _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + _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)] - _HueShiftBaseMode ("Base Mode" , int) = 1 + _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftShadeMode ("Shade Mode" , int) = 0 + _HSVShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftEmissionMode ("Emission Mode" , int) = 0 + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftOutlineMode ("Outline Mode" , int) = 0 + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftRimMode ("Rim Mode" , int) = 0 + _HSVShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftStippleMode ("Stipple Mode" , int) = 0 + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index 358bd02..65d157e 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -94,25 +94,27 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { _MonochromeLit ("Monochrome Lighting" , int) = 0 [SToggle] - _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} - _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + _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)] - _HueShiftBaseMode ("Base Mode" , int) = 1 + _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftShadeMode ("Shade Mode" , int) = 0 + _HSVShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftEmissionMode ("Emission Mode" , int) = 0 + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftOutlineMode ("Outline Mode" , int) = 0 + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftRimMode ("Rim Mode" , int) = 0 + _HSVShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftStippleMode ("Stipple Mode" , int) = 0 + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index aede41d..07399dc 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -94,25 +94,27 @@ Shader "Sunao Shader/Opaque" { _MonochromeLit ("Monochrome Lighting" , int) = 0 [SToggle] - _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} - _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + _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)] - _HueShiftBaseMode ("Base Mode" , int) = 1 + _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftShadeMode ("Shade Mode" , int) = 0 + _HSVShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftEmissionMode ("Emission Mode" , int) = 0 + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftOutlineMode ("Outline Mode" , int) = 0 + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftRimMode ("Rim Mode" , int) = 0 + _HSVShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftStippleMode ("Stipple Mode" , int) = 0 + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index b761e1c..279ff4e 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -94,25 +94,27 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { _MonochromeLit ("Monochrome Lighting" , int) = 0 [SToggle] - _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} - _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + _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)] - _HueShiftBaseMode ("Base Mode" , int) = 1 + _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftShadeMode ("Shade Mode" , int) = 0 + _HSVShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftEmissionMode ("Emission Mode" , int) = 0 + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftOutlineMode ("Outline Mode" , int) = 0 + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftRimMode ("Rim Mode" , int) = 0 + _HSVShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftStippleMode ("Stipple Mode" , int) = 0 + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 8158563..960dc46 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -94,25 +94,27 @@ Shader "Sunao Shader/Transparent" { _MonochromeLit ("Monochrome Lighting" , int) = 0 [SToggle] - _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} - _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + _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)] - _HueShiftBaseMode ("Base Mode" , int) = 1 + _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftShadeMode ("Shade Mode" , int) = 0 + _HSVShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftEmissionMode ("Emission Mode" , int) = 0 + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftOutlineMode ("Outline Mode" , int) = 0 + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftRimMode ("Rim Mode" , int) = 0 + _HSVShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftStippleMode ("Stipple Mode" , int) = 0 + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 287f124..c210bbf 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -94,25 +94,27 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { _MonochromeLit ("Monochrome Lighting" , int) = 0 [SToggle] - _HueShiftEnable ("Enable Hue Shift" , int) = 0 - _HueShiftMask ("Hue Shift Mask" , 2D) = "white" {} - _HueShiftAmount ("Hue Shift Amount" , Range( 0.0, 1.0)) = 0 + _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)] - _HueShiftBaseMode ("Base Mode" , int) = 1 + _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftShadeMode ("Shade Mode" , int) = 0 + _HSVShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftEmissionMode ("Emission Mode" , int) = 0 + _HSVShiftEmissionMode ("Emission Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftOutlineMode ("Outline Mode" , int) = 0 + _HSVShiftOutlineMode ("Outline Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftRimMode ("Rim Mode" , int) = 0 + _HSVShiftRimMode ("Rim Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftParallaxMode ("Parallax Mode" , int) = 0 + _HSVShiftParallaxMode ("Parallax Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftStippleMode ("Stipple Mode" , int) = 0 + _HSVShiftStippleMode ("Stipple Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HueShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 From 71c1b2e2b28f2e090bf93b9990f0e5d9c2860d14 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Fri, 4 Sep 2020 02:51:59 -0400 Subject: [PATCH 20/56] Added vertex color alpha control --- Editor/SunaoShaderGUI.cs | 152 ++++++++++++++++++ Shader/Cginc/SunaoShader_Core.cginc | 39 ++++- Shader/Cginc/SunaoShader_Frag.cginc | 3 + Shader/Cginc/SunaoShader_Function.cginc | 8 + Shader/Cginc/SunaoShader_OL.cginc | 55 +++++++ Shader/Cginc/SunaoShader_Vert.cginc | 18 +++ Shader/Sunao_Shader_AlphaToCoverage.shader | 33 ++++ Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 33 ++++ Shader/Sunao_Shader_Cutout.shader | 33 ++++ Shader/Sunao_Shader_Cutout_SO.shader | 33 ++++ Shader/Sunao_Shader_Opaque.shader | 33 ++++ Shader/Sunao_Shader_Opaque_SO.shader | 33 ++++ Shader/Sunao_Shader_Transparent.shader | 33 ++++ Shader/Sunao_Shader_Transparent_SO.shader | 33 ++++ 14 files changed, 537 insertions(+), 2 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 09f7c8a..de72ac4 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -99,6 +99,39 @@ public class GUI : ShaderGUI { MaterialProperty CrosshatchEmissionMap; MaterialProperty CrosshatchAmount; + 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; @@ -349,6 +382,39 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { CrosshatchEmissionMap = FindProperty("_CrosshatchEmissionMap", Prop, false); CrosshatchAmount = FindProperty("_CrosshatchAmount" , 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); @@ -754,6 +820,92 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { } + GUILayout.Label("Vertex Alpha", EditorStyles.boldLabel); + + using (new EditorGUILayout.VerticalScope("box")) { + 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")); + } + } + + GUILayout.Label("Outline", EditorStyles.boldLabel); using (new EditorGUILayout.VerticalScope("box")) { diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 942a9f2..179d9d1 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -106,6 +106,40 @@ uniform float4 _CrosshatchEmissionMap_ST; uniform float _CrosshatchAmount; +//----Vertex Color Alpha + 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; @@ -246,6 +280,7 @@ struct VOUT { float3 pview : TEXCOORD16; float4 worldpos : TEXCOORD17; float4 objpos : TEXCOORD18; + float alpha : TEXCOORD19; #ifdef PASS_FB float3 shdir : LIGHTDIR1; @@ -254,8 +289,8 @@ struct VOUT { float4 vldirX : LIGHTDIR2; float4 vldirY : LIGHTDIR3; float4 vldirZ : LIGHTDIR4; - float4 vlcorr : TEXCOORD19; - float4 vlatn : TEXCOORD20; + float4 vlcorr : TEXCOORD20; + float4 vlatn : TEXCOORD21; #endif UNITY_FOG_COORDS(19) diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 6bf9e19..5b89a7b 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -543,5 +543,8 @@ float4 frag (VOUT IN) : COLOR { OUT.a *= lerp(1.0f, line_halftone, 1.0f - crosshatch_mask.a); } +//----Apply vertex alpha + OUT.a *= IN.alpha; + return OUT; } diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index 872dd7d..99c4ba4 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -174,6 +174,14 @@ float3 HSVAdjust(float3 color, float3 adjustment) return HSV2RGB(hsv); } +float VertexAlpha(float3 color, float3 comperand, float alpha) { + if (min(length(color), length(comperand)) > 0.0) { + return lerp(1.0, alpha, step(0.9999, 1.0 - length(color - comperand))); + } else { + return 1.0; + } +} + float4x4 rotationMatrix(float3 axis, float angle) { axis = normalize(axis); diff --git a/Shader/Cginc/SunaoShader_OL.cginc b/Shader/Cginc/SunaoShader_OL.cginc index 051581c..7445a06 100644 --- a/Shader/Cginc/SunaoShader_OL.cginc +++ b/Shader/Cginc/SunaoShader_OL.cginc @@ -51,6 +51,40 @@ uniform float _HSVShiftVal; uniform uint _HSVShiftOutlineMode; +//----Vertex Color Alpha + 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; @@ -89,6 +123,7 @@ struct VOUT { float2 uv : TEXCOORD0; float3 color : TEXCOORD1; float mask : TEXCOORD2; + float alpha : TEXCOORD3; LIGHTING_COORDS(3 , 4) UNITY_FOG_COORDS(5) @@ -147,6 +182,24 @@ VOUT vert (VIN v) { //----カラー & ライティング o.color = _OutLineColor.rgb; +//-------------------------------------vertex alpha + o.alpha = VertexAlpha(v.color, _VertexColor01, _VertexAlpha01) * + VertexAlpha(v.color, _VertexColor02, _VertexAlpha02) * + VertexAlpha(v.color, _VertexColor03, _VertexAlpha03) * + VertexAlpha(v.color, _VertexColor04, _VertexAlpha04) * + VertexAlpha(v.color, _VertexColor05, _VertexAlpha05) * + VertexAlpha(v.color, _VertexColor06, _VertexAlpha06) * + VertexAlpha(v.color, _VertexColor07, _VertexAlpha07) * + VertexAlpha(v.color, _VertexColor08, _VertexAlpha08) * + VertexAlpha(v.color, _VertexColor09, _VertexAlpha09) * + VertexAlpha(v.color, _VertexColor10, _VertexAlpha10) * + VertexAlpha(v.color, _VertexColor11, _VertexAlpha11) * + VertexAlpha(v.color, _VertexColor12, _VertexAlpha12) * + VertexAlpha(v.color, _VertexColor13, _VertexAlpha13) * + VertexAlpha(v.color, _VertexColor14, _VertexAlpha14) * + VertexAlpha(v.color, _VertexColor15, _VertexAlpha15) * + VertexAlpha(v.color, _VertexColor16, _VertexAlpha16); + if (_OutLineTexColor) { if (_VertexColor) o.color *= v.color; o.color *= _Bright; @@ -249,6 +302,8 @@ float4 frag (VOUT IN) : COLOR { OUT.a *= lerp(1.0f , MonoColor(UNITY_SAMPLE_TEX2D_SAMPLER(_AlphaMask , _MainTex , IN.uv).rgb) , _AlphaMaskStrength); #endif + OUT.a *= IN.alpha; + //----カットアウト #ifdef CUTOUT diff --git a/Shader/Cginc/SunaoShader_Vert.cginc b/Shader/Cginc/SunaoShader_Vert.cginc index c24d5d8..2fc097a 100644 --- a/Shader/Cginc/SunaoShader_Vert.cginc +++ b/Shader/Cginc/SunaoShader_Vert.cginc @@ -36,6 +36,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) * + VertexAlpha(v.color, _VertexColor02, _VertexAlpha02) * + VertexAlpha(v.color, _VertexColor03, _VertexAlpha03) * + VertexAlpha(v.color, _VertexColor04, _VertexAlpha04) * + VertexAlpha(v.color, _VertexColor05, _VertexAlpha05) * + VertexAlpha(v.color, _VertexColor06, _VertexAlpha06) * + VertexAlpha(v.color, _VertexColor07, _VertexAlpha07) * + VertexAlpha(v.color, _VertexColor08, _VertexAlpha08) * + VertexAlpha(v.color, _VertexColor09, _VertexAlpha09) * + VertexAlpha(v.color, _VertexColor10, _VertexAlpha10) * + VertexAlpha(v.color, _VertexColor11, _VertexAlpha11) * + VertexAlpha(v.color, _VertexColor12, _VertexAlpha12) * + VertexAlpha(v.color, _VertexColor13, _VertexAlpha13) * + VertexAlpha(v.color, _VertexColor14, _VertexAlpha14) * + VertexAlpha(v.color, _VertexColor15, _VertexAlpha15) * + VertexAlpha(v.color, _VertexColor16, _VertexAlpha16); + //-------------------------------------デカール o.decal = (float4)1.0f; diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index c3a4080..f4e2e35 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -129,6 +129,39 @@ Shader "Sunao Shader/AlphaToCoverage" { _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + _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] diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 61f7d96..ee7b8f9 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -129,6 +129,39 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + _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] diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index b0097cc..d22557d 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -135,6 +135,39 @@ Shader "Sunao Shader/Cutout" { _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + _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] diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index 65d157e..0125710 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -135,6 +135,39 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + _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] diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 07399dc..31ab352 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -135,6 +135,39 @@ Shader "Sunao Shader/Opaque" { _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + _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] diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index 279ff4e..48461f6 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -135,6 +135,39 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + _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] diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 960dc46..0247c56 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -135,6 +135,39 @@ Shader "Sunao Shader/Transparent" { _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + _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] diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index c210bbf..920c9df 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -135,6 +135,39 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { _CrosshatchEmissionMap ("Crosshatch Emission Mask", 2D) = "black" {} _CrosshatchAmount ("Crosshatch Amount" , Range( 0.0, 1.0)) = 0.5 + _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] From 3cc46286177e16562942a7f17d4081acd43a0023 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Fri, 4 Sep 2020 10:34:22 -0400 Subject: [PATCH 21/56] Fix OL VOUT definition --- Shader/Cginc/SunaoShader_OL.cginc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Shader/Cginc/SunaoShader_OL.cginc b/Shader/Cginc/SunaoShader_OL.cginc index 7445a06..7a3f122 100644 --- a/Shader/Cginc/SunaoShader_OL.cginc +++ b/Shader/Cginc/SunaoShader_OL.cginc @@ -125,8 +125,8 @@ struct VOUT { float mask : TEXCOORD2; float alpha : TEXCOORD3; - LIGHTING_COORDS(3 , 4) - UNITY_FOG_COORDS(5) + LIGHTING_COORDS(4 , 5) + UNITY_FOG_COORDS(6) }; From 96bdde73f1d82fd7f801ec4d16274255d2fd39a1 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Fri, 4 Sep 2020 11:04:51 -0400 Subject: [PATCH 22/56] Add Vertex Alpha settings foldout --- Editor/SunaoShaderGUI.cs | 191 ++++++++++-------- Shader/Sunao_Shader_AlphaToCoverage.shader | 1 + Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 1 + Shader/Sunao_Shader_Cutout.shader | 1 + Shader/Sunao_Shader_Cutout_SO.shader | 1 + Shader/Sunao_Shader_Opaque.shader | 1 + Shader/Sunao_Shader_Opaque_SO.shader | 1 + Shader/Sunao_Shader_Transparent.shader | 1 + Shader/Sunao_Shader_Transparent_SO.shader | 1 + 9 files changed, 113 insertions(+), 86 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index de72ac4..9580390 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -240,6 +240,7 @@ public class GUI : ShaderGUI { bool ParallaxFoldout = false; bool ReflectionFoldout = false; bool RimLightFoldout = false; + bool VertexAlphaFoldout= false; bool OtherFoldout = false; bool OnceRun = true; @@ -820,92 +821,6 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { } - GUILayout.Label("Vertex Alpha", EditorStyles.boldLabel); - - using (new EditorGUILayout.VerticalScope("box")) { - 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")); - } - } - - GUILayout.Label("Outline", EditorStyles.boldLabel); using (new EditorGUILayout.VerticalScope("box")) { @@ -1188,6 +1103,110 @@ 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")); + } + } else { + mat.SetInt("_VertexAlphaFO" , 0); + } + } + + GUILayout.Label("Other", EditorStyles.boldLabel); using (new EditorGUILayout.VerticalScope("box")) { diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index f4e2e35..879b74e 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -317,6 +317,7 @@ Shader "Sunao Shader/AlphaToCoverage" { [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_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index ee7b8f9..eeaff5d 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -317,6 +317,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [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_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index d22557d..fb3bedb 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -336,6 +336,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 diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index 0125710..27cd761 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -336,6 +336,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 diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 31ab352..d660aaf 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -336,6 +336,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 48461f6..c3e6d34 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -336,6 +336,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_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 0247c56..b50c8a3 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -336,6 +336,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 920c9df..5376d83 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -336,6 +336,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 From aed4735f1b3d705bcca83dcb034b069ff66875b4 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Fri, 4 Sep 2020 15:26:56 -0400 Subject: [PATCH 23/56] Added dithering to AlphaToCoverage --- Shader/Cginc/SunaoShader_Core.cginc | 59 ++++++++--------- Shader/Cginc/SunaoShader_Frag.cginc | 35 ++++++----- Shader/Cginc/SunaoShader_Function.cginc | 33 ++++++++++ Shader/Cginc/SunaoShader_OL.cginc | 63 +++++++++++++++---- Shader/Cginc/SunaoShader_SC.cginc | 27 ++++++-- Shader/Cginc/SunaoShader_Vert.cginc | 1 + Shader/Sunao_Shader_AlphaToCoverage.shader | 9 +-- Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 1 + Shader/Sunao_Shader_Cutout.shader | 1 + Shader/Sunao_Shader_Cutout_SO.shader | 1 + 10 files changed, 164 insertions(+), 66 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 179d9d1..332459c 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -256,31 +256,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 worldpos : TEXCOORD17; - float4 objpos : TEXCOORD18; - float alpha : TEXCOORD19; + 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; @@ -289,13 +290,13 @@ struct VOUT { float4 vldirX : LIGHTDIR2; float4 vldirY : LIGHTDIR3; float4 vldirZ : LIGHTDIR4; - float4 vlcorr : TEXCOORD20; - float4 vlatn : TEXCOORD21; + 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 5b89a7b..8ef6228 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -14,7 +14,7 @@ float4 frag (VOUT IN) : COLOR { float2 SubUV = IN.uv; if (_UVAnimOtherTex) SubUV = MainUV; - #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 @@ -132,9 +132,28 @@ float4 frag (VOUT IN) : COLOR { //----オクルージョン if (_OcclusionMode == 1) Color *= lerp(1.0f , UNITY_SAMPLE_TEX2D_SAMPLER(_OcclusionMap , _MainTex , SubUV).rgb , _OcclusionStrength); +//----Stippling & halftone alpha + 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); + } + +//----Apply vertex alpha + OUT.a *= IN.alpha; + //-------------------------------------カットアウト #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 //-------------------------------------ノーマルマップ @@ -534,17 +553,5 @@ float4 frag (VOUT IN) : COLOR { //-------------------------------------フォグ UNITY_APPLY_FOG(IN.fogCoord, OUT); -//----Stippling & halftone alpha - 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); - } - -//----Apply vertex alpha - OUT.a *= IN.alpha; - return OUT; } diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index 99c4ba4..ff13ccd 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -182,6 +182,39 @@ float VertexAlpha(float3 color, float3 comperand, float alpha) { } } +half2 CalcScreenUV(half4 screenPos) +{ + half2 uv = screenPos / (screenPos.w + 0.0000000001); //0.0x1 Stops division by 0 warning in console. + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + + return uv; +} + +inline half Dither8x8Bayer( int x, int y ) +{ + const half 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; +} + +half CalcDither(half2 screenPos) +{ + half dither = Dither8x8Bayer(fmod(screenPos.x, 8), fmod(screenPos.y, 8)); + return dither; +} + float4x4 rotationMatrix(float3 axis, float angle) { axis = normalize(axis); diff --git a/Shader/Cginc/SunaoShader_OL.cginc b/Shader/Cginc/SunaoShader_OL.cginc index 7a3f122..7c55938 100644 --- a/Shader/Cginc/SunaoShader_OL.cginc +++ b/Shader/Cginc/SunaoShader_OL.cginc @@ -51,6 +51,17 @@ uniform float _HSVShiftVal; uniform uint _HSVShiftOutlineMode; +//----Stippling & Crosshatching + uniform bool _StippleEnable; + 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 float3 _VertexColor01; uniform float _VertexAlpha01; @@ -109,24 +120,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; - float alpha : TEXCOORD3; - - LIGHTING_COORDS(4 , 5) - UNITY_FOG_COORDS(6) + 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) }; @@ -178,6 +191,8 @@ 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; @@ -297,11 +312,26 @@ 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 + half dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, _StippleSize)); + half 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; //----カットアウト @@ -311,6 +341,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 55eb8d0..29e990f 100644 --- a/Shader/Cginc/SunaoShader_SC.cginc +++ b/Shader/Cginc/SunaoShader_SC.cginc @@ -14,9 +14,11 @@ 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; struct VIN { float4 vertex : POSITION; @@ -28,6 +30,7 @@ struct VOUT { V2F_SHADOW_CASTER; float2 uv : TEXCOORD1; float4 worldpos : TEXCOORD2; + float4 screenpos : TEXCOORD3; }; @@ -36,6 +39,7 @@ VOUT vert (VIN v) { o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.uv; o.worldpos = mul(unity_ObjectToWorld, v.vertex); + o.screenpos = ComputeScreenPos(o.pos); TRANSFER_SHADOW_CASTER(o) return o; @@ -43,20 +47,31 @@ VOUT vert (VIN v) { float4 frag (VOUT IN) : COLOR { + float alpha = _Alpha; half dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, _StippleSize)); half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); - float4 stipple_mask = UNITY_SAMPLE_TEX2D(_StippleMask, IN.uv); - float4 crosshatch_mask = UNITY_SAMPLE_TEX2D(_CrosshatchMask, IN.uv); + 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) { - float alpha = lerp(1.0f, dot_halftone, 1.0f - stipple_mask.a); - clip(alpha * _Alpha - _Cutout); + alpha *= lerp(1.0f, dot_halftone, 1.0f - stipple_mask.a); } if (_CrosshatchEnable) { - float alpha = lerp(1.0f, line_halftone, 1.0f - crosshatch_mask.a); - clip(alpha * _Alpha - _Cutout); + alpha *= lerp(1.0f, line_halftone, 1.0f - crosshatch_mask.a); } +//-------------------------------------カットアウト + #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 2fc097a..d61e20b 100644 --- a/Shader/Cginc/SunaoShader_Vert.cginc +++ b/Shader/Cginc/SunaoShader_Vert.cginc @@ -13,6 +13,7 @@ VOUT vert (VIN v) { 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; diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 879b74e..7e46c55 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -358,7 +358,7 @@ Shader "Sunao Shader/AlphaToCoverage" { #pragma target 4.5 #define PASS_FB - #define TRANSPARENT + #define ALPHA_TO_COVERAGE #include "./cginc/SunaoShader_Core.cginc" @@ -382,7 +382,7 @@ Shader "Sunao Shader/AlphaToCoverage" { #pragma target 4.5 #define PASS_OL_FB - #define TRANSPARENT + #define ALPHA_TO_COVERAGE #include "./cginc/SunaoShader_OL.cginc" @@ -407,7 +407,7 @@ Shader "Sunao Shader/AlphaToCoverage" { #pragma target 4.5 #define PASS_OL_FA - #define TRANSPARENT + #define ALPHA_TO_COVERAGE #include "./cginc/SunaoShader_OL.cginc" @@ -432,7 +432,7 @@ Shader "Sunao Shader/AlphaToCoverage" { #pragma target 4.5 #define PASS_FA - #define TRANSPARENT + #define ALPHA_TO_COVERAGE #include "./cginc/SunaoShader_Core.cginc" @@ -456,6 +456,7 @@ Shader "Sunao Shader/AlphaToCoverage" { #pragma target 4.5 #define PASS_SC + #define ALPHA_TO_COVERAGE #include "./cginc/SunaoShader_SC.cginc" diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index eeaff5d..0857203 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -475,6 +475,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { #pragma target 4.5 #define PASS_SC + #define ALPHA_TO_COVERAGE #include "./cginc/SunaoShader_SC.cginc" diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index fb3bedb..c18e32a 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -475,6 +475,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 27cd761..260349a 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -491,6 +491,7 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { #pragma target 4.5 #define PASS_SC + #define CUTOUT #include "./cginc/SunaoShader_SC.cginc" From a2b008f1df19934ffa4642b51df36c3c778206f7 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sat, 5 Sep 2020 05:14:45 -0400 Subject: [PATCH 24/56] Add color conversion and fix shadow casting --- Shader/Cginc/SunaoShader_Function.cginc | 13 +++++- Shader/Cginc/SunaoShader_SC.cginc | 61 +++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index ff13ccd..2566ffa 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -174,9 +174,20 @@ float3 HSVAdjust(float3 color, float3 adjustment) return HSV2RGB(hsv); } +half LIN2SRGB(half color) { + if (color > 0.0031308) + return 1.055 * (pow(color, (1.0 / 2.4))) - 0.055; + else + return 12.92 * color; +} + +half3 LIN2SRGB(half3 color) { + return float3(LIN2SRGB(color.r), LIN2SRGB(color.g), LIN2SRGB(color.b)); +} + float VertexAlpha(float3 color, float3 comperand, float alpha) { if (min(length(color), length(comperand)) > 0.0) { - return lerp(1.0, alpha, step(0.9999, 1.0 - length(color - comperand))); + return lerp(1.0, alpha, step(0.9999, 1.0 - length(color - LIN2SRGB(comperand)))); } else { return 1.0; } diff --git a/Shader/Cginc/SunaoShader_SC.cginc b/Shader/Cginc/SunaoShader_SC.cginc index 29e990f..b628f6a 100644 --- a/Shader/Cginc/SunaoShader_SC.cginc +++ b/Shader/Cginc/SunaoShader_SC.cginc @@ -10,6 +10,8 @@ uniform float _Alpha; uniform float _Cutout; + +//----Stippling & Crosshatching uniform bool _StippleEnable; uniform float _StippleSize; uniform float _StippleAmount; @@ -20,9 +22,45 @@ UNITY_DECLARE_TEX2D(_CrosshatchMask); uniform float4 _CrosshatchMask_ST; +//----Vertex Color Alpha + 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; }; @@ -31,6 +69,7 @@ struct VOUT { float2 uv : TEXCOORD1; float4 worldpos : TEXCOORD2; float4 screenpos : TEXCOORD3; + float alpha : TEXCOORD4; }; @@ -40,6 +79,23 @@ VOUT vert (VIN v) { o.uv = v.uv; o.worldpos = mul(unity_ObjectToWorld, v.vertex); o.screenpos = ComputeScreenPos(o.pos); + o.alpha = VertexAlpha(v.color, _VertexColor01, _VertexAlpha01) * + VertexAlpha(v.color, _VertexColor02, _VertexAlpha02) * + VertexAlpha(v.color, _VertexColor03, _VertexAlpha03) * + VertexAlpha(v.color, _VertexColor04, _VertexAlpha04) * + VertexAlpha(v.color, _VertexColor05, _VertexAlpha05) * + VertexAlpha(v.color, _VertexColor06, _VertexAlpha06) * + VertexAlpha(v.color, _VertexColor07, _VertexAlpha07) * + VertexAlpha(v.color, _VertexColor08, _VertexAlpha08) * + VertexAlpha(v.color, _VertexColor09, _VertexAlpha09) * + VertexAlpha(v.color, _VertexColor10, _VertexAlpha10) * + VertexAlpha(v.color, _VertexColor11, _VertexAlpha11) * + VertexAlpha(v.color, _VertexColor12, _VertexAlpha12) * + VertexAlpha(v.color, _VertexColor13, _VertexAlpha13) * + VertexAlpha(v.color, _VertexColor14, _VertexAlpha14) * + VertexAlpha(v.color, _VertexColor15, _VertexAlpha15) * + VertexAlpha(v.color, _VertexColor16, _VertexAlpha16); + TRANSFER_SHADOW_CASTER(o) return o; @@ -48,6 +104,8 @@ VOUT vert (VIN v) { float4 frag (VOUT IN) : COLOR { float alpha = _Alpha; + +//----Stippling & crosshatching half dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, _StippleSize)); half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); float4 stipple_mask = UNITY_SAMPLE_TEX2D(_StippleMask, TRANSFORM_TEX(IN.uv, _StippleMask)); @@ -61,6 +119,9 @@ float4 frag (VOUT IN) : COLOR { alpha *= lerp(1.0f, line_halftone, 1.0f - crosshatch_mask.a); } +//----Vertex Color Alpha + alpha *= IN.alpha; + //-------------------------------------カットアウト #ifdef CUTOUT clip(alpha - _Cutout); From 6223687ddcf009318ff056ebbe0c8eea574e94b9 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sat, 5 Sep 2020 13:57:47 -0400 Subject: [PATCH 25/56] Added configurable threshold --- Editor/SunaoShaderGUI.cs | 3 ++ Shader/Cginc/SunaoShader_Core.cginc | 1 + Shader/Cginc/SunaoShader_Function.cginc | 4 +-- Shader/Cginc/SunaoShader_OL.cginc | 33 ++++++++++--------- Shader/Cginc/SunaoShader_SC.cginc | 33 ++++++++++--------- Shader/Cginc/SunaoShader_Vert.cginc | 32 +++++++++--------- Shader/Sunao_Shader_AlphaToCoverage.shader | 1 + Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 1 + Shader/Sunao_Shader_Cutout.shader | 1 + Shader/Sunao_Shader_Cutout_SO.shader | 1 + Shader/Sunao_Shader_Opaque.shader | 1 + Shader/Sunao_Shader_Opaque_SO.shader | 1 + Shader/Sunao_Shader_Transparent.shader | 1 + Shader/Sunao_Shader_Transparent_SO.shader | 1 + 14 files changed, 64 insertions(+), 50 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 9580390..e462992 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -99,6 +99,7 @@ public class GUI : ShaderGUI { MaterialProperty CrosshatchEmissionMap; MaterialProperty CrosshatchAmount; + MaterialProperty VertexColorThreshold; MaterialProperty VertexColor01; MaterialProperty VertexAlpha01; MaterialProperty VertexColor02; @@ -383,6 +384,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { 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); @@ -1121,6 +1123,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { if (VertexAlphaFoldout) { mat.SetInt("_VertexAlphaFO" , 1); + ME.ShaderProperty(VertexColorThreshold, new GUIContent("Threshold")); using (new EditorGUILayout.VerticalScope("box")) { GUILayout.Label("Vertex Color 1", EditorStyles.boldLabel); ME.ShaderProperty(VertexColor01, new GUIContent("Color")); diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 332459c..c520a2c 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -107,6 +107,7 @@ uniform float _CrosshatchAmount; //----Vertex Color Alpha + uniform float _VertexColorThreshold; uniform float3 _VertexColor01; uniform float _VertexAlpha01; uniform float3 _VertexColor02; diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index 2566ffa..0c413df 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -185,9 +185,9 @@ half3 LIN2SRGB(half3 color) { return float3(LIN2SRGB(color.r), LIN2SRGB(color.g), LIN2SRGB(color.b)); } -float VertexAlpha(float3 color, float3 comperand, float 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(0.9999, 1.0 - length(color - LIN2SRGB(comperand)))); + return lerp(1.0, alpha, step(threshold, 1.0 - length(color - LIN2SRGB(comperand)))); } else { return 1.0; } diff --git a/Shader/Cginc/SunaoShader_OL.cginc b/Shader/Cginc/SunaoShader_OL.cginc index 7c55938..71f7ed4 100644 --- a/Shader/Cginc/SunaoShader_OL.cginc +++ b/Shader/Cginc/SunaoShader_OL.cginc @@ -63,6 +63,7 @@ uniform float4 _CrosshatchMask_ST; //----Vertex Color Alpha + uniform float _VertexColorThreshold; uniform float3 _VertexColor01; uniform float _VertexAlpha01; uniform float3 _VertexColor02; @@ -198,22 +199,22 @@ VOUT vert (VIN v) { o.color = _OutLineColor.rgb; //-------------------------------------vertex alpha - o.alpha = VertexAlpha(v.color, _VertexColor01, _VertexAlpha01) * - VertexAlpha(v.color, _VertexColor02, _VertexAlpha02) * - VertexAlpha(v.color, _VertexColor03, _VertexAlpha03) * - VertexAlpha(v.color, _VertexColor04, _VertexAlpha04) * - VertexAlpha(v.color, _VertexColor05, _VertexAlpha05) * - VertexAlpha(v.color, _VertexColor06, _VertexAlpha06) * - VertexAlpha(v.color, _VertexColor07, _VertexAlpha07) * - VertexAlpha(v.color, _VertexColor08, _VertexAlpha08) * - VertexAlpha(v.color, _VertexColor09, _VertexAlpha09) * - VertexAlpha(v.color, _VertexColor10, _VertexAlpha10) * - VertexAlpha(v.color, _VertexColor11, _VertexAlpha11) * - VertexAlpha(v.color, _VertexColor12, _VertexAlpha12) * - VertexAlpha(v.color, _VertexColor13, _VertexAlpha13) * - VertexAlpha(v.color, _VertexColor14, _VertexAlpha14) * - VertexAlpha(v.color, _VertexColor15, _VertexAlpha15) * - VertexAlpha(v.color, _VertexColor16, _VertexAlpha16); + 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; diff --git a/Shader/Cginc/SunaoShader_SC.cginc b/Shader/Cginc/SunaoShader_SC.cginc index b628f6a..d5b4071 100644 --- a/Shader/Cginc/SunaoShader_SC.cginc +++ b/Shader/Cginc/SunaoShader_SC.cginc @@ -23,6 +23,7 @@ uniform float4 _CrosshatchMask_ST; //----Vertex Color Alpha + uniform float _VertexColorThreshold; uniform float3 _VertexColor01; uniform float _VertexAlpha01; uniform float3 _VertexColor02; @@ -79,22 +80,22 @@ VOUT vert (VIN v) { o.uv = v.uv; o.worldpos = mul(unity_ObjectToWorld, v.vertex); o.screenpos = ComputeScreenPos(o.pos); - o.alpha = VertexAlpha(v.color, _VertexColor01, _VertexAlpha01) * - VertexAlpha(v.color, _VertexColor02, _VertexAlpha02) * - VertexAlpha(v.color, _VertexColor03, _VertexAlpha03) * - VertexAlpha(v.color, _VertexColor04, _VertexAlpha04) * - VertexAlpha(v.color, _VertexColor05, _VertexAlpha05) * - VertexAlpha(v.color, _VertexColor06, _VertexAlpha06) * - VertexAlpha(v.color, _VertexColor07, _VertexAlpha07) * - VertexAlpha(v.color, _VertexColor08, _VertexAlpha08) * - VertexAlpha(v.color, _VertexColor09, _VertexAlpha09) * - VertexAlpha(v.color, _VertexColor10, _VertexAlpha10) * - VertexAlpha(v.color, _VertexColor11, _VertexAlpha11) * - VertexAlpha(v.color, _VertexColor12, _VertexAlpha12) * - VertexAlpha(v.color, _VertexColor13, _VertexAlpha13) * - VertexAlpha(v.color, _VertexColor14, _VertexAlpha14) * - VertexAlpha(v.color, _VertexColor15, _VertexAlpha15) * - VertexAlpha(v.color, _VertexColor16, _VertexAlpha16); + 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) diff --git a/Shader/Cginc/SunaoShader_Vert.cginc b/Shader/Cginc/SunaoShader_Vert.cginc index d61e20b..934e100 100644 --- a/Shader/Cginc/SunaoShader_Vert.cginc +++ b/Shader/Cginc/SunaoShader_Vert.cginc @@ -38,22 +38,22 @@ VOUT vert (VIN v) { if (_VertexColor) o.color = v.color; //-------------------------------------vertex alpha - o.alpha = VertexAlpha(v.color, _VertexColor01, _VertexAlpha01) * - VertexAlpha(v.color, _VertexColor02, _VertexAlpha02) * - VertexAlpha(v.color, _VertexColor03, _VertexAlpha03) * - VertexAlpha(v.color, _VertexColor04, _VertexAlpha04) * - VertexAlpha(v.color, _VertexColor05, _VertexAlpha05) * - VertexAlpha(v.color, _VertexColor06, _VertexAlpha06) * - VertexAlpha(v.color, _VertexColor07, _VertexAlpha07) * - VertexAlpha(v.color, _VertexColor08, _VertexAlpha08) * - VertexAlpha(v.color, _VertexColor09, _VertexAlpha09) * - VertexAlpha(v.color, _VertexColor10, _VertexAlpha10) * - VertexAlpha(v.color, _VertexColor11, _VertexAlpha11) * - VertexAlpha(v.color, _VertexColor12, _VertexAlpha12) * - VertexAlpha(v.color, _VertexColor13, _VertexAlpha13) * - VertexAlpha(v.color, _VertexColor14, _VertexAlpha14) * - VertexAlpha(v.color, _VertexColor15, _VertexAlpha15) * - VertexAlpha(v.color, _VertexColor16, _VertexAlpha16); + 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); //-------------------------------------デカール diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 7e46c55..a6498c2 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -129,6 +129,7 @@ Shader "Sunao Shader/AlphaToCoverage" { _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) diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 0857203..ed7a8a9 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -129,6 +129,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _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) diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index c18e32a..29c856f 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -135,6 +135,7 @@ Shader "Sunao Shader/Cutout" { _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) diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index 260349a..8cf423c 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -135,6 +135,7 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { _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) diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index d660aaf..1c765a2 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -135,6 +135,7 @@ Shader "Sunao Shader/Opaque" { _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) diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index c3e6d34..dc6271b 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -135,6 +135,7 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { _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) diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index b50c8a3..86319f2 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -135,6 +135,7 @@ Shader "Sunao Shader/Transparent" { _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) diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 5376d83..706db68 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -135,6 +135,7 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { _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) From b5b82ee15a52aed6470f139cd0ae84afd30d0f2f Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sat, 5 Sep 2020 13:59:57 -0400 Subject: [PATCH 26/56] Improved threshold UI element --- Editor/SunaoShaderGUI.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index e462992..74be284 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -1123,7 +1123,6 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { if (VertexAlphaFoldout) { mat.SetInt("_VertexAlphaFO" , 1); - ME.ShaderProperty(VertexColorThreshold, new GUIContent("Threshold")); using (new EditorGUILayout.VerticalScope("box")) { GUILayout.Label("Vertex Color 1", EditorStyles.boldLabel); ME.ShaderProperty(VertexColor01, new GUIContent("Color")); @@ -1204,6 +1203,10 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { 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); } From 46bf4fb95d98645abd10f0f3465c5a24e43086ca Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Tue, 8 Sep 2020 13:23:08 -0400 Subject: [PATCH 27/56] Conditional optimizations --- Shader/Cginc/SunaoShader_Frag.cginc | 41 +++++++++++------------------ 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 8ef6228..250a8e5 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -94,15 +94,15 @@ float4 frag (VOUT IN) : COLOR { 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 (_HSVShiftRimMode == 1) _RimLitColor.rgb = HSVAdjust(_RimLitColor.rgb, hsvadj_masked); + if (_HSVShiftRimMode == 2) _RimLitColor.rgb = HSVAdjust(_RimLitColor.rgb, hsvadj_unmasked); } //----Stippling & crosshatching - 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); - - half dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, stipple_size)); - half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); + half dot_halftone = 0.0f; + half 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)); @@ -112,35 +112,36 @@ float4 frag (VOUT IN) : COLOR { 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(_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); } 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) { + half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); + 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); } 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); -//----Stippling & halftone alpha - 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); - } - //----Apply vertex alpha OUT.a *= IN.alpha; @@ -195,11 +196,6 @@ float4 frag (VOUT IN) : COLOR { } //----影の色 - if (_HSVShiftEnable) { - if (_HSVShiftShadeMode == 1) _CustomShadeColor.rgb = HSVAdjust(_CustomShadeColor.rgb, hsvadj_masked); - if (_HSVShiftShadeMode == 2) _CustomShadeColor.rgb = HSVAdjust(_CustomShadeColor.rgb, hsvadj_unmasked); - } - float3 ShadeColor = saturate(Color * 3.0f - 1.5f) * _ShadeColor; ShadeColor = lerp(ShadeColor , _CustomShadeColor.rgb , _CustomShadeColor.a); @@ -409,11 +405,6 @@ float4 frag (VOUT IN) : COLOR { } //-------------------------------------リムライティング - if (_RimLitEnable && _HSVShiftEnable) { - if (_HSVShiftRimMode == 1) _RimLitColor.rgb = HSVAdjust(_RimLitColor.rgb, hsvadj_masked); - if (_HSVShiftRimMode == 2) _RimLitColor.rgb = HSVAdjust(_RimLitColor.rgb, hsvadj_unmasked); - } - float3 RimLight = (float3)0.0f; #ifdef PASS_FB if (_RimLitEnable) { From 0dd9fdfdfca71dd703aaf7e65fe4021a42a52359 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Fri, 11 Sep 2020 20:55:11 -0400 Subject: [PATCH 28/56] Added shader optimizer --- Editor/ShaderOptimizer.cs | 153 ++++++++++++++++++ Editor/SunaoShaderGUI.cs | 53 +++++- Shader/Sunao_Shader_AlphaToCoverage.shader | 2 + Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 2 + Shader/Sunao_Shader_Cutout.shader | 2 + Shader/Sunao_Shader_Cutout_SO.shader | 2 + Shader/Sunao_Shader_Opaque.shader | 2 + Shader/Sunao_Shader_Opaque_SO.shader | 2 + Shader/Sunao_Shader_Transparent.shader | 2 + Shader/Sunao_Shader_Transparent_SO.shader | 2 + 10 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 Editor/ShaderOptimizer.cs diff --git a/Editor/ShaderOptimizer.cs b/Editor/ShaderOptimizer.cs new file mode 100644 index 0000000..2cb9c83 --- /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(); + foreach (MaterialProperty prop in props) { + if (prop == null) continue; + if (prop.type == MaterialProperty.PropType.Float && Math.Abs(prop.floatValue) > 0.0f) { + 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 74be284..cc23c78 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; @@ -298,6 +299,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); @@ -569,10 +571,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); diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index a6498c2..acaba79 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -13,6 +13,8 @@ Shader "Sunao Shader/AlphaToCoverage" { Properties { + [SToggle] + _OptimizerEnable ("Enable Optimizer" , int) = 0 [NoScaleOffset] _MainTex ("Main Texture" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index ed7a8a9..602bb96 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -13,6 +13,8 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { Properties { + [SToggle] + _OptimizerEnable ("Enable Optimizer" , int) = 0 [NoScaleOffset] _MainTex ("Main Texture" , 2D) = "white" {} diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 29c856f..cee4c8f 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" {} diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index 8cf423c..10ec27c 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" {} diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 1c765a2..0ad0bee 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" {} diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index dc6271b..c7c7065 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" {} diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 86319f2..b7d33b5 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" {} diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 706db68..32b9cf2 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" {} From cb5b1184e5004e2ea00012620f76bef85ecc1731 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sat, 12 Sep 2020 17:18:14 -0400 Subject: [PATCH 29/56] Added optimizations --- Editor/ShaderOptimizer.cs | 6 +- Shader/Cginc/SunaoShader_Core.cginc | 1 + Shader/Cginc/SunaoShader_Frag.cginc | 100 ++++++++++++++++++--------- Shader/Cginc/SunaoShader_Macro.cginc | 14 ++++ 4 files changed, 85 insertions(+), 36 deletions(-) create mode 100644 Shader/Cginc/SunaoShader_Macro.cginc diff --git a/Editor/ShaderOptimizer.cs b/Editor/ShaderOptimizer.cs index 2cb9c83..1599643 100644 --- a/Editor/ShaderOptimizer.cs +++ b/Editor/ShaderOptimizer.cs @@ -66,11 +66,11 @@ public static bool Lock(Material material, MaterialProperty[] props) private static string GenerateDefines(MaterialProperty[] props) { StringBuilder sb = new StringBuilder(); + + sb.AppendLine("#define OPTIMIZED_SHADER 1"); foreach (MaterialProperty prop in props) { - if (prop == null) continue; - if (prop.type == MaterialProperty.PropType.Float && Math.Abs(prop.floatValue) > 0.0f) { + if (prop != null && prop.type == MaterialProperty.PropType.Float) sb.AppendLine("#define PROP_" + ToSnakeCase(prop.name) + " " + prop.floatValue); - } } return sb.ToString(); diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index c520a2c..5cfdb9a 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" //-------------------------------------変数宣言 diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 250a8e5..fec0188 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -23,8 +23,8 @@ float4 frag (VOUT IN) : COLOR { Color = Color * _Color.rgb * _Bright * IN.color; //----デカール - if (_DecalEnable) { - + #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; @@ -81,12 +81,14 @@ 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 //----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); - if (_HSVShiftEnable) { + OPT_IF(_HSVShiftEnable) float4 hsvshift_mask = UNITY_SAMPLE_TEX2D_SAMPLER(_HSVShiftMask, _MainTex, TRANSFORM_TEX(SubUV, _HSVShiftMask)); hsvadj_masked.x = lerp(0.0f, _HSVShiftHue, hsvshift_mask.r); hsvadj_masked.y = lerp(1.0f, _HSVShiftSat, hsvshift_mask.g); @@ -98,7 +100,8 @@ float4 frag (VOUT IN) : COLOR { if (_HSVShiftShadeMode == 2) _CustomShadeColor.rgb = HSVAdjust(_CustomShadeColor.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 //----Stippling & crosshatching half dot_halftone = 0.0f; @@ -118,10 +121,12 @@ float4 frag (VOUT IN) : COLOR { dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, stipple_size)); - if(_HSVShiftEnable) { + #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); @@ -130,10 +135,12 @@ float4 frag (VOUT IN) : COLOR { if (_CrosshatchEnable) { half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); - if(_HSVShiftEnable) { + #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); @@ -187,13 +194,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; @@ -213,7 +222,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); @@ -222,7 +232,8 @@ float4 frag (VOUT IN) : COLOR { VLight3 = MonoColor(VLight3); VLightBase = MonoColor(VLightBase); #endif - } + OPT_FI + #endif //----ライト反映 float3 Lighting = LightBase; @@ -264,15 +275,18 @@ 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(_HSVShiftEnable) { + #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); @@ -288,7 +302,8 @@ float4 frag (VOUT IN) : COLOR { Emission *= saturate(MonoColor(LightBase)); #endif } - } + OPT_FI + #endif //-------------------------------------視差エミッション float3 Parallax = (float3)0.0f; @@ -298,7 +313,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; @@ -306,10 +322,12 @@ 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 (_HSVShiftEnable) { + #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 @@ -319,7 +337,8 @@ float4 frag (VOUT IN) : COLOR { Parallax *= saturate(MonoColor(LightBase)); #endif } - } + OPT_FI + #endif //-------------------------------------リフレクション float Smoothness = 0.0f; @@ -331,7 +350,10 @@ float4 frag (VOUT IN) : COLOR { float3 Reflection = (float3)0.0f; float3 MatCapture = (float3)0.0f; - if (_ReflectionEnable) { + #if WHEN_OPT(PROP_REFLECTION_ENABLE == 1) + OPT_IF(_ReflectionEnable) + float Smoothness = _GlossMapScale * tex2D(_MetallicGlossMap , SubUV).a; + //----スペキュラ反射 Smoothness = tex2D(_MetallicGlossMap , SubUV).a * _GlossMapScale; SpecularMask = tex2D(_MetallicGlossMap , SubUV).rgb; @@ -402,25 +424,30 @@ 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 //-------------------------------------最終カラー計算 @@ -431,14 +458,18 @@ float4 frag (VOUT IN) : COLOR { 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 @@ -455,10 +486,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 @@ -475,7 +508,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); 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) From d7209ad0e25f093213e71bf3a3c0834df3fe96b3 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Tue, 22 Sep 2020 17:20:05 -0400 Subject: [PATCH 30/56] Prefix GUID with dash --- Editor/ShaderOptimizer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Editor/ShaderOptimizer.cs b/Editor/ShaderOptimizer.cs index 1599643..d6430ac 100644 --- a/Editor/ShaderOptimizer.cs +++ b/Editor/ShaderOptimizer.cs @@ -22,7 +22,7 @@ public static bool Lock(Material material, MaterialProperty[] props) 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 newShaderFileName = Path.GetFileNameWithoutExtension(shaderFilePath) + "_" + material.name + "-" + guid + ".shader"; string newShaderFilePath = materialFolder + "/Optimized/" + newShaderFileName; // Generate the new shader From 09a1cf31e7ab897fa49f636edbd5efcf0ff9ed8f Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sat, 3 Oct 2020 20:01:02 -0400 Subject: [PATCH 31/56] Use dedicated sampler for HSV mask --- Shader/Cginc/SunaoShader_Core.cginc | 2 +- Shader/Cginc/SunaoShader_Frag.cginc | 2 +- Shader/Cginc/SunaoShader_OL.cginc | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 5cfdb9a..371e4f7 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -70,7 +70,7 @@ //----Hue Shift uniform bool _HSVShiftEnable; - UNITY_DECLARE_TEX2D_NOSAMPLER(_HSVShiftMask); + UNITY_DECLARE_TEX2D(_HSVShiftMask); uniform float4 _HSVShiftMask_ST; uniform float _HSVShiftHue; uniform float _HSVShiftSat; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index fec0188..28a8b2c 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -89,7 +89,7 @@ float4 frag (VOUT IN) : COLOR { 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_SAMPLER(_HSVShiftMask, _MainTex, TRANSFORM_TEX(SubUV, _HSVShiftMask)); + 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); diff --git a/Shader/Cginc/SunaoShader_OL.cginc b/Shader/Cginc/SunaoShader_OL.cginc index 71f7ed4..656b302 100644 --- a/Shader/Cginc/SunaoShader_OL.cginc +++ b/Shader/Cginc/SunaoShader_OL.cginc @@ -44,7 +44,7 @@ //----Hue Shift uniform bool _HSVShiftEnable; - UNITY_DECLARE_TEX2D_NOSAMPLER(_HSVShiftMask); + UNITY_DECLARE_TEX2D(_HSVShiftMask); uniform float4 _HSVShiftMask_ST; uniform float _HSVShiftHue; uniform float _HSVShiftSat; @@ -294,7 +294,7 @@ float4 frag (VOUT IN) : COLOR { 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_SAMPLER(_HSVShiftMask, _MainTex, TRANSFORM_TEX(IN.uv, _HSVShiftMask)); + 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); From 7c48c7972a091f6c80f8905fb9fe42c045dded93 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Wed, 7 Oct 2020 22:30:33 -0400 Subject: [PATCH 32/56] Add disable outline option in stippling --- Editor/SunaoShaderGUI.cs | 3 +++ Shader/Cginc/SunaoShader_Core.cginc | 1 + Shader/Cginc/SunaoShader_OL.cginc | 3 ++- Shader/Sunao_Shader_AlphaToCoverage.shader | 2 ++ Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 2 ++ Shader/Sunao_Shader_Cutout.shader | 2 ++ Shader/Sunao_Shader_Cutout_SO.shader | 2 ++ Shader/Sunao_Shader_Opaque.shader | 2 ++ Shader/Sunao_Shader_Opaque_SO.shader | 2 ++ Shader/Sunao_Shader_Transparent.shader | 2 ++ Shader/Sunao_Shader_Transparent_SO.shader | 2 ++ 11 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index cc23c78..7fbcab8 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -94,6 +94,7 @@ public class GUI : ShaderGUI { MaterialProperty StippleAnimation; MaterialProperty StippleSpeed; MaterialProperty StippleFrequency; + MaterialProperty StippleDisableOutline; MaterialProperty CrosshatchEnable; MaterialProperty CrosshatchMask; MaterialProperty CrosshatchTexture; @@ -380,6 +381,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { 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); @@ -856,6 +858,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { 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")) { diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 371e4f7..3d4359e 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -98,6 +98,7 @@ uniform float _StippleAnimation; uniform float _StippleSpeed; uniform float _StippleFrequency; + uniform bool _StippleDisableOutline; uniform bool _CrosshatchEnable; UNITY_DECLARE_TEX2D_NOSAMPLER(_CrosshatchMask); uniform float4 _CrosshatchMask_ST; diff --git a/Shader/Cginc/SunaoShader_OL.cginc b/Shader/Cginc/SunaoShader_OL.cginc index 656b302..54bdb19 100644 --- a/Shader/Cginc/SunaoShader_OL.cginc +++ b/Shader/Cginc/SunaoShader_OL.cginc @@ -53,6 +53,7 @@ //----Stippling & Crosshatching uniform bool _StippleEnable; + uniform bool _StippleDisableOutline; uniform float _StippleSize; uniform float _StippleAmount; UNITY_DECLARE_TEX2D_NOSAMPLER(_StippleMask); @@ -176,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)); diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index acaba79..8dd915d 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -125,6 +125,8 @@ Shader "Sunao Shader/AlphaToCoverage" { _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" {} diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 602bb96..350b535 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -125,6 +125,8 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _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" {} diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index cee4c8f..5ef82f0 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -131,6 +131,8 @@ Shader "Sunao Shader/Cutout" { _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" {} diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index 10ec27c..a6e5eed 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -131,6 +131,8 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { _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" {} diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 0ad0bee..82a217b 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -131,6 +131,8 @@ Shader "Sunao Shader/Opaque" { _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" {} diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index c7c7065..c3b93dd 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -131,6 +131,8 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { _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" {} diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index b7d33b5..b1acf7b 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -131,6 +131,8 @@ Shader "Sunao Shader/Transparent" { _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" {} diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 32b9cf2..e864096 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -131,6 +131,8 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { _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" {} From 06189db9486ac2f93696339bbe6d2bf1b2fd7634 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sun, 18 Oct 2020 21:10:31 -0400 Subject: [PATCH 33/56] Updates for 1.4.0 --- Shader/Sunao_Shader_AlphaToCoverage.shader | 17 +++- Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 18 +++- Shader/Sunao_Shader_Cutout.shader | 4 + Shader/Sunao_Shader_Cutout_SO.shader | 4 + Shader/Sunao_Shader_Opaque.shader | 4 + Shader/Sunao_Shader_Opaque_SO.shader | 4 + Shader/Sunao_Shader_Stencil_R.shader | 83 +++++++++++++++++++ Shader/Sunao_Shader_Stencil_W.shader | 83 +++++++++++++++++++ Shader/Sunao_Shader_Transparent.shader | 4 + Shader/Sunao_Shader_Transparent_SO.shader | 4 + 10 files changed, 217 insertions(+), 8 deletions(-) diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 8dd915d..2630678 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// Sunao Shader Ver 1.3.2 +// Sunao Shader Ver 1.4.0 // // Copyright (c) 2020 揚茄子研究所 // Twitter : @SUNAO_VRC @@ -18,7 +18,7 @@ Shader "Sunao Shader/AlphaToCoverage" { [NoScaleOffset] _MainTex ("Main Texture" , 2D) = "white" {} - _Color ("Color" , Color) = (1,1,1,1) + _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 @@ -56,9 +56,9 @@ Shader "Sunao Shader/AlphaToCoverage" { _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)] + [Enum(Override , 0 , Add , 1 , Multiply , 2 , Multiply(Mono) , 3)] _DecalMode ("Decal Mode" , int) = 0 - [Enum(Normal , 0 ,Fixed , 1 , Mirror1 , 2 , Mirror2 , 3)] + [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 @@ -68,6 +68,11 @@ Shader "Sunao Shader/AlphaToCoverage" { _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 @@ -89,6 +94,7 @@ Shader "Sunao Shader/AlphaToCoverage" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] _HSVShiftEnable ("Enable HSV Shift" , int) = 0 _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} @@ -112,6 +118,7 @@ Shader "Sunao Shader/AlphaToCoverage" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} @@ -133,6 +140,7 @@ Shader "Sunao Shader/AlphaToCoverage" { _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 @@ -167,6 +175,7 @@ Shader "Sunao Shader/AlphaToCoverage" { _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] diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 350b535..38f2fd8 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// Sunao Shader Ver 1.3.2 +// Sunao Shader Ver 1.4.0 // // Copyright (c) 2020 揚茄子研究所 // Twitter : @SUNAO_VRC @@ -18,7 +18,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [NoScaleOffset] _MainTex ("Main Texture" , 2D) = "white" {} - _Color ("Color" , Color) = (1,1,1,1) + _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 @@ -46,6 +46,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] _DecalEnable ("Enable Decal" , int) = 0 _DecalTex ("Decal Texture" , 2D) = "white" {} @@ -56,9 +57,9 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _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)] + [Enum(Override , 0 , Add , 1 , Multiply , 2 , Multiply(Mono) , 3)] _DecalMode ("Decal Mode" , int) = 0 - [Enum(Normal , 0 ,Fixed , 1 , Mirror1 , 2 , Mirror2 , 3)] + [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 @@ -68,6 +69,11 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _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 @@ -89,6 +95,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] _HSVShiftEnable ("Enable HSV Shift" , int) = 0 _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} @@ -112,6 +119,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} @@ -133,6 +141,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _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 @@ -167,6 +176,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _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] diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 5ef82f0..e34417e 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -95,6 +95,7 @@ Shader "Sunao Shader/Cutout" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] _HSVShiftEnable ("Enable HSV Shift" , int) = 0 _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} @@ -118,6 +119,7 @@ Shader "Sunao Shader/Cutout" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} @@ -139,6 +141,7 @@ Shader "Sunao Shader/Cutout" { _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 @@ -173,6 +176,7 @@ Shader "Sunao Shader/Cutout" { _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] diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index a6e5eed..a04af74 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -95,6 +95,7 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] _HSVShiftEnable ("Enable HSV Shift" , int) = 0 _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} @@ -118,6 +119,7 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} @@ -139,6 +141,7 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { _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 @@ -173,6 +176,7 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { _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] diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 82a217b..dd32cee 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -95,6 +95,7 @@ Shader "Sunao Shader/Opaque" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] _HSVShiftEnable ("Enable HSV Shift" , int) = 0 _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} @@ -118,6 +119,7 @@ Shader "Sunao Shader/Opaque" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} @@ -139,6 +141,7 @@ Shader "Sunao Shader/Opaque" { _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 @@ -173,6 +176,7 @@ Shader "Sunao Shader/Opaque" { _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] diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index c3b93dd..928bb95 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -95,6 +95,7 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] _HSVShiftEnable ("Enable HSV Shift" , int) = 0 _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} @@ -118,6 +119,7 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} @@ -139,6 +141,7 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { _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 @@ -173,6 +176,7 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { _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] diff --git a/Shader/Sunao_Shader_Stencil_R.shader b/Shader/Sunao_Shader_Stencil_R.shader index 8ab0a98..647979f 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" {} @@ -94,6 +96,87 @@ Shader "Sunao Shader/[Stencil]/Read" { _MonochromeLit ("Monochrome Lighting" , int) = 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)] + _HSVShiftShadeMode ("Shade 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] diff --git a/Shader/Sunao_Shader_Stencil_W.shader b/Shader/Sunao_Shader_Stencil_W.shader index 86687cc..a2d54be 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" {} @@ -94,6 +96,87 @@ Shader "Sunao Shader/[Stencil]/Write" { _MonochromeLit ("Monochrome Lighting" , int) = 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)] + _HSVShiftShadeMode ("Shade 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] diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index b1acf7b..9bc0952 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -95,6 +95,7 @@ Shader "Sunao Shader/Transparent" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] _HSVShiftEnable ("Enable HSV Shift" , int) = 0 _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} @@ -118,6 +119,7 @@ Shader "Sunao Shader/Transparent" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} @@ -139,6 +141,7 @@ Shader "Sunao Shader/Transparent" { _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 @@ -173,6 +176,7 @@ Shader "Sunao Shader/Transparent" { _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] diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index e864096..8c660f3 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -95,6 +95,7 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [SToggle] _MonochromeLit ("Monochrome Lighting" , int) = 0 + [SToggle] _HSVShiftEnable ("Enable HSV Shift" , int) = 0 _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} @@ -118,6 +119,7 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftCrosshatchMode ("Crosshatch Mode" , int) = 0 + [SToggle] _StippleEnable ("Enable Stippling" , int) = 0 _StippleMask ("Stipple Mask" , 2D) = "white" {} @@ -139,6 +141,7 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { _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 @@ -173,6 +176,7 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { _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] From fdb2d8fb50db0ede86f744b7cfb497e16f818077 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sat, 24 Oct 2020 17:31:42 -0400 Subject: [PATCH 34/56] Added mirror control feature --- Editor/SunaoShaderGUI.cs | 17 +++++++++++++++++ Shader/Cginc/SunaoShader_Core.cginc | 5 +++++ Shader/Cginc/SunaoShader_Frag.cginc | 7 +++++++ Shader/Sunao_Shader_AlphaToCoverage.shader | 7 +++++++ Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 6 ++++++ Shader/Sunao_Shader_Cutout.shader | 6 ++++++ Shader/Sunao_Shader_Cutout_SO.shader | 6 ++++++ Shader/Sunao_Shader_Opaque.shader | 6 ++++++ Shader/Sunao_Shader_Opaque_SO.shader | 6 ++++++ Shader/Sunao_Shader_Stencil_R.shader | 6 ++++++ Shader/Sunao_Shader_Stencil_W.shader | 6 ++++++ Shader/Sunao_Shader_Transparent.shader | 6 ++++++ Shader/Sunao_Shader_Transparent_SO.shader | 6 ++++++ 13 files changed, 90 insertions(+) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 7fbcab8..21dca56 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -70,6 +70,10 @@ public class GUI : ShaderGUI { MaterialProperty Unlit; MaterialProperty MonochromeLit; + MaterialProperty MirrorControlEnable; + MaterialProperty MirrorCopyAlpha; + MaterialProperty RealCopyAlpha; + MaterialProperty HSVShiftEnable; MaterialProperty HSVShiftMask; MaterialProperty HSVShiftHue; @@ -357,6 +361,10 @@ 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); @@ -813,6 +821,15 @@ 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")) { diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 3d4359e..c5f449d 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -68,6 +68,11 @@ 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); diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 28a8b2c..df95e89 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -152,6 +152,13 @@ float4 frag (VOUT IN) : COLOR { //----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); diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 2630678..3eefed7 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -95,6 +95,13 @@ Shader "Sunao Shader/AlphaToCoverage" { _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" {} diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 38f2fd8..89813b5 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -96,6 +96,12 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _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" {} diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index e34417e..be86b5d 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -96,6 +96,12 @@ 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" {} diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index a04af74..866c17e 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -96,6 +96,12 @@ 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" {} diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index dd32cee..8f00ffd 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -96,6 +96,12 @@ 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" {} diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index 928bb95..72f473b 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -96,6 +96,12 @@ 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" {} diff --git a/Shader/Sunao_Shader_Stencil_R.shader b/Shader/Sunao_Shader_Stencil_R.shader index 647979f..57b8681 100644 --- a/Shader/Sunao_Shader_Stencil_R.shader +++ b/Shader/Sunao_Shader_Stencil_R.shader @@ -96,6 +96,12 @@ 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" {} diff --git a/Shader/Sunao_Shader_Stencil_W.shader b/Shader/Sunao_Shader_Stencil_W.shader index a2d54be..42e125e 100644 --- a/Shader/Sunao_Shader_Stencil_W.shader +++ b/Shader/Sunao_Shader_Stencil_W.shader @@ -96,6 +96,12 @@ 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" {} diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 9bc0952..3fa602e 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -96,6 +96,12 @@ 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" {} diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 8c660f3..6fbe4a4 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -96,6 +96,12 @@ 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" {} From 7cb0db9a478cb9f6010214c59217feff1dfa6685 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Mon, 2 Nov 2020 19:17:33 -0500 Subject: [PATCH 35/56] Added Toon Specular effect (#1) * Anisotropic specular WIP * Added Toon Specular --- Editor/SunaoShaderGUI.cs | 33 ++++++++++++++++++- Shader/Cginc/SunaoShader_Core.cginc | 9 +++++ Shader/Cginc/SunaoShader_Frag.cginc | 23 +++++++++++-- Shader/Cginc/SunaoShader_Function.cginc | 14 ++++++++ Shader/Sunao_Shader_AlphaToCoverage.shader | 12 ++++++- Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 10 ++++++ Shader/Sunao_Shader_Cutout.shader | 10 ++++++ Shader/Sunao_Shader_Cutout_SO.shader | 10 ++++++ Shader/Sunao_Shader_Opaque.shader | 10 ++++++ Shader/Sunao_Shader_Opaque_SO.shader | 10 ++++++ Shader/Sunao_Shader_Stencil_R.shader | 10 ++++++ Shader/Sunao_Shader_Stencil_W.shader | 10 ++++++ Shader/Sunao_Shader_Transparent.shader | 10 ++++++ Shader/Sunao_Shader_Transparent_SO.shader | 10 ++++++ 14 files changed, 177 insertions(+), 4 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 21dca56..5c3e733 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -187,6 +187,13 @@ public class GUI : ShaderGUI { MaterialProperty IgnoreTexAlphaPE; MaterialProperty ParallaxInTheDark; + MaterialProperty ToonSpecEnable; + MaterialProperty ToonSpecMask; + MaterialProperty ToonSpecColor; + MaterialProperty ToonSpecOffset; + MaterialProperty ToonSpecIntensity; + MaterialProperty ToonSpecSharpness; + MaterialProperty ReflectionEnable; MaterialProperty MetallicGlossMap; MaterialProperty GlossColor; @@ -478,6 +485,13 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { IgnoreTexAlphaPE = FindProperty("_IgnoreTexAlphaPE" , Prop , false); ParallaxInTheDark = FindProperty("_ParallaxInTheDark" , Prop , false); + ToonSpecEnable = FindProperty("_ToonSpecEnable" , Prop , false); + ToonSpecMask = FindProperty("_ToonSpecMask" , Prop , false); + ToonSpecColor = FindProperty("_ToonSpecColor" , Prop , false); + ToonSpecOffset = FindProperty("_ToonSpecOffset" , Prop , false); + ToonSpecIntensity = FindProperty("_ToonSpecIntensity" , Prop , false); + ToonSpecSharpness = FindProperty("_ToonSpecSharpness" , Prop , false); + ReflectionEnable = FindProperty("_ReflectionEnable" , Prop , false); MetallicGlossMap = FindProperty("_MetallicGlossMap" , Prop , false); GlossColor = FindProperty("_GlossColor" , Prop , false); @@ -754,7 +768,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")); } @@ -1064,6 +1078,23 @@ 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.TexturePropertySingleLine(new GUIContent("Specular Mask"), ToonSpecMask); + ME.TextureScaleOffsetProperty(ToonSpecMask); + ME.ShaderProperty(ToonSpecColor, new GUIContent("Specular Color")); + ME.ShaderProperty(ToonSpecOffset, new GUIContent("Specular Offset")); + ME.ShaderProperty(ToonSpecIntensity, new GUIContent("Specular Intensity")); + ME.ShaderProperty(ToonSpecSharpness, new GUIContent("Specular Sharpness")); + } + } + + GUILayout.Label("Reflection", EditorStyles.boldLabel); using (new EditorGUILayout.VerticalScope("box")) { diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index c5f449d..3c0f7e2 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -194,6 +194,15 @@ uniform bool _IgnoreTexAlphaPE; uniform float _ParallaxInTheDark; +//----Toon Specular + uniform bool _ToonSpecEnable; + UNITY_DECLARE_TEX2D_NOSAMPLER(_ToonSpecMask); + uniform float4 _ToonSpecMask_ST; + uniform float _ToonSpecOffset; + uniform float _ToonSpecIntensity; + uniform float _ToonSpecSharpness; + uniform float4 _ToonSpecColor; + //----Reflection uniform bool _ReflectionEnable; uniform sampler2D _MetallicGlossMap; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index df95e89..43c2a6c 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -349,6 +349,8 @@ float4 frag (VOUT IN) : COLOR { //-------------------------------------リフレクション float Smoothness = 0.0f; + float3 ToonSpec = (float3)0.0f; + float3 ToonSpecMask = (float3)0.0f; float3 SpecularMask = (float3)0.0f; float3 ReflectMask = (float3)0.0f; float MatCapSmooth = 0.0f; @@ -357,6 +359,22 @@ float4 frag (VOUT IN) : COLOR { 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)); + + float3 RLToonSpec = ToonSpecularCalc(Normal, IN.ldir, IN.view, _ToonSpecSharpness, _ToonSpecOffset) * LightBase; + + #ifdef PASS_FB + float SHToonSpec = ToonSpecularCalc(Normal, IN.ldir, IN.view, _ToonSpecSharpness, _ToonSpecOffset) * IN.shmax; + ToonSpec = (RLToonSpec + SHToonSpec) * _ToonSpecIntensity * _ToonSpecColor; + #endif + #ifdef PASS_FA + ToonSpec = RLToonSpec * _ToonSpecIntensity * _ToonSpecColor; + #endif + OPT_FI + #endif + #if WHEN_OPT(PROP_REFLECTION_ENABLE == 1) OPT_IF(_ReflectionEnable) float Smoothness = _GlossMapScale * tex2D(_MetallicGlossMap , SubUV).a; @@ -431,8 +449,8 @@ float4 frag (VOUT IN) : COLOR { if (_SpecularTexColor ) Specular *= Color; if (_MetallicTexColor ) Reflection *= Color; if (_MatCapTexColor ) MatCapture *= Color; -OPT_FI -#endif + OPT_FI + #endif //-------------------------------------リムライティング float3 RimLight = (float3)0.0f; @@ -461,6 +479,7 @@ OPT_FI 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; diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index 0c413df..846d744 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -84,6 +84,12 @@ float2 EmissionWave(uint mode , float blink , float freq , float offset) { return wave; } +//-------------------------------------Calculate bitangent +float3 Bitangent(float3 normal, float4 tangent) +{ + return cross(normal, tangent.xyz) * (tangent.w * unity_WorldTransformParams.w); +} + //-------------------------------------ディフューズシェーディングの計算 float DiffuseCalc(float3 normal , float3 ldir , float gradient , float width) { float Diffuse; @@ -125,6 +131,14 @@ float3 SpecularCalc(float3 normal , float3 ldir , float3 view , float scale) { return specular; } +float3 ToonSpecularCalc(float3 normal, float3 ldir, float3 view, float sharpness, float offset) +{ + float NdotL = dot(ldir + view, normal); + float NdotLO = dot(view + float3(0.0, offset, 0.0), normal); + + return saturate(NdotL * pow(sqrt(1.0 - NdotLO * NdotLO), sharpness)); +} + //-------------------------------------環境マッピングの計算 float3 ReflectionCalc(float3 normal , float3 view , float scale) { float3 dir = reflect(-view , normal); diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 3eefed7..80cabb0 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -46,6 +46,7 @@ Shader "Sunao Shader/AlphaToCoverage" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] _DecalEnable ("Enable Decal" , int) = 0 _DecalTex ("Decal Texture" , 2D) = "white" {} @@ -101,7 +102,6 @@ Shader "Sunao Shader/AlphaToCoverage" { _MirrorCopyAlpha ("Mirror Copy Alpha" , Range( 0.0, 1.0)) = 1.0 - [SToggle] _HSVShiftEnable ("Enable HSV Shift" , int) = 0 _HSVShiftMask ("HSV Shift Mask" , 2D) = "white" {} @@ -256,6 +256,16 @@ Shader "Sunao Shader/AlphaToCoverage" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 89813b5..aae0df7 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -256,6 +256,16 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index be86b5d..5d8a8b3 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -256,6 +256,16 @@ Shader "Sunao Shader/Cutout" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index 866c17e..a77868e 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -256,6 +256,16 @@ 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 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 8f00ffd..7b4cadd 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -256,6 +256,16 @@ Shader "Sunao Shader/Opaque" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index 72f473b..62cda84 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -256,6 +256,16 @@ 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 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.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_R.shader b/Shader/Sunao_Shader_Stencil_R.shader index 57b8681..ebfabd3 100644 --- a/Shader/Sunao_Shader_Stencil_R.shader +++ b/Shader/Sunao_Shader_Stencil_R.shader @@ -256,6 +256,16 @@ Shader "Sunao Shader/[Stencil]/Read" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.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 42e125e..4eb0db3 100644 --- a/Shader/Sunao_Shader_Stencil_W.shader +++ b/Shader/Sunao_Shader_Stencil_W.shader @@ -256,6 +256,16 @@ Shader "Sunao Shader/[Stencil]/Write" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 3fa602e..b122095 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -256,6 +256,16 @@ Shader "Sunao Shader/Transparent" { _ParallaxInTheDark ("Only in the Dark" , Range( 0.0, 1.0)) = 0.0 + [SToggle] + _ToonSpecEnable ("Enable Toon Specular" , int) = 0 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 6fbe4a4..bb9d01e 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -256,6 +256,16 @@ 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 + _ToonSpecMask ("Specular Mask" , 2D) = "white" {} + [HDR] + _ToonSpecColor ("Specular Color" , Color) = (1,1,1) + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 + _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 + + [SToggle] _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] From 3d4a636617d6fe5e8e9b4d7ce097bc621a91dded Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Mon, 2 Nov 2020 20:44:48 -0500 Subject: [PATCH 36/56] SH fixes & add vertex lights to toon specular --- Shader/Cginc/SunaoShader_Frag.cginc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 43c2a6c..ced032a 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -366,8 +366,13 @@ float4 frag (VOUT IN) : COLOR { float3 RLToonSpec = ToonSpecularCalc(Normal, IN.ldir, IN.view, _ToonSpecSharpness, _ToonSpecOffset) * LightBase; #ifdef PASS_FB - float SHToonSpec = ToonSpecularCalc(Normal, IN.ldir, IN.view, _ToonSpecSharpness, _ToonSpecOffset) * IN.shmax; - ToonSpec = (RLToonSpec + SHToonSpec) * _ToonSpecIntensity * _ToonSpecColor; + float SHToonSpec = ToonSpecularCalc(Normal, IN.shdir, IN.view, _ToonSpecSharpness, _ToonSpecOffset) * IN.shmax; + float3 VL0ToonSpec = ToonSpecularCalc(Normal, float3(IN.vldirX.x, IN.vldirY.x, IN.vldirZ.x), IN.view, _ToonSpecSharpness, _ToonSpecOffset) * VLight0; + float3 VL1ToonSpec = ToonSpecularCalc(Normal, float3(IN.vldirX.y, IN.vldirY.y, IN.vldirZ.y), IN.view, _ToonSpecSharpness, _ToonSpecOffset) * VLight1; + float3 VL2ToonSpec = ToonSpecularCalc(Normal, float3(IN.vldirX.z, IN.vldirY.z, IN.vldirZ.z), IN.view, _ToonSpecSharpness, _ToonSpecOffset) * VLight2; + float3 VL3ToonSpec = ToonSpecularCalc(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; From b781a0f37519d807c2a5758beae676725b762194 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Tue, 3 Nov 2020 02:20:11 -0500 Subject: [PATCH 37/56] Added specular HSV shift mode --- Editor/SunaoShaderGUI.cs | 3 +++ Shader/Cginc/SunaoShader_Core.cginc | 1 + Shader/Cginc/SunaoShader_Frag.cginc | 2 ++ Shader/Sunao_Shader_AlphaToCoverage.shader | 4 +++- Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 4 +++- Shader/Sunao_Shader_Cutout.shader | 2 ++ Shader/Sunao_Shader_Cutout_SO.shader | 4 +++- Shader/Sunao_Shader_Opaque.shader | 4 +++- Shader/Sunao_Shader_Opaque_SO.shader | 4 +++- Shader/Sunao_Shader_Stencil_R.shader | 4 +++- Shader/Sunao_Shader_Stencil_W.shader | 4 +++- Shader/Sunao_Shader_Transparent.shader | 4 +++- Shader/Sunao_Shader_Transparent_SO.shader | 4 +++- 13 files changed, 35 insertions(+), 9 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 5c3e733..17fda73 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -81,6 +81,7 @@ public class GUI : ShaderGUI { MaterialProperty HSVShiftVal; MaterialProperty HSVShiftBaseMode; MaterialProperty HSVShiftShadeMode; + MaterialProperty HSVShiftSpecularMode; MaterialProperty HSVShiftEmissionMode; MaterialProperty HSVShiftOutlineMode; MaterialProperty HSVShiftRimMode; @@ -379,6 +380,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { HSVShiftVal = FindProperty("_HSVShiftVal" , Prop , false); HSVShiftBaseMode = FindProperty("_HSVShiftBaseMode" , 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); @@ -859,6 +861,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { ME.ShaderProperty(HSVShiftVal, new GUIContent("Val Shift")); ME.ShaderProperty(HSVShiftBaseMode, new GUIContent("Base 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")); diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 3c0f7e2..f9136a8 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -82,6 +82,7 @@ uniform float _HSVShiftVal; uniform uint _HSVShiftBaseMode; uniform uint _HSVShiftShadeMode; + uniform uint _HSVShiftSpecularMode; uniform uint _HSVShiftEmissionMode; uniform uint _HSVShiftOutlineMode; uniform uint _HSVShiftRimMode; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index ced032a..a6ad217 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -98,6 +98,8 @@ float4 frag (VOUT IN) : COLOR { 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 diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 80cabb0..a1a5473 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -111,7 +111,9 @@ Shader "Sunao Shader/AlphaToCoverage" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HSVShiftShadeMode ("Shade Mode" , int) = 0 + _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)] diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index aae0df7..13f3f6f 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -111,7 +111,9 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HSVShiftShadeMode ("Shade Mode" , int) = 0 + _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)] diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 5d8a8b3..45772a3 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -113,6 +113,8 @@ Shader "Sunao Shader/Cutout" { [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 diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index a77868e..f3e37ef 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -111,7 +111,9 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HSVShiftShadeMode ("Shade Mode" , int) = 0 + _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)] diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 7b4cadd..ed1d8d4 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -111,7 +111,9 @@ Shader "Sunao Shader/Opaque" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HSVShiftShadeMode ("Shade Mode" , int) = 0 + _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)] diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index 62cda84..d27d098 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -111,7 +111,9 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HSVShiftShadeMode ("Shade Mode" , int) = 0 + _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)] diff --git a/Shader/Sunao_Shader_Stencil_R.shader b/Shader/Sunao_Shader_Stencil_R.shader index ebfabd3..ed48af5 100644 --- a/Shader/Sunao_Shader_Stencil_R.shader +++ b/Shader/Sunao_Shader_Stencil_R.shader @@ -111,7 +111,9 @@ Shader "Sunao Shader/[Stencil]/Read" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HSVShiftShadeMode ("Shade Mode" , int) = 0 + _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)] diff --git a/Shader/Sunao_Shader_Stencil_W.shader b/Shader/Sunao_Shader_Stencil_W.shader index 4eb0db3..8f74d11 100644 --- a/Shader/Sunao_Shader_Stencil_W.shader +++ b/Shader/Sunao_Shader_Stencil_W.shader @@ -111,7 +111,9 @@ Shader "Sunao Shader/[Stencil]/Write" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HSVShiftShadeMode ("Shade Mode" , int) = 0 + _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)] diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index b122095..3d20cac 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -111,7 +111,9 @@ Shader "Sunao Shader/Transparent" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HSVShiftShadeMode ("Shade Mode" , int) = 0 + _HSVShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVSpecularMode ("Specular Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftEmissionMode ("Emission Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index bb9d01e..475b926 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -111,7 +111,9 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftBaseMode ("Base Mode" , int) = 1 [Enum(None , 0 , Mask , 1 , All , 2)] - _HSVShiftShadeMode ("Shade Mode" , int) = 0 + _HSVShiftShadeMode ("Shade Mode" , int) = 0 + [Enum(None , 0 , Mask , 1 , All , 2)] + _HSVSpecularMode ("Specular Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftEmissionMode ("Emission Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] From 732fd44c23c8359df5964814686b2ef5d9f6f9a5 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Tue, 3 Nov 2020 16:12:11 -0500 Subject: [PATCH 38/56] Fix shader params --- Shader/Sunao_Shader_Transparent.shader | 2 +- Shader/Sunao_Shader_Transparent_SO.shader | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 3d20cac..80d093c 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -113,7 +113,7 @@ Shader "Sunao Shader/Transparent" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HSVSpecularMode ("Specular Mode" , int) = 0 + _HSVShiftSpecularMode ("Specular Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftEmissionMode ("Emission Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 475b926..886ded3 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -113,7 +113,7 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftShadeMode ("Shade Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] - _HSVSpecularMode ("Specular Mode" , int) = 0 + _HSVShiftSpecularMode ("Specular Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] _HSVShiftEmissionMode ("Emission Mode" , int) = 0 [Enum(None , 0 , Mask , 1 , All , 2)] From c781b94c85258feff5d07a8f2b286ce1137d094c Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Wed, 4 Nov 2020 18:30:45 -0500 Subject: [PATCH 39/56] Fix badly named variable --- Shader/Cginc/SunaoShader_Function.cginc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index 846d744..e7ae80e 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -134,9 +134,9 @@ float3 SpecularCalc(float3 normal , float3 ldir , float3 view , float scale) { float3 ToonSpecularCalc(float3 normal, float3 ldir, float3 view, float sharpness, float offset) { float NdotL = dot(ldir + view, normal); - float NdotLO = dot(view + float3(0.0, offset, 0.0), normal); + float NdotVO = dot(view + float3(0.0, offset, 0.0), normal); - return saturate(NdotL * pow(sqrt(1.0 - NdotLO * NdotLO), sharpness)); + return saturate(NdotL * pow(sqrt(1.0 - NdotVO * NdotVO), sharpness)); } //-------------------------------------環境マッピングの計算 From 30a357d774be3612bdc9c769ad5ed966328565d1 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Fri, 27 Nov 2020 05:19:30 -0500 Subject: [PATCH 40/56] Added GGX toon specular mode --- Editor/SunaoShaderGUI.cs | 22 +++++++-- Shader/Cginc/SunaoShader_Core.cginc | 7 ++- Shader/Cginc/SunaoShader_Frag.cginc | 49 +++++++++++++++---- Shader/Cginc/SunaoShader_Function.cginc | 15 +++++- Shader/Sunao_Shader_AlphaToCoverage.shader | 8 ++- Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 8 ++- Shader/Sunao_Shader_Cutout.shader | 6 ++- Shader/Sunao_Shader_Cutout_SO.shader | 6 ++- Shader/Sunao_Shader_Opaque.shader | 6 ++- Shader/Sunao_Shader_Opaque_SO.shader | 6 ++- Shader/Sunao_Shader_Stencil_R.shader | 6 ++- Shader/Sunao_Shader_Stencil_W.shader | 6 ++- Shader/Sunao_Shader_Transparent.shader | 6 ++- Shader/Sunao_Shader_Transparent_SO.shader | 6 ++- 14 files changed, 128 insertions(+), 29 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 17fda73..4c95f8c 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -189,10 +189,13 @@ public class GUI : ShaderGUI { MaterialProperty ParallaxInTheDark; MaterialProperty ToonSpecEnable; + MaterialProperty ToonSpecMode; MaterialProperty ToonSpecMask; MaterialProperty ToonSpecColor; - MaterialProperty ToonSpecOffset; MaterialProperty ToonSpecIntensity; + MaterialProperty ToonSpecRoughnessT; + MaterialProperty ToonSpecRoughnessB; + MaterialProperty ToonSpecOffset; MaterialProperty ToonSpecSharpness; MaterialProperty ReflectionEnable; @@ -488,10 +491,13 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { 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); - ToonSpecOffset = FindProperty("_ToonSpecOffset" , 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); @@ -1088,12 +1094,20 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { 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(ToonSpecOffset, new GUIContent("Specular Offset")); ME.ShaderProperty(ToonSpecIntensity, new GUIContent("Specular Intensity")); - ME.ShaderProperty(ToonSpecSharpness, new GUIContent("Specular Sharpness")); + + if (ToonSpecMode.floatValue >= 0.5f) { + ME.ShaderProperty(ToonSpecOffset, new GUIContent("Specular Offset")); + ME.ShaderProperty(ToonSpecSharpness, new GUIContent("Specular Sharpness")); + } + else { + ME.ShaderProperty(ToonSpecRoughnessT, new GUIContent("Specular Roughness X")); + ME.ShaderProperty(ToonSpecRoughnessB, new GUIContent("Specular Roughness Y")); + } } } diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index f9136a8..44e43d2 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -197,12 +197,15 @@ //----Toon Specular uniform bool _ToonSpecEnable; + uniform uint _ToonSpecMode; UNITY_DECLARE_TEX2D_NOSAMPLER(_ToonSpecMask); uniform float4 _ToonSpecMask_ST; - uniform float _ToonSpecOffset; + uniform float4 _ToonSpecColor; uniform float _ToonSpecIntensity; + uniform float _ToonSpecRoughnessT; + uniform float _ToonSpecRoughnessB; + uniform float _ToonSpecOffset; uniform float _ToonSpecSharpness; - uniform float4 _ToonSpecColor; //----Reflection uniform bool _ReflectionEnable; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index a6ad217..c780372 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -365,23 +365,52 @@ float4 frag (VOUT IN) : COLOR { OPT_IF(_ToonSpecEnable) ToonSpecMask = UNITY_SAMPLE_TEX2D_SAMPLER(_ToonSpecMask, _MainTex, TRANSFORM_TEX(SubUV, _ToonSpecMask)); - float3 RLToonSpec = ToonSpecularCalc(Normal, IN.ldir, IN.view, _ToonSpecSharpness, _ToonSpecOffset) * LightBase; + #if WHEN_OPT(PROP_TOON_SPEC_MODE == 0) + OPT_IF(_ToonSpecMode == 0) + float3 RLToonSpec = ToonAnisoSpecularCalc(Normal, IN.tangent, IN.ldir, IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * LightBase; - #ifdef PASS_FB - float SHToonSpec = ToonSpecularCalc(Normal, IN.shdir, IN.view, _ToonSpecSharpness, _ToonSpecOffset) * IN.shmax; - float3 VL0ToonSpec = ToonSpecularCalc(Normal, float3(IN.vldirX.x, IN.vldirY.x, IN.vldirZ.x), IN.view, _ToonSpecSharpness, _ToonSpecOffset) * VLight0; - float3 VL1ToonSpec = ToonSpecularCalc(Normal, float3(IN.vldirX.y, IN.vldirY.y, IN.vldirZ.y), IN.view, _ToonSpecSharpness, _ToonSpecOffset) * VLight1; - float3 VL2ToonSpec = ToonSpecularCalc(Normal, float3(IN.vldirX.z, IN.vldirY.z, IN.vldirZ.z), IN.view, _ToonSpecSharpness, _ToonSpecOffset) * VLight2; - float3 VL3ToonSpec = ToonSpecularCalc(Normal, float3(IN.vldirX.w, IN.vldirY.w, IN.vldirZ.w), IN.view, _ToonSpecSharpness, _ToonSpecOffset) * VLight3; + #ifdef PASS_FB + float SHToonSpec = ToonAnisoSpecularCalc(Normal, IN.tangent, IN.shdir, IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * IN.shmax; + float3 VL0ToonSpec = ToonAnisoSpecularCalc(Normal, IN.tangent, float3(IN.vldirX.x, IN.vldirY.x, IN.vldirZ.x), IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * VLight0; + float3 VL1ToonSpec = ToonAnisoSpecularCalc(Normal, IN.tangent, float3(IN.vldirX.y, IN.vldirY.y, IN.vldirZ.y), IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * VLight1; + float3 VL2ToonSpec = ToonAnisoSpecularCalc(Normal, IN.tangent, float3(IN.vldirX.z, IN.vldirY.z, IN.vldirZ.z), IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * VLight2; + float3 VL3ToonSpec = ToonAnisoSpecularCalc(Normal, IN.tangent, float3(IN.vldirX.w, IN.vldirY.w, IN.vldirZ.w), IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * VLight3; - ToonSpec = (RLToonSpec + SHToonSpec + VL0ToonSpec + VL1ToonSpec + VL2ToonSpec + VL3ToonSpec) * _ToonSpecIntensity * _ToonSpecColor; + ToonSpec = (RLToonSpec + SHToonSpec + VL0ToonSpec + VL1ToonSpec + VL2ToonSpec + VL3ToonSpec) * _ToonSpecIntensity * _ToonSpecColor; + #endif + #ifdef PASS_FA + ToonSpec = RLToonSpec * _ToonSpecIntensity * _ToonSpecColor; + #endif + OPT_FI #endif - #ifdef PASS_FA - ToonSpec = RLToonSpec * _ToonSpecIntensity * _ToonSpecColor; + + #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 + float 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) float Smoothness = _GlossMapScale * tex2D(_MetallicGlossMap , SubUV).a; diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index e7ae80e..b256d97 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -131,7 +131,20 @@ float3 SpecularCalc(float3 normal , float3 ldir , float3 view , float scale) { return specular; } -float3 ToonSpecularCalc(float3 normal, float3 ldir, float3 view, float sharpness, float offset) +float3 ToonAnisoSpecularCalc(float3 normal, float4 tangent, float3 ldir, float3 view, float roughnessT, float roughnessB) +{ + float3 hv = normalize(ldir + view); + float3 bitangent = Bitangent(normal, tangent); + + float NdotL = dot(normal, hv); + float TdotL = dot(tangent, hv); + float BTdotL = dot(bitangent, hv); + + float f = TdotL * TdotL / (roughnessT * roughnessT) + BTdotL * BTdotL / (roughnessB * roughnessB) + NdotL * NdotL; + return saturate(1.0 / (roughnessT * roughnessB * f * f)); +} + +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); diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index a1a5473..6d88bc8 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -22,7 +22,7 @@ Shader "Sunao Shader/AlphaToCoverage" { _Alpha ("Alpha" , Range( 0.0, 2.0)) = 1.0 _Cutout ("Cutout" , Range( 0.0, 1.0)) = 0.5 - [NoScaleOffset][Normal] + [Normal] _BumpMap ("Normal Map" , 2D) = "bump" {} [NoScaleOffset] _OcclusionMap ("Occlusion" , 2D) = "white" {} @@ -260,11 +260,15 @@ Shader "Sunao Shader/AlphaToCoverage" { [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) - _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 13f3f6f..0b30b67 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -22,7 +22,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _Alpha ("Alpha" , Range( 0.0, 2.0)) = 1.0 _Cutout ("Cutout" , Range( 0.0, 1.0)) = 0.5 - [NoScaleOffset][Normal] + [Normal] _BumpMap ("Normal Map" , 2D) = "bump" {} [NoScaleOffset] _OcclusionMap ("Occlusion" , 2D) = "white" {} @@ -260,11 +260,15 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [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) - _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 45772a3..29e1974 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -260,11 +260,15 @@ Shader "Sunao Shader/Cutout" { [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) - _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index f3e37ef..2e5580e 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -260,11 +260,15 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [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) - _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index ed1d8d4..cb66eb4 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -260,11 +260,15 @@ Shader "Sunao Shader/Opaque" { [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) - _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index d27d098..5e9e445 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -260,11 +260,15 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [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) - _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 diff --git a/Shader/Sunao_Shader_Stencil_R.shader b/Shader/Sunao_Shader_Stencil_R.shader index ed48af5..c90ad14 100644 --- a/Shader/Sunao_Shader_Stencil_R.shader +++ b/Shader/Sunao_Shader_Stencil_R.shader @@ -260,11 +260,15 @@ Shader "Sunao Shader/[Stencil]/Read" { [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) - _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 diff --git a/Shader/Sunao_Shader_Stencil_W.shader b/Shader/Sunao_Shader_Stencil_W.shader index 8f74d11..bb24cf8 100644 --- a/Shader/Sunao_Shader_Stencil_W.shader +++ b/Shader/Sunao_Shader_Stencil_W.shader @@ -260,11 +260,15 @@ Shader "Sunao Shader/[Stencil]/Write" { [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) - _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 80d093c..e06b04d 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -260,11 +260,15 @@ Shader "Sunao Shader/Transparent" { [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) - _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index 886ded3..cc97491 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -260,11 +260,15 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [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) - _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 + _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 + _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _ToonSpecOffset ("Specular Offset" , Range(-10.0, 10.0)) = -2.0 _ToonSpecSharpness ("Specular Sharpness" , Range( 0.0, 1000.0)) = 500.0 From 3e6e89024edfa86de2aaa1f20891890f92a593a4 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Fri, 27 Nov 2020 23:50:18 -0500 Subject: [PATCH 41/56] Fixed tangent/bitangent supplied to GGX spec --- Shader/Cginc/SunaoShader_Frag.cginc | 15 +++++++++------ Shader/Cginc/SunaoShader_Function.cginc | 19 ++++++------------- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index c780372..8f014d2 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -186,6 +186,9 @@ float4 frag (VOUT IN) : COLOR { 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)); @@ -367,14 +370,14 @@ float4 frag (VOUT IN) : COLOR { #if WHEN_OPT(PROP_TOON_SPEC_MODE == 0) OPT_IF(_ToonSpecMode == 0) - float3 RLToonSpec = ToonAnisoSpecularCalc(Normal, IN.tangent, IN.ldir, IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * LightBase; + float3 RLToonSpec = ToonAnisoSpecularCalc(Normal, IN.tanW, Bitangent, IN.ldir, IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * LightBase; #ifdef PASS_FB - float SHToonSpec = ToonAnisoSpecularCalc(Normal, IN.tangent, IN.shdir, IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * IN.shmax; - float3 VL0ToonSpec = ToonAnisoSpecularCalc(Normal, IN.tangent, float3(IN.vldirX.x, IN.vldirY.x, IN.vldirZ.x), IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * VLight0; - float3 VL1ToonSpec = ToonAnisoSpecularCalc(Normal, IN.tangent, float3(IN.vldirX.y, IN.vldirY.y, IN.vldirZ.y), IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * VLight1; - float3 VL2ToonSpec = ToonAnisoSpecularCalc(Normal, IN.tangent, float3(IN.vldirX.z, IN.vldirY.z, IN.vldirZ.z), IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * VLight2; - float3 VL3ToonSpec = ToonAnisoSpecularCalc(Normal, IN.tangent, float3(IN.vldirX.w, IN.vldirY.w, IN.vldirZ.w), IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * VLight3; + float 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 diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index b256d97..358e762 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -84,12 +84,6 @@ float2 EmissionWave(uint mode , float blink , float freq , float offset) { return wave; } -//-------------------------------------Calculate bitangent -float3 Bitangent(float3 normal, float4 tangent) -{ - return cross(normal, tangent.xyz) * (tangent.w * unity_WorldTransformParams.w); -} - //-------------------------------------ディフューズシェーディングの計算 float DiffuseCalc(float3 normal , float3 ldir , float gradient , float width) { float Diffuse; @@ -131,16 +125,15 @@ float3 SpecularCalc(float3 normal , float3 ldir , float3 view , float scale) { return specular; } -float3 ToonAnisoSpecularCalc(float3 normal, float4 tangent, float3 ldir, float3 view, float roughnessT, float roughnessB) +float3 ToonAnisoSpecularCalc(float3 normal, float3 tangent, float3 bitangent, float3 ldir, float3 view, float roughnessT, float roughnessB) { - float3 hv = normalize(ldir + view); - float3 bitangent = Bitangent(normal, tangent); + float3 hv = normalize(ldir + view); - float NdotL = dot(normal, hv); - float TdotL = dot(tangent, hv); - float BTdotL = dot(bitangent, hv); + float NdotH = dot(normal, hv); + float TdotH = dot(tangent, hv); + float BTdotH = dot(bitangent, hv); - float f = TdotL * TdotL / (roughnessT * roughnessT) + BTdotL * BTdotL / (roughnessB * roughnessB) + NdotL * NdotL; + float f = TdotH * TdotH / (roughnessT * roughnessT) + BTdotH * BTdotH / (roughnessB * roughnessB) + NdotH * NdotH; return saturate(1.0 / (roughnessT * roughnessB * f * f)); } From d23ca4cfbde5f59194231203f2e1c05bb02dd11b Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sat, 28 Nov 2020 00:07:06 -0500 Subject: [PATCH 42/56] Change roughness defaults --- Shader/Sunao_Shader_AlphaToCoverage.shader | 4 ++-- Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 4 ++-- Shader/Sunao_Shader_Cutout.shader | 4 ++-- Shader/Sunao_Shader_Cutout_SO.shader | 4 ++-- Shader/Sunao_Shader_Opaque.shader | 4 ++-- Shader/Sunao_Shader_Opaque_SO.shader | 4 ++-- Shader/Sunao_Shader_Stencil_R.shader | 4 ++-- Shader/Sunao_Shader_Stencil_W.shader | 4 ++-- Shader/Sunao_Shader_Transparent.shader | 4 ++-- Shader/Sunao_Shader_Transparent_SO.shader | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 6d88bc8..e35cf3a 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -266,8 +266,8 @@ Shader "Sunao Shader/AlphaToCoverage" { [HDR] _ToonSpecColor ("Specular Color" , Color) = (1,1,1) _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 - _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 - _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _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 diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 0b30b67..59e44fd 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -266,8 +266,8 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [HDR] _ToonSpecColor ("Specular Color" , Color) = (1,1,1) _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 - _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 - _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _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 diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 29e1974..4658685 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -266,8 +266,8 @@ Shader "Sunao Shader/Cutout" { [HDR] _ToonSpecColor ("Specular Color" , Color) = (1,1,1) _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 - _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 - _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _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 diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index 2e5580e..bcc26b1 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -266,8 +266,8 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [HDR] _ToonSpecColor ("Specular Color" , Color) = (1,1,1) _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 - _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 - _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _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 diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index cb66eb4..e592340 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -266,8 +266,8 @@ Shader "Sunao Shader/Opaque" { [HDR] _ToonSpecColor ("Specular Color" , Color) = (1,1,1) _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 - _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 - _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _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 diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index 5e9e445..03aedff 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -266,8 +266,8 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [HDR] _ToonSpecColor ("Specular Color" , Color) = (1,1,1) _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 - _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 - _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _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 diff --git a/Shader/Sunao_Shader_Stencil_R.shader b/Shader/Sunao_Shader_Stencil_R.shader index c90ad14..6928278 100644 --- a/Shader/Sunao_Shader_Stencil_R.shader +++ b/Shader/Sunao_Shader_Stencil_R.shader @@ -266,8 +266,8 @@ Shader "Sunao Shader/[Stencil]/Read" { [HDR] _ToonSpecColor ("Specular Color" , Color) = (1,1,1) _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 - _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 - _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _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 diff --git a/Shader/Sunao_Shader_Stencil_W.shader b/Shader/Sunao_Shader_Stencil_W.shader index bb24cf8..6747d0e 100644 --- a/Shader/Sunao_Shader_Stencil_W.shader +++ b/Shader/Sunao_Shader_Stencil_W.shader @@ -266,8 +266,8 @@ Shader "Sunao Shader/[Stencil]/Write" { [HDR] _ToonSpecColor ("Specular Color" , Color) = (1,1,1) _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 - _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 - _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _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 diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index e06b04d..c435df5 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -266,8 +266,8 @@ Shader "Sunao Shader/Transparent" { [HDR] _ToonSpecColor ("Specular Color" , Color) = (1,1,1) _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 - _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 - _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _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 diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index cc97491..a84ef8e 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -266,8 +266,8 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [HDR] _ToonSpecColor ("Specular Color" , Color) = (1,1,1) _ToonSpecIntensity ("Specular Intensity" , Range( 0.0, 10.0)) = 1.0 - _ToonSpecRoughnessT ("Specular Roughness X" , Range( 0, 1.0)) = 1.0 - _ToonSpecRoughnessB ("Specular Roughness Y" , Range( 0, 1.0)) = 0.2 + _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 From 75ae7fb6d8a82df653c4900215784655cbdb88d7 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Tue, 1 Dec 2020 00:27:12 -0500 Subject: [PATCH 43/56] Added decal support to HSV adjustment --- Editor/SunaoShaderGUI.cs | 3 ++ Shader/Cginc/SunaoShader_Core.cginc | 1 + Shader/Cginc/SunaoShader_Frag.cginc | 49 +++++++++++-------- Shader/Sunao_Shader_AlphaToCoverage.shader | 2 + Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 2 + Shader/Sunao_Shader_Cutout.shader | 2 + Shader/Sunao_Shader_Cutout_SO.shader | 2 + Shader/Sunao_Shader_Opaque.shader | 2 + Shader/Sunao_Shader_Opaque_SO.shader | 2 + Shader/Sunao_Shader_Stencil_R.shader | 2 + Shader/Sunao_Shader_Stencil_W.shader | 2 + Shader/Sunao_Shader_Transparent.shader | 2 + Shader/Sunao_Shader_Transparent_SO.shader | 2 + 13 files changed, 52 insertions(+), 21 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 4c95f8c..d1a34eb 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -80,6 +80,7 @@ public class GUI : ShaderGUI { MaterialProperty HSVShiftSat; MaterialProperty HSVShiftVal; MaterialProperty HSVShiftBaseMode; + MaterialProperty HSVShiftDecalMode; MaterialProperty HSVShiftShadeMode; MaterialProperty HSVShiftSpecularMode; MaterialProperty HSVShiftEmissionMode; @@ -382,6 +383,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { 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); @@ -866,6 +868,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { 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")); diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 44e43d2..fe8764c 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -81,6 +81,7 @@ uniform float _HSVShiftSat; uniform float _HSVShiftVal; uniform uint _HSVShiftBaseMode; + uniform uint _HSVShiftDecalMode; uniform uint _HSVShiftShadeMode; uniform uint _HSVShiftSpecularMode; uniform uint _HSVShiftEmissionMode; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 8f014d2..9c7065b 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -22,6 +22,27 @@ float4 frag (VOUT IN) : COLOR { float3 Color = UNITY_SAMPLE_TEX2D(_MainTex , MainUV).rgb; Color = Color * _Color.rgb * _Bright * IN.color; +//----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) @@ -59,6 +80,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); @@ -84,27 +112,6 @@ float4 frag (VOUT IN) : COLOR { 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 - //----Stippling & crosshatching half dot_halftone = 0.0f; half line_halftone = 0.0f; diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index e35cf3a..e22d7be 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -111,6 +111,8 @@ Shader "Sunao Shader/AlphaToCoverage" { [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 diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 59e44fd..c9cc125 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -111,6 +111,8 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [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 diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 4658685..e864a58 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -111,6 +111,8 @@ Shader "Sunao Shader/Cutout" { [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 diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index bcc26b1..cfa51d5 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -111,6 +111,8 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [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 diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index e592340..2ff562d 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -111,6 +111,8 @@ Shader "Sunao Shader/Opaque" { [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 diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index 03aedff..ae29e01 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -111,6 +111,8 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [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 diff --git a/Shader/Sunao_Shader_Stencil_R.shader b/Shader/Sunao_Shader_Stencil_R.shader index 6928278..4c65df8 100644 --- a/Shader/Sunao_Shader_Stencil_R.shader +++ b/Shader/Sunao_Shader_Stencil_R.shader @@ -111,6 +111,8 @@ Shader "Sunao Shader/[Stencil]/Read" { [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 diff --git a/Shader/Sunao_Shader_Stencil_W.shader b/Shader/Sunao_Shader_Stencil_W.shader index 6747d0e..536164a 100644 --- a/Shader/Sunao_Shader_Stencil_W.shader +++ b/Shader/Sunao_Shader_Stencil_W.shader @@ -111,6 +111,8 @@ Shader "Sunao Shader/[Stencil]/Write" { [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 diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index c435df5..2b749dc 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -111,6 +111,8 @@ Shader "Sunao Shader/Transparent" { [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 diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index a84ef8e..bbceae6 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -111,6 +111,8 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [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 From babe71a05b097e455273ae67c44d60a0c5ac297b Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sat, 5 Dec 2020 03:10:47 -0500 Subject: [PATCH 44/56] Added metallic property to toon specular --- Editor/SunaoShaderGUI.cs | 13 +++++--- Shader/Cginc/SunaoShader_Core.cginc | 1 + Shader/Cginc/SunaoShader_Frag.cginc | 32 ++++++++++--------- Shader/Sunao_Shader_AlphaToCoverage.shader | 1 + Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 1 + Shader/Sunao_Shader_Cutout.shader | 1 + Shader/Sunao_Shader_Cutout_SO.shader | 1 + Shader/Sunao_Shader_Opaque.shader | 1 + Shader/Sunao_Shader_Opaque_SO.shader | 1 + Shader/Sunao_Shader_Stencil_R.shader | 1 + Shader/Sunao_Shader_Stencil_W.shader | 1 + Shader/Sunao_Shader_Transparent.shader | 1 + Shader/Sunao_Shader_Transparent_SO.shader | 1 + 13 files changed, 36 insertions(+), 20 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index d1a34eb..97c777d 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -193,6 +193,7 @@ public class GUI : ShaderGUI { MaterialProperty ToonSpecMode; MaterialProperty ToonSpecMask; MaterialProperty ToonSpecColor; + MaterialProperty ToonSpecMetallic; MaterialProperty ToonSpecIntensity; MaterialProperty ToonSpecRoughnessT; MaterialProperty ToonSpecRoughnessB; @@ -496,6 +497,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { 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); @@ -1101,15 +1103,16 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { ME.TexturePropertySingleLine(new GUIContent("Specular Mask"), ToonSpecMask); ME.TextureScaleOffsetProperty(ToonSpecMask); ME.ShaderProperty(ToonSpecColor, new GUIContent("Specular Color")); - ME.ShaderProperty(ToonSpecIntensity, new GUIContent("Specular Intensity")); + ME.ShaderProperty(ToonSpecMetallic, new GUIContent("Metallic")); + ME.ShaderProperty(ToonSpecIntensity, new GUIContent("Intensity")); if (ToonSpecMode.floatValue >= 0.5f) { - ME.ShaderProperty(ToonSpecOffset, new GUIContent("Specular Offset")); - ME.ShaderProperty(ToonSpecSharpness, new GUIContent("Specular Sharpness")); + ME.ShaderProperty(ToonSpecOffset, new GUIContent("Offset")); + ME.ShaderProperty(ToonSpecSharpness, new GUIContent("Sharpness")); } else { - ME.ShaderProperty(ToonSpecRoughnessT, new GUIContent("Specular Roughness X")); - ME.ShaderProperty(ToonSpecRoughnessB, new GUIContent("Specular Roughness Y")); + ME.ShaderProperty(ToonSpecRoughnessT, new GUIContent("Roughness X")); + ME.ShaderProperty(ToonSpecRoughnessB, new GUIContent("Roughness Y")); } } } diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index fe8764c..340b641 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -202,6 +202,7 @@ UNITY_DECLARE_TEX2D_NOSAMPLER(_ToonSpecMask); uniform float4 _ToonSpecMask_ST; uniform float4 _ToonSpecColor; + uniform float _ToonSpecMetallic; uniform float _ToonSpecIntensity; uniform float _ToonSpecRoughnessT; uniform float _ToonSpecRoughnessB; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 9c7065b..789aaf4 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -85,7 +85,7 @@ float4 frag (VOUT IN) : COLOR { if (_HSVShiftDecalMode == 1) DecalColor.rgb = HSVAdjust(DecalColor.rgb, hsvadj_masked); if (_HSVShiftDecalMode == 2) DecalColor.rgb = HSVAdjust(DecalColor.rgb, hsvadj_unmasked); OPT_FI - #endif + #endif #ifdef TRANSPARENT if (_DecalMode == 0) { @@ -360,20 +360,22 @@ float4 frag (VOUT IN) : COLOR { #endif //-------------------------------------リフレクション - float Smoothness = 0.0f; - float3 ToonSpec = (float3)0.0f; - float3 ToonSpecMask = (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; + 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) @@ -386,10 +388,10 @@ float4 frag (VOUT IN) : COLOR { 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; + ToonSpec = (RLToonSpec + SHToonSpec + VL0ToonSpec + VL1ToonSpec + VL2ToonSpec + VL3ToonSpec) * _ToonSpecIntensity * ToonSpecColor; #endif #ifdef PASS_FA - ToonSpec = RLToonSpec * _ToonSpecIntensity * _ToonSpecColor; + ToonSpec = RLToonSpec * _ToonSpecIntensity * ToonSpecColor; #endif OPT_FI #endif @@ -405,10 +407,10 @@ float4 frag (VOUT IN) : COLOR { 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; + ToonSpec = (RLToonSpec + SHToonSpec + VL0ToonSpec + VL1ToonSpec + VL2ToonSpec + VL3ToonSpec) * _ToonSpecIntensity * ToonSpecColor; #endif #ifdef PASS_FA - ToonSpec = RLToonSpec * _ToonSpecIntensity * _ToonSpecColor; + ToonSpec = RLToonSpec * _ToonSpecIntensity * ToonSpecColor; #endif OPT_FI #endif diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index e22d7be..7d42361 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -267,6 +267,7 @@ Shader "Sunao Shader/AlphaToCoverage" { _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 diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index c9cc125..d58c7af 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -267,6 +267,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _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 diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index e864a58..005f95b 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -267,6 +267,7 @@ Shader "Sunao Shader/Cutout" { _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 diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index cfa51d5..b14a7ba 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -267,6 +267,7 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { _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 diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 2ff562d..903ea7a 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -267,6 +267,7 @@ Shader "Sunao Shader/Opaque" { _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 diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index ae29e01..98541fb 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -267,6 +267,7 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { _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 diff --git a/Shader/Sunao_Shader_Stencil_R.shader b/Shader/Sunao_Shader_Stencil_R.shader index 4c65df8..639eb8e 100644 --- a/Shader/Sunao_Shader_Stencil_R.shader +++ b/Shader/Sunao_Shader_Stencil_R.shader @@ -267,6 +267,7 @@ Shader "Sunao Shader/[Stencil]/Read" { _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 diff --git a/Shader/Sunao_Shader_Stencil_W.shader b/Shader/Sunao_Shader_Stencil_W.shader index 536164a..fbd0cc6 100644 --- a/Shader/Sunao_Shader_Stencil_W.shader +++ b/Shader/Sunao_Shader_Stencil_W.shader @@ -267,6 +267,7 @@ Shader "Sunao Shader/[Stencil]/Write" { _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 diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index 2b749dc..c8bb999 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -267,6 +267,7 @@ Shader "Sunao Shader/Transparent" { _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 diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index bbceae6..cdd17a6 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -267,6 +267,7 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { _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 From 2b295ca564ea7d59bdcd5c1bf27942a70d4a2339 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Thu, 10 Dec 2020 23:13:52 -0500 Subject: [PATCH 45/56] Refactor anisotropic specular --- Shader/Cginc/SunaoShader_Function.cginc | 31 +++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index 358e762..0019408 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -125,16 +125,39 @@ float3 SpecularCalc(float3 normal , float3 ldir , float3 view , float scale) { return specular; } +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); +} + +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); +} + float3 ToonAnisoSpecularCalc(float3 normal, float3 tangent, float3 bitangent, float3 ldir, float3 view, float roughnessT, float roughnessB) { float3 hv = normalize(ldir + view); - float NdotH = dot(normal, hv); + float NdotL = saturate(dot(normal, ldir)); + float NdotH = saturate(dot(normal, hv)); + float TdotH = dot(tangent, hv); - float BTdotH = dot(bitangent, hv); + float BdotH = dot(bitangent, hv); + + float D = D_GGX_Anisotropic(roughnessT, roughnessB, TdotH, BdotH, NdotH); - float f = TdotH * TdotH / (roughnessT * roughnessT) + BTdotH * BTdotH / (roughnessB * roughnessB) + NdotH * NdotH; - return saturate(1.0 / (roughnessT * roughnessB * f * f)); + return saturate(D * NdotL); } float3 ToonViewOffSpecularCalc(float3 normal, float3 ldir, float3 view, float sharpness, float offset) From dabb7887546fb56a9a1ac1c609d9f8791d5bd54e Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Fri, 11 Dec 2020 00:06:20 -0500 Subject: [PATCH 46/56] Refactor to imporove consistency & documentation --- Shader/Cginc/SunaoShader_Frag.cginc | 6 +- Shader/Cginc/SunaoShader_Function.cginc | 112 +++++++++++++----------- Shader/Cginc/SunaoShader_OL.cginc | 4 +- Shader/Cginc/SunaoShader_SC.cginc | 4 +- 4 files changed, 66 insertions(+), 60 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 789aaf4..715fb8f 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -113,8 +113,8 @@ float4 frag (VOUT IN) : COLOR { #endif //----Stippling & crosshatching - half dot_halftone = 0.0f; - half line_halftone = 0.0f; + 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)); @@ -142,7 +142,7 @@ float4 frag (VOUT IN) : COLOR { } if (_CrosshatchEnable) { - half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); + float line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); #if WHEN_OPT(PROP_HSV_SHIFT_ENABLE == 1) OPT_IF(_HSVShiftEnable) diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index 0019408..8af3375 100644 --- a/Shader/Cginc/SunaoShader_Function.cginc +++ b/Shader/Cginc/SunaoShader_Function.cginc @@ -125,6 +125,7 @@ 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" @@ -138,6 +139,7 @@ float D_GGX_Anisotropic(float at, float ab, float TdotH, float BdotH, float Ndot 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)); @@ -145,8 +147,8 @@ float V_SmithGGXCorrelated_Anisotropic(float at, float ab, float TdotV, float Bd return 0.5 / (lambdaV + lambdaL); } -float3 ToonAnisoSpecularCalc(float3 normal, float3 tangent, float3 bitangent, float3 ldir, float3 view, float roughnessT, float roughnessB) -{ +//-------------------------------------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)); @@ -160,12 +162,12 @@ float3 ToonAnisoSpecularCalc(float3 normal, float3 tangent, float3 bitangent, fl return saturate(D * NdotL); } -float3 ToonViewOffSpecularCalc(float3 normal, float3 ldir, float3 view, float sharpness, float offset) -{ +//-------------------------------------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(NdotL * pow(sqrt(1.0 - NdotVO * NdotVO), sharpness)); + return saturate(pow(sqrt(1.0 - NdotVO * NdotVO), sharpness) * NdotL); } //-------------------------------------環境マッピングの計算 @@ -192,24 +194,26 @@ float RimLightCalc(float3 normal , float3 view , float power , float gradient) return orim; } -half3 RGB2HSV(half3 c) { +//-------------------------------------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 half3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); } -half3 HSV2RGB(half3 c) { +//-------------------------------------HSV to RGB +float3 HSV2RGB(float3 c) { half4 K = half4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); - half3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + 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); } -float3 HSVAdjust(float3 color, float3 adjustment) -{ +//-------------------------------------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); @@ -217,17 +221,20 @@ float3 HSVAdjust(float3 color, float3 adjustment) return HSV2RGB(hsv); } -half LIN2SRGB(half color) { +//-------------------------------------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; } -half3 LIN2SRGB(half3 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)))); @@ -236,11 +243,11 @@ float VertexAlpha(float3 color, float3 comperand, float alpha, float threshold) } } -half2 CalcScreenUV(half4 screenPos) -{ - half2 uv = screenPos / (screenPos.w + 0.0000000001); //0.0x1 Stops division by 0 warning in console. +//-------------------------------------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 *= half2(_ScreenParams.x * 2, _ScreenParams.y); + uv.xy *= float2(_ScreenParams.x * 2, _ScreenParams.y); #else uv.xy *= _ScreenParams.xy; #endif @@ -248,9 +255,9 @@ half2 CalcScreenUV(half4 screenPos) return uv; } -inline half Dither8x8Bayer( int x, int y ) -{ - const half dither[ 64 ] = { +//-------------------------------------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, @@ -263,14 +270,14 @@ inline half Dither8x8Bayer( int x, int y ) return dither[r] / 64; } -half CalcDither(half2 screenPos) -{ - half dither = Dither8x8Bayer(fmod(screenPos.x, 8), fmod(screenPos.y, 8)); +//-------------------------------------Dithering value by screen position +float CalcDither(float2 screenPos) { + float dither = Dither8x8Bayer(fmod(screenPos.x, 8), fmod(screenPos.y, 8)); return dither; } -float4x4 rotationMatrix(float3 axis, float angle) -{ +//-------------------------------------Rotate on specified axis by specified angle +float4x4 RotationMatrix(float3 axis, float angle) { axis = normalize(axis); float s = sin(angle); float c = cos(angle); @@ -282,31 +289,30 @@ float4x4 rotationMatrix(float3 axis, float angle) 0.0, 0.0, 0.0, 1.0); } -half3 calcViewDir(half3 worldPos) -{ - half3 camDir = normalize(mul(UNITY_MATRIX_V, float4(0, 1, 0, 0)).xyz); - half3 viewDir = normalize(_WorldSpaceCameraPos - worldPos); +//-------------------------------------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); + 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); + 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; } -bool IsInMirror() -{ +//-------------------------------------True when rendering mirror copy +bool IsInMirror() { return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; } -// Halftone functions, finish implementing later.. Not correct right now. -float2 SphereUV( float3 coords /*viewDir?*/) -{ +//-------------------------------------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); @@ -314,35 +320,35 @@ float2 SphereUV( float3 coords /*viewDir?*/) return (coord + float4(0, 1-unity_StereoEyeIndex,1,1.0).xy) * float4(0, 1-unity_StereoEyeIndex,1,1.0).zw; } -half2 rotateUV(half2 uv, half rotation) -{ - half mid = 0.5; - return half2( +//-------------------------------------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 ); } -half DotHalftone(float4 worldPos, half halftoneDotAmount, half scalar) -{ - half2 uv = SphereUV(calcViewDir(worldPos)); +//-------------------------------------Stipple based halftones +float DotHalftone(float4 worldPos, float halftoneDotAmount, float scalar) { + float2 uv = SphereUV(CalcViewDir(worldPos)); uv.xy *= halftoneDotAmount; - half2 nearest = 2 * frac(100 * uv) - 1; - half dist = length(nearest); - half dotSize = 100 * scalar; - half dotMask = step(dotSize, dist); + 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)));; } -half LineHalftone(float4 worldPos, half scalar) -{ - half2 uv = SphereUV(calcViewDir(worldPos)); - uv = rotateUV(uv, -0.785398); +//-------------------------------------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); - half2 steppedUV = smoothstep(0,0.2,uv.x); - half lineMask = lerp(1, steppedUV, smoothstep(0, 0.4, 1/distance(worldPos, _WorldSpaceCameraPos))); + 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_OL.cginc b/Shader/Cginc/SunaoShader_OL.cginc index 54bdb19..feb344e 100644 --- a/Shader/Cginc/SunaoShader_OL.cginc +++ b/Shader/Cginc/SunaoShader_OL.cginc @@ -320,8 +320,8 @@ float4 frag (VOUT IN) : COLOR { #endif //----Stippling & crosshatching - half dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, _StippleSize)); - half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); + 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)); diff --git a/Shader/Cginc/SunaoShader_SC.cginc b/Shader/Cginc/SunaoShader_SC.cginc index d5b4071..df6eccb 100644 --- a/Shader/Cginc/SunaoShader_SC.cginc +++ b/Shader/Cginc/SunaoShader_SC.cginc @@ -107,8 +107,8 @@ float4 frag (VOUT IN) : COLOR { float alpha = _Alpha; //----Stippling & crosshatching - half dot_halftone = DotHalftone(IN.worldpos, lerp(1.0f, 10.0f, _StippleAmount), lerp(0.0f, 0.015f, _StippleSize)); - half line_halftone = LineHalftone(IN.worldpos, lerp(0.0f, 4000.0f, _CrosshatchAmount)); + 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)); From 560fa2707f000767c7b6be5453b0eaefd483f83c Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Mon, 21 Dec 2020 19:29:07 -0500 Subject: [PATCH 47/56] Added missing _MinimumLight property --- Shader/Sunao_Shader_AlphaToCoverage.shader | 1 + Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 1 + 2 files changed, 2 insertions(+) diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index 7d42361..be4207b 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -332,6 +332,7 @@ Shader "Sunao Shader/AlphaToCoverage" { _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 [SToggle] _EnableGammaFix ("Enable Gamma Fix" , int) = 0 diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index d58c7af..355fb71 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -332,6 +332,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _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 [SToggle] _EnableGammaFix ("Enable Gamma Fix" , int) = 0 From 54c40befaa1ababb6fd2d2ca255f4083fe85b068 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Tue, 5 Jan 2021 11:21:05 -0500 Subject: [PATCH 48/56] Added TransClipping shader variants --- Editor/SunaoShaderGUI.cs | 2 +- Shader/Sunao_Shader_TransClipping.shader | 526 +++++++++++++++++++ Shader/Sunao_Shader_TransClipping_SO.shader | 528 ++++++++++++++++++++ 3 files changed, 1055 insertions(+), 1 deletion(-) create mode 100644 Shader/Sunao_Shader_TransClipping.shader create mode 100644 Shader/Sunao_Shader_TransClipping_SO.shader diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 97c777d..c8c7ef6 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -277,7 +277,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") || mat.shader.name.Contains("AlphaToCoverage"); + 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]" ); diff --git a/Shader/Sunao_Shader_TransClipping.shader b/Shader/Sunao_Shader_TransClipping.shader new file mode 100644 index 0000000..560d7e5 --- /dev/null +++ b/Shader/Sunao_Shader_TransClipping.shader @@ -0,0 +1,526 @@ +//-------------------------------------------------------------- +// Sunao Shader Ver 1.4.0 +// +// Copyright (c) 2020 揚茄子研究所 +// Twitter : @SUNAO_VRC +// VRChat : SUNAO_ +// +// This software is released under the MIT License. +// see LICENSE or http://sunao.orz.hm/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] + _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 Mask" , 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] + _MatCap ("Material Capture" , 2D) = "black" {} + _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 + [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) = 0 + [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 + + [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) = 0 + [HideInInspector] _VersionM ("Version M" , int) = 0 + [HideInInspector] _VersionL ("Version L" , int) = 0 + + } + + + + SubShader { + + LOD 0 + + Tags { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "Queue" = "AlphaTest" + } + + 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" = "ForwardAdd" + } + + Cull [_Culling] + 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" = "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 Front + 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 + + #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..0f13307 --- /dev/null +++ b/Shader/Sunao_Shader_TransClipping_SO.shader @@ -0,0 +1,528 @@ +//-------------------------------------------------------------- +// Sunao Shader Ver 1.4.0 +// +// Copyright (c) 2020 揚茄子研究所 +// Twitter : @SUNAO_VRC +// VRChat : SUNAO_ +// +// This software is released under the MIT License. +// see LICENSE or http://sunao.orz.hm/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] + _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 Mask" , 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] + _MatCap ("Material Capture" , 2D) = "black" {} + _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 + [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) = 0 + [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 + + [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) = 0 + [HideInInspector] _VersionM ("Version M" , int) = 0 + [HideInInspector] _VersionL ("Version L" , int) = 0 + + } + + + + SubShader { + + LOD 0 + + Tags { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "Queue" = "AlphaTest" + } + + Pass { + Tags { + "LightMode" = "ForwardBase" + } + + Cull [_Culling] + Blend SrcAlpha OneMinusSrcAlpha + ZWrite [_EnableZWrite] + + Stencil { + Ref 2 + 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 2 + 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 Front + Blend SrcAlpha One + ZWrite Off + + Stencil { + Ref 2 + 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" = "ForwardAdd" + } + + Cull [_Culling] + 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" = "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" +} From d13930c0b3d524dd7312179de4754e7b55cd17c7 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Thu, 7 Jan 2021 14:23:47 -0500 Subject: [PATCH 49/56] Fixed SHToonSpec type --- Shader/Cginc/SunaoShader_Frag.cginc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 715fb8f..0c7a5ac 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -382,7 +382,7 @@ float4 frag (VOUT IN) : COLOR { float3 RLToonSpec = ToonAnisoSpecularCalc(Normal, IN.tanW, Bitangent, IN.ldir, IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * LightBase; #ifdef PASS_FB - float SHToonSpec = ToonAnisoSpecularCalc(Normal, IN.tanW, Bitangent, IN.shdir, IN.view, _ToonSpecRoughnessT, _ToonSpecRoughnessB) * IN.shmax; + 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; @@ -401,7 +401,7 @@ float4 frag (VOUT IN) : COLOR { float3 RLToonSpec = ToonViewOffSpecularCalc(Normal, IN.ldir, IN.view, _ToonSpecSharpness, _ToonSpecOffset) * LightBase; #ifdef PASS_FB - float SHToonSpec = ToonViewOffSpecularCalc(Normal, IN.shdir, IN.view, _ToonSpecSharpness, _ToonSpecOffset) * IN.shmax; + 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; From a7eedf1d63d4f9b1228affe0f93f761421b39c0f Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sat, 9 Jan 2021 21:08:01 -0500 Subject: [PATCH 50/56] Added tangent map support --- Editor/SunaoShaderGUI.cs | 19 +++++++++++++++++++ Shader/Cginc/SunaoShader_Core.cginc | 5 +++++ Shader/Cginc/SunaoShader_Frag.cginc | 17 +++++++++++++++-- Shader/Cginc/SunaoShader_Function.cginc | 16 ++++++++++++++++ Shader/Cginc/SunaoShader_Vert.cginc | 3 +++ Shader/Sunao_Shader_AlphaToCoverage.shader | 6 ++++++ Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 6 ++++++ Shader/Sunao_Shader_Cutout.shader | 6 ++++++ Shader/Sunao_Shader_Cutout_SO.shader | 6 ++++++ Shader/Sunao_Shader_Opaque.shader | 6 ++++++ Shader/Sunao_Shader_Opaque_SO.shader | 6 ++++++ Shader/Sunao_Shader_Stencil_R.shader | 6 ++++++ Shader/Sunao_Shader_Stencil_W.shader | 6 ++++++ Shader/Sunao_Shader_TransClipping.shader | 6 ++++++ Shader/Sunao_Shader_TransClipping_SO.shader | 6 ++++++ Shader/Sunao_Shader_Transparent.shader | 6 ++++++ Shader/Sunao_Shader_Transparent_SO.shader | 6 ++++++ 17 files changed, 130 insertions(+), 2 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index c8c7ef6..39f8af7 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -37,6 +37,10 @@ public class GUI : ShaderGUI { MaterialProperty UVAnimY; MaterialProperty UVAnimOtherTex; + MaterialProperty TanEnable; + MaterialProperty TanMode; + MaterialProperty TanMap; + MaterialProperty DecalEnable; MaterialProperty DecalTex; MaterialProperty DecalColor; @@ -339,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); @@ -725,6 +733,17 @@ 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); + } + } + using (new EditorGUILayout.VerticalScope("box")) { GUILayout.Label("Decal", EditorStyles.boldLabel); diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 340b641..cbfd504 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -53,6 +53,11 @@ uniform uint _DecalAnimX; uniform uint _DecalAnimY; +//----Tangents + uniform bool _TanEnable; + uniform uint _TanMode; + UNITY_DECLARE_TEX2D_NOSAMPLER(_TanMap); + //----Shading & Lighting UNITY_DECLARE_TEX2D_NOSAMPLER(_ShadeMask); uniform float _Shade; diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 0c7a5ac..ffd0d98 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -13,6 +13,7 @@ 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) || defined(ALPHA_TO_COVERAGE) OUT.a = saturate(UNITY_SAMPLE_TEX2D(_MainTex , MainUV).a * _Color.a * _Alpha); @@ -22,6 +23,19 @@ float4 frag (VOUT IN) : COLOR { float3 Color = UNITY_SAMPLE_TEX2D(_MainTex , MainUV).rgb; Color = Color * _Color.rgb * _Bright * IN.color; +//----Tangent map application + #if WHEN_OPT(PROP_TAN_ENABLE == 1) + OPT_IF(_TanEnable) + if (_TanMode == 0) { + float3 TanMap = UNITY_SAMPLE_TEX2D_SAMPLER(_TanMap , _MainTex , SubUV); + IN.tangent = float4(QuatRotate(float4(IN.normal, TanMap.r * 2.0 * UNITY_PI), 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); @@ -187,8 +201,7 @@ 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); diff --git a/Shader/Cginc/SunaoShader_Function.cginc b/Shader/Cginc/SunaoShader_Function.cginc index 8af3375..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) { diff --git a/Shader/Cginc/SunaoShader_Vert.cginc b/Shader/Cginc/SunaoShader_Vert.cginc index 934e100..3114d50 100644 --- a/Shader/Cginc/SunaoShader_Vert.cginc +++ b/Shader/Cginc/SunaoShader_Vert.cginc @@ -223,6 +223,9 @@ VOUT vert (VIN v) { o.peprm.x = EmissionWave(_ParallaxWaveform , _ParallaxBlink , _ParallaxFrequency , _ParallaxPhaseOfs); } +//-------------------------------------Rotate tangents + //v.tangent = float4(QuatRotate(float4(v.normal, 0), v.tangent.xyz), v.tangent.w); + //-------------------------------------タンジェント o.tangent = v.tangent; o.tanW = UnityObjectToWorldDir(v.tangent.xyz); diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index be4207b..a0c5be2 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -46,6 +46,12 @@ Shader "Sunao Shader/AlphaToCoverage" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Rotation Map , 0)] + _TanMode ("Tangent Map Mode" , int) = 0 + [NoScaleOffset] + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 355fb71..d703585 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -46,6 +46,12 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Rotation Map , 0)] + _TanMode ("Tangent Map Mode" , int) = 0 + [NoScaleOffset] + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 005f95b..2cc0ecf 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -46,6 +46,12 @@ Shader "Sunao Shader/Cutout" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Rotation Map , 0)] + _TanMode ("Tangent Map Mode" , int) = 0 + [NoScaleOffset] + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index b14a7ba..a3a7012 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -46,6 +46,12 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Rotation Map , 0)] + _TanMode ("Tangent Map Mode" , int) = 0 + [NoScaleOffset] + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 903ea7a..3be8bab 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -46,6 +46,12 @@ Shader "Sunao Shader/Opaque" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Rotation Map , 0)] + _TanMode ("Tangent Map Mode" , int) = 0 + [NoScaleOffset] + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index 98541fb..d8f3c51 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -46,6 +46,12 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Rotation Map , 0)] + _TanMode ("Tangent Map Mode" , int) = 0 + [NoScaleOffset] + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 diff --git a/Shader/Sunao_Shader_Stencil_R.shader b/Shader/Sunao_Shader_Stencil_R.shader index 639eb8e..5ced8c8 100644 --- a/Shader/Sunao_Shader_Stencil_R.shader +++ b/Shader/Sunao_Shader_Stencil_R.shader @@ -46,6 +46,12 @@ Shader "Sunao Shader/[Stencil]/Read" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Rotation Map , 0)] + _TanMode ("Tangent Map Mode" , int) = 0 + [NoScaleOffset] + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 diff --git a/Shader/Sunao_Shader_Stencil_W.shader b/Shader/Sunao_Shader_Stencil_W.shader index fbd0cc6..79c97cc 100644 --- a/Shader/Sunao_Shader_Stencil_W.shader +++ b/Shader/Sunao_Shader_Stencil_W.shader @@ -46,6 +46,12 @@ Shader "Sunao Shader/[Stencil]/Write" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Rotation Map , 0)] + _TanMode ("Tangent Map Mode" , int) = 0 + [NoScaleOffset] + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 diff --git a/Shader/Sunao_Shader_TransClipping.shader b/Shader/Sunao_Shader_TransClipping.shader index 560d7e5..080f4bf 100644 --- a/Shader/Sunao_Shader_TransClipping.shader +++ b/Shader/Sunao_Shader_TransClipping.shader @@ -46,6 +46,12 @@ Shader "Sunao Shader/TransClipping" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Rotation Map , 0)] + _TanMode ("Tangent Map Mode" , int) = 0 + [NoScaleOffset] + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 diff --git a/Shader/Sunao_Shader_TransClipping_SO.shader b/Shader/Sunao_Shader_TransClipping_SO.shader index 0f13307..1451886 100644 --- a/Shader/Sunao_Shader_TransClipping_SO.shader +++ b/Shader/Sunao_Shader_TransClipping_SO.shader @@ -46,6 +46,12 @@ Shader "Sunao Shader/[Stencil Outline]/TransClipping" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Rotation Map , 0)] + _TanMode ("Tangent Map Mode" , int) = 0 + [NoScaleOffset] + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index c8bb999..e8d0534 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -46,6 +46,12 @@ Shader "Sunao Shader/Transparent" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Rotation Map , 0)] + _TanMode ("Tangent Map Mode" , int) = 0 + [NoScaleOffset] + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index cdd17a6..cfe7604 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -46,6 +46,12 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [SToggle] _UVAnimOtherTex ("Animation Other Maps" , int) = 1 + [SToggle] + _TanEnable ("Enable Tangent Map" , int) = 0 + [Enum(Rotation Map , 0)] + _TanMode ("Tangent Map Mode" , int) = 0 + [NoScaleOffset] + _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] _DecalEnable ("Enable Decal" , int) = 0 From d70839c73778cec07b2e7a639897c25bd8523e40 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sat, 9 Jan 2021 21:58:20 -0500 Subject: [PATCH 51/56] Whitespace fix & removed comment --- Shader/Cginc/SunaoShader_Core.cginc | 2 +- Shader/Cginc/SunaoShader_Vert.cginc | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index cbfd504..70046d2 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -55,7 +55,7 @@ //----Tangents uniform bool _TanEnable; - uniform uint _TanMode; + uniform uint _TanMode; UNITY_DECLARE_TEX2D_NOSAMPLER(_TanMap); //----Shading & Lighting diff --git a/Shader/Cginc/SunaoShader_Vert.cginc b/Shader/Cginc/SunaoShader_Vert.cginc index 3114d50..934e100 100644 --- a/Shader/Cginc/SunaoShader_Vert.cginc +++ b/Shader/Cginc/SunaoShader_Vert.cginc @@ -223,9 +223,6 @@ VOUT vert (VIN v) { o.peprm.x = EmissionWave(_ParallaxWaveform , _ParallaxBlink , _ParallaxFrequency , _ParallaxPhaseOfs); } -//-------------------------------------Rotate tangents - //v.tangent = float4(QuatRotate(float4(v.normal, 0), v.tangent.xyz), v.tangent.w); - //-------------------------------------タンジェント o.tangent = v.tangent; o.tanW = UnityObjectToWorldDir(v.tangent.xyz); From e747b01b68a571b837c276e5539b81c87afb2174 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sun, 10 Jan 2021 06:50:25 -0500 Subject: [PATCH 52/56] Added standard tangent map support --- Editor/SunaoShaderGUI.cs | 1 + Shader/Cginc/SunaoShader_Core.cginc | 1 + Shader/Cginc/SunaoShader_Frag.cginc | 10 +++++++++- Shader/Sunao_Shader_AlphaToCoverage.shader | 3 +-- Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 3 +-- Shader/Sunao_Shader_Cutout.shader | 3 +-- Shader/Sunao_Shader_Cutout_SO.shader | 3 +-- Shader/Sunao_Shader_Opaque.shader | 3 +-- Shader/Sunao_Shader_Opaque_SO.shader | 3 +-- Shader/Sunao_Shader_Stencil_R.shader | 3 +-- Shader/Sunao_Shader_Stencil_W.shader | 3 +-- Shader/Sunao_Shader_TransClipping.shader | 3 +-- Shader/Sunao_Shader_TransClipping_SO.shader | 3 +-- Shader/Sunao_Shader_Transparent.shader | 3 +-- Shader/Sunao_Shader_Transparent_SO.shader | 3 +-- 15 files changed, 23 insertions(+), 25 deletions(-) diff --git a/Editor/SunaoShaderGUI.cs b/Editor/SunaoShaderGUI.cs index 39f8af7..2786813 100644 --- a/Editor/SunaoShaderGUI.cs +++ b/Editor/SunaoShaderGUI.cs @@ -741,6 +741,7 @@ public override void OnGUI(MaterialEditor ME , MaterialProperty[] Prop) { if (TanEnable.floatValue >= 0.5f) { ME.ShaderProperty(TanMode, new GUIContent("Tangent Map Mode")); ME.TexturePropertySingleLine (new GUIContent("Tangent Map") , TanMap); + ME.TextureScaleOffsetProperty(TanMap); } } diff --git a/Shader/Cginc/SunaoShader_Core.cginc b/Shader/Cginc/SunaoShader_Core.cginc index 70046d2..79b1ab3 100644 --- a/Shader/Cginc/SunaoShader_Core.cginc +++ b/Shader/Cginc/SunaoShader_Core.cginc @@ -57,6 +57,7 @@ uniform bool _TanEnable; uniform uint _TanMode; UNITY_DECLARE_TEX2D_NOSAMPLER(_TanMap); + uniform float4 _TanMap_ST; //----Shading & Lighting UNITY_DECLARE_TEX2D_NOSAMPLER(_ShadeMask); diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index ffd0d98..4efeb92 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -27,7 +27,15 @@ float4 frag (VOUT IN) : COLOR { #if WHEN_OPT(PROP_TAN_ENABLE == 1) OPT_IF(_TanEnable) if (_TanMode == 0) { - float3 TanMap = UNITY_SAMPLE_TEX2D_SAMPLER(_TanMap , _MainTex , SubUV); + 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)); IN.tangent = float4(QuatRotate(float4(IN.normal, TanMap.r * 2.0 * UNITY_PI), 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; diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index a0c5be2..a231eac 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -48,9 +48,8 @@ Shader "Sunao Shader/AlphaToCoverage" { [SToggle] _TanEnable ("Enable Tangent Map" , int) = 0 - [Enum(Rotation Map , 0)] + [Enum(Tangent Map , 0 , Rotation Map , 1)] _TanMode ("Tangent Map Mode" , int) = 0 - [NoScaleOffset] _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index d703585..87665d6 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -48,9 +48,8 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [SToggle] _TanEnable ("Enable Tangent Map" , int) = 0 - [Enum(Rotation Map , 0)] + [Enum(Tangent Map , 0 , Rotation Map , 1)] _TanMode ("Tangent Map Mode" , int) = 0 - [NoScaleOffset] _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] diff --git a/Shader/Sunao_Shader_Cutout.shader b/Shader/Sunao_Shader_Cutout.shader index 2cc0ecf..28d3d1d 100644 --- a/Shader/Sunao_Shader_Cutout.shader +++ b/Shader/Sunao_Shader_Cutout.shader @@ -48,9 +48,8 @@ Shader "Sunao Shader/Cutout" { [SToggle] _TanEnable ("Enable Tangent Map" , int) = 0 - [Enum(Rotation Map , 0)] + [Enum(Tangent Map , 0 , Rotation Map , 1)] _TanMode ("Tangent Map Mode" , int) = 0 - [NoScaleOffset] _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] diff --git a/Shader/Sunao_Shader_Cutout_SO.shader b/Shader/Sunao_Shader_Cutout_SO.shader index a3a7012..96725ef 100644 --- a/Shader/Sunao_Shader_Cutout_SO.shader +++ b/Shader/Sunao_Shader_Cutout_SO.shader @@ -48,9 +48,8 @@ Shader "Sunao Shader/[Stencil Outline]/Cutout" { [SToggle] _TanEnable ("Enable Tangent Map" , int) = 0 - [Enum(Rotation Map , 0)] + [Enum(Tangent Map , 0 , Rotation Map , 1)] _TanMode ("Tangent Map Mode" , int) = 0 - [NoScaleOffset] _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] diff --git a/Shader/Sunao_Shader_Opaque.shader b/Shader/Sunao_Shader_Opaque.shader index 3be8bab..367cdef 100644 --- a/Shader/Sunao_Shader_Opaque.shader +++ b/Shader/Sunao_Shader_Opaque.shader @@ -48,9 +48,8 @@ Shader "Sunao Shader/Opaque" { [SToggle] _TanEnable ("Enable Tangent Map" , int) = 0 - [Enum(Rotation Map , 0)] + [Enum(Tangent Map , 0 , Rotation Map , 1)] _TanMode ("Tangent Map Mode" , int) = 0 - [NoScaleOffset] _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] diff --git a/Shader/Sunao_Shader_Opaque_SO.shader b/Shader/Sunao_Shader_Opaque_SO.shader index d8f3c51..7297a13 100644 --- a/Shader/Sunao_Shader_Opaque_SO.shader +++ b/Shader/Sunao_Shader_Opaque_SO.shader @@ -48,9 +48,8 @@ Shader "Sunao Shader/[Stencil Outline]/Opaque" { [SToggle] _TanEnable ("Enable Tangent Map" , int) = 0 - [Enum(Rotation Map , 0)] + [Enum(Tangent Map , 0 , Rotation Map , 1)] _TanMode ("Tangent Map Mode" , int) = 0 - [NoScaleOffset] _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] diff --git a/Shader/Sunao_Shader_Stencil_R.shader b/Shader/Sunao_Shader_Stencil_R.shader index 5ced8c8..a1720a4 100644 --- a/Shader/Sunao_Shader_Stencil_R.shader +++ b/Shader/Sunao_Shader_Stencil_R.shader @@ -48,9 +48,8 @@ Shader "Sunao Shader/[Stencil]/Read" { [SToggle] _TanEnable ("Enable Tangent Map" , int) = 0 - [Enum(Rotation Map , 0)] + [Enum(Tangent Map , 0 , Rotation Map , 1)] _TanMode ("Tangent Map Mode" , int) = 0 - [NoScaleOffset] _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] diff --git a/Shader/Sunao_Shader_Stencil_W.shader b/Shader/Sunao_Shader_Stencil_W.shader index 79c97cc..61d5e81 100644 --- a/Shader/Sunao_Shader_Stencil_W.shader +++ b/Shader/Sunao_Shader_Stencil_W.shader @@ -48,9 +48,8 @@ Shader "Sunao Shader/[Stencil]/Write" { [SToggle] _TanEnable ("Enable Tangent Map" , int) = 0 - [Enum(Rotation Map , 0)] + [Enum(Tangent Map , 0 , Rotation Map , 1)] _TanMode ("Tangent Map Mode" , int) = 0 - [NoScaleOffset] _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] diff --git a/Shader/Sunao_Shader_TransClipping.shader b/Shader/Sunao_Shader_TransClipping.shader index 080f4bf..ba38554 100644 --- a/Shader/Sunao_Shader_TransClipping.shader +++ b/Shader/Sunao_Shader_TransClipping.shader @@ -48,9 +48,8 @@ Shader "Sunao Shader/TransClipping" { [SToggle] _TanEnable ("Enable Tangent Map" , int) = 0 - [Enum(Rotation Map , 0)] + [Enum(Tangent Map , 0 , Rotation Map , 1)] _TanMode ("Tangent Map Mode" , int) = 0 - [NoScaleOffset] _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] diff --git a/Shader/Sunao_Shader_TransClipping_SO.shader b/Shader/Sunao_Shader_TransClipping_SO.shader index 1451886..d5989a1 100644 --- a/Shader/Sunao_Shader_TransClipping_SO.shader +++ b/Shader/Sunao_Shader_TransClipping_SO.shader @@ -48,9 +48,8 @@ Shader "Sunao Shader/[Stencil Outline]/TransClipping" { [SToggle] _TanEnable ("Enable Tangent Map" , int) = 0 - [Enum(Rotation Map , 0)] + [Enum(Tangent Map , 0 , Rotation Map , 1)] _TanMode ("Tangent Map Mode" , int) = 0 - [NoScaleOffset] _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] diff --git a/Shader/Sunao_Shader_Transparent.shader b/Shader/Sunao_Shader_Transparent.shader index e8d0534..947994a 100644 --- a/Shader/Sunao_Shader_Transparent.shader +++ b/Shader/Sunao_Shader_Transparent.shader @@ -48,9 +48,8 @@ Shader "Sunao Shader/Transparent" { [SToggle] _TanEnable ("Enable Tangent Map" , int) = 0 - [Enum(Rotation Map , 0)] + [Enum(Tangent Map , 0 , Rotation Map , 1)] _TanMode ("Tangent Map Mode" , int) = 0 - [NoScaleOffset] _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] diff --git a/Shader/Sunao_Shader_Transparent_SO.shader b/Shader/Sunao_Shader_Transparent_SO.shader index cfe7604..fef93f4 100644 --- a/Shader/Sunao_Shader_Transparent_SO.shader +++ b/Shader/Sunao_Shader_Transparent_SO.shader @@ -48,9 +48,8 @@ Shader "Sunao Shader/[Stencil Outline]/Transparent" { [SToggle] _TanEnable ("Enable Tangent Map" , int) = 0 - [Enum(Rotation Map , 0)] + [Enum(Tangent Map , 0 , Rotation Map , 1)] _TanMode ("Tangent Map Mode" , int) = 0 - [NoScaleOffset] _TanMap ("Tangent Map" , 2D) = "black" {} [SToggle] From 1a1f3f6b235f2dbe2b4499e930e8391e836e033c Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Mon, 11 Jan 2021 02:46:24 -0500 Subject: [PATCH 53/56] Boost TransClipping queue value --- Shader/Sunao_Shader_TransClipping.shader | 2 +- Shader/Sunao_Shader_TransClipping_SO.shader | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Shader/Sunao_Shader_TransClipping.shader b/Shader/Sunao_Shader_TransClipping.shader index ba38554..76c74d5 100644 --- a/Shader/Sunao_Shader_TransClipping.shader +++ b/Shader/Sunao_Shader_TransClipping.shader @@ -383,7 +383,7 @@ Shader "Sunao Shader/TransClipping" { Tags { "IgnoreProjector" = "True" "RenderType" = "TransparentCutout" - "Queue" = "AlphaTest" + "Queue" = "AlphaTest+50" } Pass { diff --git a/Shader/Sunao_Shader_TransClipping_SO.shader b/Shader/Sunao_Shader_TransClipping_SO.shader index d5989a1..549a6db 100644 --- a/Shader/Sunao_Shader_TransClipping_SO.shader +++ b/Shader/Sunao_Shader_TransClipping_SO.shader @@ -383,7 +383,7 @@ Shader "Sunao Shader/[Stencil Outline]/TransClipping" { Tags { "IgnoreProjector" = "True" "RenderType" = "TransparentCutout" - "Queue" = "AlphaTest" + "Queue" = "AlphaTest+50" } Pass { From 75f3086e81d89ab6bf0153f96cecdf92aa28faf2 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Fri, 5 Mar 2021 13:12:11 -0500 Subject: [PATCH 54/56] Fixes for Sunao 1.4.2 --- Shader/Cginc/SunaoShader_Frag.cginc | 2 - Shader/Sunao_Shader_AlphaToCoverage.shader | 47 +++++++---- Shader/Sunao_Shader_AlphaToCoverage_SO.shader | 75 +++++++++-------- Shader/Sunao_Shader_TransClipping.shader | 82 +++++++++---------- Shader/Sunao_Shader_TransClipping_SO.shader | 61 ++++++++------ 5 files changed, 152 insertions(+), 115 deletions(-) diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index 4efeb92..da50b88 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -446,8 +446,6 @@ float4 frag (VOUT IN) : COLOR { #if WHEN_OPT(PROP_REFLECTION_ENABLE == 1) OPT_IF(_ReflectionEnable) - float Smoothness = _GlossMapScale * tex2D(_MetallicGlossMap , SubUV).a; - //----スペキュラ反射 Smoothness = tex2D(_MetallicGlossMap , SubUV).a * _GlossMapScale; SpecularMask = tex2D(_MetallicGlossMap , SubUV).rgb; diff --git a/Shader/Sunao_Shader_AlphaToCoverage.shader b/Shader/Sunao_Shader_AlphaToCoverage.shader index a231eac..0653544 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage.shader @@ -1,12 +1,12 @@ //-------------------------------------------------------------- -// Sunao Shader Ver 1.4.0 +// Sunao Shader Ver 1.4.2 // -// Copyright (c) 2020 揚茄子研究所 +// Copyright (c) 2021 揚茄子研究所 // Twitter : @SUNAO_VRC // VRChat : SUNAO_ // // This software is released under the MIT License. -// see LICENSE or http://sunao.orz.hm/agenasulab/ss/LICENSE +// see LICENSE or http://suna.ooo/agenasulab/ss/LICENSE //-------------------------------------------------------------- Shader "Sunao Shader/AlphaToCoverage" { @@ -237,7 +237,7 @@ Shader "Sunao Shader/AlphaToCoverage" { [SToggle] _ParallaxEnable ("Enable Parallax Emission" , int) = 0 - _ParallaxMap ("Parallax Emission Mask" , 2D) = "white" {} + _ParallaxMap ("Parallax Emission Texture" , 2D) = "white" {} [HDR] _ParallaxColor ("Emission Color" , Color) = (1,1,1) _ParallaxEmission ("Emission Intensity" , Range( 0.0, 2.0)) = 1.0 @@ -284,12 +284,23 @@ Shader "Sunao Shader/AlphaToCoverage" { _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] _MetallicGlossMap ("Reflection Mask" , 2D) = "white" {} - [NoScaleOffset] - _MatCap ("Material Capture" , 2D) = "black" {} + _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] @@ -301,7 +312,7 @@ Shader "Sunao Shader/AlphaToCoverage" { [SToggle] _SpecularMask ("Use Mask for Specular" , int) = 1 [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] - _ReflectLit ("Light Color for Reflection", int) = 0 + _ReflectLit ("Light Color for Reflection", int) = 3 [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] _MatCapLit ("Light Color for MatCap" , int) = 3 [SToggle] @@ -338,6 +349,8 @@ Shader "Sunao Shader/AlphaToCoverage" { [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 @@ -368,9 +381,9 @@ Shader "Sunao Shader/AlphaToCoverage" { [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 1 - [HideInInspector] _VersionH ("Version H" , int) = 0 - [HideInInspector] _VersionM ("Version M" , int) = 0 - [HideInInspector] _VersionL ("Version L" , int) = 0 + [HideInInspector] _VersionH ("Version H" , int) = 1 + [HideInInspector] _VersionM ("Version M" , int) = 4 + [HideInInspector] _VersionL ("Version L" , int) = 2 } @@ -441,7 +454,8 @@ Shader "Sunao Shader/AlphaToCoverage" { "LightMode" = "ForwardAdd" } - Cull Front + Cull [_Culling] + BlendOp [_BlendOperation] Blend One One ZWrite Off @@ -452,10 +466,10 @@ Shader "Sunao Shader/AlphaToCoverage" { #pragma multi_compile_fog #pragma target 4.5 - #define PASS_OL_FA + #define PASS_FA #define ALPHA_TO_COVERAGE - #include "./cginc/SunaoShader_OL.cginc" + #include "./cginc/SunaoShader_Core.cginc" ENDCG } @@ -466,7 +480,8 @@ Shader "Sunao Shader/AlphaToCoverage" { "LightMode" = "ForwardAdd" } - Cull [_Culling] + Cull Front + BlendOp [_BlendOperation] Blend One One ZWrite Off @@ -477,10 +492,10 @@ Shader "Sunao Shader/AlphaToCoverage" { #pragma multi_compile_fog #pragma target 4.5 - #define PASS_FA + #define PASS_OL_FA #define ALPHA_TO_COVERAGE - #include "./cginc/SunaoShader_Core.cginc" + #include "./cginc/SunaoShader_OL.cginc" ENDCG } diff --git a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader index 87665d6..a178cae 100644 --- a/Shader/Sunao_Shader_AlphaToCoverage_SO.shader +++ b/Shader/Sunao_Shader_AlphaToCoverage_SO.shader @@ -1,12 +1,12 @@ //-------------------------------------------------------------- -// Sunao Shader Ver 1.4.0 +// Sunao Shader Ver 1.4.2 // -// Copyright (c) 2020 揚茄子研究所 +// Copyright (c) 2021 揚茄子研究所 // Twitter : @SUNAO_VRC // VRChat : SUNAO_ // // This software is released under the MIT License. -// see LICENSE or http://sunao.orz.hm/agenasulab/ss/LICENSE +// see LICENSE or http://suna.ooo/agenasulab/ss/LICENSE //-------------------------------------------------------------- Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { @@ -237,7 +237,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [SToggle] _ParallaxEnable ("Enable Parallax Emission" , int) = 0 - _ParallaxMap ("Parallax Emission Mask" , 2D) = "white" {} + _ParallaxMap ("Parallax Emission Texture" , 2D) = "white" {} [HDR] _ParallaxColor ("Emission Color" , Color) = (1,1,1) _ParallaxEmission ("Emission Intensity" , Range( 0.0, 2.0)) = 1.0 @@ -284,12 +284,23 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { _ReflectionEnable ("Enable Reflection" , int) = 0 [NoScaleOffset] _MetallicGlossMap ("Reflection Mask" , 2D) = "white" {} - [NoScaleOffset] - _MatCap ("Material Capture" , 2D) = "black" {} + _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] @@ -301,7 +312,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [SToggle] _SpecularMask ("Use Mask for Specular" , int) = 1 [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] - _ReflectLit ("Light Color for Reflection", int) = 0 + _ReflectLit ("Light Color for Reflection", int) = 3 [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] _MatCapLit ("Light Color for MatCap" , int) = 3 [SToggle] @@ -338,6 +349,8 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [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 @@ -368,9 +381,9 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 1 - [HideInInspector] _VersionH ("Version H" , int) = 0 - [HideInInspector] _VersionM ("Version M" , int) = 0 - [HideInInspector] _VersionL ("Version L" , int) = 0 + [HideInInspector] _VersionH ("Version H" , int) = 1 + [HideInInspector] _VersionM ("Version M" , int) = 4 + [HideInInspector] _VersionL ("Version L" , int) = 2 } @@ -394,11 +407,10 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { } Cull [_Culling] - Blend SrcAlpha OneMinusSrcAlpha ZWrite [_EnableZWrite] Stencil { - Ref 2 + Ref [_StencilNumb] Comp Always Pass Replace } @@ -410,9 +422,8 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { #pragma multi_compile_fog #pragma target 4.5 - #define TRANSPARENT - #define PASS_FB + #define ALPHA_TO_COVERAGE #include "./cginc/SunaoShader_Core.cginc" @@ -420,18 +431,16 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { } - Pass { Tags { "LightMode" = "ForwardBase" } Cull Front - Blend SrcAlpha OneMinusSrcAlpha ZWrite [_EnableZWrite] Stencil { - Ref 2 + Ref [_StencilNumb] Comp NotEqual } @@ -443,7 +452,7 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { #pragma target 4.5 #define PASS_OL_FB - #define TRANSPARENT + #define ALPHA_TO_COVERAGE #include "./cginc/SunaoShader_OL.cginc" @@ -457,14 +466,10 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { } Cull Front - Blend SrcAlpha One + BlendOp [_BlendOperation] + Blend One One ZWrite Off - Stencil { - Ref 2 - Comp NotEqual - } - CGPROGRAM #pragma vertex vert #pragma fragment frag @@ -472,10 +477,10 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { #pragma multi_compile_fog #pragma target 4.5 - #define PASS_OL_FA - #define TRANSPARENT + #define PASS_FA + #define ALPHA_TO_COVERAGE - #include "./cginc/SunaoShader_OL.cginc" + #include "./cginc/SunaoShader_Core.cginc" ENDCG } @@ -486,10 +491,16 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { "LightMode" = "ForwardAdd" } - Cull [_Culling] - Blend SrcAlpha One + Cull Front + BlendOp [_BlendOperation] + Blend One One ZWrite Off + Stencil { + Ref [_StencilNumb] + Comp NotEqual + } + CGPROGRAM #pragma vertex vert #pragma fragment frag @@ -497,10 +508,10 @@ Shader "Sunao Shader/[Stencil Outline]/AlphaToCoverage" { #pragma multi_compile_fog #pragma target 4.5 - #define PASS_FA - #define TRANSPARENT + #define PASS_OL_FA + #define ALPHA_TO_COVERAGE - #include "./cginc/SunaoShader_Core.cginc" + #include "./cginc/SunaoShader_OL.cginc" ENDCG } diff --git a/Shader/Sunao_Shader_TransClipping.shader b/Shader/Sunao_Shader_TransClipping.shader index 76c74d5..1c84d22 100644 --- a/Shader/Sunao_Shader_TransClipping.shader +++ b/Shader/Sunao_Shader_TransClipping.shader @@ -1,12 +1,12 @@ //-------------------------------------------------------------- -// Sunao Shader Ver 1.4.0 +// Sunao Shader Ver 1.4.2 // -// Copyright (c) 2020 揚茄子研究所 +// Copyright (c) 2021 揚茄子研究所 // Twitter : @SUNAO_VRC // VRChat : SUNAO_ // // This software is released under the MIT License. -// see LICENSE or http://sunao.orz.hm/agenasulab/ss/LICENSE +// see LICENSE or http://suna.ooo/agenasulab/ss/LICENSE //-------------------------------------------------------------- Shader "Sunao Shader/TransClipping" { @@ -237,7 +237,7 @@ Shader "Sunao Shader/TransClipping" { [SToggle] _ParallaxEnable ("Enable Parallax Emission" , int) = 0 - _ParallaxMap ("Parallax Emission Mask" , 2D) = "white" {} + _ParallaxMap ("Parallax Emission Texture" , 2D) = "white" {} [HDR] _ParallaxColor ("Emission Color" , Color) = (1,1,1) _ParallaxEmission ("Emission Intensity" , Range( 0.0, 2.0)) = 1.0 @@ -285,11 +285,22 @@ Shader "Sunao Shader/TransClipping" { [NoScaleOffset] _MetallicGlossMap ("Reflection Mask" , 2D) = "white" {} [NoScaleOffset] - _MatCap ("Material Capture" , 2D) = "black" {} + _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] @@ -301,7 +312,7 @@ Shader "Sunao Shader/TransClipping" { [SToggle] _SpecularMask ("Use Mask for Specular" , int) = 1 [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] - _ReflectLit ("Light Color for Reflection", int) = 0 + _ReflectLit ("Light Color for Reflection", int) = 3 [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] _MatCapLit ("Light Color for MatCap" , int) = 3 [SToggle] @@ -338,6 +349,8 @@ Shader "Sunao Shader/TransClipping" { [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 @@ -368,9 +381,9 @@ Shader "Sunao Shader/TransClipping" { [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 1 - [HideInInspector] _VersionH ("Version H" , int) = 0 - [HideInInspector] _VersionM ("Version M" , int) = 0 - [HideInInspector] _VersionL ("Version L" , int) = 0 + [HideInInspector] _VersionH ("Version H" , int) = 1 + [HideInInspector] _VersionM ("Version M" , int) = 4 + [HideInInspector] _VersionL ("Version L" , int) = 2 } @@ -395,12 +408,6 @@ Shader "Sunao Shader/TransClipping" { Blend SrcAlpha OneMinusSrcAlpha ZWrite [_EnableZWrite] - Stencil { - Ref [_StencilNumb] - Comp Always - Pass Replace - } - CGPROGRAM #pragma vertex vert #pragma fragment frag @@ -408,9 +415,8 @@ Shader "Sunao Shader/TransClipping" { #pragma multi_compile_fog #pragma target 4.5 - #define TRANSPARENT - #define PASS_FB + #define TRANSPARENT #include "./cginc/SunaoShader_Core.cginc" @@ -420,24 +426,24 @@ Shader "Sunao Shader/TransClipping" { Pass { Tags { - "LightMode" = "ForwardAdd" + "LightMode" = "ForwardBase" } - Cull [_Culling] - Blend SrcAlpha One - ZWrite Off + Cull Front + Blend SrcAlpha OneMinusSrcAlpha + ZWrite [_EnableZWrite] CGPROGRAM #pragma vertex vert #pragma fragment frag - #pragma multi_compile_fwdadd + #pragma multi_compile_fwdbase #pragma multi_compile_fog #pragma target 4.5 - #define PASS_FA + #define PASS_OL_FB #define TRANSPARENT - #include "./cginc/SunaoShader_Core.cginc" + #include "./cginc/SunaoShader_OL.cginc" ENDCG } @@ -445,29 +451,25 @@ Shader "Sunao Shader/TransClipping" { Pass { Tags { - "LightMode" = "ForwardBase" + "LightMode" = "ForwardAdd" } - Cull Front - Blend SrcAlpha OneMinusSrcAlpha - ZWrite [_EnableZWrite] - - Stencil { - Ref [_StencilNumb] - Comp NotEqual - } + Cull [_Culling] + BlendOp [_BlendOperation] + Blend SrcAlpha One + ZWrite Off CGPROGRAM #pragma vertex vert #pragma fragment frag - #pragma multi_compile_fwdbase + #pragma multi_compile_fwdadd #pragma multi_compile_fog #pragma target 4.5 - #define PASS_OL_FB + #define PASS_FA #define TRANSPARENT - #include "./cginc/SunaoShader_OL.cginc" + #include "./cginc/SunaoShader_Core.cginc" ENDCG } @@ -479,14 +481,10 @@ Shader "Sunao Shader/TransClipping" { } Cull Front + BlendOp [_BlendOperation] Blend SrcAlpha One ZWrite Off - Stencil { - Ref [_StencilNumb] - Comp NotEqual - } - CGPROGRAM #pragma vertex vert #pragma fragment frag diff --git a/Shader/Sunao_Shader_TransClipping_SO.shader b/Shader/Sunao_Shader_TransClipping_SO.shader index 549a6db..503b56d 100644 --- a/Shader/Sunao_Shader_TransClipping_SO.shader +++ b/Shader/Sunao_Shader_TransClipping_SO.shader @@ -1,12 +1,12 @@ //-------------------------------------------------------------- -// Sunao Shader Ver 1.4.0 +// Sunao Shader Ver 1.4.2 // -// Copyright (c) 2020 揚茄子研究所 +// Copyright (c) 2021 揚茄子研究所 // Twitter : @SUNAO_VRC // VRChat : SUNAO_ // // This software is released under the MIT License. -// see LICENSE or http://sunao.orz.hm/agenasulab/ss/LICENSE +// see LICENSE or http://suna.ooo/agenasulab/ss/LICENSE //-------------------------------------------------------------- Shader "Sunao Shader/[Stencil Outline]/TransClipping" { @@ -237,7 +237,7 @@ Shader "Sunao Shader/[Stencil Outline]/TransClipping" { [SToggle] _ParallaxEnable ("Enable Parallax Emission" , int) = 0 - _ParallaxMap ("Parallax Emission Mask" , 2D) = "white" {} + _ParallaxMap ("Parallax Emission Texture" , 2D) = "white" {} [HDR] _ParallaxColor ("Emission Color" , Color) = (1,1,1) _ParallaxEmission ("Emission Intensity" , Range( 0.0, 2.0)) = 1.0 @@ -285,11 +285,22 @@ Shader "Sunao Shader/[Stencil Outline]/TransClipping" { [NoScaleOffset] _MetallicGlossMap ("Reflection Mask" , 2D) = "white" {} [NoScaleOffset] - _MatCap ("Material Capture" , 2D) = "black" {} + _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] @@ -301,7 +312,7 @@ Shader "Sunao Shader/[Stencil Outline]/TransClipping" { [SToggle] _SpecularMask ("Use Mask for Specular" , int) = 1 [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] - _ReflectLit ("Light Color for Reflection", int) = 0 + _ReflectLit ("Light Color for Reflection", int) = 3 [Enum(None , 0 , RealTime , 1 , SH , 2 , Both , 3)] _MatCapLit ("Light Color for MatCap" , int) = 3 [SToggle] @@ -338,6 +349,8 @@ Shader "Sunao Shader/[Stencil Outline]/TransClipping" { [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 @@ -368,9 +381,9 @@ Shader "Sunao Shader/[Stencil Outline]/TransClipping" { [HideInInspector] _SunaoShaderType ("ShaderType" , int) = 1 - [HideInInspector] _VersionH ("Version H" , int) = 0 - [HideInInspector] _VersionM ("Version M" , int) = 0 - [HideInInspector] _VersionL ("Version L" , int) = 0 + [HideInInspector] _VersionH ("Version H" , int) = 1 + [HideInInspector] _VersionM ("Version M" , int) = 4 + [HideInInspector] _VersionL ("Version L" , int) = 2 } @@ -396,7 +409,7 @@ Shader "Sunao Shader/[Stencil Outline]/TransClipping" { ZWrite [_EnableZWrite] Stencil { - Ref 2 + Ref [_StencilNumb] Comp Always Pass Replace } @@ -429,7 +442,7 @@ Shader "Sunao Shader/[Stencil Outline]/TransClipping" { ZWrite [_EnableZWrite] Stencil { - Ref 2 + Ref [_StencilNumb] Comp NotEqual } @@ -454,15 +467,11 @@ Shader "Sunao Shader/[Stencil Outline]/TransClipping" { "LightMode" = "ForwardAdd" } - Cull Front + Cull [_Culling] + BlendOp [_BlendOperation] Blend SrcAlpha One ZWrite Off - Stencil { - Ref 2 - Comp NotEqual - } - CGPROGRAM #pragma vertex vert #pragma fragment frag @@ -470,10 +479,10 @@ Shader "Sunao Shader/[Stencil Outline]/TransClipping" { #pragma multi_compile_fog #pragma target 4.5 - #define PASS_OL_FA + #define PASS_FA #define TRANSPARENT - #include "./cginc/SunaoShader_OL.cginc" + #include "./cginc/SunaoShader_Core.cginc" ENDCG } @@ -484,10 +493,16 @@ Shader "Sunao Shader/[Stencil Outline]/TransClipping" { "LightMode" = "ForwardAdd" } - Cull [_Culling] + Cull Front + BlendOp [_BlendOperation] Blend SrcAlpha One ZWrite Off + Stencil { + Ref [_StencilNumb] + Comp NotEqual + } + CGPROGRAM #pragma vertex vert #pragma fragment frag @@ -495,10 +510,10 @@ Shader "Sunao Shader/[Stencil Outline]/TransClipping" { #pragma multi_compile_fog #pragma target 4.5 - #define PASS_FA + #define PASS_OL_FA #define TRANSPARENT - #include "./cginc/SunaoShader_Core.cginc" + #include "./cginc/SunaoShader_OL.cginc" ENDCG } From 2a7f688112c5538fc492c9fd43f0c18dc2185553 Mon Sep 17 00:00:00 2001 From: Daniel Bloemendal Date: Sun, 7 Mar 2021 18:44:52 -0500 Subject: [PATCH 55/56] Fixed tangent rotation map bug --- Shader/Cginc/SunaoShader_Frag.cginc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Shader/Cginc/SunaoShader_Frag.cginc b/Shader/Cginc/SunaoShader_Frag.cginc index da50b88..7fe9861 100644 --- a/Shader/Cginc/SunaoShader_Frag.cginc +++ b/Shader/Cginc/SunaoShader_Frag.cginc @@ -36,7 +36,8 @@ float4 frag (VOUT IN) : COLOR { } else if (_TanMode == 1) { float3 TanMap = UNITY_SAMPLE_TEX2D_SAMPLER(_TanMap, _MainTex, TRANSFORM_TEX(SubUV, _TanMap)); - IN.tangent = float4(QuatRotate(float4(IN.normal, TanMap.r * 2.0 * UNITY_PI), IN.tangent.xyz), IN.tangent.w); + 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); From 8ab512cd8f7833f7bd999708bb0e69727ae8f307 Mon Sep 17 00:00:00 2001 From: Shuji Sado <35833858+shujisado@users.noreply.github.com> Date: Sat, 27 Mar 2021 09:58:06 +0900 Subject: [PATCH 56/56] Modify MIT URL Modify MIT ja-trans URL --- README.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 +=----------------------------------------------------------------------------=