89 const math::vec3& camera_pos,
94 std::vector<volume_contribution> contributions;
100 float size = std::numeric_limits<float>::max();
110 const float blend_factor = compute_blend_factor(world_bounds, camera_pos, volume_comp.
blend_distance);
113 size = dims.x * dims.y * dims.z;
130 std::sort(contributions.begin(),
132 [](
const volume_contribution&
a,
const volume_contribution&
b)
134 if(a.priority != b.priority)
136 return a.priority < b.priority;
138 if(
a.is_global !=
b.is_global)
140 return a.is_global && !b.is_global;
142 if(
a.contribution !=
b.contribution)
144 return a.contribution < b.contribution;
146 return a.size >
b.size;
149 bool first_auto_exposure =
true;
150 bool first_bloom =
true;
151 bool first_tonemapping =
true;
152 bool first_assao =
true;
153 bool first_ssr =
true;
154 bool first_ssil =
true;
155 bool first_taa =
true;
156 enabled_resolver auto_exposure_enabled;
157 enabled_resolver bloom_enabled;
158 enabled_resolver tonemapping_enabled;
159 enabled_resolver fxaa_enabled;
160 enabled_resolver ssr_enabled;
161 enabled_resolver assao_enabled;
162 enabled_resolver ssil_enabled;
163 enabled_resolver taa_enabled;
165 for(
const auto& c : contributions)
167 auto handle = scn.create_handle(c.entity);
168 const float contrib = c.contribution;
170 if(
auto* ae =
handle.try_get<auto_exposure_component>(); ae && contrib > 0.0f)
172 auto_exposure_enabled.accumulate(ae->enabled, contrib);
176 first_auto_exposure =
false;
180 if(
auto* bloom =
handle.try_get<bloom_component>(); bloom && contrib > 0.0f)
182 bloom_enabled.accumulate(bloom->enabled, contrib);
190 if(
auto* tonemapping =
handle.try_get<tonemapping_component>(); tonemapping && contrib > 0.0f)
192 tonemapping_enabled.accumulate(tonemapping->enabled, contrib);
193 if(tonemapping->enabled)
196 first_tonemapping =
false;
200 if(
auto* fxaa =
handle.try_get<fxaa_component>(); fxaa && contrib > 0.0f)
202 fxaa_enabled.accumulate(fxaa->enabled, contrib);
205 if(
auto* taa =
handle.try_get<taa_component>(); taa && contrib > 0.0f)
207 taa_enabled.accumulate(taa->enabled, contrib);
215 if(
auto* ssr =
handle.try_get<ssr_component>(); ssr && contrib > 0.0f)
217 ssr_enabled.accumulate(ssr->enabled, contrib);
225 if(
auto* assao =
handle.try_get<assao_component>(); assao && contrib > 0.0f)
227 assao_enabled.accumulate(assao->enabled, contrib);
235 if(
auto* ssil =
handle.try_get<ssil_component>(); ssil && contrib > 0.0f)
237 ssil_enabled.accumulate(ssil->enabled, contrib);
246 result.has_auto_exposure = auto_exposure_enabled.resolve();
247 result.has_bloom = bloom_enabled.resolve();
248 result.has_tonemapping = tonemapping_enabled.resolve();
249 result.has_fxaa = fxaa_enabled.resolve();
250 result.has_taa = taa_enabled.resolve();
251 result.has_ssr = ssr_enabled.resolve();
252 result.has_assao = assao_enabled.resolve();
253 result.has_ssil = ssil_enabled.resolve();
Merged post-processing settings from all contributing volumes.