Commit: 6406a4ea2baf05e22e6d19187f699bfb43cd9d99 Author: Jeffrey Liu Date: Tue Jul 19 23:20:36 2022 -0400 Branches: soc-2022-many-lights-sampling https://developer.blender.org/rB6406a4ea2baf05e22e6d19187f699bfb43cd9d99
Merge branch 'master' into soc-2022-many-lights-sampling =================================================================== =================================================================== diff --cc intern/cycles/kernel/data_template.h index 00000000000,b06ac62a5d8..cccb00c1adc mode 000000,100644..100644 --- a/intern/cycles/kernel/data_template.h +++ b/intern/cycles/kernel/data_template.h @@@ -1,0 -1,206 +1,211 @@@ + /* SPDX-License-Identifier: Apache-2.0 + * Copyright 2011-2022 Blender Foundation */ + + #ifndef KERNEL_STRUCT_BEGIN + # define KERNEL_STRUCT_BEGIN(name, parent) + #endif + #ifndef KERNEL_STRUCT_END + # define KERNEL_STRUCT_END(name) + #endif + #ifndef KERNEL_STRUCT_MEMBER + # define KERNEL_STRUCT_MEMBER(parent, type, name) + #endif + + /* Background. */ + + KERNEL_STRUCT_BEGIN(KernelBackground, background) + /* xyz store direction, w the angle. float4 instead of float3 is used + * to ensure consistent padding/alignment across devices. */ + KERNEL_STRUCT_MEMBER(background, float4, sun) + /* Only shader index. */ + KERNEL_STRUCT_MEMBER(background, int, surface_shader) + KERNEL_STRUCT_MEMBER(background, int, volume_shader) + KERNEL_STRUCT_MEMBER(background, float, volume_step_size) + KERNEL_STRUCT_MEMBER(background, int, transparent) + KERNEL_STRUCT_MEMBER(background, float, transparent_roughness_squared_threshold) + /* Portal sampling. */ + KERNEL_STRUCT_MEMBER(background, float, portal_weight) + KERNEL_STRUCT_MEMBER(background, int, num_portals) + KERNEL_STRUCT_MEMBER(background, int, portal_offset) + /* Sun sampling. */ + KERNEL_STRUCT_MEMBER(background, float, sun_weight) + /* Importance map sampling. */ + KERNEL_STRUCT_MEMBER(background, float, map_weight) + KERNEL_STRUCT_MEMBER(background, int, map_res_x) + KERNEL_STRUCT_MEMBER(background, int, map_res_y) + /* Multiple importance sampling. */ + KERNEL_STRUCT_MEMBER(background, int, use_mis) + /* Lightgroup. */ + KERNEL_STRUCT_MEMBER(background, int, lightgroup) ++/* Light Index. */ ++KERNEL_STRUCT_MEMBER(background, int, light_index) + /* Padding. */ + KERNEL_STRUCT_MEMBER(background, int, pad1) + KERNEL_STRUCT_MEMBER(background, int, pad2) -KERNEL_STRUCT_MEMBER(background, int, pad3) + KERNEL_STRUCT_END(KernelBackground) + + /* BVH: own BVH2 if no native device acceleration struct used. */ + + KERNEL_STRUCT_BEGIN(KernelBVH, bvh) + KERNEL_STRUCT_MEMBER(bvh, int, root) + KERNEL_STRUCT_MEMBER(bvh, int, have_motion) + KERNEL_STRUCT_MEMBER(bvh, int, have_curves) + KERNEL_STRUCT_MEMBER(bvh, int, bvh_layout) + KERNEL_STRUCT_MEMBER(bvh, int, use_bvh_steps) + KERNEL_STRUCT_MEMBER(bvh, int, curve_subdivisions) + KERNEL_STRUCT_MEMBER(bvh, int, pad1) + KERNEL_STRUCT_MEMBER(bvh, int, pad2) + KERNEL_STRUCT_END(KernelBVH) + + /* Film. */ + + KERNEL_STRUCT_BEGIN(KernelFilm, film) + /* XYZ to rendering color space transform. float4 instead of float3 to + * ensure consistent padding/alignment across devices. */ + KERNEL_STRUCT_MEMBER(film, float4, xyz_to_r) + KERNEL_STRUCT_MEMBER(film, float4, xyz_to_g) + KERNEL_STRUCT_MEMBER(film, float4, xyz_to_b) + KERNEL_STRUCT_MEMBER(film, float4, rgb_to_y) + /* Rec709 to rendering color space. */ + KERNEL_STRUCT_MEMBER(film, float4, rec709_to_r) + KERNEL_STRUCT_MEMBER(film, float4, rec709_to_g) + KERNEL_STRUCT_MEMBER(film, float4, rec709_to_b) + KERNEL_STRUCT_MEMBER(film, int, is_rec709) + /* Exposuse. */ + KERNEL_STRUCT_MEMBER(film, float, exposure) + /* Passed used. */ + KERNEL_STRUCT_MEMBER(film, int, pass_flag) + KERNEL_STRUCT_MEMBER(film, int, light_pass_flag) + /* Pass offsets. */ + KERNEL_STRUCT_MEMBER(film, int, pass_stride) + KERNEL_STRUCT_MEMBER(film, int, pass_combined) + KERNEL_STRUCT_MEMBER(film, int, pass_depth) + KERNEL_STRUCT_MEMBER(film, int, pass_position) + KERNEL_STRUCT_MEMBER(film, int, pass_normal) + KERNEL_STRUCT_MEMBER(film, int, pass_roughness) + KERNEL_STRUCT_MEMBER(film, int, pass_motion) + KERNEL_STRUCT_MEMBER(film, int, pass_motion_weight) + KERNEL_STRUCT_MEMBER(film, int, pass_uv) + KERNEL_STRUCT_MEMBER(film, int, pass_object_id) + KERNEL_STRUCT_MEMBER(film, int, pass_material_id) + KERNEL_STRUCT_MEMBER(film, int, pass_diffuse_color) + KERNEL_STRUCT_MEMBER(film, int, pass_glossy_color) + KERNEL_STRUCT_MEMBER(film, int, pass_transmission_color) + KERNEL_STRUCT_MEMBER(film, int, pass_diffuse_indirect) + KERNEL_STRUCT_MEMBER(film, int, pass_glossy_indirect) + KERNEL_STRUCT_MEMBER(film, int, pass_transmission_indirect) + KERNEL_STRUCT_MEMBER(film, int, pass_volume_indirect) + KERNEL_STRUCT_MEMBER(film, int, pass_diffuse_direct) + KERNEL_STRUCT_MEMBER(film, int, pass_glossy_direct) + KERNEL_STRUCT_MEMBER(film, int, pass_transmission_direct) + KERNEL_STRUCT_MEMBER(film, int, pass_volume_direct) + KERNEL_STRUCT_MEMBER(film, int, pass_emission) + KERNEL_STRUCT_MEMBER(film, int, pass_background) + KERNEL_STRUCT_MEMBER(film, int, pass_ao) + KERNEL_STRUCT_MEMBER(film, float, pass_alpha_threshold) + KERNEL_STRUCT_MEMBER(film, int, pass_shadow) + KERNEL_STRUCT_MEMBER(film, float, pass_shadow_scale) + KERNEL_STRUCT_MEMBER(film, int, pass_shadow_catcher) + KERNEL_STRUCT_MEMBER(film, int, pass_shadow_catcher_sample_count) + KERNEL_STRUCT_MEMBER(film, int, pass_shadow_catcher_matte) + /* Cryptomatte. */ + KERNEL_STRUCT_MEMBER(film, int, cryptomatte_passes) + KERNEL_STRUCT_MEMBER(film, int, cryptomatte_depth) + KERNEL_STRUCT_MEMBER(film, int, pass_cryptomatte) + /* Adaptive sampling. */ + KERNEL_STRUCT_MEMBER(film, int, pass_adaptive_aux_buffer) + KERNEL_STRUCT_MEMBER(film, int, pass_sample_count) + /* Mist. */ + KERNEL_STRUCT_MEMBER(film, int, pass_mist) + KERNEL_STRUCT_MEMBER(film, float, mist_start) + KERNEL_STRUCT_MEMBER(film, float, mist_inv_depth) + KERNEL_STRUCT_MEMBER(film, float, mist_falloff) + /* Denoising. */ + KERNEL_STRUCT_MEMBER(film, int, pass_denoising_normal) + KERNEL_STRUCT_MEMBER(film, int, pass_denoising_albedo) + KERNEL_STRUCT_MEMBER(film, int, pass_denoising_depth) + /* AOVs. */ + KERNEL_STRUCT_MEMBER(film, int, pass_aov_color) + KERNEL_STRUCT_MEMBER(film, int, pass_aov_value) + /* Light groups. */ + KERNEL_STRUCT_MEMBER(film, int, pass_lightgroup) + /* Baking. */ + KERNEL_STRUCT_MEMBER(film, int, pass_bake_primitive) + KERNEL_STRUCT_MEMBER(film, int, pass_bake_differential) + /* Shadow catcher. */ + KERNEL_STRUCT_MEMBER(film, int, use_approximate_shadow_catcher) + /* Padding. */ + KERNEL_STRUCT_MEMBER(film, int, pad1) + KERNEL_STRUCT_MEMBER(film, int, pad2) + KERNEL_STRUCT_END(KernelFilm) + + /* Integrator. */ + + KERNEL_STRUCT_BEGIN(KernelIntegrator, integrator) + /* Emission. */ + KERNEL_STRUCT_MEMBER(integrator, int, use_direct_light) + KERNEL_STRUCT_MEMBER(integrator, int, num_distribution) ++KERNEL_STRUCT_MEMBER(integrator, int, num_distant_lights) + KERNEL_STRUCT_MEMBER(integrator, int, num_all_lights) + KERNEL_STRUCT_MEMBER(integrator, float, pdf_triangles) + KERNEL_STRUCT_MEMBER(integrator, float, pdf_lights) + KERNEL_STRUCT_MEMBER(integrator, float, light_inv_rr_threshold) + /* Bounces. */ + KERNEL_STRUCT_MEMBER(integrator, int, min_bounce) + KERNEL_STRUCT_MEMBER(integrator, int, max_bounce) + KERNEL_STRUCT_MEMBER(integrator, int, max_diffuse_bounce) + KERNEL_STRUCT_MEMBER(integrator, int, max_glossy_bounce) + KERNEL_STRUCT_MEMBER(integrator, int, max_transmission_bounce) + KERNEL_STRUCT_MEMBER(integrator, int, max_volume_bounce) + /* AO bounces. */ + KERNEL_STRUCT_MEMBER(integrator, int, ao_bounces) + KERNEL_STRUCT_MEMBER(integrator, float, ao_bounces_distance) + KERNEL_STRUCT_MEMBER(integrator, float, ao_bounces_factor) + KERNEL_STRUCT_MEMBER(integrator, float, ao_additive_factor) + /* Transparency. */ + KERNEL_STRUCT_MEMBER(integrator, int, transparent_min_bounce) + KERNEL_STRUCT_MEMBER(integrator, int, transparent_max_bounce) + KERNEL_STRUCT_MEMBER(integrator, int, transparent_shadows) + /* Caustics. */ + KERNEL_STRUCT_MEMBER(integrator, int, caustics_reflective) + KERNEL_STRUCT_MEMBER(integrator, int, caustics_refractive) + KERNEL_STRUCT_MEMBER(integrator, float, filter_glossy) + /* Seed. */ + KERNEL_STRUCT_MEMBER(integrator, int, seed) + /* Clamp. */ + KERNEL_STRUCT_MEMBER(integrator, float, sample_clamp_direct) + KERNEL_STRUCT_MEMBER(integrator, float, sample_clamp_indirect) + /* MIS. */ + KERNEL_STRUCT_MEMBER(integrator, int, use_lamp_mis) + /* Caustics. */ + KERNEL_STRUCT_MEMBER(integrator, int, use_caustics) + /* Sampling pattern. */ + KERNEL_STRUCT_MEMBER(integrator, int, sampling_pattern) + KERNEL_STRUCT_MEMBER(integrator, float, scrambling_distance) + /* Volume render. */ + KERNEL_STRUCT_MEMBER(integrator, int, use_volumes) + KERNEL_STRUCT_MEMBER(integrator, int, volume_max_steps) + KERNEL_STRUCT_MEMBER(integrator, float, volume_step_rate) + /* Shadow catcher. */ + KERNEL_STRUCT_MEMBER(integrator, int, has_shadow_catcher) + /* Closure filter. */ + KERNEL_STRUCT_MEMBER(integrator, int, filter_closures) + /* MIS debugging. */ + KERNEL_STRUCT_MEMBER(integrator, int, direct_light_sampling_type) ++/* Light tree. */ ++KERNEL_STRUCT_MEMBER(integrator, int, use_light_tree) ++KERNEL_STRUCT_MEMBER(integrator, float, splitting_threshold) + /* Padding */ + KERNEL_STRUCT_MEMBER(integrator, int, pad1) + KERNEL_STRUCT_END(KernelIntegrator) + + /* SVM. For shader specialization. */ + + KERNEL_STRUCT_BEGIN(KernelSVMUsage, svm_usage) + #define SHADER_NODE_TYPE(type) KERNEL_STRUCT_MEMBER(svm_usage, int, type) + #include "kernel/svm/node_types_template.h" + KERNEL_STRUCT_END(KernelSVMUsage) + + #undef KERNEL_STRUCT_BEGIN + #undef KERNEL_STRUCT_MEMBER + #undef KERNEL_STRUCT_END diff --cc intern/cycles/kernel/integrator/shade_background.h index 495bcb1cdaa,a7edfffd175..171b756240c --- a/intern/cycles/kernel/integrator/shade_background.h +++ b/intern/cycles/kernel/integrator/shade_background.h @@@ -66,12 -65,7 +66,11 @@@ ccl_device float3 integrator_eval_backg /* multiple importance sampling, get background light pdf for ray * direction, and compute weight with respect to BSDF pdf */ - float pdf = background_light_pdf(kg, ray_P - ray_D * mis_ray_t, ray_D); - const float pdf = background_light_pdf(kg, ray_P, ray_D); ++ float pdf = background_light_pdf(kg, ray_P, ray_D); + if (kernel_data.integrator.use_light_tree) { + const float3 N = INTEGRATOR_STATE(state, path, mis_origin_n); + pdf *= distant_lights_pdf(kg, ray_P, N, kernel_data.background.light_index); + } const float mis_weight = light_sample_mis_weight_forward(kg, mis_ray_pdf, pdf @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs