summaryrefslogtreecommitdiffstats
path: root/pbr.cginc
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 /pbr.cginc
parent60c2fda0593bdd5d9a914b14ff992585d7b1d497 (diff)
Overhaul LTCGI again
Instead of compositing directly on top of the basecolor (???), composite on top of the lighting data.
Diffstat (limited to 'pbr.cginc')
-rw-r--r--pbr.cginc39
1 files changed, 39 insertions, 0 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);