76 SOCKET_NODE(geometry,
"Geometry", Geometry::get_node_base_type());
84 SOCKET_BOOLEAN(hide_on_missing_motion,
"Hide on Missing Motion",
false);
88 SOCKET_FLOAT(shadow_terminator_shading_offset,
"Shadow Terminator Shading Offset", 0.0f);
89 SOCKET_FLOAT(shadow_terminator_geometry_offset,
"Shadow Terminator Geometry Offset", 0.1f);
95 SOCKET_BOOLEAN(is_caustics_receiver,
"Receive Shadow Caustics",
false);
97 SOCKET_NODE(particle_system,
"Particle System", ParticleSystem::get_node_type());
109 particle_system =
NULL;
126 bool have_motion =
false;
128 for (
size_t i = 0; i < motion.size(); i++) {
130 if (hide_on_missing_motion) {
146 have_motion = have_motion || motion[i] != tfm;
157 BoundBox mbounds = geometry->bounds;
168 for (
float t = 0.0f;
t < 1.0f;
t += (1.0f / 128.0f)) {
177 if (geometry->transform_applied) {
191 geometry->apply_transform(tfm, apply_to_motion);
196 geometry->transform_negative_scaled =
true;
199 geometry->compute_bounds();
214 if (use_holdout_is_modified()) {
218 if (is_shadow_catcher_is_modified()) {
224 if (tfm_is_modified() || motion_is_modified()) {
228 if (visibility_is_modified()) {
232 foreach (
Node *
node, geometry->get_used_shaders()) {
245 return (motion.size() > 1);
250 return (
use_motion()) ? 2.0f * step / (motion.size() - 1) - 1.0f : 0.0f;
256 for (
size_t step = 0; step < motion.size(); step++) {
294 float step_rate = FLT_MAX;
301 step_rate =
fminf(shader->get_volume_step_rate(), step_rate);
306 if (step_rate == FLT_MAX) {
311 float step_size = FLT_MAX;
325 float voxel_step_size = volume->get_step_size();
327 if (voxel_step_size == 0.0f) {
346 else if (volume->get_object_space()) {
352 if (voxel_step_size > 0.0f) {
353 step_size =
fminf(voxel_step_size, step_size);
359 if (step_size == FLT_MAX) {
364 step_size *= step_rate;
390 if (
static_cast<Volume *
>(geom)->get_object_space()) {
415 float pass_id = ob->pass_id;
416 float random_number = (
float)ob->random_id * (1.0f / (
float)0xFFFFFFFF);
418 ob->particle_index +
state->particle_offset[ob->particle_system] :
427 kobject.
alpha = ob->alpha;
434 if (geom->get_use_motion_blur()) {
435 state->have_motion =
true;
448 volume->get_velocity_scale() != 0.0f) {
461 tfm_pre = ob->motion[0];
462 tfm_post = ob->motion[ob->motion.size() - 1];
473 tfm_pre = tfm_pre * itfm;
474 tfm_post = tfm_post * itfm;
478 object_motion_pass[motion_pass_offset + 0] = tfm_pre;
479 object_motion_pass[motion_pass_offset + 1] = tfm_post;
486 if (ob->tfm_is_modified() || ob->motion_is_modified() || update_all) {
492 state->have_motion =
true;
501 static_cast<Hair *
>(geom)->get_curve_keys().size() :
505 kobject.
dupli_uv[0] = ob->dupli_uv[0];
506 kobject.
dupli_uv[1] = ob->dupli_uv[1];
507 int totalsteps = geom->get_motion_steps();
508 kobject.
numsteps = (totalsteps - 1) / 2;
511 static_cast<Mesh *
>(geom)->get_verts().
size() :
516 if (ob->asset_name_is_modified() || update_all) {
524 (1.0f - 0.5f * ob->shadow_terminator_shading_offset);
531 if (ob->is_caustics_caster) {
534 if (ob->is_caustics_receiver) {
539 if (ob->use_holdout) {
543 state->object_volume_step[ob->
index] = FLT_MAX;
547 state->have_curves =
true;
550 state->have_points =
true;
553 state->have_volumes =
true;
579 if (
Geometry *
const geom = ob->geometry) {
581 prim_offset = ((
Hair *
const)geom)->curve_segment_offset;
584 prim_offset = geom->prim_offset;
588 object_prim_offset[obj_index] = prim_offset;
599 state.have_motion =
false;
600 state.have_curves =
false;
601 state.have_points =
false;
602 state.have_volumes =
false;
604 state.queue_start_object = 0;
619 uint motion_offset = 0;
622 *motion_offsets = motion_offset;
627 motion_offset += ob->motion.size();
636 int numparticles = 1;
638 state.particle_offset[psys] = numparticles;
647 static const int OBJECTS_PER_TASK = 32;
649 [&](
const blocked_range<size_t> &
r) {
650 for (size_t i = r.begin(); i != r.end(); i++) {
651 Object *ob = state.scene->objects[i];
652 device_update_object_transform(&state, ob, update_all, scene);
656 if (progress.get_cancel()) {
660 dscene->objects.copy_to_device_if_modified();
662 dscene->object_motion_pass.copy_to_device();
665 dscene->object_motion.copy_to_device();
668 dscene->data.bvh.have_motion =
state.have_motion;
669 dscene->data.bvh.have_curves =
state.have_curves;
670 dscene->data.bvh.have_points =
state.have_points;
671 dscene->data.bvh.have_volumes =
state.have_volumes;
673 dscene->objects.clear_modified();
674 dscene->object_motion_pass.clear_modified();
675 dscene->object_motion.clear_modified();
713 scene->update_stats->object.times.add_entry({
"device_update (assign index)", time});
719 object->index = index++;
737 scene->update_stats->object.times.add_entry(
738 {
"device_update (copy objects to device)", time});
742 progress.set_status(
"Updating Objects",
"Copying Transformations to device");
743 device_update_transforms(dscene,
scene, progress);
746 if (progress.get_cancel())
754 scene->update_stats->object.times.add_entry(
755 {
"device_update (apply static transforms)", time});
759 progress.set_status(
"Updating Objects",
"Applying Static Transformations");
760 apply_static_transforms(dscene,
scene, progress);
764 object->clear_modified();
776 scene->update_stats->object.times.add_entry({
"device_update_flags", time});
780 update_flags = UPDATE_NONE;
781 need_flags_update =
false;
787 uint *object_flag = dscene->object_flag.data();
788 float *object_volume_step = dscene->object_volume_step.data();
792 bool has_volume_objects =
false;
794 if (object->geometry->has_volume) {
796 volume_objects.push_back(
object);
798 has_volume_objects =
true;
799 object_volume_step[
object->index] =
object->compute_volume_step_size();
802 object_volume_step[
object->index] = FLT_MAX;
807 if (object->geometry->has_volume) {
821 if (object->is_shadow_catcher) {
829 object->intersects_volume =
false;
830 foreach (
Object *volume_object, volume_objects) {
831 if (
object == volume_object) {
836 object->intersects_volume =
true;
841 else if (has_volume_objects) {
850 dscene->object_flag.copy_to_device();
851 dscene->object_volume_step.copy_to_device();
853 dscene->object_flag.clear_modified();
854 dscene->object_volume_step.clear_modified();
872 if (
mesh->patch_table) {
884 size_t attr_map_offset =
object->attr_map_offset;
887 if (attr_map_offset == 0) {
918 map<Geometry *, int> geometry_users;
925 map<Geometry *, int>::iterator it = geometry_users.find(object->geometry);
927 if (it == geometry_users.end())
928 geometry_users[
object->geometry] = 1;
963 object->apply_transform(apply_to_motion);
982 update_flags |= flag;
1020 string manifest =
"{";
1022 unordered_set<ustring, ustringHash> objects;
1024 if (objects.count(object->
name)) {
1027 objects.insert(object->
name);
1031 manifest[manifest.size() - 1] =
'}';
1037 string manifest =
"{";
1038 unordered_set<ustring, ustringHash> assets;
1040 if (assets.count(ob->asset_name)) {
1043 assets.insert(ob->asset_name);
1045 manifest +=
string_printf(
"\"%s\":\"%08x\",", ob->asset_name.c_str(), hash_asset);
1047 manifest[manifest.size() - 1] =
'}';
typedef float(TangentPoint)[2]
_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 GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_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
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a color
__forceinline int reduce_min(const avxi &v)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
list< Attribute > attributes
Attribute * find(ustring name) const
ImageHandle & data_voxel()
device_vector< DecomposedTransform > object_motion
device_vector< Transform > object_motion_pass
device_vector< float > object_volume_step
device_vector< uint > object_prim_offset
device_vector< uint > object_flag
device_vector< KernelObject > objects
virtual BVHLayoutMask get_bvh_layout_mask() const =0
void tag_update(Scene *scene, uint32_t flag)
bool has_true_displacement() const
virtual PrimitiveType primitive_type() const =0
bool transform_negative_scaled
void tag_update(Scene *scene, uint32_t flag)
void tag_update(Scene *scene, uint32_t flag)
string get_cryptomatte_objects(Scene *scene)
void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress &progress)
void tag_update(Scene *scene, uint32_t flag)
void device_update_object_transform(UpdateObjectTransformState *state, Object *ob, bool update_all, const Scene *scene)
void device_free(Device *device, DeviceScene *dscene, bool force_free)
string get_cryptomatte_assets(Scene *scene)
void device_update_geom_offsets(Device *device, DeviceScene *dscene, Scene *scene)
void device_update_prim_offsets(Device *device, DeviceScene *dscene, Scene *scene)
void device_update_transforms(DeviceScene *dscene, Scene *scene, Progress &progress)
void apply_static_transforms(DeviceScene *dscene, Scene *scene, Progress &progress)
void device_update_flags(Device *device, DeviceScene *dscene, Scene *scene, Progress &progress, bool bounds_valid=true)
bool has_volume_attribute_dependency
bool has_surface_emission
bool has_volume_spatial_varying
T * alloc(size_t width, size_t height=0, size_t depth=0)
void free_if_need_realloc(bool force_free)
#define CCL_NAMESPACE_END
ccl_device_inline uint particle_index(KernelGlobals kg, int particle)
@ ATTR_STD_VOLUME_VELOCITY
@ ATTR_STD_MOTION_VERTEX_POSITION
@ PATH_RAY_ALL_VISIBILITY
#define OBJECT_MOTION_PASS_SIZE
@ SD_OBJECT_HAS_VOLUME_ATTRIBUTES
@ SD_OBJECT_INTERSECTS_VOLUME
@ SD_OBJECT_HAS_VOLUME_MOTION
@ SD_OBJECT_CAUSTICS_RECEIVER
@ SD_OBJECT_SHADOW_CATCHER
@ SD_OBJECT_TRANSFORM_APPLIED
@ SD_OBJECT_HAS_VERTEX_MOTION
@ SD_OBJECT_NEGATIVE_SCALE_APPLIED
@ SD_OBJECT_CAUSTICS_CASTER
@ BVH_LAYOUT_MULTI_METAL_EMBREE
#define SHADOW_CATCHER_OBJECT_VISIBILITY(is_shadow_catcher, visibility)
ccl_device_inline float2 zero_float2()
ccl_device_inline float average(const float2 &a)
ccl_device_inline float2 fabs(const float2 &a)
ccl_device_inline float3 one_float3()
ccl_device_inline float3 zero_float3()
float util_hash_to_float(uint32_t hash)
uint32_t util_murmur_hash3(const void *key, int len, uint32_t seed)
std::unique_ptr< IDProperty, IDPropertyDeleter > create(StringRefNull prop_name, int32_t value)
Allocate a new IDProperty of type IDP_INT, set its name and value.
vec_base< T, Size > normalize(const vec_base< T, Size > &v)
void parallel_for(IndexRange range, int64_t grain_size, const Function &function)
static void update(bNodeTree *ntree)
#define SOCKET_POINT(name, ui_name, default_value,...)
#define SOCKET_FLOAT(name, ui_name, default_value,...)
#define SOCKET_INT(name, ui_name, default_value,...)
#define SOCKET_NODE(name, ui_name, node_type,...)
#define SOCKET_TRANSFORM(name, ui_name, default_value,...)
#define SOCKET_UINT(name, ui_name, default_value,...)
#define SOCKET_COLOR(name, ui_name, default_value,...)
#define SOCKET_TRANSFORM_ARRAY(name, ui_name, default_value,...)
#define SOCKET_BOOLEAN(name, ui_name, default_value,...)
#define SOCKET_POINT2(name, ui_name, default_value,...)
#define SOCKET_STRING(name, ui_name, default_value,...)
static float object_volume_density(const Transform &tfm, Geometry *geom)
CCL_NAMESPACE_BEGIN string string_printf(const char *format,...)
BoundBox transformed(const Transform *tfm) const
__forceinline bool valid() const
__forceinline float3 size() const
__forceinline bool intersects(const BoundBox &other)
__forceinline void grow(const float3 &pt)
float shadow_terminator_geometry_offset
uint attribute_map_offset
float shadow_terminator_shading_offset
static NodeType * add(const char *name, CreateFunc create, Type type=NONE, const NodeType *base=NULL)
void compute_bounds(bool motion_blur)
int motion_step(float time) const
NODE_DECLARE BoundBox bounds
vector< ParamValue > attributes
int get_device_index() const
void apply_transform(bool apply_to_motion)
float compute_volume_step_size() const
bool is_traceable() const
uint visibility_for_tracing() const
void tag_update(Scene *scene)
float motion_time(int step) const
struct LightgroupMembership * lightgroup
size_t num_points() const
MotionType need_motion() const
void tag_shadow_catcher_modified()
vector< ParticleSystem * > particle_systems
vector< Object * > objects
ObjectManager * object_manager
LightManager * light_manager
map< ustring, int > lightgroups
SceneUpdateStats * update_stats
GeometryManager * geometry_manager
@ IMAGE_DATA_TYPE_NANOVDB_FP16
@ IMAGE_DATA_TYPE_NANOVDB_FLOAT
@ IMAGE_DATA_TYPE_NANOVDB_FLOAT3
@ IMAGE_DATA_TYPE_NANOVDB_FPN