summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-09-02 13:04:16 -0700
committeryum <yum.food.vr@gmail.com>2024-09-02 13:04:16 -0700
commite757ffcf2362fafaf040b8f15827c6acd0d85ab0 (patch)
tree589e32d5645731f7e5591f49eeebabe0ac4be9bd
parent2ea62b8fc899cab47e6e23da9168a42ecd6ddf45 (diff)
Add sampler mode to PBR section
Also remove normal scaling weirdness.
-rw-r--r--Editor/tooner.cs39
-rw-r--r--feature_macros.cginc2
-rw-r--r--tooner.shader17
-rw-r--r--tooner_lighting.cginc18
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;
}