Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/kernel_bake.h
| Show All 18 Lines | |||||
| #include "kernel/kernel_differential.h" | #include "kernel/kernel_differential.h" | ||||
| #include "kernel/kernel_projection.h" | #include "kernel/kernel_projection.h" | ||||
| #include "kernel/kernel_shader.h" | #include "kernel/kernel_shader.h" | ||||
| #include "kernel/geom/geom.h" | #include "kernel/geom/geom.h" | ||||
| CCL_NAMESPACE_BEGIN | CCL_NAMESPACE_BEGIN | ||||
| ccl_device void kernel_displace_evaluate(ccl_global const KernelGlobals *kg, | ccl_device void kernel_displace_evaluate(KernelGlobals kg, | ||||
| ccl_global const KernelShaderEvalInput *input, | ccl_global const KernelShaderEvalInput *input, | ||||
| ccl_global float *output, | ccl_global float *output, | ||||
| const int offset) | const int offset) | ||||
| { | { | ||||
| /* Setup shader data. */ | /* Setup shader data. */ | ||||
| const KernelShaderEvalInput in = input[offset]; | const KernelShaderEvalInput in = input[offset]; | ||||
| ShaderData sd; | ShaderData sd; | ||||
| shader_setup_from_displace(kg, &sd, in.object, in.prim, in.u, in.v); | shader_setup_from_displace(kg, &sd, in.object, in.prim, in.u, in.v); | ||||
| /* Evaluate displacement shader. */ | /* Evaluate displacement shader. */ | ||||
| const float3 P = sd.P; | const float3 P = sd.P; | ||||
| shader_eval_displacement(INTEGRATOR_STATE_PASS_NULL, &sd); | shader_eval_displacement(kg, INTEGRATOR_STATE_NULL, &sd); | ||||
| float3 D = sd.P - P; | float3 D = sd.P - P; | ||||
| object_inverse_dir_transform(kg, &sd, &D); | object_inverse_dir_transform(kg, &sd, &D); | ||||
| #ifdef __KERNEL_DEBUG_NAN__ | #ifdef __KERNEL_DEBUG_NAN__ | ||||
| if (!isfinite3_safe(D)) { | if (!isfinite3_safe(D)) { | ||||
| kernel_assert(!"Cycles displacement with non-finite value detected"); | kernel_assert(!"Cycles displacement with non-finite value detected"); | ||||
| } | } | ||||
| #endif | #endif | ||||
| /* Ensure finite displacement, preventing BVH from becoming degenerate and avoiding possible | /* Ensure finite displacement, preventing BVH from becoming degenerate and avoiding possible | ||||
| * traversal issues caused by non-finite math. */ | * traversal issues caused by non-finite math. */ | ||||
| D = ensure_finite3(D); | D = ensure_finite3(D); | ||||
| /* Write output. */ | /* Write output. */ | ||||
| output[offset * 3 + 0] += D.x; | output[offset * 3 + 0] += D.x; | ||||
| output[offset * 3 + 1] += D.y; | output[offset * 3 + 1] += D.y; | ||||
| output[offset * 3 + 2] += D.z; | output[offset * 3 + 2] += D.z; | ||||
| } | } | ||||
| ccl_device void kernel_background_evaluate(ccl_global const KernelGlobals *kg, | ccl_device void kernel_background_evaluate(KernelGlobals kg, | ||||
| ccl_global const KernelShaderEvalInput *input, | ccl_global const KernelShaderEvalInput *input, | ||||
| ccl_global float *output, | ccl_global float *output, | ||||
| const int offset) | const int offset) | ||||
| { | { | ||||
| /* Setup ray */ | /* Setup ray */ | ||||
| const KernelShaderEvalInput in = input[offset]; | const KernelShaderEvalInput in = input[offset]; | ||||
| const float3 ray_P = zero_float3(); | const float3 ray_P = zero_float3(); | ||||
| const float3 ray_D = equirectangular_to_direction(in.u, in.v); | const float3 ray_D = equirectangular_to_direction(in.u, in.v); | ||||
| const float ray_time = 0.5f; | const float ray_time = 0.5f; | ||||
| /* Setup shader data. */ | /* Setup shader data. */ | ||||
| ShaderData sd; | ShaderData sd; | ||||
| shader_setup_from_background(kg, &sd, ray_P, ray_D, ray_time); | shader_setup_from_background(kg, &sd, ray_P, ray_D, ray_time); | ||||
| /* Evaluate shader. | /* Evaluate shader. | ||||
| * This is being evaluated for all BSDFs, so path flag does not contain a specific type. */ | * This is being evaluated for all BSDFs, so path flag does not contain a specific type. */ | ||||
| const int path_flag = PATH_RAY_EMISSION; | const int path_flag = PATH_RAY_EMISSION; | ||||
| shader_eval_surface<KERNEL_FEATURE_NODE_MASK_SURFACE_LIGHT>( | shader_eval_surface<KERNEL_FEATURE_NODE_MASK_SURFACE_LIGHT>( | ||||
| INTEGRATOR_STATE_PASS_NULL, &sd, NULL, path_flag); | kg, INTEGRATOR_STATE_NULL, &sd, NULL, path_flag); | ||||
| float3 color = shader_background_eval(&sd); | float3 color = shader_background_eval(&sd); | ||||
| #ifdef __KERNEL_DEBUG_NAN__ | #ifdef __KERNEL_DEBUG_NAN__ | ||||
| if (!isfinite3_safe(color)) { | if (!isfinite3_safe(color)) { | ||||
| kernel_assert(!"Cycles background with non-finite value detected"); | kernel_assert(!"Cycles background with non-finite value detected"); | ||||
| } | } | ||||
| #endif | #endif | ||||
| Show All 10 Lines | |||||