diff options
| author | yum <yum.food.vr@gmail.com> | 2024-06-14 17:15:42 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2024-06-14 17:15:42 -0700 |
| commit | 1b3623383d246be29ae9bbb7db904290f02f284a (patch) | |
| tree | b5c2832ca622fba3604a988a3c149efd013cc8a2 /pbr.cginc | |
| parent | 60c2fda0593bdd5d9a914b14ff992585d7b1d497 (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.cginc | 39 |
1 files changed, 39 insertions, 0 deletions
@@ -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); |
