summaryrefslogtreecommitdiffstats
path: root/poi.cginc
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-07-20 13:19:53 -0700
committeryum <yum.food.vr@gmail.com>2024-07-20 13:19:53 -0700
commit50699410bf33f143531eae080e1e0e068da504cd (patch)
tree4bbaa5aad8258881171188595e545932a903ff3d /poi.cginc
parent68ca46b15f6a7185a03060070d24b350102fafe6 (diff)
Switch to poi-style direct lighting
Diffstat (limited to 'poi.cginc')
-rw-r--r--poi.cginc28
1 files changed, 27 insertions, 1 deletions
diff --git a/poi.cginc b/poi.cginc
index 1d2b846..f5019d7 100644
--- a/poi.cginc
+++ b/poi.cginc
@@ -4,7 +4,7 @@
/*
MIT License
-Copyright (c) 2018 King Arthur
+Copyright (c) 2023 Poiyomi Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -97,4 +97,30 @@ half3 BetterSH9(half4 normal)
return indirect;
}
+float calculateluminance(float3 color)
+{
+ return color.r * 0.299 + color.g * 0.587 + color.b * 0.114;
+}
+
+float3 getPoiLightingDirect(float3 normal) {
+ float3 magic = max(BetterSH9(normalize(unity_SHAr + unity_SHAg + unity_SHAb)), 0);
+ float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1));
+
+ float magiLumi = calculateluminance(magic);
+ float normaLumi = calculateluminance(normalLight);
+ float maginormalumi = magiLumi + normaLumi;
+
+ float magiratio = magiLumi / maginormalumi;
+ float normaRatio = normaLumi / maginormalumi;
+
+ float target = calculateluminance(magic * magiratio + normalLight * normaRatio);
+ float3 properLightColor = magic + normalLight;
+ float properLuminance = calculateluminance(magic + normalLight);
+ return properLightColor * max(0.0001, (target / properLuminance));
+}
+
+float3 getPoiLightingIndirect() {
+ return BetterSH9(float4(0, 0, 0, 1));
+}
+
#endif // __POI_INC