VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
visutwin::canvas::EnvLighting Class Reference

#include <scene/graphics/envLighting.h>

Static Public Member Functions

static TexturegenerateAtlas (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 TexturegenerateSkyboxCubemap (GraphicsDevice *device, Texture *source, int size=0)

Detailed Description

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.

Member Function Documentation

◆ generateAtlas()

Texture * visutwin::canvas::EnvLighting::generateAtlas ( GraphicsDevice * device,
Texture * source,
int size = 512,
int numReflectionSamples = 1024,
int numAmbientSamples = 2048 )
static

Generate a 512x512 RGBP atlas from an HDR equirectangular texture.

Parameters
deviceGraphicsDevice for texture creation.
sourceRGBA32F equirectangular texture loaded from .hdr file.
sizeOutput atlas size (default 512).
numReflectionSamplesSamples for GGX convolution (default 1024).
numAmbientSamplesSamples for Lambert convolution (default 2048).
Returns
Newly created RGBA8 RGBP-encoded atlas texture.

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.

◆ generateAtlasRaw()

std::vector< uint8_t > visutwin::canvas::EnvLighting::generateAtlasRaw ( const float * srcData,
int srcW,
int srcH,
int size = 512,
int numReflectionSamples = 1024,
int numAmbientSamples = 2048 )
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.

Parameters
srcDataRGBA32F interleaved pixel data (4 floats per pixel).
srcWSource width in pixels.
srcHSource height in pixels.
sizeOutput atlas size (default 512).
numReflectionSamplesSamples for GGX convolution (default 1024).
numAmbientSamplesSamples for Lambert convolution (default 2048).

Definition at line 862 of file envLighting.cpp.

◆ generateSkyboxCubemap()

Texture * visutwin::canvas::EnvLighting::generateSkyboxCubemap ( GraphicsDevice * device,
Texture * source,
int size = 0 )
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).

Parameters
deviceGraphicsDevice for texture creation.
sourceRGBA32F equirectangular texture loaded from .hdr file.
sizeCubemap face size. 0 = auto (source.width / 4).
Returns
Newly created RGBA8 cubemap texture (6 faces, no mipmaps).

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.


The documentation for this class was generated from the following files: