diff options
| author | yum <yum.food.vr@gmail.com> | 2024-05-11 14:35:59 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2024-05-11 14:35:59 -0700 |
| commit | 47d32c9b5a4c809b10b3c198089cd4992281fa36 (patch) | |
| tree | 45dffa4353c2ac95f654b4d325c84f28cc6aa1bf | |
| parent | 6eed98ff4e57326ebf7a41f0c180635a7bcac626 (diff) | |
Make flat normals adjustable
| -rw-r--r-- | Editor/tooner.cs | 7 | ||||
| -rw-r--r-- | Third_Party/at.pimaker.ltcgi/Shaders/.LTCGI.cginc.swp | bin | 16384 -> 0 bytes | |||
| -rw-r--r-- | Third_Party/at.pimaker.ltcgi/Shaders/LTCGI.cginc | 2 | ||||
| -rw-r--r-- | Third_Party/at.pimaker.ltcgi/Shaders/LTCGI_config.cginc | 2 | ||||
| -rw-r--r-- | globals.cginc | 1 | ||||
| -rw-r--r-- | pbr.cginc | 10 | ||||
| -rw-r--r-- | tooner.shader | 1 | ||||
| -rw-r--r-- | tooner_lighting.cginc | 159 |
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 Binary files differdeleted file mode 100644 index d7a8805..0000000 --- a/Third_Party/at.pimaker.ltcgi/Shaders/.LTCGI.cginc.swp +++ /dev/null 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; @@ -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 |
