18 float blades = cam->blades;
27 float rotation = cam->bladesrotation;
32 bokeh.x *= cam->inv_aperture_ratio;
53 if (ray->time < 0.5f) {
56 Pcamera =
interp(Pcamera_pre, Pcamera, ray->time * 2.0f);
61 Pcamera =
interp(Pcamera, Pcamera_post, (ray->time - 0.5f) * 2.0f);
71 if (aperturesize > 0.0f) {
97 bool use_stereo =
kernel_data.cam.interocular_offset != 0.0f;
103#ifdef __RAY_DIFFERENTIALS__
121#ifdef __RAY_DIFFERENTIALS__
128 float3 Pcenter = Pnostereo;
141 dP.
dx = Px - Pcenter;
142 dD.
dx = Dx - Dcenter;
150 dP.
dy = Py - Pcenter;
151 dD.
dy = Dy - Dcenter;
158 float z_inv = 1.0f /
normalize(Pcamera).z;
160 ray->P += nearclip * ray->D;
161 ray->dP += nearclip * ray->dD;
182 if (aperturesize > 0.0f) {
195 P = Pcamera + lens_uvw + (D * (
kernel_data.cam.nearclip / D.z));
213#ifdef __RAY_DIFFERENTIALS__
256 float aperturesize = cam->aperturesize;
258#ifdef __RAY_DIFFERENTIALS__
263 if (aperturesize > 0.0f) {
269 float3 Pfocus = Dfocus * cam->focaldistance;
277 P =
U * lens_uv.
x +
V * lens_uv.
y;
282 Transform cameratoworld = cam->cameratoworld;
284 if (cam->num_motion_steps) {
286 &cameratoworld, cam_motion, cam->num_motion_steps, ray->time);
290 bool use_stereo = cam->interocular_offset != 0.0f;
301#ifdef __RAY_DIFFERENTIALS__
335 float nearclip = cam->nearclip;
336 ray->P += nearclip * ray->D;
337 ray->dP += nearclip * ray->dD;
339 ray->tmax = cam->cliplength;
353 int filter_table_offset =
kernel_data.tables.filter_table_offset;
366 const int shutter_table_offset =
kernel_data.cam.shutter_table_offset;
380 const float duration =
kernel_data.cam.rolling_shutter_duration;
381 if (duration != 0.0f) {
387 ray->time = (ray->time - 0.5f) * duration;
388 ray->time += (time - 0.5f) * (1.0f - duration) + 0.5f;
414 return make_float3(cameratoworld.
x.w, cameratoworld.
y.w, cameratoworld.
z.w);
427 return len(
P - camP);
440 return len(
P - camP);
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)"
ccl_device_inline float3 panorama_to_direction(ccl_constant KernelCamera *cam, float u, float v)
ccl_device_inline void spherical_stereo_transform(ccl_constant KernelCamera *cam, ccl_private float3 *P, ccl_private float3 *D)
ccl_device_inline float2 direction_to_panorama(ccl_constant KernelCamera *cam, float3 dir)
ccl_device_inline float3 transform_perspective(ccl_private const ProjectionTransform *t, const float3 a)
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define kernel_data_array(name)
#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()
draw_view in_light_buf[] float
ccl_device void camera_sample_perspective(KernelGlobals kg, const float2 raster_xy, const float2 rand_lens, ccl_private Ray *ray)
CCL_NAMESPACE_BEGIN ccl_device float2 camera_sample_aperture(ccl_constant KernelCamera *cam, const float2 rand)
ccl_device_inline float3 camera_position(KernelGlobals kg)
ccl_device_inline float camera_distance(KernelGlobals kg, float3 P)
ccl_device_inline float3 camera_world_to_ndc(KernelGlobals kg, ccl_private ShaderData *sd, float3 P)
ccl_device_inline float3 camera_direction_from_point(KernelGlobals kg, float3 P)
ccl_device void camera_sample_orthographic(KernelGlobals kg, const float2 raster_xy, const float2 rand_lens, ccl_private Ray *ray)
ccl_device_inline void camera_sample(KernelGlobals kg, int x, int y, const float2 filter_uv, const float time, const float2 lens_uv, ccl_private Ray *ray)
ccl_device_inline float3 camera_panorama_direction(ccl_constant KernelCamera *cam, float x, float y)
ccl_device_inline float camera_z_depth(KernelGlobals kg, float3 P)
ccl_device_inline void camera_sample_panorama(ccl_constant KernelCamera *cam, ccl_global const DecomposedTransform *cam_motion, const float2 raster, const float2 rand_lens, ccl_private Ray *ray)
#define FILTER_TABLE_SIZE
#define SHUTTER_TABLE_SIZE
CCL_NAMESPACE_BEGIN ccl_device float lookup_table_read(KernelGlobals kg, float x, int offset, int size)
ccl_device_inline bool is_zero(const float2 a)
ccl_device_inline float cross(const float2 a, const float2 b)
ccl_device_inline float2 interp(const float2 a, const float2 b, float t)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 zero_float3()
ccl_device float2 regular_polygon_sample(float corners, float rotation, const float2 rand)
CCL_NAMESPACE_BEGIN ccl_device float2 sample_uniform_disk(const float2 rand)
ccl_device_inline float3 float2_to_float3(const float2 a)
ccl_device_inline float3 float4_to_float3(const float4 a)
CCL_NAMESPACE_BEGIN struct Window V