summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--glitter.cginc31
1 files changed, 21 insertions, 10 deletions
diff --git a/glitter.cginc b/glitter.cginc
index 34cd17c..676b902 100644
--- a/glitter.cginc
+++ b/glitter.cginc
@@ -94,7 +94,8 @@ float2x2 inverse(float2x2 m) {
}
float normal(float2x2 cov, float2 x) {
- return exp(-.5 * dot(x, mul(inverse(cov), x))) / (sqrt(determinant(cov)) * 2.0 * PI);
+ return exp(-.5 * dot(x, mul(inverse(cov), x)))
+ / (sqrt(determinant(cov)) * 2.0 * PI);
}
uint2 shuffle(uint2 v) {
@@ -138,19 +139,25 @@ float cdf(float x, float mu, float sigma) {
return 0.5 + 0.5 * erf((x-mu)/(sigma*sqrt(2.0)));
}
-float integrate_interval(float x, float size, float mu, float stdev, float lower_limit, float upper_limit) {
- return cdf(min(x+size, upper_limit), mu, stdev) - cdf(max(x-size, lower_limit), mu, stdev);
+float integrate_interval(float x, float size, float mu, float stdev,
+ float lower_limit, float upper_limit) {
+ return cdf(min(x+size, upper_limit), mu, stdev)
+ - cdf(max(x-size, lower_limit), mu, stdev);
}
-float integrate_box(float2 x, float2 size, float2 mu, float2x2 sigma, float2 lower_limit, float2 upper_limit) {
+float integrate_box(float2 x, float2 size, float2 mu, float2x2 sigma,
+ float2 lower_limit, float2 upper_limit) {
return
- integrate_interval(x.x, size.x, mu.x, sqrt(sigma[0][0]), lower_limit.x, upper_limit.x) *
- integrate_interval(x.y, size.y, mu.y, sqrt(sigma[1][1]), lower_limit.y, upper_limit.y);
+ integrate_interval(x.x, size.x, mu.x,
+ sqrt(sigma[0][0]), lower_limit.x, upper_limit.x) *
+ integrate_interval(x.y, size.y, mu.y,
+ sqrt(sigma[1][1]), lower_limit.y, upper_limit.y);
}
float compensation(float2 x_a, float2x2 sigma_a, float res_a) {
float containing = integrate_box(0.5, 0.5, x_a, sigma_a, 0.0, 1.0);
- float explicitly_evaluated = integrate_box(round(x_a*res_a)/res_a, 1.0/res_a, x_a, sigma_a, 0, 1);
+ float explicitly_evaluated =
+ integrate_box(round(x_a*res_a)/res_a, 1.0/res_a, x_a, sigma_a, 0, 1);
return containing - explicitly_evaluated;
}
@@ -159,11 +166,13 @@ float3 disk_to_ndf_ggx(float2 v_disk, float alpha) {
float r2 = saturate(dot(p, p));
float3 hemi = float3(p * sqrt(max(1e-6f, 2.0f - r2)), 1.0f - r2);
float alpha2 = alpha * alpha;
- float denom = sqrt(max(1e-6f, alpha2 * dot(hemi.xy, hemi.xy) + hemi.z * hemi.z));
+ float denom =
+ sqrt(max(1e-6f, alpha2 * dot(hemi.xy, hemi.xy) + hemi.z * hemi.z));
return float3(alpha * hemi.xy, hemi.z) / denom;
}
-float D_Kemppinen(float3 h, float alpha, float glint_alpha, float2 uv, float2x2 uv_J, float N, float filter_size, out float3 micro_normal) {
+float D_Kemppinen(float3 h, float alpha, float glint_alpha, float2 uv,
+ float2x2 uv_J, float N, float filter_size, out float3 micro_normal) {
float res = sqrt(N);
float2 x_s = uv;
float3 x_a_and_d = ndf_to_disk_ggx(h, alpha);
@@ -205,7 +214,8 @@ float D_Kemppinen(float3 h, float alpha, float glint_alpha, float2 uv, float2x2
float r = Rand1D(i_s, i_a, l, 4u);
float roulette = smoothstep(max(.0, r-.1), min(1.0, r+.1), w_lambda);
- float w = roulette * normal(sigma_a, x_a - g_a) * normal(sigma_s, x_s - g_s) / N;
+ float w = roulette * normal(sigma_a, x_a - g_a)
+ * normal(sigma_s, x_s - g_s) / N;
D_filter += w;
if (w > best_weight) {
best_weight = w;
@@ -264,3 +274,4 @@ LightGlitter GetGlitterLighting(
#endif
#endif // __GLITTER_INC
+