Unravel Engine C++ Reference
Loading...
Searching...
No Matches
pipeline.h
Go to the documentation of this file.
1#pragma once
2
3#include <engine/ecs/ecs.h>
10
11#include <cstdint>
12
13
14#include "passes/assao_pass.h"
18#include "passes/blit_pass.h"
19#include "passes/fxaa_pass.h"
20#include "passes/hiz_pass.h"
22#include "passes/ssr_pass.h"
23#include "passes/ssil_pass.h"
24#include "passes/bloom_pass.h"
26#include "passes/taa_pass.h"
27#include "volume_resolver.h"
28
32
33#include <base/basetypes.hpp>
34#include <context/context.hpp>
35
36#include <hpp/small_vector.hpp>
37#include <map>
38#include <memory>
39#include <vector>
40
41
42namespace unravel
43{
44namespace rendering
45{
51
52using visibility_set_models_t = hpp::small_vector<visibility_data>;
53
93{
94public:
95 using uptr = std::unique_ptr<pipeline>;
96 using sptr = std::shared_ptr<pipeline>;
97 using wptr = std::weak_ptr<pipeline>;
98
103 enum visibility_query : uint32_t
104 {
105 not_specified = 1 << 0,
106 is_dirty = 1 << 1,
107 is_static = 1 << 2,
109 };
110
111 using visibility_flags = uint32_t;
112 using pipeline_flags = uint32_t;
113
118 enum class pipeline_run_type : std::uint8_t
119 {
121 camera = 0,
124 };
125
127 {
129
131
133 pipeline_flags pflags = 0xFFFFFFFFu;
134
135 std::function<void(assao_pass::run_params& params)> fill_assao_params;
137 std::function<void(bloom_pass::run_params& params)> fill_bloom_params;
138 std::function<void(tonemapping_pass::run_params& params)> fill_hdr_params;
139 std::function<void(fxaa_pass::run_params& params)> fill_fxaa_params;
140 std::function<void(taa_pass::run_params& params)> fill_taa_params;
143 std::function<void(camera&, const usize32_t& viewport_size)> apply_taa_params;
144 std::function<void(ssr_pass::run_params& params)> fill_ssr_params;
145 std::function<void(ssil_pass::run_params& params)> fill_ssil_params;
146 };
147
148 pipeline() = default;
149 virtual ~pipeline() = default;
150
151 virtual auto init(rtti::context& ctx) -> bool;
152
166 virtual void gather_visible_models(scene& scn,
167 const camera* cam,
168 visibility_flags query,
169 const layer_mask& render_mask,
170 delta_t dt,
171 const std::function<void(entt::handle entity, const lod_data& lod_data)>& lod_data_callback,
172 const camera* lod_reference_cam = nullptr);
173
179 static auto get_shadow_lod_bias() -> float;
180 static void set_shadow_lod_bias(float bias);
181
192 virtual auto run_pipeline(scene& scn,
193 const camera& camera,
194 gfx::render_view& rview,
195 delta_t dt,
196 const run_params& params,
197 layer_mask render_mask = layer_mask{
199
210 virtual void run_pipeline(const gfx::frame_buffer::ptr& output,
211 scene& scn,
212 const camera& camera,
213 gfx::render_view& rview,
214 delta_t dt,
215 const run_params& params,
217
218 virtual void set_debug_pass(int pass) = 0;
219
220 virtual void run_ui_pass(scene& scn,
221 const camera& camera,
222 gfx::render_view& rview,
223 const gfx::frame_buffer::ptr& output);
224
225 virtual void run_particle_pass(scene& scn,
226 const camera& camera,
227 gfx::render_view& rview,
228 const gfx::frame_buffer::ptr& output);
229
230 virtual auto create_run_params(entt::handle camera_ent) const -> rendering::pipeline::run_params;
231 virtual auto create_run_params(entt::handle camera_ent, scene* scn, const camera* cam) const -> rendering::pipeline::run_params;
232
234 {
235 return stats_;
236 }
237
238protected:
252
253 std::unique_ptr<gpu_program> particle_program_{};
254 std::unique_ptr<gpu_program> particle_program_instanced_{};
255 std::unique_ptr<gpu_program> particle_program_instanced_mask_{};
256 std::unique_ptr<gpu_program> world_quad_program_{};
257
259
260
261 entt::registry cache_registry_;
262 entt::entity cache_entity_;
263};
264} // namespace rendering
265} // namespace unravel
Class representing a camera. Contains functionality for manipulating and updating a camera....
Definition camera.h:62
Performs GGX prefiltering on six 2D face textures to produce a filtered cubemap.
auto get_stats() -> pipeline_stats &
Definition pipeline.h:233
virtual void run_particle_pass(scene &scn, const camera &camera, gfx::render_view &rview, const gfx::frame_buffer::ptr &output)
Definition pipeline.cpp:548
virtual auto init(rtti::context &ctx) -> bool
Definition pipeline.cpp:58
visibility_query
Flags for visibility queries.
Definition pipeline.h:104
@ not_specified
No specific visibility query.
Definition pipeline.h:105
@ is_dirty
Query for dirty entities.
Definition pipeline.h:106
@ is_static
Query for static entities.
Definition pipeline.h:107
@ is_shadow_caster
Query for shadow casting entities.
Definition pipeline.h:108
virtual ~pipeline()=default
atmospheric_pass_skybox atmospheric_pass_skybox_
Definition pipeline.h:242
static auto get_shadow_lod_bias() -> float
LOD bias applied on top of the main selection when rendering shadows. 0 = shadows use the same LOD th...
Definition pipeline.cpp:100
prefilter_pass prefilter_pass_
Definition pipeline.h:239
entt::registry cache_registry_
Definition pipeline.h:261
virtual auto run_pipeline(scene &scn, const camera &camera, gfx::render_view &rview, delta_t dt, const run_params &params, layer_mask render_mask=layer_mask{ layer_reserved::everything_layer}) -> gfx::frame_buffer::ptr=0
Renders the entire scene from the camera's perspective.
pipeline_run_type
Describes which high-level pipeline path is executing. Pass enablement is controlled separately via r...
Definition pipeline.h:119
@ reflection_probe_capture
Single cubemap face capture for reflection probe baking.
@ camera
Main camera / viewport rendering (post-processing, UI, probe build, etc.).
std::unique_ptr< gpu_program > particle_program_instanced_mask_
Definition pipeline.h:255
virtual void run_pipeline(const gfx::frame_buffer::ptr &output, scene &scn, const camera &camera, gfx::render_view &rview, delta_t dt, const run_params &params, layer_mask render_mask=layer_mask{layer_reserved::everything_layer})=0
Renders the entire scene from the camera's perspective to the specified output.
virtual void run_ui_pass(scene &scn, const camera &camera, gfx::render_view &rview, const gfx::frame_buffer::ptr &output)
Definition pipeline.cpp:417
auto_exposure_pass auto_exposure_pass_
Definition pipeline.h:244
virtual void set_debug_pass(int pass)=0
atmospheric_pass_perez atmospheric_pass_perez_
Definition pipeline.h:241
virtual void gather_visible_models(scene &scn, const camera *cam, visibility_flags query, const layer_mask &render_mask, delta_t dt, const std::function< void(entt::handle entity, const lod_data &lod_data)> &lod_data_callback, const camera *lod_reference_cam=nullptr)
Gathers visible models from the scene based on the given query.
Definition pipeline.cpp:110
tonemapping_pass tonemapping_pass_
Definition pipeline.h:248
std::shared_ptr< pipeline > sptr
Definition pipeline.h:96
static void set_shadow_lod_bias(float bias)
Definition pipeline.cpp:105
std::weak_ptr< pipeline > wptr
Definition pipeline.h:97
uint32_t visibility_flags
Type alias for visibility flags.
Definition pipeline.h:111
hiz_pass hiz_pass_
Hi-Z buffer generation pass.
Definition pipeline.h:250
std::unique_ptr< gpu_program > particle_program_instanced_
Definition pipeline.h:254
std::unique_ptr< gpu_program > world_quad_program_
Definition pipeline.h:256
std::unique_ptr< pipeline > uptr
Definition pipeline.h:95
virtual auto create_run_params(entt::handle camera_ent) const -> rendering::pipeline::run_params
Definition pipeline.cpp:231
std::unique_ptr< gpu_program > particle_program_
Definition pipeline.h:253
HDR temporal anti-aliasing resolve (depth reprojection). Phase 2: optional velocity buffer.
Definition taa_pass.h:16
std::chrono::duration< float > delta_t
hpp::small_vector< visibility_data > visibility_set_models_t
Definition pipeline.h:52
@ everything_layer
Definition layer_mask.h:16
entt::handle entity
Contains level of detail (LOD) data for an entity per view. Uses distance-based hysteresis for stable...
Definition model.h:34
std::function< void(assao_pass::run_params &params)> fill_assao_params
Definition pipeline.h:135
std::function< void(auto_exposure_pass::run_params &params)> fill_auto_exposure_params
Definition pipeline.h:136
std::function< void(taa_pass::run_params &params)> fill_taa_params
Definition pipeline.h:140
pipeline_flags pflags
Deferred pipeline only: bitmask of enabled passes (deferred::pipeline_steps).
Definition pipeline.h:133
std::function< void(ssr_pass::run_params &params)> fill_ssr_params
Definition pipeline.h:144
std::function< void(bloom_pass::run_params &params)> fill_bloom_params
Definition pipeline.h:137
std::function< void(tonemapping_pass::run_params &params)> fill_hdr_params
Definition pipeline.h:138
std::function< void(ssil_pass::run_params &params)> fill_ssil_params
Definition pipeline.h:145
std::function< void(fxaa_pass::run_params &params)> fill_fxaa_params
Definition pipeline.h:139
std::function< void(camera &, const usize32_t &viewport_size)> apply_taa_params
Definition pipeline.h:143
void add_batch_stats(const batch_stats &stats)
Add batch statistics to the pipeline stats.
Definition pipeline.cpp:721
void add_stats(const pipeline_stats &stats)
Definition pipeline.cpp:735
auto anything_drawn() const -> bool
Definition pipeline.h:73
Represents a scene in the ACE framework, managing entities and their relationships.
Definition scene.h:70