[Bf-blender-cvs] [f510d96b0a1] cycles_path_guiding: Guiding: removed bssrdf_weight from the state
sherholz-intel
noreply at git.blender.org
Mon Sep 5 20:14:29 CEST 2022
Commit: f510d96b0a1f2247d5bb2f97f76b69c1f09805ed
Author: sherholz-intel
Date: Fri Sep 2 12:08:41 2022 +0200
Branches: cycles_path_guiding
https://developer.blender.org/rBf510d96b0a1f2247d5bb2f97f76b69c1f09805ed
Guiding: removed bssrdf_weight from the state
===================================================================
M intern/cycles/kernel/integrator/guiding.h
M intern/cycles/kernel/integrator/state_template.h
M intern/cycles/kernel/integrator/subsurface.h
M intern/cycles/kernel/integrator/subsurface_disk.h
M intern/cycles/kernel/integrator/subsurface_random_walk.h
===================================================================
diff --git a/intern/cycles/kernel/integrator/guiding.h b/intern/cycles/kernel/integrator/guiding.h
index 31e747a592a..8b83fc0754f 100644
--- a/intern/cycles/kernel/integrator/guiding.h
+++ b/intern/cycles/kernel/integrator/guiding.h
@@ -137,9 +137,29 @@ ccl_device_forceinline void guiding_record_bssrdf_segment(KernelGlobals kg,
#endif
}
+ccl_device_forceinline void guiding_record_bssrdf_weight(KernelGlobals kg,
+ IntegratorState state,
+ const Spectrum weight)
+{
+#if defined(__PATH_GUIDING__) && PATH_GUIDING_LEVEL >= 1
+ if (!kernel_data.integrator.use_guiding) {
+ return;
+ }
+
+ const float3 weight_rgb = spectrum_to_rgb(weight);
+
+ kernel_assert(state->guiding.path_segment != nullptr);
+
+ openpgl::cpp::SetTransmittanceWeight(state->guiding.path_segment, guiding_vec3f(zero_float3()));
+ openpgl::cpp::SetScatteringWeight(state->guiding.path_segment, guiding_vec3f(weight_rgb));
+ openpgl::cpp::SetIsDelta(state->guiding.path_segment, false);
+ openpgl::cpp::SetEta(state->guiding.path_segment, 1.0f);
+ openpgl::cpp::SetRoughness(state->guiding.path_segment, 1.0f);
+#endif
+}
+
ccl_device_forceinline void guiding_record_bssrdf_bounce(KernelGlobals kg,
IntegratorState state,
- const Spectrum weight,
const float pdf,
const float3 N,
const float3 omega_in)
@@ -149,20 +169,14 @@ ccl_device_forceinline void guiding_record_bssrdf_bounce(KernelGlobals kg,
return;
}
- const float3 weight_rgb = spectrum_to_rgb(weight);
const float3 normal = clamp(N, -one_float3(), one_float3());
kernel_assert(state->guiding.path_segment != nullptr);
- openpgl::cpp::SetTransmittanceWeight(state->guiding.path_segment, guiding_vec3f(one_float3()));
openpgl::cpp::SetVolumeScatter(state->guiding.path_segment, false);
openpgl::cpp::SetNormal(state->guiding.path_segment, guiding_vec3f(normal));
openpgl::cpp::SetDirectionIn(state->guiding.path_segment, guiding_vec3f(omega_in));
openpgl::cpp::SetPDFDirectionIn(state->guiding.path_segment, pdf);
- openpgl::cpp::SetScatteringWeight(state->guiding.path_segment, guiding_vec3f(weight_rgb));
- openpgl::cpp::SetIsDelta(state->guiding.path_segment, false);
- openpgl::cpp::SetEta(state->guiding.path_segment, 1.0f);
- openpgl::cpp::SetRoughness(state->guiding.path_segment, 1.0f);
#endif
}
diff --git a/intern/cycles/kernel/integrator/state_template.h b/intern/cycles/kernel/integrator/state_template.h
index 4cf5f4a1e8f..20a262d493a 100644
--- a/intern/cycles/kernel/integrator/state_template.h
+++ b/intern/cycles/kernel/integrator/state_template.h
@@ -91,7 +91,6 @@ KERNEL_STRUCT_MEMBER(subsurface, PackedSpectrum, albedo, KERNEL_FEATURE_SUBSURFA
KERNEL_STRUCT_MEMBER(subsurface, PackedSpectrum, radius, KERNEL_FEATURE_SUBSURFACE)
KERNEL_STRUCT_MEMBER(subsurface, float, anisotropy, KERNEL_FEATURE_SUBSURFACE)
KERNEL_STRUCT_MEMBER(subsurface, packed_float3, Ng, KERNEL_FEATURE_SUBSURFACE)
-KERNEL_STRUCT_MEMBER(subsurface, PackedSpectrum, bssrdf_weight, KERNEL_FEATURE_SUBSURFACE)
KERNEL_STRUCT_END(subsurface)
/********************************** Volume Stack ******************************/
diff --git a/intern/cycles/kernel/integrator/subsurface.h b/intern/cycles/kernel/integrator/subsurface.h
index 4b126007060..979c298e0a9 100644
--- a/intern/cycles/kernel/integrator/subsurface.h
+++ b/intern/cycles/kernel/integrator/subsurface.h
@@ -77,7 +77,10 @@ ccl_device int subsurface_bounce(KernelGlobals kg,
INTEGRATOR_STATE_WRITE(state, subsurface, albedo) = bssrdf->albedo;
INTEGRATOR_STATE_WRITE(state, subsurface, radius) = bssrdf->radius;
INTEGRATOR_STATE_WRITE(state, subsurface, anisotropy) = bssrdf->anisotropy;
- INTEGRATOR_STATE_WRITE(state, subsurface, bssrdf_weight) = weight;
+
+ if (kernel_data.integrator.use_guiding) {
+ guiding_record_bssrdf_weight(kg, state, safe_divide_color(weight, bssrdf->albedo));
+ }
return LABEL_SUBSURFACE_SCATTER;
}
diff --git a/intern/cycles/kernel/integrator/subsurface_disk.h b/intern/cycles/kernel/integrator/subsurface_disk.h
index 85ee0ec0585..e623e448b9b 100644
--- a/intern/cycles/kernel/integrator/subsurface_disk.h
+++ b/intern/cycles/kernel/integrator/subsurface_disk.h
@@ -49,14 +49,11 @@ ccl_device_inline bool subsurface_disk(KernelGlobals kg,
Spectrum throughput = INTEGRATOR_STATE(state, path, throughput);
throughput = safe_divide_color(throughput, albedo);
const bool use_guiding = kernel_data.integrator.use_guiding;
- Spectrum bssrdf_weight = INTEGRATOR_STATE(state, subsurface, bssrdf_weight);
- // const Spectrum albedo = INTEGRATOR_STATE(state, subsurface, albedo);
// we need to add a new segment or add the direction
// or at lease the sampling direction to the new path segment
- bssrdf_weight = safe_divide_color(bssrdf_weight, albedo);
Spectrum initial_throughput = throughput;
if (use_guiding) {
- guiding_record_bssrdf_bounce(kg, state, bssrdf_weight, 1.f, Ng, -Ng);
+ guiding_record_bssrdf_bounce(kg, state, 1.f, Ng, -Ng);
}
#endif
diff --git a/intern/cycles/kernel/integrator/subsurface_random_walk.h b/intern/cycles/kernel/integrator/subsurface_random_walk.h
index 4375c69446e..33fea84edda 100644
--- a/intern/cycles/kernel/integrator/subsurface_random_walk.h
+++ b/intern/cycles/kernel/integrator/subsurface_random_walk.h
@@ -177,10 +177,6 @@ ccl_device_inline bool subsurface_random_walk(KernelGlobals kg,
const int object = INTEGRATOR_STATE(state, isect, object);
const int prim = INTEGRATOR_STATE(state, isect, prim);
-#if defined(__PATH_GUIDING__) && PATH_GUIDING_LEVEL >= 1
- Spectrum bssrdf_weight = INTEGRATOR_STATE(state, subsurface, bssrdf_weight);
-#endif
-
/* Sample diffuse surface scatter into the object. */
float3 D;
float pdf;
@@ -217,10 +213,9 @@ ccl_device_inline bool subsurface_random_walk(KernelGlobals kg,
// we need to add a new segment or add the direction
// or at lease the sampling direction to the new path segment
const bool use_guiding = kernel_data.integrator.use_guiding;
- bssrdf_weight = safe_divide_color(bssrdf_weight, albedo);
Spectrum initial_throughput = throughput;
if (use_guiding) {
- guiding_record_bssrdf_bounce(kg, state, bssrdf_weight, pdf, N, D);
+ guiding_record_bssrdf_bounce(kg, state, pdf, N, D);
}
#endif
More information about the Bf-blender-cvs
mailing list