38 for (
int i = 0;
i < 10;
i++) {
40 const float jitterU = u + (rand_filter.
x - 0.5f) * dudx + (rand_filter.
y - 0.5f) * dudy;
41 const float jitterV =
v + (rand_filter.
x - 0.5f) * dvdx + (rand_filter.
y - 0.5f) * dvdy;
43 if (jitterU > 0.0f && jitterV > 0.0f && jitterU + jitterV < 1.0f) {
64 const float position_offset = 1e-4f;
65 const float uv_offset = 1e-5f;
68 const float3 P = u * tri_verts[0] +
v * tri_verts[1] + (1.0f - u -
v) * tri_verts[2];
69 const float3 center = (tri_verts[0] + tri_verts[1] + tri_verts[2]) / 3.0f;
70 const float3 to_center = center -
P;
77 const float3 v1 = tri_verts[1] - tri_verts[0];
78 const float3 v2 = tri_verts[2] - tri_verts[0];
79 const float3 vP = offset_P - tri_verts[0];
81 const float d11 =
dot(v1, v1);
82 const float d12 =
dot(v1,
v2);
84 const float dP1 =
dot(vP, v1);
85 const float dP2 =
dot(vP,
v2);
87 const float denom = d11 * d22 - d12 * d12;
92 const float offset_v =
clamp((d22 * dP1 - d12 * dP2) / denom, uv_offset, 1.0f - uv_offset);
93 const float offset_w =
clamp((d11 * dP2 - d12 * dP1) / denom, uv_offset, 1.0f - uv_offset);
94 const float offset_u =
clamp(1.0f - offset_v - offset_w, uv_offset, 1.0f - uv_offset);
108 const int scheduled_sample)
156 float u = primitive[0];
157 float v = primitive[1];
165 if ((u == 0.0f || u == 1.0f) && (
v == 0.0f ||
v == 1.0f)) {
179 const float tmpdx = dudx;
180 const float tmpdy = dudy;
183 dvdx = -tmpdx - dvdx;
184 dvdy = -tmpdy - dvdy;
245 const float DN =
dot(
D,
N);
255 const float surface_normal_offset = 0.2f;
258 if (DN <= surface_normal_offset) {
259 D -=
N * (DN - surface_normal_offset);
271 const float true_normal_epsilon = 0.00001f;
273 if (
dot(
D, Ng) <= true_normal_epsilon) {
274 D -= Ng * (
dot(
D, Ng) - true_normal_epsilon);
301 dP.
dx = dPdu * dudx + dPdv * dvdx;
302 dP.
dy = dPdu * dudy + dPdv * dvdy;
320 const bool use_caustics =
kernel_data.integrator.use_caustics &&
328 else if (use_raytrace_kernel) {
336#ifdef __SHADOW_CATCHER__
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert * v
static unsigned long seed
reduce_max(value.rgb)") DEFINE_VALUE("REDUCE(lhs
dot(value.rgb, luminance_coefficients)") DEFINE_VALUE("REDUCE(lhs
#define ccl_optional_struct_init
#define transform_point_auto
#define kernel_data_fetch(name, index)
const ThreadKernelGlobalsCPU * KernelGlobals
#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 void triangle_dPdudv(KernelGlobals kg, const int prim, ccl_private float3 *dPdu, ccl_private float3 *dPdv)
ccl_device_inline void triangle_vertices(KernelGlobals kg, const int prim, float3 P[3])
ccl_device_inline float3 triangle_smooth_normal(KernelGlobals kg, const float3 Ng, const int prim, const float u, float v)
ccl_device_inline void triangle_point_normal(KernelGlobals kg, const int object, const int prim, const float u, const float v, ccl_private float3 *P, ccl_private float3 *Ng, ccl_private int *shader)
VecBase< float, D > normalize(VecOp< float, D >) RET
constexpr T clamp(T, U, U) RET
ccl_device_inline float2 hash_float2_to_float2(const float2 k)
ccl_device_inline uint hash_uint(const uint kx)
ccl_device float2 bake_offset_towards_center(KernelGlobals kg, const int prim, const float u, const float v)
ccl_device bool integrator_init_from_bake(KernelGlobals kg, IntegratorState state, const ccl_global KernelWorkTile *ccl_restrict tile, ccl_global float *render_buffer, const int x, const int y, const int scheduled_sample)
CCL_NAMESPACE_BEGIN ccl_device_inline void bake_jitter_barycentric(ccl_private float &u, ccl_private float &v, float2 rand_filter, const float dudx, const float dudy, const float dvdx, const float dvdy)
ccl_device_inline float3 camera_direction_from_point(KernelGlobals kg, const float3 P)
const ccl_global KernelWorkTile * tile
ccl_gpu_kernel_postfix ccl_global KernelWorkTile const int ccl_global float * render_buffer
CCL_NAMESPACE_BEGIN ccl_device_forceinline bool film_need_sample_pixel(KernelGlobals kg, ConstIntegratorState state, ccl_global float *render_buffer)
@ OBJECT_INVERSE_TRANSFORM
ccl_device_inline Transform object_fetch_transform(KernelGlobals kg, const int object, enum ObjectTransform type)
@ SD_OBJECT_TRANSFORM_APPLIED
@ DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE
@ DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE_RAYTRACE
@ DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE_MNEE
@ DEVICE_KERNEL_INTEGRATOR_SHADE_BACKGROUND
ccl_device_inline int film_write_sample(KernelGlobals kg, ConstIntegratorState state, ccl_global float *ccl_restrict render_buffer, const int sample, const int sample_offset)
ccl_device_inline void film_write_transparent(KernelGlobals kg, const uint32_t path_flag, const float transparent, ccl_global float *ccl_restrict buffer)
ccl_device_inline float2 fabs(const float2 a)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 zero_float3()
#define PROFILING_INIT(kg, event)
ccl_device_inline void path_state_init_integrator(KernelGlobals kg, IntegratorState state, const int sample, const uint rng_pixel, const Spectrum throughput)
ccl_device_inline void path_state_init(IntegratorState state, const ccl_global KernelWorkTile *ccl_restrict tile, const int x, const int y)
ccl_device_forceinline float2 path_rng_2D(KernelGlobals kg, const uint rng_pixel, const int sample, const int dimension)
ccl_device_inline uint path_rng_pixel_init(KernelGlobals kg, const int, const int x, const int y)
IntegratorStateCPU * IntegratorState
ccl_device_forceinline void integrator_path_init_sorted(KernelGlobals, IntegratorState state, const DeviceKernel next_kernel, const uint32_t key)
ccl_device_forceinline void integrator_path_init(IntegratorState state, const DeviceKernel next_kernel)
CCL_NAMESPACE_BEGIN ccl_device_forceinline void integrator_state_write_ray(IntegratorState state, const ccl_private Ray *ccl_restrict ray)
ccl_device_forceinline void integrator_state_write_isect(IntegratorState state, const ccl_private Intersection *ccl_restrict isect)
ccl_device_inline void film_write_pass_float3(ccl_global float *ccl_restrict buffer, const float3 value)
CCL_NAMESPACE_BEGIN ccl_device_forceinline ccl_global float * film_pass_pixel_render_buffer(KernelGlobals kg, ConstIntegratorState state, ccl_global float *ccl_restrict render_buffer)