summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-06-14 17:15:42 -0700
committeryum <yum.food.vr@gmail.com>2024-06-14 17:15:42 -0700
commit1b3623383d246be29ae9bbb7db904290f02f284a (patch)
treeb5c2832ca622fba3604a988a3c149efd013cc8a2
parent60c2fda0593bdd5d9a914b14ff992585d7b1d497 (diff)
Overhaul LTCGI again
Instead of compositing directly on top of the basecolor (???), composite on top of the lighting data.
-rw-r--r--pbr.cginc39
-rw-r--r--tooner_lighting.cginc40
2 files changed, 39 insertions, 40 deletions
diff --git a/pbr.cginc b/pbr.cginc
index 801f87a..cf1706d 100644
--- a/pbr.cginc
+++ b/pbr.cginc
@@ -8,6 +8,30 @@
#include "interpolators.cginc"
#include "poi.cginc"
+#if defined(_LTCGI)
+#include "Third_Party/at.pimaker.ltcgi/Shaders/LTCGI_structs.cginc"
+
+struct ltcgi_acc {
+ float3 diffuse;
+ float3 specular;
+};
+
+void ltcgi_cb_diffuse(inout ltcgi_acc acc, in ltcgi_output output);
+void ltcgi_cb_specular(inout ltcgi_acc acc, in ltcgi_output output);
+
+#define LTCGI_V2_CUSTOM_INPUT ltcgi_acc
+#define LTCGI_V2_DIFFUSE_CALLBACK ltcgi_cb_diffuse
+#define LTCGI_V2_SPECULAR_CALLBACK ltcgi_cb_specular
+
+#include "Third_Party/at.pimaker.ltcgi/Shaders/LTCGI.cginc"
+void ltcgi_cb_diffuse(inout ltcgi_acc acc, in ltcgi_output output) {
+ acc.diffuse += output.intensity * output.color * _LTCGI_DiffuseColor;
+}
+void ltcgi_cb_specular(inout ltcgi_acc acc, in ltcgi_output output) {
+ acc.specular += output.intensity * output.color * _LTCGI_SpecularColor;
+}
+#endif // __LTCGI
+
UNITY_DECLARE_TEXCUBE(_Cubemap);
UnityLight CreateDirectLight(float3 normal, float ao, v2f i)
@@ -179,6 +203,21 @@ float4 getLitColor(
direct_light.color *= (1 - e);
}
+#if defined(_LTCGI)
+ if ((bool) round(_LTCGI_Enabled)) {
+ ltcgi_acc acc = (ltcgi_acc) 0;
+ LTCGI_Contribution(
+ acc,
+ i.worldPos,
+ normal,
+ view_dir,
+ 1.0 - smoothness,
+ 0);
+ indirect_light.diffuse += acc.diffuse;
+ indirect_light.specular += acc.specular;
+ }
+#endif
+
direct_light.color = clamp(direct_light.color, _Min_Brightness, _Max_Brightness*.5);
indirect_light.diffuse = clamp(indirect_light.diffuse, _Min_Brightness, _Max_Brightness);
indirect_light.specular = clamp(indirect_light.specular, _Min_Brightness, _Max_Brightness);
diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc
index 5a0e087..2a8a75d 100644
--- a/tooner_lighting.cginc
+++ b/tooner_lighting.cginc
@@ -15,30 +15,6 @@
#include "tooner_scroll.cginc"
#include "oklab.cginc"
-#if defined(_LTCGI)
-#include "Third_Party/at.pimaker.ltcgi/Shaders/LTCGI_structs.cginc"
-
-struct ltcgi_acc {
- float3 diffuse;
- float3 specular;
-};
-
-void ltcgi_cb_diffuse(inout ltcgi_acc acc, in ltcgi_output output);
-void ltcgi_cb_specular(inout ltcgi_acc acc, in ltcgi_output output);
-
-#define LTCGI_V2_CUSTOM_INPUT ltcgi_acc
-#define LTCGI_V2_DIFFUSE_CALLBACK ltcgi_cb_diffuse
-#define LTCGI_V2_SPECULAR_CALLBACK ltcgi_cb_specular
-
-#include "Third_Party/at.pimaker.ltcgi/Shaders/LTCGI.cginc"
-void ltcgi_cb_diffuse(inout ltcgi_acc acc, in ltcgi_output output) {
- acc.diffuse += output.intensity * output.color * _LTCGI_DiffuseColor;
-}
-void ltcgi_cb_specular(inout ltcgi_acc acc, in ltcgi_output output) {
- acc.specular += output.intensity * output.color * _LTCGI_SpecularColor;
-}
-#endif
-
struct tess_data
{
float4 position : INTERNALTESSPOS;
@@ -916,22 +892,6 @@ float4 effect(inout v2f i)
#if defined(_MATCAP0) || defined(_MATCAP1) || defined(_RIM_LIGHTING0) || defined(_RIM_LIGHTING1)
result.rgb += matcap_emission;
#endif
-#if defined(_LTCGI)
- if ((bool) round(_LTCGI_Enabled)) {
- ltcgi_acc acc = (ltcgi_acc) 0;
- LTCGI_Contribution(
- acc,
- i.worldPos,
- normal,
- view_dir,
- roughness,
- 0);
- float3 ltcgi_emission = 0;
- ltcgi_emission += acc.diffuse * albedo.a;
- ltcgi_emission += acc.specular * albedo.a;
- result.rgb += ltcgi_emission;
- }
-#endif
#if defined(_GLITTER)
float glitter = get_glitter(i.uv, iddx, iddy, i.worldPos, normal);
result.rgb += glitter;