Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/integrator/path_state.h
| Show First 20 Lines • Show All 85 Lines • ▼ Show 20 Lines | |||||
| #ifdef __DENOISING_FEATURES__ | #ifdef __DENOISING_FEATURES__ | ||||
| if (kernel_data.kernel_features & KERNEL_FEATURE_DENOISING) { | if (kernel_data.kernel_features & KERNEL_FEATURE_DENOISING) { | ||||
| INTEGRATOR_STATE_WRITE(state, path, flag) |= PATH_RAY_DENOISING_FEATURES; | INTEGRATOR_STATE_WRITE(state, path, flag) |= PATH_RAY_DENOISING_FEATURES; | ||||
| INTEGRATOR_STATE_WRITE(state, path, denoising_feature_throughput) = one_spectrum(); | INTEGRATOR_STATE_WRITE(state, path, denoising_feature_throughput) = one_spectrum(); | ||||
| } | } | ||||
| #endif | #endif | ||||
| } | } | ||||
| ccl_device_inline void path_state_next(KernelGlobals kg, IntegratorState state, int label) | ccl_device_inline void path_state_next(KernelGlobals kg, | ||||
| IntegratorState state, | |||||
| const int label, | |||||
| const int shader_flag) | |||||
| { | { | ||||
| uint32_t flag = INTEGRATOR_STATE(state, path, flag); | uint32_t flag = INTEGRATOR_STATE(state, path, flag); | ||||
| /* ray through transparent keeps same flags from previous ray and is | /* ray through transparent keeps same flags from previous ray and is | ||||
| * not counted as a regular bounce, transparent has separate max */ | * not counted as a regular bounce, transparent has separate max */ | ||||
| if (label & LABEL_TRANSPARENT) { | if (label & LABEL_TRANSPARENT) { | ||||
| uint32_t transparent_bounce = INTEGRATOR_STATE(state, path, transparent_bounce) + 1; | uint32_t transparent_bounce = INTEGRATOR_STATE(state, path, transparent_bounce) + 1; | ||||
| Show All 12 Lines | if (label & LABEL_TRANSPARENT) { | ||||
| return; | return; | ||||
| } | } | ||||
| uint32_t bounce = INTEGRATOR_STATE(state, path, bounce) + 1; | uint32_t bounce = INTEGRATOR_STATE(state, path, bounce) + 1; | ||||
| if (bounce >= kernel_data.integrator.max_bounce) { | if (bounce >= kernel_data.integrator.max_bounce) { | ||||
| flag |= PATH_RAY_TERMINATE_AFTER_TRANSPARENT; | flag |= PATH_RAY_TERMINATE_AFTER_TRANSPARENT; | ||||
| } | } | ||||
| flag &= ~(PATH_RAY_ALL_VISIBILITY | PATH_RAY_MIS_SKIP); | flag &= ~(PATH_RAY_ALL_VISIBILITY | PATH_RAY_MIS_SKIP | PATH_RAY_MIS_HAD_TRANSMISSION); | ||||
| #ifdef __VOLUME__ | #ifdef __VOLUME__ | ||||
| if (label & LABEL_VOLUME_SCATTER) { | if (label & LABEL_VOLUME_SCATTER) { | ||||
| /* volume scatter */ | /* volume scatter */ | ||||
| flag |= PATH_RAY_VOLUME_SCATTER; | flag |= PATH_RAY_VOLUME_SCATTER | PATH_RAY_MIS_HAD_TRANSMISSION; | ||||
| flag &= ~PATH_RAY_TRANSPARENT_BACKGROUND; | flag &= ~PATH_RAY_TRANSPARENT_BACKGROUND; | ||||
| if (!(flag & PATH_RAY_ANY_PASS)) { | if (!(flag & PATH_RAY_ANY_PASS)) { | ||||
| flag |= PATH_RAY_VOLUME_PASS; | flag |= PATH_RAY_VOLUME_PASS; | ||||
| } | } | ||||
| const int volume_bounce = INTEGRATOR_STATE(state, path, volume_bounce) + 1; | const int volume_bounce = INTEGRATOR_STATE(state, path, volume_bounce) + 1; | ||||
| INTEGRATOR_STATE_WRITE(state, path, volume_bounce) = volume_bounce; | INTEGRATOR_STATE_WRITE(state, path, volume_bounce) = volume_bounce; | ||||
| if (volume_bounce >= kernel_data.integrator.max_volume_bounce) { | if (volume_bounce >= kernel_data.integrator.max_volume_bounce) { | ||||
| ▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | #endif | ||||
| else if (label & LABEL_GLOSSY) { | else if (label & LABEL_GLOSSY) { | ||||
| flag |= PATH_RAY_GLOSSY; | flag |= PATH_RAY_GLOSSY; | ||||
| } | } | ||||
| else { | else { | ||||
| kernel_assert(label & LABEL_SINGULAR); | kernel_assert(label & LABEL_SINGULAR); | ||||
| flag |= PATH_RAY_GLOSSY | PATH_RAY_SINGULAR | PATH_RAY_MIS_SKIP; | flag |= PATH_RAY_GLOSSY | PATH_RAY_SINGULAR | PATH_RAY_MIS_SKIP; | ||||
| } | } | ||||
| /* Flag for consistent MIS weights with light tree. */ | |||||
| if (shader_flag & SD_BSDF_HAS_TRANSMISSION) { | |||||
| flag |= PATH_RAY_MIS_HAD_TRANSMISSION; | |||||
| } | |||||
| /* Render pass categories. */ | /* Render pass categories. */ | ||||
| if (!(flag & PATH_RAY_ANY_PASS) && !(flag & PATH_RAY_TRANSPARENT_BACKGROUND)) { | if (!(flag & PATH_RAY_ANY_PASS) && !(flag & PATH_RAY_TRANSPARENT_BACKGROUND)) { | ||||
| flag |= PATH_RAY_SURFACE_PASS; | flag |= PATH_RAY_SURFACE_PASS; | ||||
| } | } | ||||
| } | } | ||||
| INTEGRATOR_STATE_WRITE(state, path, flag) = flag; | INTEGRATOR_STATE_WRITE(state, path, flag) = flag; | ||||
| INTEGRATOR_STATE_WRITE(state, path, bounce) = bounce; | INTEGRATOR_STATE_WRITE(state, path, bounce) = bounce; | ||||
| ▲ Show 20 Lines • Show All 169 Lines • Show Last 20 Lines | |||||