22 if (b_ob_info.
object_data.is_a(&RNA_Curves) || use_particle_hair) {
42 BL::Material material_override = view_layer.material_override;
43 Shader *default_shader = (b_ob.type() == BL::Object::type_VOLUME) ? scene->default_volume :
44 scene->default_surface;
48 for (BL::MaterialSlot &b_slot : b_ob.material_slots) {
49 if (material_override) {
50 find_shader(material_override, used_shaders, default_shader);
53 BL::ID b_material(b_slot.material());
54 find_shader(b_material, used_shaders, default_shader);
58 if (used_shaders.
size() == 0) {
59 if (material_override) {
60 find_shader(material_override, used_shaders, default_shader);
70Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
73 bool use_particle_hair,
81 b_ob_info.object_data;
90 if (geometry_synced.find(geom) != geometry_synced.end()) {
100 geom = scene->create_node<
Hair>();
103 geom = scene->create_node<
Volume>();
109 geom = scene->create_node<
Mesh>();
111 geometry_map.
add(key, geom);
115 sync = geometry_map.
update(geom, b_key_id);
125 else if (geom->get_used_shaders() != used_shaders) {
131 bool attribute_recalc =
false;
133 foreach (
Node *node, geom->get_used_shaders()) {
135 if (shader->need_update_geometry()) {
136 attribute_recalc =
true;
140 if (!attribute_recalc) {
146 geometry_synced.insert(geom);
151 geom->set_used_shaders(used_shaders);
161 Hair *hair =
static_cast<Hair *
>(geom);
162 sync_hair(b_depsgraph, b_ob_info, hair);
166 sync_volume(b_ob_info, volume);
170 sync_pointcloud(pointcloud, b_ob_info);
173 Mesh *mesh =
static_cast<Mesh *
>(geom);
174 sync_mesh(b_depsgraph, b_ob_info, mesh);
189void BlenderSync::sync_geometry_motion(BL::Depsgraph &b_depsgraph,
193 bool use_particle_hair,
197 Geometry *geom =
object->get_geometry();
199 if (geometry_motion_synced.find(geom) != geometry_motion_synced.end() ||
200 geometry_motion_attribute_synced.find(geom) != geometry_motion_attribute_synced.end())
205 geometry_motion_synced.insert(geom);
209 if (geometry_synced.find(geom) == geometry_synced.end()) {
215 if (motion_step < 0) {
224 if (b_ob_info.
object_data.is_a(&RNA_Curves) || use_particle_hair) {
225 Hair *hair =
static_cast<Hair *
>(geom);
226 sync_hair_motion(b_depsgraph, b_ob_info, hair, motion_step);
228 else if (b_ob_info.
object_data.is_a(&RNA_Volume) ||
233 else if (b_ob_info.
object_data.is_a(&RNA_PointCloud)) {
235 sync_pointcloud_motion(pointcloud, b_ob_info, motion_step);
238 Mesh *mesh =
static_cast<Mesh *
>(geom);
239 sync_mesh_motion(b_depsgraph, b_ob_info, mesh, motion_step);
static CCL_NAMESPACE_BEGIN Geometry::Type determine_geom_type(BObjectInfo &b_ob_info, bool use_particle_hair)
int motion_step(float time) const
void set_sync_status(const string &status_, const string &substatus_="")
void push_back_slow(const T &t)
void add(const K &key, T *data)
bool update(T *data, const BL::ID &id)
T * find(const BL::ID &id)
static BL::FluidDomainSettings object_fluid_gas_domain_find(BL::Object &b_ob)
#define CCL_NAMESPACE_END
static PyObject * sync_func(PyObject *, PyObject *args)
bool is_real_object_data() const
void push(TaskRunFunction &&task)