summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--interpolators.cginc42
-rw-r--r--tooner.shader18
-rw-r--r--tooner_lighting.cginc56
-rw-r--r--tooner_outline_pass.cginc2
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