diff options
| author | yum <yum.food.vr@gmail.com> | 2024-09-02 13:04:16 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2024-09-02 13:04:16 -0700 |
| commit | e757ffcf2362fafaf040b8f15827c6acd0d85ab0 (patch) | |
| tree | 589e32d5645731f7e5591f49eeebabe0ac4be9bd | |
| parent | 2ea62b8fc899cab47e6e23da9168a42ecd6ddf45 (diff) | |
Add sampler mode to PBR section
Also remove normal scaling weirdness.
| -rw-r--r-- | Editor/tooner.cs | 39 | ||||
| -rw-r--r-- | feature_macros.cginc | 2 | ||||
| -rw-r--r-- | tooner.shader | 17 | ||||
| -rw-r--r-- | tooner_lighting.cginc | 18 |
4 files changed, 41 insertions, 35 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs index 741bd5f..a7b0b19 100644 --- a/Editor/tooner.cs +++ b/Editor/tooner.cs @@ -106,6 +106,32 @@ public class ToonerGUI : ShaderGUI { SetKeyword("_ROUGHNESS_MAP", bct.textureValue); } + enum SamplerMode { + Repeat, + Clamp, + }; + void DoPBR() { + GUILayout.Label("PBR", EditorStyles.boldLabel); + EditorGUI.indentLevel += 1; + { + DoBaseColor(); + DoNormal(); + DoMetallic(); + DoRoughness(); + + EditorGUI.BeginChangeCheck(); + MaterialProperty bc = FindProperty($"_PBR_Sampler_Mode"); + SamplerMode sampler_mode = (SamplerMode) Math.Round(bc.floatValue); + sampler_mode = (SamplerMode) EditorGUILayout.EnumPopup( + MakeLabel("Sampler mode"), sampler_mode); + EditorGUI.EndChangeCheck(); + bc.floatValue = (int) sampler_mode; + SetKeyword($"_PBR_SAMPLER_REPEAT", sampler_mode == SamplerMode.Repeat); + SetKeyword($"_PBR_SAMPLER_CLAMP", sampler_mode == SamplerMode.Clamp); + } + EditorGUI.indentLevel -= 1; + } + void DoClearcoat() { MaterialProperty bc; bc = FindProperty("_Clearcoat_Enabled"); @@ -159,10 +185,6 @@ public class ToonerGUI : ShaderGUI { Min, Max }; - enum SamplerMode { - Repeat, - Clamp, - }; void DoPBROverlay() { for (int i = 0; i < 4; i++) { @@ -1758,14 +1780,7 @@ public class ToonerGUI : ShaderGUI { } void DoMain() { - GUILayout.Label("PBR", EditorStyles.boldLabel); - EditorGUI.indentLevel += 1; - DoBaseColor(); - DoNormal(); - DoMetallic(); - DoRoughness(); - EditorGUI.indentLevel -= 1; - + DoPBR(); DoPBROverlay(); GUILayout.Label("Clearcoat", EditorStyles.boldLabel); diff --git a/feature_macros.cginc b/feature_macros.cginc index cf39cfc..7a50526 100644 --- a/feature_macros.cginc +++ b/feature_macros.cginc @@ -5,6 +5,8 @@ #pragma shader_feature_local _ _NORMAL_MAP #pragma shader_feature_local _ _METALLIC_MAP #pragma shader_feature_local _ _ROUGHNESS_MAP +#pragma shader_feature_local _ _PBR_SAMPLER_REPEAT +#pragma shader_feature_local _ _PBR_SAMPLER_CLAMP #pragma shader_feature_local _ _CUBEMAP #pragma shader_feature_local _ _EMISSION0 #pragma shader_feature_local _ _EMISSION1 diff --git a/tooner.shader b/tooner.shader index 227131d..99afd18 100644 --- a/tooner.shader +++ b/tooner.shader @@ -19,6 +19,7 @@ Shader "yum_food/tooner" [NoScaleOffset] _NormalTex("Normal", 2D) = "bump" {} [NoScaleOffset] _MetallicTex("Metallic", 2D) = "white" {} [NoScaleOffset] _RoughnessTex("Roughness", 2D) = "black" {} + _PBR_Sampler_Mode("Sampler mode", Range(0,1)) = 0 _PBR_Overlay0_Enable("Enable PBR overlay", Float) = 0.0 _PBR_Overlay0_BaseColor("Base color", Color) = (0.8, 0.8, 0.8, 1) @@ -524,10 +525,6 @@ Shader "yum_food/tooner" #include "feature_macros.cginc" #pragma vertex vert - //#pragma vertex hull_vertex - //#pragma hull hull - //#pragma domain domain - #pragma geometry geom #pragma fragment frag @@ -538,9 +535,9 @@ Shader "yum_food/tooner" } Pass { Tags { - "RenderType" = "Opaque" + "RenderType"="Opaque" "Queue"="Geometry" - "LightMode" = "ForwardAdd" + "LightMode"="ForwardAdd" } Blend [_SrcBlend] One ZWrite Off @@ -561,10 +558,6 @@ Shader "yum_food/tooner" #include "feature_macros.cginc" #pragma vertex vert - //#pragma vertex hull_vertex - //#pragma hull hull - //#pragma domain domain - #pragma geometry geom #pragma fragment frag @@ -590,10 +583,6 @@ Shader "yum_food/tooner" #include "feature_macros.cginc" #pragma vertex vert - //#pragma vertex hull_vertex - //#pragma hull hull - //#pragma domain domain - #pragma geometry geom #pragma fragment frag diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc index 4ca10da..221b1a6 100644 --- a/tooner_lighting.cginc +++ b/tooner_lighting.cginc @@ -441,6 +441,11 @@ float2 get_uv_by_channel(v2f i, uint which_channel) { #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_SAMPLER_REPEAT) +#define GET_SAMPLER_PBR linear_repeat_s +#elif defined(_PBR_SAMPLER_CLAMP) +#define GET_SAMPLER_PBR linear_clamp_s +#endif #if defined(_PBR_OVERLAY0_SAMPLER_REPEAT) #define GET_SAMPLER_OV0 linear_repeat_s #elif defined(_PBR_OVERLAY0_SAMPLER_CLAMP) @@ -1125,7 +1130,7 @@ float4 effect(inout v2f i) #endif #if defined(_BASECOLOR_MAP) - float4 albedo = _MainTex.SampleBias(linear_repeat_s, UV_SCOFF(i, _MainTex_ST, 0), _Global_Sample_Bias); + float4 albedo = _MainTex.SampleBias(GET_SAMPLER_PBR, UV_SCOFF(i, _MainTex_ST, 0), _Global_Sample_Bias); albedo *= _Color; #else float4 albedo = _Color; @@ -1173,14 +1178,9 @@ float4 effect(inout v2f i) // Use UVs to smoothly blend between fully detailed normals when close up and // flat normals when far away. If we don't do this, then we see moire effects // on e.g. striped normal maps. - float fw = clamp(fwidth(i.uv0), .001, 1) * 1200; - float3 raw_normal = UnpackScaleNormal(_NormalTex.SampleBias(linear_repeat_s, + float3 raw_normal = UnpackScaleNormal(_NormalTex.SampleBias(GET_SAMPLER_PBR, UV_SCOFF(i, _NormalTex_ST, 0), _Global_Sample_Bias), _Tex_NormalStr); - - raw_normal = BlendNormals( - (1/fw) * raw_normal, - fw * float3(0, 0, 1)); #else float3 raw_normal = UnpackNormal(float4(0.5, 0.5, 1, 1)); #endif // _NORMAL_MAP @@ -1196,13 +1196,13 @@ float4 effect(inout v2f i) ); #if defined(_METALLIC_MAP) - float metallic = _MetallicTex.SampleBias(linear_repeat_s, + float metallic = _MetallicTex.SampleBias(GET_SAMPLER_PBR, UV_SCOFF(i, _MetallicTex_ST, 0), _Global_Sample_Bias); #else float metallic = _Metallic; #endif #if defined(_ROUGHNESS_MAP) - float roughness = _RoughnessTex.SampleBias(linear_repeat_s, UV_SCOFF(i, _RoughnessTex_ST, 0), _Global_Sample_Bias); + float roughness = _RoughnessTex.SampleBias(GET_SAMPLER_PBR, UV_SCOFF(i, _RoughnessTex_ST, 0), _Global_Sample_Bias); if (_Roughness_Invert) { roughness = 1 - roughness; } |
