summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-05-11 14:35:59 -0700
committeryum <yum.food.vr@gmail.com>2024-05-11 14:35:59 -0700
commit47d32c9b5a4c809b10b3c198089cd4992281fa36 (patch)
tree45dffa4353c2ac95f654b4d325c84f28cc6aa1bf
parent6eed98ff4e57326ebf7a41f0c180635a7bcac626 (diff)
Make flat normals adjustable
-rw-r--r--Editor/tooner.cs7
-rw-r--r--Third_Party/at.pimaker.ltcgi/Shaders/.LTCGI.cginc.swpbin16384 -> 0 bytes
-rw-r--r--Third_Party/at.pimaker.ltcgi/Shaders/LTCGI.cginc2
-rw-r--r--Third_Party/at.pimaker.ltcgi/Shaders/LTCGI_config.cginc2
-rw-r--r--globals.cginc1
-rw-r--r--pbr.cginc10
-rw-r--r--tooner.shader1
-rw-r--r--tooner_lighting.cginc159
8 files changed, 91 insertions, 91 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs
index 0d4fcb6..414c1b2 100644
--- a/Editor/tooner.cs
+++ b/Editor/tooner.cs
@@ -307,6 +307,13 @@ public class ToonerGUI : ShaderGUI {
EditorGUI.EndChangeCheck();
bc.floatValue = enabled ? 1.0f : 0.0f;
+ if (enabled) {
+ bc = FindProperty("_Flatten_Mesh_Normals_Str");
+ editor.FloatProperty(
+ bc,
+ "Flattening strength");
+ }
+
bc = FindProperty("_Confabulate_Normals");
enabled = bc.floatValue > 1E-6;
EditorGUI.BeginChangeCheck();
diff --git a/Third_Party/at.pimaker.ltcgi/Shaders/.LTCGI.cginc.swp b/Third_Party/at.pimaker.ltcgi/Shaders/.LTCGI.cginc.swp
deleted file mode 100644
index d7a8805..0000000
--- a/Third_Party/at.pimaker.ltcgi/Shaders/.LTCGI.cginc.swp
+++ /dev/null
Binary files differ
diff --git a/Third_Party/at.pimaker.ltcgi/Shaders/LTCGI.cginc b/Third_Party/at.pimaker.ltcgi/Shaders/LTCGI.cginc
index ca4cd24..c6ad0b7 100644
--- a/Third_Party/at.pimaker.ltcgi/Shaders/LTCGI.cginc
+++ b/Third_Party/at.pimaker.ltcgi/Shaders/LTCGI.cginc
@@ -405,4 +405,4 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#endif \ No newline at end of file
+#endif
diff --git a/Third_Party/at.pimaker.ltcgi/Shaders/LTCGI_config.cginc b/Third_Party/at.pimaker.ltcgi/Shaders/LTCGI_config.cginc
index 561fe93..6b2c99a 100644
--- a/Third_Party/at.pimaker.ltcgi/Shaders/LTCGI_config.cginc
+++ b/Third_Party/at.pimaker.ltcgi/Shaders/LTCGI_config.cginc
@@ -82,6 +82,6 @@ const float LUT_BIAS = 0.5/LUT_SIZE;
#define LTCGI_CYLINDER
// Activate avatar mode, which overrides certain configs from above.
-//#define LTCGI_AVATAR_MODE
+#define LTCGI_AVATAR_MODE
#endif
diff --git a/globals.cginc b/globals.cginc
index a66f639..aa23216 100644
--- a/globals.cginc
+++ b/globals.cginc
@@ -35,6 +35,7 @@ float _Max_Brightness;
float _Alpha_Cutoff;
float _Flatten_Mesh_Normals;
+float _Flatten_Mesh_Normals_Str;
float _Confabulate_Normals;
float _Outline_Width;
diff --git a/pbr.cginc b/pbr.cginc
index a699a53..1ceef09 100644
--- a/pbr.cginc
+++ b/pbr.cginc
@@ -127,8 +127,12 @@ float4 getLitColor(
float3 view_dir = normalize(_WorldSpaceCameraPos - worldPos);
bool flat = round(_Flatten_Mesh_Normals) == 1.0;
+ float3 flat_normal = normalize(
+ (1.0 / _Flatten_Mesh_Normals_Str) * normal +
+ _Flatten_Mesh_Normals_Str * view_dir);
+
UnityIndirect indirect_light = CreateIndirectLight(vertexLightColor,
- view_dir, flat ? view_dir : normal, smoothness, worldPos, uv);
+ view_dir, flat ? flat_normal : normal, smoothness, worldPos, uv);
UnityLight direct_light = CreateDirectLight(normal, i);
if (flat) {
@@ -148,7 +152,7 @@ float4 getLitColor(
one_minus_reflectivity,
smoothness,
view_dir,
- flat ? view_dir : normal,
+ flat ? flat_normal : normal,
direct_light,
indirect_light).xyz;
} else {
@@ -157,7 +161,7 @@ float4 getLitColor(
specular_tint,
one_minus_reflectivity,
smoothness,
- flat ? view_dir : normal,
+ flat ? flat_normal : normal,
view_dir,
direct_light,
indirect_light).xyz;
diff --git a/tooner.shader b/tooner.shader
index c72b412..d04a45b 100644
--- a/tooner.shader
+++ b/tooner.shader
@@ -34,6 +34,7 @@ Shader "yum_food/tooner"
_Shading_Mode("Shading mode", Range(0, 1)) = 0
[MaterialToggle] _Flatten_Mesh_Normals("Flatten mesh normals", Float) = 0.0
+ _Flatten_Mesh_Normals_Str("Flatten mesh normals strength", Float) = 100.0
[MaterialToggle] _Confabulate_Normals("Confabulate mesh normals", Float) = 0.0
_Alpha_Cutoff("Alpha cutoff", Range(0, 1)) = 0.5
diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc
index db496a8..cdc10b0 100644
--- a/tooner_lighting.cginc
+++ b/tooner_lighting.cginc
@@ -31,14 +31,9 @@ void ltcgi_cb_specular(inout ltcgi_acc acc, in ltcgi_output output);
#include "Third_Party/at.pimaker.ltcgi/Shaders/LTCGI.cginc"
void ltcgi_cb_diffuse(inout ltcgi_acc acc, in ltcgi_output output) {
- // you can do whatever here! check out the ltcgi_output struct in
- // "LTCGI_structs.cginc" to see what data you have available
acc.diffuse += output.intensity * output.color * _LTCGI_DiffuseColor;
}
void ltcgi_cb_specular(inout ltcgi_acc acc, in ltcgi_output output) {
- // same here, this example one is pretty boring though.
- // you could accumulate intensity separately for example,
- // to emulate total{Specular,Diffuse}Intensity from APIv1
acc.specular += output.intensity * output.color * _LTCGI_SpecularColor;
}
#endif
@@ -66,13 +61,16 @@ void getVertexLightColor(inout v2f i)
#if defined(VERTEXLIGHT_ON)
float3 view_dir = normalize(_WorldSpaceCameraPos - i.worldPos);
bool flat = round(_Flatten_Mesh_Normals) == 1.0;
+ float3 flat_normal = normalize(
+ (1.0 / _Flatten_Mesh_Normals_Str) * i.normal +
+ _Flatten_Mesh_Normals_Str * view_dir);
i.vertexLightColor = Shade4PointLights(
unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0,
unity_LightColor[0].rgb,
unity_LightColor[1].rgb,
unity_LightColor[2].rgb,
unity_LightColor[3].rgb,
- unity_4LightAtten0, i.worldPos, flat ? view_dir : i.normal
+ unity_4LightAtten0, i.worldPos, flat ? flat_normal : i.normal
);
#endif
}
@@ -439,104 +437,94 @@ float4 effect(inout v2f i)
#endif // _PBR_OVERLAY
+#if defined(_MATCAP0) || defined(_MATCAP1)
{
-#if defined(_MATCAP0)
- float3 cam_normal = normalize(mul(UNITY_MATRIX_V, float4(normal, 0)));
- float3 cam_view_dir = normalize(mul(UNITY_MATRIX_V, float4(view_dir, 0)));
- float3 refl = -reflect(cam_view_dir, cam_normal);
-
+ const float3 cam_normal = normalize(mul(UNITY_MATRIX_V, float4(normal, 0)));
+ const float3 cam_view_dir = normalize(mul(UNITY_MATRIX_V, float4(view_dir, 0)));
+ const float3 refl = -reflect(cam_view_dir, cam_normal);
float m = 2.0 * sqrt(
refl.x * refl.x +
refl.y * refl.y +
(refl.z + 1) * (refl.z + 1));
float2 matcap_uv = refl.xy / m + 0.5;
-
float iddx = ddx(i.uv.x);
float iddy = ddy(i.uv.y);
- float3 matcap = _Matcap0.SampleGrad(linear_repeat_s, matcap_uv, iddx, iddy) * _Matcap0Str;
+ {
+#if defined(_MATCAP0)
+ float3 matcap = _Matcap0.SampleGrad(linear_repeat_s, matcap_uv, iddx, iddy) * _Matcap0Str;
#if defined(_MATCAP0_MASK)
- float4 matcap_mask_raw = _Matcap0_Mask.SampleGrad(linear_repeat_s, i.uv.xy, iddx, iddy);
- matcap_mask_raw.rgb = (bool) round(_Matcap0_Mask_Invert) ? 1 - matcap_mask_raw.rgb : matcap_mask_raw.rgb;
- float matcap_mask = matcap_mask_raw.r * matcap_mask_raw.a;
+ float4 matcap_mask_raw = _Matcap0_Mask.SampleGrad(linear_repeat_s, i.uv.xy, iddx, iddy);
+ matcap_mask_raw.rgb = (bool) round(_Matcap0_Mask_Invert) ? 1 - matcap_mask_raw.rgb : matcap_mask_raw.rgb;
+ float matcap_mask = matcap_mask_raw.r * matcap_mask_raw.a;
#else
- float matcap_mask = 1;
+ float matcap_mask = 1;
#endif
- int mode = round(_Matcap0Mode);
- switch (mode) {
- case 0:
- albedo.rgb += lerp(0, matcap, matcap_mask);
- break;
- case 1:
- albedo.rgb *= lerp(1, matcap, matcap_mask);
- break;
- case 2:
- albedo.rgb = lerp(albedo.rgb, matcap, matcap_mask);;
- break;
- case 3:
- albedo.rgb -= lerp(0, matcap, matcap_mask);
- break;
- case 4:
- albedo.rgb = lerp(albedo.rgb, min(albedo.rgb, matcap), matcap_mask);
- break;
- case 5:
- albedo.rgb = lerp(albedo.rgb, max(albedo.rgb, matcap), matcap_mask);
- break;
- default:
- break;
- }
+ int mode = round(_Matcap0Mode);
+ switch (mode) {
+ case 0:
+ albedo.rgb += lerp(0, matcap, matcap_mask);
+ break;
+ case 1:
+ albedo.rgb *= lerp(1, matcap, matcap_mask);
+ break;
+ case 2:
+ albedo.rgb = lerp(albedo.rgb, matcap, matcap_mask);;
+ break;
+ case 3:
+ albedo.rgb -= lerp(0, matcap, matcap_mask);
+ break;
+ case 4:
+ albedo.rgb = lerp(albedo.rgb, min(albedo.rgb, matcap), matcap_mask);
+ break;
+ case 5:
+ albedo.rgb = lerp(albedo.rgb, max(albedo.rgb, matcap), matcap_mask);
+ break;
+ default:
+ break;
+ }
#endif
- }
- {
+ }
+ {
#if defined(_MATCAP1)
- float3 cam_normal = normalize(mul(UNITY_MATRIX_V, float4(normal, 0)));
- float3 cam_view_dir = normalize(mul(UNITY_MATRIX_V, float4(view_dir, 0)));
- float3 refl = -reflect(cam_view_dir, cam_normal);
-
- float m = 2.0 * sqrt(
- refl.x * refl.x +
- refl.y * refl.y +
- (refl.z + 1) * (refl.z + 1));
- float2 matcap_uv = refl.xy / m + 0.5;
-
- float iddx = ddx(i.uv.x);
- float iddy = ddy(i.uv.y);
- float3 matcap = _Matcap1.SampleGrad(linear_repeat_s, matcap_uv, iddx, iddy) * _Matcap1Str;
+ float3 matcap = _Matcap1.SampleGrad(linear_repeat_s, matcap_uv, iddx, iddy) * _Matcap1Str;
#if defined(_MATCAP1_MASK)
- float4 matcap_mask_raw = _Matcap1_Mask.SampleGrad(linear_repeat_s, i.uv.xy, iddx, iddy);
- matcap_mask_raw.rgb = (bool) round(_Matcap1_Mask_Invert) ? 1 - matcap_mask_raw.rgb : matcap_mask_raw.rgb;
- float matcap_mask = matcap_mask_raw.r * matcap_mask_raw.a;
+ float4 matcap_mask_raw = _Matcap1_Mask.SampleGrad(linear_repeat_s, i.uv.xy, iddx, iddy);
+ matcap_mask_raw.rgb = (bool) round(_Matcap1_Mask_Invert) ? 1 - matcap_mask_raw.rgb : matcap_mask_raw.rgb;
+ float matcap_mask = matcap_mask_raw.r * matcap_mask_raw.a;
#else
- float matcap_mask = 1;
+ float matcap_mask = 1;
#endif
- int mode = round(_Matcap1Mode);
- switch (mode) {
- case 0:
- albedo.rgb += lerp(0, matcap, matcap_mask);
- break;
- case 1:
- albedo.rgb *= lerp(1, matcap, matcap_mask);
- break;
- case 2:
- albedo.rgb = lerp(albedo.rgb, matcap, matcap_mask);;
- break;
- case 3:
- albedo.rgb -= lerp(0, matcap, matcap_mask);
- break;
- case 4:
- albedo.rgb = lerp(albedo.rgb, min(albedo.rgb, matcap), matcap_mask);
- break;
- case 5:
- albedo.rgb = lerp(albedo.rgb, max(albedo.rgb, matcap), matcap_mask);
- break;
- default:
- break;
+ int mode = round(_Matcap1Mode);
+ switch (mode) {
+ case 0:
+ albedo.rgb += lerp(0, matcap, matcap_mask);
+ break;
+ case 1:
+ albedo.rgb *= lerp(1, matcap, matcap_mask);
+ break;
+ case 2:
+ albedo.rgb = lerp(albedo.rgb, matcap, matcap_mask);;
+ break;
+ case 3:
+ albedo.rgb -= lerp(0, matcap, matcap_mask);
+ break;
+ case 4:
+ albedo.rgb = lerp(albedo.rgb, min(albedo.rgb, matcap), matcap_mask);
+ break;
+ case 5:
+ albedo.rgb = lerp(albedo.rgb, max(albedo.rgb, matcap), matcap_mask);
+ break;
+ default:
+ break;
+ }
+#endif // _MATCAP1
}
-#endif
}
+#endif // _MATCAP0 || _MATCAP1
{
#if defined(_RIM_LIGHTING)
// identity: (a, b, c) and (c, c, -(a +b)) are perpendicular to each other
@@ -604,7 +592,6 @@ float4 effect(inout v2f i)
float4 result = lit;
#if defined(_LTCGI)
- float3 ltcgi_emission = 0;
if ((bool) round(_LTCGI_Enabled)) {
ltcgi_acc acc = (ltcgi_acc) 0;
LTCGI_Contribution(
@@ -613,9 +600,9 @@ float4 effect(inout v2f i)
normal,
view_dir,
roughness,
- i.lmuv);
- ltcgi_emission += acc.specular;
- ltcgi_emission += acc.diffuse * albedo.rgb;
+ 0);
+ float3 ltcgi_emission = 0;
+ ltcgi_emission += clamp(acc.diffuse * albedo.rgb, 0, 2);
result.rgb += ltcgi_emission;
}
#endif