24 const float blades = cam->blades;
33 const float rotation = cam->bladesrotation;
38 bokeh.
x *= cam->inv_aperture_ratio;
59 if (ray->time < 0.5f) {
62 Pcamera =
interp(Pcamera_pre, Pcamera, ray->time * 2.0f);
67 Pcamera =
interp(Pcamera, Pcamera_post, (ray->time - 0.5f) * 2.0f);
75 const float aperturesize =
kernel_data.cam.aperturesize;
77 if (aperturesize > 0.0f) {
103 const bool use_stereo =
kernel_data.cam.interocular_offset != 0.0f;
109#ifdef __RAY_DIFFERENTIALS__
127#ifdef __RAY_DIFFERENTIALS__
134 float3 Pcenter = Pnostereo;
148 dP.
dx = Px - Pcenter;
149 dD.
dx = Dx - Dcenter;
157 dP.
dy = Py - Pcenter;
158 dD.
dy = Dy - Dcenter;
165 const float z_inv = 1.0f /
normalize(Pcamera).z;
166 const float nearclip =
kernel_data.cam.nearclip * z_inv;
167 ray->P += nearclip * ray->D;
168 ray->dP += nearclip * ray->dD;
189 const float aperturesize =
kernel_data.cam.aperturesize;
191 if (aperturesize > 0.0f) {
222#ifdef __RAY_DIFFERENTIALS__
256 Transform cameratoworld = cam->cameratoworld;
258 if (cam->num_motion_steps) {
260 &cameratoworld, cam_motion, cam->num_motion_steps, ray->time);
264 const bool use_stereo = cam->interocular_offset != 0.0f;
275#ifdef __RAY_DIFFERENTIALS__
299 const float nearclip = cam->nearclip;
300 ray->P += nearclip * ray->D;
301 ray->dP += nearclip * ray->dD;
303 ray->tmax = cam->cliplength;
321 throughput =
osl_eval_camera(kg, sensor, dSdx, dSdy, rand_lens,
P,
dPdx,
dPdy,
D, dDdx, dDdy);
374#ifdef __RAY_DIFFERENTIALS__
391 const float aperturesize = cam->aperturesize;
393 if (aperturesize > 0.0f) {
399 const float3 Pfocus = Dfocus * cam->focaldistance;
407 P =
U * lens_uv.
x +
V * lens_uv.
y;
441 const int filter_table_offset =
kernel_data.tables.filter_table_offset;
454 const int shutter_table_offset =
kernel_data.cam.shutter_table_offset;
468 const float duration =
kernel_data.cam.rolling_shutter_duration;
469 if (duration != 0.0f) {
475 ray->time = (ray->time - 0.5f) * duration;
476 ray->time += (time - 0.5f) * (1.0f - duration) + 0.5f;
520 return len(
P - camP);
531 return len(
P - camP);
dot(value.rgb, luminance_coefficients)") DEFINE_VALUE("REDUCE(lhs
ccl_device_inline float2 direction_to_panorama(ccl_constant KernelCamera *cam, const float3 dir)
ccl_device_inline void spherical_stereo_transform(ccl_constant KernelCamera *cam, ccl_private float3 *P, ccl_private float3 *D)
ccl_device_inline float3 panorama_to_direction(ccl_constant KernelCamera *cam, const float u, float v)
ccl_device_forceinline float3 dPdx(const ccl_private ShaderData *sd)
ccl_device_forceinline float3 dPdy(const ccl_private ShaderData *sd)
ccl_device_inline float3 transform_perspective_direction(const ccl_private ProjectionTransform *t, const float3 a)
CCL_NAMESPACE_END CCL_NAMESPACE_BEGIN ccl_device_inline float3 transform_perspective(const ccl_private ProjectionTransform *t, const float3 a)
#define kernel_assert(cond)
#define FILTER_TABLE_SIZE
const ThreadKernelGlobalsCPU * KernelGlobals
#define ccl_device_inline
#define __RAY_DIFFERENTIALS__
#define SHUTTER_TABLE_SIZE
#define kernel_data_array(name)
#define CCL_NAMESPACE_END
ccl_device_forceinline float differential_make_compact(const float dD)
ccl_device_forceinline float differential_zero_compact()
VecBase< float, D > normalize(VecOp< float, D >) RET
VecBase< float, 3 > cross(VecOp< float, 3 >, VecOp< float, 3 >) RET
ccl_device_inline void camera_sample_to_ray(ccl_constant KernelCamera *cam, const ccl_global DecomposedTransform *cam_motion, float3 P, float3 D, ccl_private Ray *ray)
CCL_NAMESPACE_BEGIN ccl_device float2 camera_sample_aperture(ccl_constant KernelCamera *cam, const float2 rand)
ccl_device Spectrum camera_sample_perspective(KernelGlobals kg, const float2 raster_xy, const float2 rand_lens, ccl_private Ray *ray)
ccl_device_inline float3 camera_position(KernelGlobals kg)
ccl_device_inline Spectrum camera_sample_custom(KernelGlobals kg, ccl_constant KernelCamera *cam, const ccl_global DecomposedTransform *cam_motion, const float2 raster, const float2 rand_lens, ccl_private Ray *ray)
ccl_device_inline float3 camera_panorama_direction(ccl_constant KernelCamera *cam, const float x, const float y)
ccl_device_inline Spectrum camera_sample_panorama(ccl_constant KernelCamera *cam, const ccl_global DecomposedTransform *cam_motion, const float2 raster, const float2 rand_lens, ccl_private Ray *ray)
ccl_device_inline float camera_z_depth(KernelGlobals kg, const float3 P)
ccl_device_inline float3 camera_world_to_ndc(KernelGlobals kg, ccl_private ShaderData *sd, float3 P)
ccl_device_inline float camera_distance(KernelGlobals kg, const float3 P)
ccl_device Spectrum camera_sample_orthographic(KernelGlobals kg, const float2 raster_xy, const float2 rand_lens, ccl_private Ray *ray)
ccl_device_inline Spectrum camera_sample(KernelGlobals kg, const int x, const int y, const float2 filter_uv, const float time, const float2 lens_uv, ccl_private Ray *ray)
ccl_device_inline float3 camera_direction_from_point(KernelGlobals kg, const float3 P)
packed_float3 osl_eval_camera(KernelGlobals kg, const packed_float3 sensor, const packed_float3 dSdx, const packed_float3 dSdy, const float2 rand_lens, packed_float3 &P, packed_float3 &dPdx, packed_float3 &dPdy, packed_float3 &D, packed_float3 &dDdx, packed_float3 &dDdy)
CCL_NAMESPACE_BEGIN ccl_device float lookup_table_read(KernelGlobals kg, float x, const int offset, const int size)
ccl_device_inline float interp(const float a, const float b, const float t)
ccl_device_inline bool is_zero(const float2 a)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 zero_float3()
CCL_NAMESPACE_BEGIN ccl_device float2 sample_uniform_disk(const float2 rand)
ccl_device float2 regular_polygon_sample(const float corners, float rotation, const float2 rand)
CCL_NAMESPACE_BEGIN struct Window V