diff options
Diffstat (limited to 'brdf.cginc')
| -rwxr-xr-x | brdf.cginc | 26 |
1 files changed, 23 insertions, 3 deletions
@@ -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 |
