载入中...
搜索中...
未找到
AtmosphereVolume.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include <cstddef>
6#include <vector>
7
8#include <glm/mat4x4.hpp>
9#include <glm/vec3.hpp>
10#include <glm/vec4.hpp>
11
12namespace eve::graphics {
13
14class FogVolume;
15class VolumeDensityGraph;
16class SparseVolumeTexture;
17
19struct FogFroxel {
20 glm::vec3 scattering{0.f};
21 float extinction = 0.f;
22 glm::vec3 emissive{0.f};
23 float anisotropy = 0.f;
24 float lightVisibility = 1.f;
25};
26
29 glm::vec3 position{0.f};
30 glm::vec3 color{1.f};
31 float radius = 5.f;
32 float intensity = 1.f;
33 bool enabled = true;
34};
35
38public:
40 void resize(int width, int height, int depth);
42 void clear();
43
45 int getWidth() const { return width_; }
47 int getHeight() const { return height_; }
49 int getDepth() const { return depth_; }
51 std::size_t getFroxelCount() const { return media_.size(); }
52
54 void setDepthRange(float nearDistance, float farDistance);
56 float getNearDistance() const { return nearDistance_; }
58 float getFarDistance() const { return farDistance_; }
60 float sliceDistance(int z) const;
62 int sliceForDistance(float distance) const;
63
65 FogFroxel &at(int x, int y, int z);
67 const FogFroxel &at(int x, int y, int z) const;
68
78 void injectHeightFog(float baseExtinction, const glm::vec3 &albedo, float baseHeight,
79 float heightFalloff, float minWorldY, float maxWorldY);
80
91 void injectHeightFogFrustum(float baseExtinction, const glm::vec3 &albedo,
92 float baseHeight, float heightFalloff, float minWorldY,
93 float maxWorldY,
94 const glm::mat4 &invViewProj);
95
97 void injectLocalVolume(const FogVolume &volume, const glm::vec3 &worldMin,
98 const glm::vec3 &worldMax);
99
101 void injectLocalVolumeFrustum(const FogVolume &volume, const glm::mat4 &invViewProj);
102
104 void injectDensityGraph(const VolumeDensityGraph &graph, const glm::vec3 &worldMin,
105 const glm::vec3 &worldMax, float extinctionScale,
106 const glm::vec3 &albedo, float time = 0.f);
107
109 void injectSparseVolume(const SparseVolumeTexture &texture, float extinctionScale = 1.f);
110
116 void integrate(const glm::vec3 &lightColor, float phaseScale = 1.f);
117
125 void integrateLocalLights(const std::vector<VolumetricLight> &lights,
126 const glm::vec3 &worldMin, const glm::vec3 &worldMax,
127 const glm::vec3 &ambientLight);
128
130 void setLightVisibility(int x, int y, int z, float visibility);
131
139 std::size_t blendHistory(const AtmosphereVolume &history, float historyWeight,
140 float rejectionThreshold);
141
143 const glm::vec4 &integratedAt(int x, int y, int z) const;
144
151 glm::vec4 sampleIntegrated(float u, float v, float distance) const;
152
154 FogFroxel sampleMedia(float u, float v, float w) const;
155
156private:
157 std::size_t index(int x, int y, int z) const;
158
159 int width_ = 0;
160 int height_ = 0;
161 int depth_ = 0;
162 float nearDistance_ = 0.1f;
163 float farDistance_ = 100.f;
164 std::vector<FogFroxel> media_;
165 std::vector<glm::vec4> integrated_;
166};
167
168} // namespace eve::graphics
float w
Definition AnimClip.cpp:738
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
float z
Definition AnimClip.cpp:738
double volume
graphics::Texture * albedo
#define EVENGINE_API_BACKENDS
Definition Export.h:108
std::vector< eve::ProcgenProbeDesc > lights
float u
Definition Grass.cpp:233
float v
std::uint32_t height
std::uint32_t width
float distance
std::map< std::string, std::vector< std::string > > graph
Definition Package.cpp:59
uint32_t index
std::uint32_t depth
std::size_t at
Camera-frustum volume used by the volumetric fog passes and CPU references.
float getFarDistance() const
Returns the far distance.
int getHeight() const
Returns the height.
int getDepth() const
Returns the depth.
float getNearDistance() const
Returns the near distance.
std::size_t getFroxelCount() const
Returns the froxel count.
int getWidth() const
Returns the width.
Analytic local participating-media volume injected into atmospheric fog.
Definition FogVolume.h:12
Brick-sparse, pre-bakeable participating-media texture.
Compact acyclic program that evaluates procedural volume density.
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition Animation.h:25
Participating-media coefficients stored in one froxel.
Local light injected into participating media.
glm::vec4 lightColor
glm::mat4 invViewProj