Blender  V2.93
geom_object.h
Go to the documentation of this file.
1 /*
2  * Licensed under the Apache License, Version 2.0 (the "License");
3  * you may not use this file except in compliance with the License.
4  * You may obtain a copy of the License at
5  *
6  * http://www.apache.org/licenses/LICENSE-2.0
7  *
8  * Unless required by applicable law or agreed to in writing, software
9  * distributed under the License is distributed on an "AS IS" BASIS,
10  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11  * See the License for the specific language governing permissions and
12  * limitations under the License.
13  */
14 
15 /* Object Primitive
16  *
17  * All mesh and curve primitives are part of an object. The same mesh and curves
18  * may be instanced multiple times by different objects.
19  *
20  * If the mesh is not instanced multiple times, the object will not be explicitly
21  * stored as a primitive in the BVH, rather the bare triangles are curved are
22  * directly primitives in the BVH with world space locations applied, and the object
23  * ID is looked up afterwards. */
24 
26 
27 /* Object attributes, for now a fixed size and contents */
28 
32 };
33 
35 
36 /* Object to world space transformation */
37 
39  int object,
40  enum ObjectTransform type)
41 {
43  return kernel_tex_fetch(__objects, object).itfm;
44  }
45  else {
46  return kernel_tex_fetch(__objects, object).tfm;
47  }
48 }
49 
50 /* Lamp to world space transformation */
51 
53 {
54  if (inverse) {
55  return kernel_tex_fetch(__lights, lamp).itfm;
56  }
57  else {
58  return kernel_tex_fetch(__lights, lamp).tfm;
59  }
60 }
61 
62 /* Object to world space transformation for motion vectors */
63 
65  int object,
67 {
68  int offset = object * OBJECT_MOTION_PASS_SIZE + (int)type;
69  return kernel_tex_fetch(__object_motion_pass, offset);
70 }
71 
72 /* Motion blurred object transformations */
73 
74 #ifdef __OBJECT_MOTION__
75 ccl_device_inline Transform object_fetch_transform_motion(KernelGlobals *kg,
76  int object,
77  float time)
78 {
79  const uint motion_offset = kernel_tex_fetch(__objects, object).motion_offset;
80  const ccl_global DecomposedTransform *motion = &kernel_tex_fetch(__object_motion, motion_offset);
81  const uint num_steps = kernel_tex_fetch(__objects, object).numsteps * 2 + 1;
82 
83  Transform tfm;
84  transform_motion_array_interpolate(&tfm, motion, num_steps, time);
85 
86  return tfm;
87 }
88 
89 ccl_device_inline Transform object_fetch_transform_motion_test(KernelGlobals *kg,
90  int object,
91  float time,
92  Transform *itfm)
93 {
94  int object_flag = kernel_tex_fetch(__object_flag, object);
95  if (object_flag & SD_OBJECT_MOTION) {
96  /* if we do motion blur */
97  Transform tfm = object_fetch_transform_motion(kg, object, time);
98 
99  if (itfm)
100  *itfm = transform_quick_inverse(tfm);
101 
102  return tfm;
103  }
104  else {
106  if (itfm)
108 
109  return tfm;
110  }
111 }
112 #endif
113 
114 /* Transform position from object to world space */
115 
117  const ShaderData *sd,
118  float3 *P)
119 {
120 #ifdef __OBJECT_MOTION__
121  *P = transform_point_auto(&sd->ob_tfm, *P);
122 #else
124  *P = transform_point(&tfm, *P);
125 #endif
126 }
127 
128 /* Transform position from world to object space */
129 
131  const ShaderData *sd,
132  float3 *P)
133 {
134 #ifdef __OBJECT_MOTION__
135  *P = transform_point_auto(&sd->ob_itfm, *P);
136 #else
138  *P = transform_point(&tfm, *P);
139 #endif
140 }
141 
142 /* Transform normal from world to object space */
143 
145  const ShaderData *sd,
146  float3 *N)
147 {
148 #ifdef __OBJECT_MOTION__
149  if ((sd->object != OBJECT_NONE) || (sd->type == PRIMITIVE_LAMP)) {
151  }
152 #else
153  if (sd->object != OBJECT_NONE) {
156  }
157  else if (sd->type == PRIMITIVE_LAMP) {
158  Transform tfm = lamp_fetch_transform(kg, sd->lamp, false);
160  }
161 #endif
162 }
163 
164 /* Transform normal from object to world space */
165 
167 {
168 #ifdef __OBJECT_MOTION__
169  *N = normalize(transform_direction_transposed_auto(&sd->ob_itfm, *N));
170 #else
173 #endif
174 }
175 
176 /* Transform direction vector from object to world space */
177 
178 ccl_device_inline void object_dir_transform(KernelGlobals *kg, const ShaderData *sd, float3 *D)
179 {
180 #ifdef __OBJECT_MOTION__
181  *D = transform_direction_auto(&sd->ob_tfm, *D);
182 #else
184  *D = transform_direction(&tfm, *D);
185 #endif
186 }
187 
188 /* Transform direction vector from world to object space */
189 
191  const ShaderData *sd,
192  float3 *D)
193 {
194 #ifdef __OBJECT_MOTION__
195  *D = transform_direction_auto(&sd->ob_itfm, *D);
196 #else
198  *D = transform_direction(&tfm, *D);
199 #endif
200 }
201 
202 /* Object center position */
203 
205 {
206  if (sd->object == OBJECT_NONE)
207  return make_float3(0.0f, 0.0f, 0.0f);
208 
209 #ifdef __OBJECT_MOTION__
210  return make_float3(sd->ob_tfm.x.w, sd->ob_tfm.y.w, sd->ob_tfm.z.w);
211 #else
213  return make_float3(tfm.x.w, tfm.y.w, tfm.z.w);
214 #endif
215 }
216 
217 /* Color of the object */
218 
219 ccl_device_inline float3 object_color(KernelGlobals *kg, int object)
220 {
221  if (object == OBJECT_NONE)
222  return make_float3(0.0f, 0.0f, 0.0f);
223 
224  const ccl_global KernelObject *kobject = &kernel_tex_fetch(__objects, object);
225  return make_float3(kobject->color[0], kobject->color[1], kobject->color[2]);
226 }
227 
228 /* Pass ID number of object */
229 
230 ccl_device_inline float object_pass_id(KernelGlobals *kg, int object)
231 {
232  if (object == OBJECT_NONE)
233  return 0.0f;
234 
235  return kernel_tex_fetch(__objects, object).pass_id;
236 }
237 
238 /* Per lamp random number for shader variation */
239 
240 ccl_device_inline float lamp_random_number(KernelGlobals *kg, int lamp)
241 {
242  if (lamp == LAMP_NONE)
243  return 0.0f;
244 
245  return kernel_tex_fetch(__lights, lamp).random;
246 }
247 
248 /* Per object random number for shader variation */
249 
250 ccl_device_inline float object_random_number(KernelGlobals *kg, int object)
251 {
252  if (object == OBJECT_NONE)
253  return 0.0f;
254 
255  return kernel_tex_fetch(__objects, object).random_number;
256 }
257 
258 /* Particle ID from which this object was generated */
259 
260 ccl_device_inline int object_particle_id(KernelGlobals *kg, int object)
261 {
262  if (object == OBJECT_NONE)
263  return 0;
264 
265  return kernel_tex_fetch(__objects, object).particle_index;
266 }
267 
268 /* Generated texture coordinate on surface from where object was instanced */
269 
271 {
272  if (object == OBJECT_NONE)
273  return make_float3(0.0f, 0.0f, 0.0f);
274 
275  const ccl_global KernelObject *kobject = &kernel_tex_fetch(__objects, object);
276  return make_float3(
277  kobject->dupli_generated[0], kobject->dupli_generated[1], kobject->dupli_generated[2]);
278 }
279 
280 /* UV texture coordinate on surface from where object was instanced */
281 
282 ccl_device_inline float3 object_dupli_uv(KernelGlobals *kg, int object)
283 {
284  if (object == OBJECT_NONE)
285  return make_float3(0.0f, 0.0f, 0.0f);
286 
287  const ccl_global KernelObject *kobject = &kernel_tex_fetch(__objects, object);
288  return make_float3(kobject->dupli_uv[0], kobject->dupli_uv[1], 0.0f);
289 }
290 
291 /* Information about mesh for motion blurred triangles and curves */
292 
294  KernelGlobals *kg, int object, int *numsteps, int *numverts, int *numkeys)
295 {
296  if (numkeys) {
297  *numkeys = kernel_tex_fetch(__objects, object).numkeys;
298  }
299 
300  if (numsteps)
301  *numsteps = kernel_tex_fetch(__objects, object).numsteps;
302  if (numverts)
303  *numverts = kernel_tex_fetch(__objects, object).numverts;
304 }
305 
306 /* Offset to an objects patch map */
307 
309 {
310  if (object == OBJECT_NONE)
311  return 0;
312 
313  return kernel_tex_fetch(__objects, object).patch_map_offset;
314 }
315 
316 /* Volume step size */
317 
318 ccl_device_inline float object_volume_density(KernelGlobals *kg, int object)
319 {
320  if (object == OBJECT_NONE) {
321  return 1.0f;
322  }
323 
324  return kernel_tex_fetch(__objects, object).volume_density;
325 }
326 
327 ccl_device_inline float object_volume_step_size(KernelGlobals *kg, int object)
328 {
329  if (object == OBJECT_NONE) {
330  return kernel_data.background.volume_step_size;
331  }
332 
333  return kernel_tex_fetch(__object_volume_step, object);
334 }
335 
336 /* Pass ID for shader */
337 
338 ccl_device int shader_pass_id(KernelGlobals *kg, const ShaderData *sd)
339 {
340  return kernel_tex_fetch(__shaders, (sd->shader & SHADER_MASK)).pass_id;
341 }
342 
343 /* Cryptomatte ID */
344 
345 ccl_device_inline float object_cryptomatte_id(KernelGlobals *kg, int object)
346 {
347  if (object == OBJECT_NONE)
348  return 0.0f;
349 
350  return kernel_tex_fetch(__objects, object).cryptomatte_object;
351 }
352 
353 ccl_device_inline float object_cryptomatte_asset_id(KernelGlobals *kg, int object)
354 {
355  if (object == OBJECT_NONE)
356  return 0;
357 
358  return kernel_tex_fetch(__objects, object).cryptomatte_asset;
359 }
360 
361 /* Particle data from which object was instanced */
362 
363 ccl_device_inline uint particle_index(KernelGlobals *kg, int particle)
364 {
365  return kernel_tex_fetch(__particles, particle).index;
366 }
367 
368 ccl_device float particle_age(KernelGlobals *kg, int particle)
369 {
370  return kernel_tex_fetch(__particles, particle).age;
371 }
372 
373 ccl_device float particle_lifetime(KernelGlobals *kg, int particle)
374 {
375  return kernel_tex_fetch(__particles, particle).lifetime;
376 }
377 
378 ccl_device float particle_size(KernelGlobals *kg, int particle)
379 {
380  return kernel_tex_fetch(__particles, particle).size;
381 }
382 
383 ccl_device float4 particle_rotation(KernelGlobals *kg, int particle)
384 {
385  return kernel_tex_fetch(__particles, particle).rotation;
386 }
387 
388 ccl_device float3 particle_location(KernelGlobals *kg, int particle)
389 {
390  return float4_to_float3(kernel_tex_fetch(__particles, particle).location);
391 }
392 
393 ccl_device float3 particle_velocity(KernelGlobals *kg, int particle)
394 {
395  return float4_to_float3(kernel_tex_fetch(__particles, particle).velocity);
396 }
397 
398 ccl_device float3 particle_angular_velocity(KernelGlobals *kg, int particle)
399 {
400  return float4_to_float3(kernel_tex_fetch(__particles, particle).angular_velocity);
401 }
402 
403 /* Object intersection in BVH */
404 
406 {
407  const float ooeps = 8.271806E-25f;
408  return make_float3((fabsf(dir.x) > ooeps) ? dir.x : copysignf(ooeps, dir.x),
409  (fabsf(dir.y) > ooeps) ? dir.y : copysignf(ooeps, dir.y),
410  (fabsf(dir.z) > ooeps) ? dir.z : copysignf(ooeps, dir.z));
411 }
412 
414 {
415  return rcp(dir);
416 }
417 
418 /* Transform ray into object space to enter static object in BVH */
419 
421  KernelGlobals *kg, int object, const Ray *ray, float3 *P, float3 *dir, float3 *idir, float t)
422 {
424 
425  *P = transform_point(&tfm, ray->P);
426 
427  float len;
429  *idir = bvh_inverse_direction(*dir);
430 
431  if (t != FLT_MAX) {
432  t *= len;
433  }
434 
435  return t;
436 }
437 
438 /* Transform ray to exit static object in BVH. */
439 
441  KernelGlobals *kg, int object, const Ray *ray, float3 *P, float3 *dir, float3 *idir, float t)
442 {
443  if (t != FLT_MAX) {
445  t /= len(transform_direction(&tfm, ray->D));
446  }
447 
448  *P = ray->P;
449  *dir = bvh_clamp_direction(ray->D);
450  *idir = bvh_inverse_direction(*dir);
451 
452  return t;
453 }
454 
455 /* Same as above, but returns scale factor to apply to multiple intersection distances */
456 
458  int object,
459  const Ray *ray,
460  float3 *P,
461  float3 *dir,
462  float3 *idir,
463  float *t_fac)
464 {
466  *t_fac = 1.0f / len(transform_direction(&tfm, ray->D));
467 
468  *P = ray->P;
469  *dir = bvh_clamp_direction(ray->D);
470  *idir = bvh_inverse_direction(*dir);
471 }
472 
473 #ifdef __OBJECT_MOTION__
474 /* Transform ray into object space to enter motion blurred object in BVH */
475 
476 ccl_device_inline float bvh_instance_motion_push(KernelGlobals *kg,
477  int object,
478  const Ray *ray,
479  float3 *P,
480  float3 *dir,
481  float3 *idir,
482  float t,
483  Transform *itfm)
484 {
485  object_fetch_transform_motion_test(kg, object, ray->time, itfm);
486 
487  *P = transform_point(itfm, ray->P);
488 
489  float len;
491  *idir = bvh_inverse_direction(*dir);
492 
493  if (t != FLT_MAX) {
494  t *= len;
495  }
496 
497  return t;
498 }
499 
500 /* Transform ray to exit motion blurred object in BVH. */
501 
502 ccl_device_inline float bvh_instance_motion_pop(KernelGlobals *kg,
503  int object,
504  const Ray *ray,
505  float3 *P,
506  float3 *dir,
507  float3 *idir,
508  float t,
509  Transform *itfm)
510 {
511  if (t != FLT_MAX) {
512  t /= len(transform_direction(itfm, ray->D));
513  }
514 
515  *P = ray->P;
516  *dir = bvh_clamp_direction(ray->D);
517  *idir = bvh_inverse_direction(*dir);
518 
519  return t;
520 }
521 
522 /* Same as above, but returns scale factor to apply to multiple intersection distances */
523 
524 ccl_device_inline void bvh_instance_motion_pop_factor(KernelGlobals *kg,
525  int object,
526  const Ray *ray,
527  float3 *P,
528  float3 *dir,
529  float3 *idir,
530  float *t_fac,
531  Transform *itfm)
532 {
533  *t_fac = 1.0f / len(transform_direction(itfm, ray->D));
534  *P = ray->P;
535  *dir = bvh_clamp_direction(ray->D);
536  *idir = bvh_inverse_direction(*dir);
537 }
538 
539 #endif
540 
541 /* TODO(sergey): This is only for until we've got OpenCL 2.0
542  * on all devices we consider supported. It'll be replaced with
543  * generic address space.
544  */
545 
546 #ifdef __KERNEL_OPENCL__
547 ccl_device_inline void object_position_transform_addrspace(KernelGlobals *kg,
548  const ShaderData *sd,
550 {
551  float3 private_P = *P;
552  object_position_transform(kg, sd, &private_P);
553  *P = private_P;
554 }
555 
556 ccl_device_inline void object_dir_transform_addrspace(KernelGlobals *kg,
557  const ShaderData *sd,
559 {
560  float3 private_D = *D;
561  object_dir_transform(kg, sd, &private_D);
562  *D = private_D;
563 }
564 
565 ccl_device_inline void object_normal_transform_addrspace(KernelGlobals *kg,
566  const ShaderData *sd,
568 {
569  float3 private_N = *N;
570  object_normal_transform(kg, sd, &private_N);
571  *N = private_N;
572 }
573 #endif
574 
575 #ifndef __KERNEL_OPENCL__
576 # define object_position_transform_auto object_position_transform
577 # define object_dir_transform_auto object_dir_transform
578 # define object_normal_transform_auto object_normal_transform
579 #else
580 # define object_position_transform_auto object_position_transform_addrspace
581 # define object_dir_transform_auto object_dir_transform_addrspace
582 # define object_normal_transform_auto object_normal_transform_addrspace
583 #endif
584 
unsigned int uint
Definition: BLI_sys_types.h:83
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
btMatrix3x3 inverse() const
Return the inverse of the matrix.
Definition: btTransform.h:182
double time
Light lamp
ccl_device_inline void object_inverse_dir_transform(KernelGlobals *kg, const ShaderData *sd, float3 *D)
Definition: geom_object.h:190
ccl_device_inline void object_inverse_position_transform(KernelGlobals *kg, const ShaderData *sd, float3 *P)
Definition: geom_object.h:130
ccl_device_inline float3 bvh_clamp_direction(float3 dir)
Definition: geom_object.h:405
ccl_device_inline float3 object_location(KernelGlobals *kg, const ShaderData *sd)
Definition: geom_object.h:204
ccl_device float4 particle_rotation(KernelGlobals *kg, int particle)
Definition: geom_object.h:383
ObjectTransform
Definition: geom_object.h:29
@ OBJECT_INVERSE_TRANSFORM
Definition: geom_object.h:31
@ OBJECT_TRANSFORM
Definition: geom_object.h:30
ccl_device_inline float object_random_number(KernelGlobals *kg, int object)
Definition: geom_object.h:250
ccl_device_inline void object_normal_transform(KernelGlobals *kg, const ShaderData *sd, float3 *N)
Definition: geom_object.h:166
ccl_device_inline void object_motion_info(KernelGlobals *kg, int object, int *numsteps, int *numverts, int *numkeys)
Definition: geom_object.h:293
ccl_device_inline float3 bvh_inverse_direction(float3 dir)
Definition: geom_object.h:413
ccl_device_inline float3 object_dupli_uv(KernelGlobals *kg, int object)
Definition: geom_object.h:282
ccl_device_inline Transform object_fetch_motion_pass_transform(KernelGlobals *kg, int object, enum ObjectVectorTransform type)
Definition: geom_object.h:64
ccl_device_inline uint particle_index(KernelGlobals *kg, int particle)
Definition: geom_object.h:363
ccl_device_inline float lamp_random_number(KernelGlobals *kg, int lamp)
Definition: geom_object.h:240
ccl_device_inline uint object_patch_map_offset(KernelGlobals *kg, int object)
Definition: geom_object.h:308
ccl_device float3 particle_location(KernelGlobals *kg, int particle)
Definition: geom_object.h:388
ccl_device_inline void object_position_transform(KernelGlobals *kg, const ShaderData *sd, float3 *P)
Definition: geom_object.h:116
ccl_device_inline float object_volume_step_size(KernelGlobals *kg, int object)
Definition: geom_object.h:327
ccl_device float particle_lifetime(KernelGlobals *kg, int particle)
Definition: geom_object.h:373
ccl_device float3 particle_velocity(KernelGlobals *kg, int particle)
Definition: geom_object.h:393
ccl_device_inline float object_cryptomatte_asset_id(KernelGlobals *kg, int object)
Definition: geom_object.h:353
ccl_device_inline float object_pass_id(KernelGlobals *kg, int object)
Definition: geom_object.h:230
ccl_device int shader_pass_id(KernelGlobals *kg, const ShaderData *sd)
Definition: geom_object.h:338
ccl_device_inline void object_inverse_normal_transform(KernelGlobals *kg, const ShaderData *sd, float3 *N)
Definition: geom_object.h:144
ccl_device_inline float3 object_color(KernelGlobals *kg, int object)
Definition: geom_object.h:219
ccl_device_inline float bvh_instance_push(KernelGlobals *kg, int object, const Ray *ray, float3 *P, float3 *dir, float3 *idir, float t)
Definition: geom_object.h:420
ccl_device float3 particle_angular_velocity(KernelGlobals *kg, int particle)
Definition: geom_object.h:398
ccl_device float particle_size(KernelGlobals *kg, int particle)
Definition: geom_object.h:378
ccl_device_inline float object_volume_density(KernelGlobals *kg, int object)
Definition: geom_object.h:318
ccl_device float particle_age(KernelGlobals *kg, int particle)
Definition: geom_object.h:368
ccl_device_inline float object_cryptomatte_id(KernelGlobals *kg, int object)
Definition: geom_object.h:345
ccl_device_inline int object_particle_id(KernelGlobals *kg, int object)
Definition: geom_object.h:260
ccl_device_inline void object_dir_transform(KernelGlobals *kg, const ShaderData *sd, float3 *D)
Definition: geom_object.h:178
ObjectVectorTransform
Definition: geom_object.h:34
@ OBJECT_PASS_MOTION_PRE
Definition: geom_object.h:34
@ OBJECT_PASS_MOTION_POST
Definition: geom_object.h:34
ccl_device_inline float bvh_instance_pop(KernelGlobals *kg, int object, const Ray *ray, float3 *P, float3 *dir, float3 *idir, float t)
Definition: geom_object.h:440
ccl_device_inline float3 object_dupli_generated(KernelGlobals *kg, int object)
Definition: geom_object.h:270
ccl_device_inline void bvh_instance_pop_factor(KernelGlobals *kg, int object, const Ray *ray, float3 *P, float3 *dir, float3 *idir, float *t_fac)
Definition: geom_object.h:457
ccl_device_inline Transform object_fetch_transform(KernelGlobals *kg, int object, enum ObjectTransform type)
Definition: geom_object.h:38
ccl_device_inline Transform lamp_fetch_transform(KernelGlobals *kg, int lamp, bool inverse)
Definition: geom_object.h:52
#define kernel_data
#define ccl_addr_space
#define kernel_tex_fetch(tex, index)
#define ccl_device
#define ccl_device_inline
#define ccl_global
#define CCL_NAMESPACE_END
#define copysignf(x, y)
#define fabsf(x)
#define make_float3(x, y, z)
#define rcp(x)
@ PRIMITIVE_LAMP
Definition: kernel_types.h:695
#define OBJECT_NONE
Definition: kernel_types.h:59
#define OBJECT_MOTION_PASS_SIZE
Definition: kernel_types.h:44
ShaderData
@ SHADER_MASK
Definition: kernel_types.h:593
@ SD_OBJECT_MOTION
Definition: kernel_types.h:906
#define LAMP_NONE
Definition: kernel_types.h:61
static float P(float k)
Definition: math_interp.c:41
params N
float3 P
Definition: kernel_types.h:647
float time
Definition: kernel_types.h:650
float3 D
Definition: kernel_types.h:648
float z
Definition: sky_float3.h:35
float y
Definition: sky_float3.h:35
float x
Definition: sky_float3.h:35
ccl_device_inline float3 float4_to_float3(const float4 a)
Definition: util_math.h:415
ccl_device_inline float2 normalize(const float2 &a)
ccl_device_inline float2 normalize_len(const float2 &a, float *t)
ccl_device_inline float3 transform_direction(const Transform *t, const float3 a)
#define transform_direction_transposed_auto
#define transform_point_auto
#define transform_direction_auto
ccl_device_inline float3 transform_direction_transposed(const Transform *t, const float3 a)
ccl_device_inline float3 transform_point(const Transform *t, const float3 a)
ccl_device_inline Transform transform_quick_inverse(Transform M)
ccl_device void transform_motion_array_interpolate(Transform *tfm, const ccl_global DecomposedTransform *motion, uint numsteps, float time)
uint len
BLI_INLINE float D(const float *data, const int res[3], int x, int y, int z)
Definition: voxel.c:29