Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/render/object.cpp
| Show First 20 Lines • Show All 259 Lines • ▼ Show 20 Lines | |||||
| { | { | ||||
| uint trace_visibility = visibility; | uint trace_visibility = visibility; | ||||
| if (is_shadow_catcher) { | if (is_shadow_catcher) { | ||||
| trace_visibility &= ~PATH_RAY_SHADOW_NON_CATCHER; | trace_visibility &= ~PATH_RAY_SHADOW_NON_CATCHER; | ||||
| } | } | ||||
| else { | else { | ||||
| trace_visibility &= ~PATH_RAY_SHADOW_CATCHER; | trace_visibility &= ~PATH_RAY_SHADOW_CATCHER; | ||||
| } | } | ||||
| bool volume_only = true; | |||||
| foreach (Shader *shader, geometry->used_shaders) { | |||||
| if (!(shader->has_volume_connected && !shader->has_surface)) { | |||||
| volume_only = false; | |||||
| break; | |||||
| } | |||||
| } | |||||
| if (volume_only) { | |||||
| trace_visibility |= PATH_RAY_CAMERA | PATH_RAY_REFLECT | PATH_RAY_TRANSMIT | PATH_RAY_DIFFUSE | | |||||
| PATH_RAY_GLOSSY | PATH_RAY_SINGULAR | PATH_RAY_TRANSPARENT; | |||||
| } | |||||
| return trace_visibility; | return trace_visibility; | ||||
| } | } | ||||
| float Object::compute_volume_step_size() const | float Object::compute_volume_step_size() const | ||||
| { | { | ||||
| if (geometry->type != Geometry::MESH) { | if (geometry->type != Geometry::MESH) { | ||||
| return FLT_MAX; | return FLT_MAX; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 491 Lines • ▼ Show 20 Lines | if (bounds_valid) { | ||||
| } | } | ||||
| } | } | ||||
| else if (has_volume_objects) { | else if (has_volume_objects) { | ||||
| /* Not really valid, but can't make more reliable in the case | /* Not really valid, but can't make more reliable in the case | ||||
| * of bounds not being up to date. | * of bounds not being up to date. | ||||
| */ | */ | ||||
| object_flag[object->index] |= SD_OBJECT_INTERSECTS_VOLUME; | object_flag[object->index] |= SD_OBJECT_INTERSECTS_VOLUME; | ||||
| } | } | ||||
| /* Pack object visibility into upper bits. */ | |||||
| uint visibility = object->visibility; | |||||
| visibility = (visibility & 0xffff) << 16; | |||||
| object_flag[object->index] |= visibility; | |||||
| } | } | ||||
| /* Copy object flag. */ | /* Copy object flag. */ | ||||
| dscene->object_flag.copy_to_device(); | dscene->object_flag.copy_to_device(); | ||||
| dscene->object_volume_step.copy_to_device(); | dscene->object_volume_step.copy_to_device(); | ||||
| } | } | ||||
| void ObjectManager::device_update_mesh_offsets(Device *, DeviceScene *dscene, Scene *scene) | void ObjectManager::device_update_mesh_offsets(Device *, DeviceScene *dscene, Scene *scene) | ||||
| ▲ Show 20 Lines • Show All 157 Lines • Show Last 20 Lines | |||||