Blender V4.5
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(int, volume_max_steps)
45 NODE_SOCKET_API(float, volume_step_rate)
46
47 NODE_SOCKET_API(bool, use_guiding);
48 NODE_SOCKET_API(bool, deterministic_guiding);
49 NODE_SOCKET_API(bool, use_surface_guiding);
50 NODE_SOCKET_API(float, surface_guiding_probability);
51 NODE_SOCKET_API(bool, use_volume_guiding);
52 NODE_SOCKET_API(float, volume_guiding_probability);
53 NODE_SOCKET_API(int, guiding_training_samples);
54 NODE_SOCKET_API(bool, use_guiding_direct_light);
55 NODE_SOCKET_API(bool, use_guiding_mis_weights);
56 NODE_SOCKET_API(GuidingDistributionType, guiding_distribution_type);
57 NODE_SOCKET_API(GuidingDirectionalSamplingType, guiding_directional_sampling_type);
58 NODE_SOCKET_API(float, guiding_roughness_threshold);
59
60 NODE_SOCKET_API(bool, caustics_reflective)
61 NODE_SOCKET_API(bool, caustics_refractive)
62 NODE_SOCKET_API(float, filter_glossy)
63
64 NODE_SOCKET_API(bool, use_direct_light);
65 NODE_SOCKET_API(bool, use_indirect_light);
66 NODE_SOCKET_API(bool, use_diffuse);
67 NODE_SOCKET_API(bool, use_glossy);
68 NODE_SOCKET_API(bool, use_transmission);
69 NODE_SOCKET_API(bool, use_emission);
70
72
73 NODE_SOCKET_API(float, sample_clamp_direct)
74 NODE_SOCKET_API(float, sample_clamp_indirect)
75 NODE_SOCKET_API(bool, motion_blur)
76
77 /* Maximum number of samples, beyond which we are likely to run into
78 * precision issues for sampling patterns. */
79 static const int MAX_SAMPLES = (1 << 24);
80
81 NODE_SOCKET_API(int, aa_samples)
82
83 NODE_SOCKET_API(bool, use_sample_subset)
84 NODE_SOCKET_API(int, sample_subset_offset)
85 NODE_SOCKET_API(int, sample_subset_length)
86
87 NODE_SOCKET_API(bool, use_light_tree)
88 NODE_SOCKET_API(float, light_sampling_threshold)
89
90 NODE_SOCKET_API(bool, use_adaptive_sampling)
91 NODE_SOCKET_API(int, adaptive_min_samples)
92 NODE_SOCKET_API(float, adaptive_threshold)
93
94 NODE_SOCKET_API(SamplingPattern, sampling_pattern)
95 NODE_SOCKET_API(float, scrambling_distance)
96
97 NODE_SOCKET_API(bool, use_denoise);
99 NODE_SOCKET_API(int, denoise_start_sample);
100 NODE_SOCKET_API(bool, use_denoise_pass_albedo);
101 NODE_SOCKET_API(bool, use_denoise_pass_normal);
102 NODE_SOCKET_API(DenoiserPrefilter, denoiser_prefilter);
103 NODE_SOCKET_API(bool, denoise_use_gpu);
105
106 enum : uint32_t {
108 OBJECT_MANAGER = (1 << 1),
109
110 /* tag everything in the manager for an update */
112
114 };
115
116 Integrator();
117 ~Integrator() override;
118
119 void device_update(Device *device, DeviceScene *dscene, Scene *scene);
120 void device_free(Device *device, DeviceScene *dscene, bool force_free = false);
121
122 void tag_update(Scene *scene, const uint32_t flag);
123
125
128 GuidingParams get_guiding_params(const Device *device) const;
129};
130
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:79
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:142
Node(const NodeType *type, ustring name=ustring())
uint8_t flag
Definition wm_window.cc:139