vkmEngine 1.0.0
A C++ game engine · vkmengine.com
Loading...
Searching...
No Matches
irradiance_volume.h
1#pragma once
2
3#include <cstdint>
4
5#include <glm/glm.hpp>
6
7#include "core/reflect.h"
8#include "ecs/entity.h"
9
10namespace Vkm::Engine {
11
12class Scene;
13
28 static constexpr uint32_t MAX_RESOLUTION = 64;
29
30 glm::vec3 halfExtents = glm::vec3(10.0f, 5.0f, 10.0f);
31
32 // Probe counts per axis.
33 uint32_t resolutionX = 8;
34 uint32_t resolutionY = 4;
35 uint32_t resolutionZ = 8;
36
37 float intensity = 1.0f;
38
45 float blendDistance = 1.0f;
46
52 uint32_t bakeVersion = 0;
53
62 static glm::uvec3 clampedResolution(const IrradianceVolume& volume) {
63 const auto axis = [](uint32_t asked) {
64 return asked > MAX_RESOLUTION ? MAX_RESOLUTION : asked;
65 };
66 return glm::uvec3(axis(volume.resolutionX), axis(volume.resolutionY), axis(volume.resolutionZ));
67 }
68};
69
78EntityId findIrradianceVolume(const Scene& scene);
79
80} // namespace Vkm::Engine
81
82VKM_REFLECT_BEGIN(::Vkm::Engine::IrradianceVolume)
83 VKM_F(halfExtents)
84 VKM_F(resolutionX)
85 VKM_F(resolutionY)
86 VKM_F(resolutionZ)
87 VKM_F(intensity)
88 VKM_F(blendDistance)
89 VKM_F(bakeVersion)
90VKM_REFLECT_END()
Central registry managing entities and an open set of component types.
Definition scene.h:29
Baked global illumination: a grid of irradiance probes filling a box.
Definition irradiance_volume.h:21
uint32_t bakeVersion
Bump to force a re-bake.
Definition irradiance_volume.h:52
static constexpr uint32_t MAX_RESOLUTION
Most probes one axis may carry.
Definition irradiance_volume.h:28
static glm::uvec3 clampedResolution(const IrradianceVolume &volume)
The probe grid size every reader walks; loading does not clamp, so readers clamp here.
Definition irradiance_volume.h:62
float intensity
Linear-HDR multiplier.
Definition irradiance_volume.h:37
glm::vec3 halfExtents
World units.
Definition irradiance_volume.h:30
float blendDistance
How far inside the box its light fades in, in metres.
Definition irradiance_volume.h:45