|
VisuTwin Canvas
C++ 3D Engine — Metal Backend
|
#include <scene/graphics/envLighting.h>
Static Public Member Functions | |
| static Texture * | generateAtlas (GraphicsDevice *device, Texture *source, int size=512, int numReflectionSamples=1024, int numAmbientSamples=2048) |
| static std::vector< uint8_t > | generateAtlasRaw (const float *srcData, int srcW, int srcH, int size=512, int numReflectionSamples=1024, int numAmbientSamples=2048) |
| static Texture * | generateSkyboxCubemap (GraphicsDevice *device, Texture *source, int size=0) |
Helper class to support prefiltering lighting data.
Generates a 512x512 RGBP environment atlas from an HDR equirectangular source texture. The atlas layout matches what the Metal shader's mapRoughnessUv() / decodeRGBP() consume:
Mipmaps section (cubemap -> equirect, direct resample): level 0: rect(0, 0, 512, 256) level 1: rect(256, 256, 256, 128) level 2: rect(384, 384, 128, 64) level 3: rect(448, 448, 64, 32) level 4: rect(480, 480, 32, 16) level 5: rect(496, 496, 16, 8) level 6: rect(504, 504, 8, 4)
Reflections section (GGX prefiltered): blur 1: rect(0, 256, 256, 128) specularPower=512 blur 2: rect(0, 384, 128, 64) specularPower=128 blur 3: rect(0, 448, 64, 32) specularPower=32 blur 4: rect(0, 480, 32, 16) specularPower=8 blur 5: rect(0, 496, 16, 8) specularPower=2 blur 6: rect(0, 504, 8, 4) specularPower=1
Ambient section (Lambert irradiance): rect(128, 384, 64, 32)
Definition at line 48 of file envLighting.h.
|
static |
Generate a 512x512 RGBP atlas from an HDR equirectangular texture.
| device | GraphicsDevice for texture creation. |
| source | RGBA32F equirectangular texture loaded from .hdr file. |
| size | Output atlas size (default 512). |
| numReflectionSamples | Samples for GGX convolution (default 1024). |
| numAmbientSamples | Samples for Lambert convolution (default 2048). |
Definition at line 742 of file envLighting.cpp.
References visutwin::canvas::FILTER_LINEAR, visutwin::canvas::TextureOptions::format, visutwin::canvas::Texture::getLevel(), visutwin::canvas::Texture::height(), visutwin::canvas::TextureOptions::height, visutwin::canvas::TextureOptions::magFilter, visutwin::canvas::TextureOptions::minFilter, visutwin::canvas::TextureOptions::mipmaps, visutwin::canvas::TextureOptions::name, visutwin::canvas::PIXELFORMAT_RGBA8, visutwin::canvas::RGBP, visutwin::canvas::Texture::width(), and visutwin::canvas::TextureOptions::width.
|
static |
CPU-only atlas generation from raw RGBA32F equirectangular pixel data. Returns a vector of RGBA8 RGBP-encoded pixels (size*size*4 bytes). No GraphicsDevice or Texture objects required.
| srcData | RGBA32F interleaved pixel data (4 floats per pixel). |
| srcW | Source width in pixels. |
| srcH | Source height in pixels. |
| size | Output atlas size (default 512). |
| numReflectionSamples | Samples for GGX convolution (default 1024). |
| numAmbientSamples | Samples for Lambert convolution (default 2048). |
Definition at line 862 of file envLighting.cpp.
|
static |
Generate a high-resolution cubemap from an HDR equirectangular source. EnvLighting.generateSkyboxCubemap()
The cubemap is used for rendering the skybox at full source resolution, while the envAtlas (512x512) is used only for PBR lighting (reflections/ambient).
| device | GraphicsDevice for texture creation. |
| source | RGBA32F equirectangular texture loaded from .hdr file. |
| size | Cubemap face size. 0 = auto (source.width / 4). |
Definition at line 941 of file envLighting.cpp.
References visutwin::canvas::TextureOptions::cubemap, visutwin::canvas::FILTER_LINEAR, visutwin::canvas::TextureOptions::format, visutwin::canvas::Texture::getLevel(), visutwin::canvas::Texture::height(), visutwin::canvas::TextureOptions::height, visutwin::canvas::TextureOptions::magFilter, visutwin::canvas::TextureOptions::minFilter, visutwin::canvas::TextureOptions::mipmaps, visutwin::canvas::TextureOptions::name, visutwin::canvas::PIXELFORMAT_RGBA8, visutwin::canvas::RGBP, visutwin::canvas::Texture::width(), and visutwin::canvas::TextureOptions::width.