summaryrefslogtreecommitdiffstats
path: root/brdf.cginc
diff options
context:
space:
mode:
Diffstat (limited to 'brdf.cginc')
-rwxr-xr-xbrdf.cginc26
1 files changed, 23 insertions, 3 deletions
diff --git a/brdf.cginc b/brdf.cginc
index 75eb295..93157e8 100755
--- a/brdf.cginc
+++ b/brdf.cginc
@@ -7,6 +7,7 @@
#include "pema99.cginc"
#include "pbr.cginc"
#include "glitter.cginc"
+#include "poi.cginc"
float pow5(float x) {
float x2 = x * x;
@@ -106,7 +107,7 @@ float G_Estevez(float roughness, float NoL, float NoV) {
return 1.0 / ((1.0 + lambda_l + lambda_v) * 4.0 * NoL * NoV);
}
-float4 brdf(v2f i, Pbr pbr, LightData data, out BrdfData bd) {
+float4 brdf(v2f i, Pbr pbr, LightData data, bool direct_only, out BrdfData bd) {
bd = (BrdfData)0;
float3 specular = 0;
float3 diffuse = 0;
@@ -234,6 +235,8 @@ float4 brdf(v2f i, Pbr pbr, LightData data, out BrdfData bd) {
// Indirect
#if !defined(FURNACE_TEST_DIRECT) && (defined(FORWARD_BASE_PASS) || defined(OUTLINES_PASS))
+ [branch]
+ if (!direct_only)
{
float3 remainder = 1.0f;
#if defined(_CLEARCOAT)
@@ -281,12 +284,25 @@ float4 brdf(v2f i, Pbr pbr, LightData data, out BrdfData bd) {
#endif
#if defined(FORWARD_BASE_PASS)
+ [branch]
+ if (!direct_only)
{
[branch]
if (_UdonLightVolumeEnabled) {
- specular += LightVolumeSpecular(pbr.albedo.xyz, pbr.smoothness,
+ float3 light_volume_specular = LightVolumeSpecular(pbr.albedo.xyz, pbr.smoothness,
pbr.metallic, pbr.normal, data.common.V, data.indirect.L00,
data.indirect.L01r, data.indirect.L01g, data.indirect.L01b);
+
+#if defined(_BRIGHTNESS_CLAMP)
+ float3 light_volume_specular_hsv = RGBtoHSV(light_volume_specular);
+ light_volume_specular_hsv[2] = clamp(light_volume_specular_hsv[2], 0, _Brightness_Clamp_Max);
+ light_volume_specular = HSVtoRGB(light_volume_specular_hsv);
+#endif
+#if defined(_BRIGHTNESS_MULTIPLIER)
+ light_volume_specular *= _Brightness_Multiplier;
+#endif
+
+ specular += light_volume_specular;
}
}
#endif
@@ -294,7 +310,7 @@ float4 brdf(v2f i, Pbr pbr, LightData data, out BrdfData bd) {
diffuse *= data.common.ao;
#if (defined(_EMISSIONS) || defined(_LETTER_GRID)) && defined(FORWARD_BASE_PASS)
- float3 emission = pbr.emission;
+ float3 emission = direct_only ? 0 : pbr.emission;
#else
float3 emission = 0;
#endif
@@ -303,4 +319,8 @@ float4 brdf(v2f i, Pbr pbr, LightData data, out BrdfData bd) {
return float4(lit.rgb * lit.a, lit.a);
}
+float4 brdf(v2f i, Pbr pbr, LightData data, out BrdfData bd) {
+ return brdf(i, pbr, data, false, bd);
+}
+
#endif // __BRDF_INC