40 for (
int i = 0; i < 10; i++) {
42 float jitterU = u + (rand_filter.
x - 0.5f) * dudx + (rand_filter.
y - 0.5f) * dudy;
43 float jitterV =
v + (rand_filter.
x - 0.5f) * dvdx + (rand_filter.
y - 0.5f) * dvdy;
45 if (jitterU > 0.0f && jitterV > 0.0f && jitterU + jitterV < 1.0f) {
67 const float position_offset = 1e-4f;
68 const float uv_offset = 1e-5f;
71 const float3 P = u * tri_verts[0] +
v * tri_verts[1] + (1.0f - u -
v) * tri_verts[2];
72 const float3 center = (tri_verts[0] + tri_verts[1] + tri_verts[2]) / 3.0f;
73 const float3 to_center = center -
P;
80 const float3 v1 = tri_verts[1] - tri_verts[0];
81 const float3 v2 = tri_verts[2] - tri_verts[0];
82 const float3 vP = offset_P - tri_verts[0];
84 const float d11 =
dot(v1, v1);
85 const float d12 =
dot(v1,
v2);
87 const float dP1 =
dot(vP, v1);
88 const float dP2 =
dot(vP,
v2);
90 const float denom = d11 * d22 - d12 * d12;
95 const float offset_v =
clamp((d22 * dP1 - d12 * dP2) / denom, uv_offset, 1.0f - uv_offset);
96 const float offset_w =
clamp((d11 * dP2 - d12 * dP1) / denom, uv_offset, 1.0f - uv_offset);
97 const float offset_u =
clamp(1.0f - offset_v - offset_w, uv_offset, 1.0f - uv_offset);
111 const int scheduled_sample)
159 float u = primitive[0];
160 float v = primitive[1];
168 if ((u == 0.0f || u == 1.0f) && (
v == 0.0f ||
v == 1.0f)) {
182 const float tmpdx = dudx;
183 const float tmpdy = dudy;
186 dvdx = -tmpdx - dvdx;
187 dvdy = -tmpdy - dvdy;
247 const float DN =
dot(D,
N);
257 const float surface_normal_offset = 0.2f;
260 if (DN <= surface_normal_offset) {
261 D -=
N * (DN - surface_normal_offset);
273 const float true_normal_epsilon = 0.00001f;
275 if (
dot(D, Ng) <= true_normal_epsilon) {
276 D -= Ng * (
dot(D, Ng) - true_normal_epsilon);
302 dP.
dx = dPdu * dudx + dPdv * dvdx;
303 dP.
dy = dPdu * dudy + dPdv * dvdy;
321 const bool use_caustics =
kernel_data.integrator.use_caustics &&
329 else if (use_raytrace_kernel) {
337#ifdef __SHADOW_CATCHER__
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert * v
static unsigned long seed
SIMD_FORCE_INLINE btVector3 & normalize()
Normalize this vector x^2 + y^2 + z^2 = 1.
additional_info("compositor_sum_squared_difference_float_shared") .push_constant(Type output_img float dot(value.rgb, luminance_coefficients)") .define("LOAD(value)"
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define kernel_data_fetch(name, index)
#define ccl_optional_struct_init
#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 float3 triangle_smooth_normal(KernelGlobals kg, float3 Ng, int prim, float u, float v)
ccl_device_inline void triangle_point_normal(KernelGlobals kg, int object, int prim, float u, float v, ccl_private float3 *P, ccl_private float3 *Ng, ccl_private int *shader)
ccl_device_inline void triangle_vertices(KernelGlobals kg, int prim, float3 P[3])
ccl_device_inline void triangle_dPdudv(KernelGlobals kg, int prim, ccl_private float3 *dPdu, ccl_private float3 *dPdv)
ccl_device_inline float2 hash_float2_to_float2(float2 k)
ccl_device_inline uint hash_uint(uint kx)
ccl_device const float2 bake_offset_towards_center(KernelGlobals kg, const int prim, const float u, const float v)
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 bool integrator_init_from_bake(KernelGlobals kg, IntegratorState state, ccl_global const KernelWorkTile *ccl_restrict tile, ccl_global float *render_buffer, const int x, const int y, const int scheduled_sample)
ccl_device_inline float3 camera_direction_from_point(KernelGlobals kg, float3 P)
ccl_global const 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, 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
#define PROFILING_INIT(kg, event)
ccl_device_inline void film_write_transparent(KernelGlobals kg, ConstIntegratorState state, const uint32_t path_flag, const float transparent, ccl_global float *ccl_restrict buffer)
ccl_device_inline int film_write_sample(KernelGlobals kg, ConstIntegratorState state, ccl_global float *ccl_restrict render_buffer, int sample, int sample_offset)
ccl_device_inline float reduce_max(const float2 a)
ccl_device_inline float2 fabs(const float2 a)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 zero_float3()
ccl_device_inline void path_state_init(IntegratorState state, ccl_global const KernelWorkTile *ccl_restrict tile, const int x, const int y)
ccl_device_inline void path_state_init_integrator(KernelGlobals kg, IntegratorState state, const int sample, const uint rng_pixel)
ccl_device_inline uint path_rng_pixel_init(KernelGlobals kg, const int sample, const int x, const int y)
ccl_device_forceinline float2 path_rng_2D(KernelGlobals kg, uint rng_pixel, int sample, int dimension)
IntegratorStateCPU *ccl_restrict IntegratorState
ccl_device_forceinline void integrator_path_init_sorted(KernelGlobals kg, IntegratorState state, const DeviceKernel next_kernel, const uint32_t key)
ccl_device_forceinline void integrator_path_init(KernelGlobals kg, IntegratorState state, const DeviceKernel next_kernel)
ccl_device_forceinline void integrator_state_write_isect(IntegratorState state, ccl_private const Intersection *ccl_restrict isect)
CCL_NAMESPACE_BEGIN ccl_device_forceinline void integrator_state_write_ray(IntegratorState state, ccl_private const Ray *ccl_restrict ray)
ccl_device_inline int clamp(int a, int mn, int mx)
ccl_device_inline void film_write_pass_float3(ccl_global float *ccl_restrict buffer, 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)