diff options
| -rw-r--r-- | interpolators.cginc | 42 | ||||
| -rw-r--r-- | tooner.shader | 18 | ||||
| -rw-r--r-- | tooner_lighting.cginc | 56 | ||||
| -rw-r--r-- | tooner_outline_pass.cginc | 2 |
4 files changed, 80 insertions, 38 deletions
diff --git a/interpolators.cginc b/interpolators.cginc index 12013a1..554a637 100644 --- a/interpolators.cginc +++ b/interpolators.cginc @@ -10,7 +10,9 @@ struct appdata float4 vertex : POSITION; float3 normal : NORMAL; float2 uv0 : TEXCOORD0; - float2 uv2 : TEXCOORD1; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; UNITY_VERTEX_INPUT_INSTANCE_ID }; @@ -19,15 +21,17 @@ struct v2f { float4 pos : SV_POSITION; float2 uv0 : TEXCOORD0; - float2 uv2 : TEXCOORD1; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; #if defined(LIGHTMAP_ON) - float2 lmuv : TEXCOORD2; + float2 lmuv : TEXCOORD4; #endif - float3 worldPos : TEXCOORD3; - float3 normal : TEXCOORD4; - float3 objPos : TEXCOORD5; + float3 worldPos : TEXCOORD5; + float3 normal : TEXCOORD6; + float3 objPos : TEXCOORD7; #if defined(SSR_ENABLED) - float4 screenPos : TEXCOORD6; + float4 screenPos : TEXCOORD8; #endif UNITY_VERTEX_INPUT_INSTANCE_ID @@ -40,7 +44,9 @@ struct appdata { float4 vertex : POSITION; float2 uv0 : TEXCOORD0; - float2 uv2 : TEXCOORD1; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; float3 normal : NORMAL; float4 tangent : TANGENT; @@ -51,21 +57,23 @@ struct v2f { float4 pos : SV_POSITION; float2 uv0 : TEXCOORD0; - float2 uv2 : TEXCOORD1; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; #if defined(LIGHTMAP_ON) - float2 lmuv : TEXCOORD2; + float2 lmuv : TEXCOORD4; #endif - float3 normal : TEXCOORD3; - float4 tangent : TEXCOORD4; - float3 worldPos : TEXCOORD5; - float3 objPos : TEXCOORD6; + float3 normal : TEXCOORD5; + float4 tangent : TEXCOORD6; + float3 worldPos : TEXCOORD7; + float3 objPos : TEXCOORD8; - SHADOW_COORDS(7) + SHADOW_COORDS(9) #if defined(VERTEXLIGHT_ON) - float3 vertexLightColor : TEXCOORD8; + float3 vertexLightColor : TEXCOORD10; #endif #if defined(SSR_ENABLED) - float4 screenPos : TEXCOORD9; + float4 screenPos : TEXCOORD11; #endif UNITY_VERTEX_INPUT_INSTANCE_ID diff --git a/tooner.shader b/tooner.shader index 7fb8751..0649d08 100644 --- a/tooner.shader +++ b/tooner.shader @@ -40,7 +40,7 @@ Shader "yum_food/tooner" _PBR_Overlay0_Constrain_By_Alpha_Min("Constrain by alpha channel", Range(0, 1)) = 0 _PBR_Overlay0_Constrain_By_Alpha_Max("Constrain by alpha channel", Range(0, 1)) = 1 _PBR_Overlay0_Alpha_Multiplier("Constrain by alpha channel", Range(0, 5)) = 1 - _PBR_Overlay0_UV_Select("UV channel", Range(0,1)) = 0 + _PBR_Overlay0_UV_Select("UV channel", Range(0,3)) = 0 _PBR_Overlay0_Sampler_Mode("Sampler mode", Range(0,1)) = 0 _PBR_Overlay1_Enable("Enable PBR overlay", Float) = 0.0 @@ -63,7 +63,7 @@ Shader "yum_food/tooner" _PBR_Overlay1_Constrain_By_Alpha_Min("Constrain by alpha channel", Range(0, 1)) = 0 _PBR_Overlay1_Constrain_By_Alpha_Max("Constrain by alpha channel", Range(0, 1)) = 1 _PBR_Overlay1_Alpha_Multiplier("Constrain by alpha channel", Range(0, 5)) = 1 - _PBR_Overlay1_UV_Select("UV channel", Range(0,1)) = 0 + _PBR_Overlay1_UV_Select("UV channel", Range(0,3)) = 0 _PBR_Overlay1_Sampler_Mode("Sampler mode", Range(0,1)) = 0 _PBR_Overlay2_Enable("Enable PBR overlay", Float) = 0.0 @@ -86,7 +86,7 @@ Shader "yum_food/tooner" _PBR_Overlay2_Constrain_By_Alpha_Min("Constrain by alpha channel", Range(0, 1)) = 0 _PBR_Overlay2_Constrain_By_Alpha_Max("Constrain by alpha channel", Range(0, 1)) = 1 _PBR_Overlay2_Alpha_Multiplier("Constrain by alpha channel", Range(0, 5)) = 1 - _PBR_Overlay2_UV_Select("UV channel", Range(0,1)) = 0 + _PBR_Overlay2_UV_Select("UV channel", Range(0,3)) = 0 _PBR_Overlay2_Sampler_Mode("Sampler mode", Range(0,1)) = 0 _PBR_Overlay3_Enable("Enable PBR overlay", Float) = 0.0 @@ -109,7 +109,7 @@ Shader "yum_food/tooner" _PBR_Overlay3_Constrain_By_Alpha_Min("Constrain by alpha channel", Range(0, 1)) = 0 _PBR_Overlay3_Constrain_By_Alpha_Max("Constrain by alpha channel", Range(0, 1)) = 1 _PBR_Overlay3_Alpha_Multiplier("Constrain by alpha channel", Range(0, 5)) = 1 - _PBR_Overlay3_UV_Select("UV channel", Range(0,1)) = 0 + _PBR_Overlay3_UV_Select("UV channel", Range(0,3)) = 0 _PBR_Overlay3_Sampler_Mode("Sampler mode", Range(0,1)) = 0 _Decal0_Enable("Enable decal", Float) = 0.0 @@ -118,7 +118,7 @@ Shader "yum_food/tooner" _Decal0_Metallic("Metallic", 2D) = "black" {} _Decal0_Emission_Strength("Emission strength", Float) = 0 _Decal0_Angle("Emission strength", Range(0,1)) = 0 - _Decal0_UV_Select("UV channel", Range(0,1)) = 0 + _Decal0_UV_Select("UV channel", Range(0,3)) = 0 _Decal1_Enable("Enable decal", Float) = 0.0 _Decal1_BaseColor("Base color", 2D) = "white" {} @@ -126,7 +126,7 @@ Shader "yum_food/tooner" _Decal1_Metallic("Metallic", 2D) = "black" {} _Decal1_Emission_Strength("Emission strength", Float) = 0 _Decal1_Angle("Emission strength", Range(0,1)) = 0 - _Decal1_UV_Select("UV channel", Range(0,1)) = 0 + _Decal1_UV_Select("UV channel", Range(0,3)) = 0 _Decal2_Enable("Enable decal", Float) = 0.0 _Decal2_BaseColor("Base color", 2D) = "white" {} @@ -134,7 +134,7 @@ Shader "yum_food/tooner" _Decal2_Metallic("Metallic", 2D) = "black" {} _Decal2_Emission_Strength("Emission strength", Float) = 0 _Decal2_Angle("Emission strength", Range(0,1)) = 0 - _Decal2_UV_Select("UV channel", Range(0,1)) = 0 + _Decal2_UV_Select("UV channel", Range(0,3)) = 0 _Decal3_Enable("Enable decal", Float) = 0.0 _Decal3_BaseColor("Base color", 2D) = "white" {} @@ -142,7 +142,7 @@ Shader "yum_food/tooner" _Decal3_Metallic("Metallic", 2D) = "black" {} _Decal3_Emission_Strength("Emission strength", Float) = 0 _Decal3_Angle("Emission strength", Range(0,1)) = 0 - _Decal3_UV_Select("UV channel", Range(0,1)) = 0 + _Decal3_UV_Select("UV channel", Range(0,3)) = 0 [NoScaleOffset] _EmissionTex("Emission map", 2D) = "black" {} _EmissionStrength("Emission strength", Range(0, 2)) = 0 @@ -482,6 +482,7 @@ Shader "yum_food/tooner" #include "tooner_lighting.cginc" ENDCG } + /* Pass { Tags { "RenderType" = "Opaque" @@ -552,6 +553,7 @@ Shader "yum_food/tooner" #include "mochie_shadow_caster.cginc" ENDCG } + */ } CustomEditor "ToonerGUI" } diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc index 10383df..98b173e 100644 --- a/tooner_lighting.cginc +++ b/tooner_lighting.cginc @@ -163,9 +163,9 @@ v2f vert(appdata v) o.tangent = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w); o.uv0 = v.uv0; - o.uv2 = v.uv2; + o.uv1 = v.uv1; #if defined(LIGHTMAP_ON) - o.lmuv = v.uv2 * unity_LightmapST.xy + unity_LightmapST.zw; + o.lmuv = v.uv1 * unity_LightmapST.xy + unity_LightmapST.zw; #endif #if defined(SHADOWS_SCREEN) TRANSFER_SHADOW(o); @@ -389,8 +389,28 @@ float2 matcap_distortion0(float2 matcap_uv) { return matcap_uv; } -#define GET_UV_BY_CHANNEL(i, which_channel) (which_channel == 0 ? i.uv0 : i.uv2) -#define UV_SCOFF(i, tex_st, which_channel) GET_UV_BY_CHANNEL(i, which_channel) * (tex_st).xy + (tex_st).zw +float2 get_uv_by_channel(v2f i, uint which_channel) { + switch (which_channel) { + case 0: + return i.uv0; + break; + case 1: + return i.uv1; + break; + case 2: + return i.uv2; + break; + case 3: + return i.uv3; + break; + default: + return 0; + break; + } +} + +#define GET_UV_BY_CHANNEL(i, which_channel) (which_channel == 0 ? i.uv0 : i.uv1) +#define UV_SCOFF(i, tex_st, which_channel) get_uv_by_channel(i, round(which_channel)) * (tex_st).xy + (tex_st).zw #if defined(_PBR_OVERLAY0_SAMPLER_REPEAT) #define GET_SAMPLER_OV0 linear_repeat_s @@ -482,10 +502,10 @@ void getOverlayAlbedoRoughnessMetallic(inout PbrOverlay ov, #if defined(_PBR_OVERLAY0) || defined(_PBR_OVERLAY1) || defined(_PBR_OVERLAY2) || defined(_PBR_OVERLAY3) float uv0_iddx = (ddx(i.uv0.x) + ddx(i.uv0.y)) * _Mip_Multiplier; float uv0_iddy = (ddy(i.uv0.x) + ddy(i.uv0.y)) * _Mip_Multiplier; - float uv2_iddx = (ddx(i.uv2.x) + ddx(i.uv2.y)) * _Mip_Multiplier; - float uv2_iddy = (ddy(i.uv2.x) + ddy(i.uv2.y)) * _Mip_Multiplier; -#define GET_IDDX(which_channel) (which_channel == 0 ? uv0_iddx : uv2_iddx) -#define GET_IDDY(which_channel) (which_channel == 0 ? uv0_iddy : uv2_iddy) + float uv1_iddx = (ddx(i.uv1.x) + ddx(i.uv1.y)) * _Mip_Multiplier; + float uv1_iddy = (ddy(i.uv1.x) + ddy(i.uv1.y)) * _Mip_Multiplier; +#define GET_IDDX(which_channel) (which_channel == 0 ? uv0_iddx : uv1_iddx) +#define GET_IDDY(which_channel) (which_channel == 0 ? uv0_iddy : uv1_iddy) #endif #if defined(_PBR_OVERLAY0) @@ -1025,19 +1045,31 @@ float3 getOverlayEmission(PbrOverlay ov, v2f i, float iddx, float iddy) { float3 em = 0; #if defined(_PBR_OVERLAY0_EMISSION_MAP) - em += _PBR_Overlay0_EmissionTex.SampleGrad(GET_SAMPLER_OV0, UV_SCOFF(i, _PBR_Overlay0_EmissionTex_ST, _PBR_Overlay0_UV_Select), iddx * _PBR_Overlay0_EmissionTex_ST.x, iddy * _PBR_Overlay0_EmissionTex_ST.y) * _PBR_Overlay0_Emission * ov.ov0_mask; + em += _PBR_Overlay0_EmissionTex.SampleGrad(GET_SAMPLER_OV0, + UV_SCOFF(i, _PBR_Overlay0_EmissionTex_ST, _PBR_Overlay0_UV_Select), + iddx * _PBR_Overlay0_EmissionTex_ST.x, + iddy * _PBR_Overlay0_EmissionTex_ST.y) * _PBR_Overlay0_Emission * ov.ov0_mask; #endif #if defined(_PBR_OVERLAY1_EMISSION_MAP) - em += _PBR_Overlay1_EmissionTex.SampleGrad(GET_SAMPLER_OV1, UV_SCOFF(i, _PBR_Overlay1_EmissionTex_ST, _PBR_Overlay1_UV_Select), iddx * _PBR_Overlay1_EmissionTex_ST.x, iddy * _PBR_Overlay1_EmissionTex_ST.y) * _PBR_Overlay1_Emission * ov.ov1_mask; + em += _PBR_Overlay1_EmissionTex.SampleGrad(GET_SAMPLER_OV1, + UV_SCOFF(i, _PBR_Overlay1_EmissionTex_ST, _PBR_Overlay1_UV_Select), + iddx * _PBR_Overlay1_EmissionTex_ST.x, + iddy * _PBR_Overlay1_EmissionTex_ST.y) * _PBR_Overlay1_Emission * ov.ov1_mask; #endif #if defined(_PBR_OVERLAY2_EMISSION_MAP) - em += _PBR_Overlay2_EmissionTex.SampleGrad(GET_SAMPLER_OV2, UV_SCOFF(i, _PBR_Overlay2_EmissionTex_ST, _PBR_Overlay2_UV_Select), iddx * _PBR_Overlay2_EmissionTex_ST.x, iddy * _PBR_Overlay2_EmissionTex_ST.y) * _PBR_Overlay2_Emission * ov.ov2_mask; + em += _PBR_Overlay2_EmissionTex.SampleGrad(GET_SAMPLER_OV2, + UV_SCOFF(i, _PBR_Overlay2_EmissionTex_ST, _PBR_Overlay2_UV_Select), + iddx * _PBR_Overlay2_EmissionTex_ST.x, + iddy * _PBR_Overlay2_EmissionTex_ST.y) * _PBR_Overlay2_Emission * ov.ov2_mask; #endif #if defined(_PBR_OVERLAY3_EMISSION_MAP) - em += _PBR_Overlay3_EmissionTex.SampleGrad(GET_SAMPLER_OV3, UV_SCOFF(i, _PBR_Overlay3_EmissionTex_ST, _PBR_Overlay3_UV_Select), iddx * _PBR_Overlay3_EmissionTex_ST.x, iddy * _PBR_Overlay3_EmissionTex_ST.y) * _PBR_Overlay3_Emission * ov.ov3_mask; + em += _PBR_Overlay3_EmissionTex.SampleGrad(GET_SAMPLER_OV3, + UV_SCOFF(i, _PBR_Overlay3_EmissionTex_ST, _PBR_Overlay3_UV_Select), + iddx * _PBR_Overlay3_EmissionTex_ST.x, + iddy * _PBR_Overlay3_EmissionTex_ST.y) * _PBR_Overlay3_Emission * ov.ov3_mask; #endif return em; } diff --git a/tooner_outline_pass.cginc b/tooner_outline_pass.cginc index 0c22133..1c1751b 100644 --- a/tooner_outline_pass.cginc +++ b/tooner_outline_pass.cginc @@ -70,7 +70,7 @@ v2f vert(appdata v) o.pos = UnityObjectToClipPos(objPos); o.normal = UnityObjectToWorldNormal(v.normal); o.uv0 = v.uv0.xy; - o.uv2 = v.uv2; + o.uv1 = v.uv1; #if defined(LIGHTMAP_ON) o.lmuv = v.uv1 * unity_LightmapST.xy + unity_LightmapST.zw; #endif |
