34 if ((ls->prim !=
PRIM_NONE) &&
dot(ls->Ng, ls->D) > 0.0f) {
61 ls->Ng = emission_sd->Ng;
86 make_float3(klight->strength[0], klight->strength[1], klight->strength[2]));
95 const float rand_terminate)
101 if (
kernel_data.integrator.light_inv_rr_threshold > 0.0f) {
104 if (probability < 1.0f) {
105 if (rand_terminate >= probability) {
133 const float u = 1.0f - sd->u - sd->v;
134 const float v = sd->u;
135 const float w = sd->v;
144 float a =
dot(
N[2] -
N[0],
V[0] -
V[2]);
145 float b =
dot(
N[2] -
N[1],
V[1] -
V[2]);
146 float c =
dot(
N[1] -
N[0],
V[1] -
V[0]);
147 float h = a * u * (u - 1) + (a +
b + c) * u *
v +
b *
v * (
v - 1);
150 if (
dot(n, Ng) > 0) {
155 h0 =
max(
dot(
V[0] -
P,
N[0]) + h0, 0.0f);
156 h1 =
max(
dot(
V[1] -
P,
N[1]) + h1, 0.0f);
157 h2 =
max(
dot(
V[2] -
P,
N[2]) + h2, 0.0f);
164 h0 =
max(
dot(
P -
V[0],
N[0]) + h0, 0.0f);
165 h1 =
max(
dot(
P -
V[1],
N[1]) + h1, 0.0f);
166 h2 =
max(
dot(
P -
V[2],
N[2]) + h2, 0.0f);
167 h =
min(-
min(
min(h0, h1), h2), h * 0.5f);
183 const float offset_cutoff =
188 if (offset_cutoff > 0.0f) {
190 const bool transmit = (
NL < 0.0f);
195 const float3 Ng = (transmit ? -sd->Ng : sd->Ng);
196 const float NgL =
dot(Ng,
L);
198 const float offset_amount = (
NL < offset_cutoff) ?
199 clamp(2.0f - (NgL +
NL) / offset_cutoff, 0.0f, 1.0f) :
200 clamp(1.0f - NgL / offset_cutoff, 0.0f, 1.0f);
202 if (offset_amount > 0.0f) {
207 *r_skip_self = (NgL > 0.0f);
219 const bool skip_self)
246 ray->time = sd->time;
249 ray->self.object = (skip_self) ? sd->object :
OBJECT_NONE;
250 ray->self.prim = (skip_self) ? sd->prim :
PRIM_NONE;
251 ray->self.light_object = ls->object;
252 ray->self.light_prim = ls->prim;
253 ray->self.light = ls->lamp;
263 bool skip_self =
true;
282 const float forward_pdf,
285#ifdef WITH_CYCLES_DEBUG
299 const float forward_pdf)
301#ifdef WITH_CYCLES_DEBUG
306 return (forward_pdf == 0.0f);
329 const int object_receiver,
352 kg, rand, time,
P, D, object_receiver, shader_flags, bounce, path_flag, ls);
360 const int object_receiver,
361 const int shader_flags,
383 kg, rand, time,
P,
N, object_receiver, shader_flags, bounce, path_flag, ls);
410 ls->pdf *= ls->pdf_selection;
438 const float t = sd->ray_length;
ccl_device_forceinline void area_light_mnee_sample_update(const ccl_global KernelLight *klight, ccl_private LightSample *ls, const float3 P)
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
local_group_size(16, 16) .push_constant(Type b
additional_info("compositor_sum_squared_difference_float_shared") .push_constant(Type output_img float dot(value.rgb, luminance_coefficients)") .define("LOAD(value)"
ccl_device_inline bool light_sample_terminate(KernelGlobals kg, ccl_private BsdfEval *ccl_restrict eval, const float rand_terminate)
ccl_device_forceinline void light_sample_update(KernelGlobals kg, ccl_private LightSample *ls, const float3 P, const float3 N, const uint32_t path_flag)
CCL_NAMESPACE_BEGIN ccl_device_noinline_cpu Spectrum light_sample_shader_eval(KernelGlobals kg, IntegratorState state, ccl_private ShaderData *ccl_restrict emission_sd, ccl_private LightSample *ccl_restrict ls, float time)
ccl_device_inline float light_sample_mis_weight_forward(KernelGlobals kg, const float forward_pdf, const float nee_pdf)
ccl_device_inline float light_sample_mis_weight_forward_background(KernelGlobals kg, IntegratorState state, const uint32_t path_flag)
ccl_device bool light_sample_from_position(KernelGlobals kg, const float3 rand, const float time, const float3 P, const float3 N, const int object_receiver, const int shader_flags, const int bounce, const uint32_t path_flag, ccl_private LightSample *ls)
ccl_device_inline float light_sample_mis_weight_nee(KernelGlobals kg, const float nee_pdf, const float forward_pdf)
ccl_device_inline float3 shadow_ray_offset(KernelGlobals kg, ccl_private const ShaderData *ccl_restrict sd, float3 L, ccl_private bool *r_skip_self)
ccl_device_inline float light_sample_mis_weight_forward_distant(KernelGlobals kg, IntegratorState state, const uint32_t path_flag, const ccl_private LightSample *ls)
ccl_device_inline void light_sample_to_volume_shadow_ray(KernelGlobals kg, ccl_private const ShaderData *ccl_restrict sd, ccl_private const LightSample *ccl_restrict ls, const float3 P, ccl_private Ray *ray)
ccl_device_inline float light_sample_mis_weight_forward_lamp(KernelGlobals kg, IntegratorState state, const uint32_t path_flag, const ccl_private LightSample *ls, const float3 P)
ccl_device_inline float3 shadow_ray_smooth_surface_offset(KernelGlobals kg, ccl_private const ShaderData *ccl_restrict sd, float3 Ng)
ccl_device_inline void shadow_ray_setup(ccl_private const ShaderData *ccl_restrict sd, ccl_private const LightSample *ccl_restrict ls, const float3 P, ccl_private Ray *ray, const bool skip_self)
ccl_device_inline void light_sample_to_surface_shadow_ray(KernelGlobals kg, ccl_private const ShaderData *ccl_restrict sd, ccl_private const LightSample *ccl_restrict ls, ccl_private Ray *ray)
ccl_device_inline float light_sample_mis_weight_forward_surface(KernelGlobals kg, IntegratorState state, const uint32_t path_flag, const ccl_private ShaderData *sd)
ccl_device_inline bool light_sample_from_volume_segment(KernelGlobals kg, const float3 rand, const float time, const float3 P, const float3 D, const float t, const int object_receiver, const int bounce, const uint32_t path_flag, ccl_private LightSample *ls)
#define kernel_assert(cond)
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define kernel_data_fetch(name, index)
#define ccl_device_forceinline
#define ccl_device_noinline_cpu
#define ccl_device_inline
#define CCL_NAMESPACE_END
ccl_device_forceinline float differential_make_compact(const float dD)
ccl_device_forceinline float differential_zero_compact()
ccl_device_inline float light_distribution_pdf_lamp(KernelGlobals kg)
CCL_NAMESPACE_BEGIN ccl_device int light_distribution_sample(KernelGlobals kg, const float rand)
ccl_device_inline void triangle_vertices_and_normals(KernelGlobals kg, int prim, float3 P[3], float3 N[3])
ccl_device_inline void object_dir_transform(KernelGlobals kg, ccl_private const ShaderData *sd, ccl_private float3 *D)
ccl_device float background_light_pdf(KernelGlobals kg, float3 P, float3 direction)
ccl_device_inline bool light_sample(KernelGlobals kg, const int lamp, const float2 rand, const float3 P, const float3 N, const int shader_flags, const uint32_t path_flag, ccl_private LightSample *ls)
ccl_device_inline int light_link_receiver_forward(KernelGlobals kg, IntegratorState state)
@ SD_BSDF_HAS_TRANSMISSION
@ PRIMITIVE_MOTION_TRIANGLE
@ DIRECT_LIGHT_SAMPLING_NEE
@ DIRECT_LIGHT_SAMPLING_FORWARD
@ SD_OBJECT_TRANSFORM_APPLIED
ccl_device_inline Spectrum rgb_to_spectrum(float3 rgb)
#define PROFILING_INIT_FOR_SHADER(kg, event)
#define PROFILING_EVENT(event)
#define PROFILING_SHADER(object, shader)
ccl_device_forceinline void point_light_mnee_sample_update(const ccl_global KernelLight *klight, ccl_private LightSample *ls, const float3 P, const float3 N, const uint32_t path_flag)
ccl_device_forceinline float triangle_light_pdf(KernelGlobals kg, ccl_private const ShaderData *sd, float t)
ccl_device_inline Spectrum bsdf_eval_sum(ccl_private const BsdfEval *eval)
ccl_device_inline void bsdf_eval_mul(ccl_private BsdfEval *eval, float value)
ccl_device_inline bool bsdf_eval_is_zero(ccl_private BsdfEval *eval)
ccl_device_inline float reduce_max(const float2 a)
ccl_device_inline float2 normalize_len(const float2 a, ccl_private float *t)
ccl_device_inline float2 fabs(const float2 a)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 zero_float3()
ccl_device float power_heuristic(float a, float b)
ccl_device_inline void motion_triangle_vertices_and_normals(KernelGlobals kg, int object, int prim, float time, float3 verts[3], float3 normals[3])
ccl_device_inline void shader_setup_from_sample(KernelGlobals kg, ccl_private ShaderData *ccl_restrict sd, const float3 P, const float3 Ng, const float3 I, int shader, int object, int prim, float u, float v, float t, float time, bool object_space, int lamp)
ccl_device_inline void shader_setup_from_background(KernelGlobals kg, ccl_private ShaderData *ccl_restrict sd, const float3 ray_P, const float3 ray_D, const float ray_time)
ccl_device_forceinline void spot_light_mnee_sample_update(const ccl_global KernelLight *klight, ccl_private LightSample *ls, const float3 P, const float3 N, const uint32_t path_flag)
IntegratorStateCPU *ccl_restrict IntegratorState
#define INTEGRATOR_STATE(state, nested_struct, member)
ccl_device Spectrum surface_shader_emission(ccl_private const ShaderData *sd)
ccl_device bool surface_shader_constant_emission(KernelGlobals kg, int shader, ccl_private Spectrum *eval)
ccl_device void surface_shader_eval(KernelGlobals kg, ConstIntegratorGenericState state, ccl_private ShaderData *ccl_restrict sd, ccl_global float *ccl_restrict buffer, uint32_t path_flag, bool use_caustics_storage=false)
ccl_device Spectrum surface_shader_background(ccl_private const ShaderData *sd)
ccl_device_noinline bool light_tree_sample(KernelGlobals kg, const float rand, const float3 P, float3 N_or_D, float t, const int object_receiver, const int shader_flags, ccl_private LightSample *ls)
ccl_device float light_tree_pdf(KernelGlobals kg, float3 P, float3 N, const float dt, const int path_flag, const int object_emitter, const uint index_emitter, const int object_receiver)
SPECTRUM_DATA_TYPE Spectrum
ccl_device_inline int clamp(int a, int mn, int mx)
@ PROFILING_SHADE_LIGHT_SETUP
@ PROFILING_SHADE_LIGHT_EVAL
CCL_NAMESPACE_BEGIN struct Window V