Blender V5.0
integrator.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#pragma once
6
7#include "kernel/types.h"
8
9#include "device/denoise.h" /* For the parameters and type enum. */
10#include "graph/node.h"
12#include "integrator/guiding.h"
13
15
16class Device;
17class DeviceScene;
18class Scene;
19
20class Integrator : public Node {
21 public:
23
24 NODE_SOCKET_API(int, min_bounce)
25 NODE_SOCKET_API(int, max_bounce)
26
27 NODE_SOCKET_API(int, max_diffuse_bounce)
28 NODE_SOCKET_API(int, max_glossy_bounce)
29 NODE_SOCKET_API(int, max_transmission_bounce)
30 NODE_SOCKET_API(int, max_volume_bounce)
31
32#ifdef WITH_CYCLES_DEBUG
33 NODE_SOCKET_API(DirectLightSamplingType, direct_light_sampling_type)
34#endif
35
36 NODE_SOCKET_API(int, transparent_min_bounce)
37 NODE_SOCKET_API(int, transparent_max_bounce)
38
39 NODE_SOCKET_API(int, ao_bounces)
40 NODE_SOCKET_API(float, ao_factor)
41 NODE_SOCKET_API(float, ao_distance)
42 NODE_SOCKET_API(float, ao_additive_factor)
43
44 NODE_SOCKET_API(bool, volume_ray_marching)
45 NODE_SOCKET_API(int, volume_max_steps)
46 NODE_SOCKET_API(float, volume_step_rate)
47
48 NODE_SOCKET_API(bool, use_guiding);
49 NODE_SOCKET_API(bool, deterministic_guiding);
50 NODE_SOCKET_API(bool, use_surface_guiding);
51 NODE_SOCKET_API(float, surface_guiding_probability);
52 NODE_SOCKET_API(bool, use_volume_guiding);
53 NODE_SOCKET_API(float, volume_guiding_probability);
54 NODE_SOCKET_API(int, guiding_training_samples);
55 NODE_SOCKET_API(bool, use_guiding_direct_light);
56 NODE_SOCKET_API(bool, use_guiding_mis_weights);
57 NODE_SOCKET_API(GuidingDistributionType, guiding_distribution_type);
58 NODE_SOCKET_API(GuidingDirectionalSamplingType, guiding_directional_sampling_type);
59 NODE_SOCKET_API(float, guiding_roughness_threshold);
60
61 NODE_SOCKET_API(bool, caustics_reflective)
62 NODE_SOCKET_API(bool, caustics_refractive)
63 NODE_SOCKET_API(float, filter_glossy)
64
65 NODE_SOCKET_API(bool, use_direct_light);
66 NODE_SOCKET_API(bool, use_indirect_light);
67 NODE_SOCKET_API(bool, use_diffuse);
68 NODE_SOCKET_API(bool, use_glossy);
69 NODE_SOCKET_API(bool, use_transmission);
70 NODE_SOCKET_API(bool, use_emission);
71
73
74 NODE_SOCKET_API(float, sample_clamp_direct)
75 NODE_SOCKET_API(float, sample_clamp_indirect)
76 NODE_SOCKET_API(bool, motion_blur)
77
78 /* Maximum number of samples, beyond which we are likely to run into
79 * precision issues for sampling patterns. */
80 static const int MAX_SAMPLES = (1 << 24);
81
82 NODE_SOCKET_API(int, aa_samples)
83
84 NODE_SOCKET_API(bool, use_sample_subset)
85 NODE_SOCKET_API(int, sample_subset_offset)
86 NODE_SOCKET_API(int, sample_subset_length)
87
88 NODE_SOCKET_API(bool, use_light_tree)
89 NODE_SOCKET_API(float, light_sampling_threshold)
90
91 NODE_SOCKET_API(bool, use_adaptive_sampling)
92 NODE_SOCKET_API(int, adaptive_min_samples)
93 NODE_SOCKET_API(float, adaptive_threshold)
94
95 NODE_SOCKET_API(SamplingPattern, sampling_pattern)
96 NODE_SOCKET_API(float, scrambling_distance)
97
98 NODE_SOCKET_API(bool, use_denoise);
100 NODE_SOCKET_API(int, denoise_start_sample);
101 NODE_SOCKET_API(bool, use_denoise_pass_albedo);
102 NODE_SOCKET_API(bool, use_denoise_pass_normal);
103 NODE_SOCKET_API(DenoiserPrefilter, denoiser_prefilter);
104 NODE_SOCKET_API(bool, denoise_use_gpu);
106
107 enum : uint32_t {
109 OBJECT_MANAGER = (1 << 1),
110
111 /* tag everything in the manager for an update */
113
115 };
116
117 Integrator();
118 ~Integrator() override;
119
120 void device_update(Device *device, DeviceScene *dscene, Scene *scene);
121 void device_free(Device *device, DeviceScene *dscene, bool force_free = false);
122
123 void tag_update(Scene *scene, const uint32_t flag);
124
126
129 GuidingParams get_guiding_params(const Device *device) const;
130};
131
unsigned int uint
static unsigned long seed
Definition btSoftBody.h:39
void tag_update(Scene *scene, const uint32_t flag)
void device_update(Device *device, DeviceScene *dscene, Scene *scene)
DenoiseParams get_denoise_params() const
~Integrator() override
NODE_DECLARE NODE_SOCKET_API(bool, use_guiding)
AdaptiveSampling get_adaptive_sampling() const
void device_free(Device *device, DeviceScene *dscene, bool force_free=false)
GuidingParams get_guiding_params(const Device *device) const
static const int MAX_SAMPLES
Definition integrator.h:80
uint get_kernel_features() const
DenoiserQuality
Definition denoise.h:41
DenoiserPrefilter
Definition denoise.h:25
DenoiserType
Definition denoise.h:11
#define CCL_NAMESPACE_END
#define NODE_SOCKET_API(type_, name)
Definition graph/node.h:55
DirectLightSamplingType
GuidingDirectionalSamplingType
SamplingPattern
GuidingDistributionType
#define NODE_DECLARE
Definition node_type.h:145
Node(const NodeType *type, ustring name=ustring())
uint8_t flag
Definition wm_window.cc:145