summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Editor/tooner.cs11
-rw-r--r--globals.cginc12
-rw-r--r--tooner.shader20
-rw-r--r--tooner_lighting.cginc30
4 files changed, 69 insertions, 4 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs
index 1da2bb9..602620b 100644
--- a/Editor/tooner.cs
+++ b/Editor/tooner.cs
@@ -146,6 +146,17 @@ public class ToonerGUI : ShaderGUI {
SetKeyword($"_PBR_OVERLAY{i}_MIX_MIN", mode == PbrAlbedoMixMode.Min);
SetKeyword($"_PBR_OVERLAY{i}_MIX_MAX", mode == PbrAlbedoMixMode.Max);
+ bc = FindProperty($"_PBR_Overlay{i}_Emission");
+ bct = FindProperty($"_PBR_Overlay{i}_EmissionTex");
+ editor.TexturePropertySingleLine(
+ MakeLabel(bct, "Emission (RGB)"),
+ bct,
+ bc);
+ if (bct.textureValue) {
+ editor.TextureScaleOffsetProperty(bct);
+ }
+ SetKeyword($"_PBR_OVERLAY{i}_EMISSION_MAP", bct.textureValue);
+
bct = FindProperty($"_PBR_Overlay{i}_NormalTex");
editor.TexturePropertySingleLine(
MakeLabel(bct, "Normal"),
diff --git a/globals.cginc b/globals.cginc
index 9b6534a..6c3d51f 100644
--- a/globals.cginc
+++ b/globals.cginc
@@ -38,6 +38,9 @@ float _PBR_Overlay0_Metallic;
float _PBR_Overlay0_Roughness;
texture2D _PBR_Overlay0_BaseColorTex;
float4 _PBR_Overlay0_BaseColorTex_ST;
+float4 _PBR_Overlay0_Emission;
+texture2D _PBR_Overlay0_EmissionTex;
+float4 _PBR_Overlay0_EmissionTex_ST;
texture2D _PBR_Overlay0_NormalTex;
float4 _PBR_Overlay0_NormalTex_ST;
texture2D _PBR_Overlay0_MetallicTex;
@@ -55,6 +58,9 @@ float _PBR_Overlay1_Metallic;
float _PBR_Overlay1_Roughness;
texture2D _PBR_Overlay1_BaseColorTex;
float4 _PBR_Overlay1_BaseColorTex_ST;
+float4 _PBR_Overlay1_Emission;
+texture2D _PBR_Overlay1_EmissionTex;
+float4 _PBR_Overlay1_EmissionTex_ST;
texture2D _PBR_Overlay1_NormalTex;
float4 _PBR_Overlay1_NormalTex_ST;
texture2D _PBR_Overlay1_MetallicTex;
@@ -72,6 +78,9 @@ float _PBR_Overlay2_Metallic;
float _PBR_Overlay2_Roughness;
texture2D _PBR_Overlay2_BaseColorTex;
float4 _PBR_Overlay2_BaseColorTex_ST;
+float4 _PBR_Overlay2_Emission;
+texture2D _PBR_Overlay2_EmissionTex;
+float4 _PBR_Overlay2_EmissionTex_ST;
texture2D _PBR_Overlay2_NormalTex;
float4 _PBR_Overlay2_NormalTex_ST;
texture2D _PBR_Overlay2_MetallicTex;
@@ -89,6 +98,9 @@ float _PBR_Overlay3_Metallic;
float _PBR_Overlay3_Roughness;
texture2D _PBR_Overlay3_BaseColorTex;
float4 _PBR_Overlay3_BaseColorTex_ST;
+float4 _PBR_Overlay3_Emission;
+texture2D _PBR_Overlay3_EmissionTex;
+float4 _PBR_Overlay3_EmissionTex_ST;
texture2D _PBR_Overlay3_NormalTex;
float4 _PBR_Overlay3_NormalTex_ST;
texture2D _PBR_Overlay3_MetallicTex;
diff --git a/tooner.shader b/tooner.shader
index 4c29975..fa0dce9 100644
--- a/tooner.shader
+++ b/tooner.shader
@@ -16,6 +16,8 @@ Shader "yum_food/tooner"
_PBR_Overlay0_Metallic("Metallic", Range(0, 1)) = 0
_PBR_Overlay0_Roughness("Roughness", Range(0, 1)) = 1
_PBR_Overlay0_BaseColorTex("Base color", 2D) = "white" {}
+ _PBR_Overlay0_Emission("Emission", Color) = (1, 1, 1, 1)
+ _PBR_Overlay0_EmissionTex("Emission", 2D) = "black" {}
_PBR_Overlay0_NormalTex("Normal", 2D) = "bump" {}
_PBR_Overlay0_MetallicTex("Metallic", 2D) = "white" {}
_PBR_Overlay0_RoughnessTex("Roughness", 2D) = "black" {}
@@ -29,6 +31,8 @@ Shader "yum_food/tooner"
_PBR_Overlay1_Metallic("Metallic", Range(0, 1)) = 0
_PBR_Overlay1_Roughness("Roughness", Range(0, 1)) = 1
_PBR_Overlay1_BaseColorTex("Base color", 2D) = "white" {}
+ _PBR_Overlay1_Emission("Emission", Color) = (1, 1, 1, 1)
+ _PBR_Overlay1_EmissionTex("Emission", 2D) = "black" {}
_PBR_Overlay1_NormalTex("Normal", 2D) = "bump" {}
_PBR_Overlay1_MetallicTex("Metallic", 2D) = "white" {}
_PBR_Overlay1_RoughnessTex("Roughness", 2D) = "black" {}
@@ -42,6 +46,8 @@ Shader "yum_food/tooner"
_PBR_Overlay2_Metallic("Metallic", Range(0, 1)) = 0
_PBR_Overlay2_Roughness("Roughness", Range(0, 1)) = 1
_PBR_Overlay2_BaseColorTex("Base color", 2D) = "white" {}
+ _PBR_Overlay2_Emission("Emission", Color) = (1, 1, 1, 1)
+ _PBR_Overlay2_EmissionTex("Emission", 2D) = "black" {}
_PBR_Overlay2_NormalTex("Normal", 2D) = "bump" {}
_PBR_Overlay2_MetallicTex("Metallic", 2D) = "white" {}
_PBR_Overlay2_RoughnessTex("Roughness", 2D) = "black" {}
@@ -55,6 +61,8 @@ Shader "yum_food/tooner"
_PBR_Overlay3_Metallic("Metallic", Range(0, 1)) = 0
_PBR_Overlay3_Roughness("Roughness", Range(0, 1)) = 1
_PBR_Overlay3_BaseColorTex("Base color", 2D) = "white" {}
+ _PBR_Overlay3_Emission("Emission", Color) = (1, 1, 1, 1)
+ _PBR_Overlay3_EmissionTex("Emission", 2D) = "black" {}
_PBR_Overlay3_NormalTex("Normal", 2D) = "bump" {}
_PBR_Overlay3_MetallicTex("Metallic", 2D) = "white" {}
_PBR_Overlay3_RoughnessTex("Roughness", 2D) = "black" {}
@@ -236,6 +244,7 @@ Shader "yum_food/tooner"
#pragma shader_feature_local _ _CLONES
#pragma shader_feature_local _ _PBR_OVERLAY0
#pragma shader_feature_local _ _PBR_OVERLAY0_BASECOLOR_MAP
+ #pragma shader_feature_local _ _PBR_OVERLAY0_EMISSION_MAP
#pragma shader_feature_local _ _PBR_OVERLAY0_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY0_ROUGHNESS_MAP
#pragma shader_feature_local _ _PBR_OVERLAY0_METALLIC_MAP
@@ -246,6 +255,7 @@ Shader "yum_food/tooner"
#pragma shader_feature_local _ _PBR_OVERLAY0_MIX_MAX
#pragma shader_feature_local _ _PBR_OVERLAY1
#pragma shader_feature_local _ _PBR_OVERLAY1_BASECOLOR_MAP
+ #pragma shader_feature_local _ _PBR_OVERLAY1_EMISSION_MAP
#pragma shader_feature_local _ _PBR_OVERLAY1_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY1_ROUGHNESS_MAP
#pragma shader_feature_local _ _PBR_OVERLAY1_METALLIC_MAP
@@ -256,6 +266,7 @@ Shader "yum_food/tooner"
#pragma shader_feature_local _ _PBR_OVERLAY1_MIX_MAX
#pragma shader_feature_local _ _PBR_OVERLAY2
#pragma shader_feature_local _ _PBR_OVERLAY2_BASECOLOR_MAP
+ #pragma shader_feature_local _ _PBR_OVERLAY2_EMISSION_MAP
#pragma shader_feature_local _ _PBR_OVERLAY2_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY2_ROUGHNESS_MAP
#pragma shader_feature_local _ _PBR_OVERLAY2_METALLIC_MAP
@@ -266,6 +277,7 @@ Shader "yum_food/tooner"
#pragma shader_feature_local _ _PBR_OVERLAY2_MIX_MAX
#pragma shader_feature_local _ _PBR_OVERLAY3
#pragma shader_feature_local _ _PBR_OVERLAY3_BASECOLOR_MAP
+ #pragma shader_feature_local _ _PBR_OVERLAY3_EMISSION_MAP
#pragma shader_feature_local _ _PBR_OVERLAY3_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY3_ROUGHNESS_MAP
#pragma shader_feature_local _ _PBR_OVERLAY3_METALLIC_MAP
@@ -337,24 +349,28 @@ Shader "yum_food/tooner"
#pragma shader_feature_local _ _CLONES
#pragma shader_feature_local _ _PBR_OVERLAY0
#pragma shader_feature_local _ _PBR_OVERLAY0_BASECOLOR_MAP
+ #pragma shader_feature_local _ _PBR_OVERLAY0_EMISSION_MAP
#pragma shader_feature_local _ _PBR_OVERLAY0_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY0_ROUGHNESS_MAP
#pragma shader_feature_local _ _PBR_OVERLAY0_METALLIC_MAP
#pragma shader_feature_local _ _PBR_OVERLAY0_MASK
#pragma shader_feature_local _ _PBR_OVERLAY1
#pragma shader_feature_local _ _PBR_OVERLAY1_BASECOLOR_MAP
+ #pragma shader_feature_local _ _PBR_OVERLAY1_EMISSION_MAP
#pragma shader_feature_local _ _PBR_OVERLAY1_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY1_ROUGHNESS_MAP
#pragma shader_feature_local _ _PBR_OVERLAY1_METALLIC_MAP
#pragma shader_feature_local _ _PBR_OVERLAY1_MASK
#pragma shader_feature_local _ _PBR_OVERLAY2
#pragma shader_feature_local _ _PBR_OVERLAY2_BASECOLOR_MAP
+ #pragma shader_feature_local _ _PBR_OVERLAY2_EMISSION_MAP
#pragma shader_feature_local _ _PBR_OVERLAY2_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY2_ROUGHNESS_MAP
#pragma shader_feature_local _ _PBR_OVERLAY2_METALLIC_MAP
#pragma shader_feature_local _ _PBR_OVERLAY2_MASK
#pragma shader_feature_local _ _PBR_OVERLAY3
#pragma shader_feature_local _ _PBR_OVERLAY3_BASECOLOR_MAP
+ #pragma shader_feature_local _ _PBR_OVERLAY3_EMISSION_MAP
#pragma shader_feature_local _ _PBR_OVERLAY3_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY3_ROUGHNESS_MAP
#pragma shader_feature_local _ _PBR_OVERLAY3_METALLIC_MAP
@@ -403,24 +419,28 @@ Shader "yum_food/tooner"
#pragma shader_feature_local _ _CLONES
#pragma shader_feature_local _ _PBR_OVERLAY0
#pragma shader_feature_local _ _PBR_OVERLAY0_BASECOLOR_MAP
+ #pragma shader_feature_local _ _PBR_OVERLAY0_EMISSION_MAP
#pragma shader_feature_local _ _PBR_OVERLAY0_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY0_ROUGHNESS_MAP
#pragma shader_feature_local _ _PBR_OVERLAY0_METALLIC_MAP
#pragma shader_feature_local _ _PBR_OVERLAY0_MASK
#pragma shader_feature_local _ _PBR_OVERLAY1
#pragma shader_feature_local _ _PBR_OVERLAY1_BASECOLOR_MAP
+ #pragma shader_feature_local _ _PBR_OVERLAY1_EMISSION_MAP
#pragma shader_feature_local _ _PBR_OVERLAY1_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY1_ROUGHNESS_MAP
#pragma shader_feature_local _ _PBR_OVERLAY1_METALLIC_MAP
#pragma shader_feature_local _ _PBR_OVERLAY1_MASK
#pragma shader_feature_local _ _PBR_OVERLAY2
#pragma shader_feature_local _ _PBR_OVERLAY2_BASECOLOR_MAP
+ #pragma shader_feature_local _ _PBR_OVERLAY2_EMISSION_MAP
#pragma shader_feature_local _ _PBR_OVERLAY2_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY2_ROUGHNESS_MAP
#pragma shader_feature_local _ _PBR_OVERLAY2_METALLIC_MAP
#pragma shader_feature_local _ _PBR_OVERLAY2_MASK
#pragma shader_feature_local _ _PBR_OVERLAY3
#pragma shader_feature_local _ _PBR_OVERLAY3_BASECOLOR_MAP
+ #pragma shader_feature_local _ _PBR_OVERLAY3_EMISSION_MAP
#pragma shader_feature_local _ _PBR_OVERLAY3_NORMAL_MAP
#pragma shader_feature_local _ _PBR_OVERLAY3_ROUGHNESS_MAP
#pragma shader_feature_local _ _PBR_OVERLAY3_METALLIC_MAP
diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc
index 7f7ceb8..f4ec9eb 100644
--- a/tooner_lighting.cginc
+++ b/tooner_lighting.cginc
@@ -419,7 +419,7 @@ void getOverlayAlbedo(inout PbrOverlay ov,
{
#if defined(_PBR_OVERLAY0)
#if defined(_PBR_OVERLAY0_BASECOLOR_MAP)
- ov.ov0_albedo = _PBR_Overlay0_BaseColorTex.SampleGrad(linear_repeat_s, UV_SCOFF(i.uv, _PBR_Overlay0_BaseColorTex_ST), iddx, iddy);
+ ov.ov0_albedo = _PBR_Overlay0_BaseColorTex.SampleGrad(linear_repeat_s, UV_SCOFF(i.uv, _PBR_Overlay0_BaseColorTex_ST), iddx * _PBR_Overlay0_BaseColorTex_ST.x, iddy * _PBR_Overlay0_BaseColorTex_ST.y);
ov.ov0_albedo *= _PBR_Overlay0_BaseColor;
#else
ov.ov0_albedo = _PBR_Overlay0_BaseColor;
@@ -436,7 +436,7 @@ void getOverlayAlbedo(inout PbrOverlay ov,
#if defined(_PBR_OVERLAY1)
#if defined(_PBR_OVERLAY1_BASECOLOR_MAP)
- ov.ov1_albedo = _PBR_Overlay1_BaseColorTex.SampleGrad(linear_repeat_s, UV_SCOFF(i.uv, _PBR_Overlay1_BaseColorTex_ST), iddx, iddy);
+ ov.ov1_albedo = _PBR_Overlay1_BaseColorTex.SampleGrad(linear_repeat_s, UV_SCOFF(i.uv, _PBR_Overlay1_BaseColorTex_ST), iddx * _PBR_Overlay1_BaseColorTex_ST.x, iddy * _PBR_Overlay1_BaseColorTex_ST.y);
ov.ov1_albedo *= _PBR_Overlay1_BaseColor;
#else
ov.ov1_albedo = _PBR_Overlay1_BaseColor;
@@ -453,7 +453,7 @@ void getOverlayAlbedo(inout PbrOverlay ov,
#if defined(_PBR_OVERLAY2)
#if defined(_PBR_OVERLAY2_BASECOLOR_MAP)
- ov.ov2_albedo = _PBR_Overlay2_BaseColorTex.SampleGrad(linear_repeat_s, UV_SCOFF(i.uv, _PBR_Overlay2_BaseColorTex_ST), iddx, iddy);
+ ov.ov2_albedo = _PBR_Overlay2_BaseColorTex.SampleGrad(linear_repeat_s, UV_SCOFF(i.uv, _PBR_Overlay2_BaseColorTex_ST), iddx * _PBR_Overlay2_BaseColorTex_ST.x, iddy * _PBR_Overlay2_BaseColorTex_ST.y);
ov.ov2_albedo *= _PBR_Overlay2_BaseColor;
#else
ov.ov2_albedo = _PBR_Overlay2_BaseColor;
@@ -470,7 +470,7 @@ void getOverlayAlbedo(inout PbrOverlay ov,
#if defined(_PBR_OVERLAY3)
#if defined(_PBR_OVERLAY3_BASECOLOR_MAP)
- ov.ov3_albedo = _PBR_Overlay3_BaseColorTex.SampleGrad(linear_repeat_s, UV_SCOFF(i.uv, _PBR_Overlay3_BaseColorTex_ST), iddx, iddy);
+ ov.ov3_albedo = _PBR_Overlay3_BaseColorTex.SampleGrad(linear_repeat_s, UV_SCOFF(i.uv, _PBR_Overlay3_BaseColorTex_ST), iddx * _PBR_Overlay3_BaseColorTex_ST.x, iddy * _PBR_Overlay3_BaseColorTex_ST.y);
ov.ov3_albedo *= _PBR_Overlay3_BaseColor;
#else
ov.ov3_albedo = _PBR_Overlay3_BaseColor;
@@ -572,6 +572,27 @@ void applyOverlayNormal(inout float3 raw_normal, PbrOverlay ov, v2f i, float idd
#endif // _PBR_OVERLAY3 && _PBR_OVERLAY3_NORMAL_MAP
}
+float3 getOverlayEmission(PbrOverlay ov, v2f i, float iddx, float iddy)
+{
+ float3 em = 0;
+#if defined(_PBR_OVERLAY0_EMISSION_MAP)
+ em += _PBR_Overlay0_EmissionTex.SampleGrad(linear_repeat_s, UV_SCOFF(i.uv, _PBR_Overlay0_EmissionTex_ST), 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(linear_repeat_s, UV_SCOFF(i.uv, _PBR_Overlay1_EmissionTex_ST), 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(linear_repeat_s, UV_SCOFF(i.uv, _PBR_Overlay2_EmissionTex_ST), 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(linear_repeat_s, UV_SCOFF(i.uv, _PBR_Overlay3_EmissionTex_ST), iddx * _PBR_Overlay3_EmissionTex_ST.x, iddy * _PBR_Overlay3_EmissionTex_ST.y) * _PBR_Overlay3_Emission * ov.ov3_mask;
+#endif
+ return em;
+}
+
float4 effect(inout v2f i)
{
float iddx = ddx(i.uv.x) * _Mip_Multiplier;
@@ -930,6 +951,7 @@ float4 effect(inout v2f i)
#if defined(_RENDERING_TRANSPARENT) || defined(_RENDERING_TRANSCLIPPING)
result.rgb *= result.a;
#endif
+ result.rgb += getOverlayEmission(ov, i, iddx, iddy);
return result;
}