lygia
/v1.1.6
/lighting
/envMap
)get enviroment map light comming from a normal direction and acording to some roughness/metallic value. If there is no SCENE_CUBEMAP texture it creates a fake cube
Dependencies:
lygia
/v1.1.6
/sample
/equirect
.glsl
lygia
/v1.1.6
/lighting
/fakeCube
.glsl
lygia
/v1.1.6
/lighting
/toShininess
.glsl
Use:
<vec3> envMap(<vec3> _normal, <float> _roughness [, <float> _metallic])
#ifndef SAMPLE_CUBE_FNC
#define SAMPLE_CUBE_FNC(CUBEMAP, NORM, LOD) textureCube(CUBEMAP, NORM, LOD)
#endif
#ifndef ENVMAP_MAX_MIP_LEVEL
#define ENVMAP_MAX_MIP_LEVEL 3.0
#endif
#ifndef FNC_ENVMAP
#define FNC_ENVMAP
vec3 envMap(const in vec3 _normal, const in float _roughness, const in float _metallic) {
// ENVMAP overwrites cube sampling
#if defined(ENVMAP_FNC)
return ENVMAP_FNC(_normal, _roughness, _metallic);
#elif defined(SCENE_EQUIRECT)
return sampleEquirect(SCENE_EQUIRECT, _normal, 1.0 + 26.0 * _roughness).rgb;
// Cubemap sampling
#elif defined(SCENE_CUBEMAP)
return SAMPLE_CUBE_FNC( SCENE_CUBEMAP, _normal, (ENVMAP_MAX_MIP_LEVEL * _roughness) ).rgb;
// Default
#else
return fakeCube(_normal, toShininess(_roughness, _metallic));
#endif
}
vec3 envMap(const in vec3 _normal, const in float _roughness) {
return envMap(_normal, _roughness, 1.0);
}
#ifdef STR_MATERIAL
vec3 envMap(const in Material _M) {
return envMap(_M.R, _M.roughness, _M.metallic);
}
#endif
#endif
Dependencies:
lygia
/v1.1.6
/math
/powFast
.glsl
lygia
/v1.1.6
/color
/tonemap
.glsl
lygia
/v1.1.6
/lighting
/fakeCube
.glsl
lygia
/v1.1.6
/lighting
/toShininess
.glsl
Use:
<float3> envMap(<float3> _normal, <float> _roughness [, <float> _metallic])
#ifndef SAMPLE_CUBE_FNC
// #define SAMPLE_CUBE_FNC(CUBEMAP, NORM, LOD) texCUBE(CUBEMAP, NORM)
#define SAMPLE_CUBE_FNC(CUBEMAP, NORM, LOD) texCUBElod(CUBEMAP, float4(NORM, LOD) )
#endif
#ifndef ENVMAP_MAX_MIP_LEVEL
#define ENVMAP_MAX_MIP_LEVEL 3.0
#endif
#ifndef FNC_ENVMAP
#define FNC_ENVMAP
float3 envMap(float3 _normal, float _roughness, float _metallic) {
// ENVMAP overwrites cube sampling
#if defined(ENVMAP_FNC)
return ENVMAP_FNC(_normal, _roughness, _metallic);
// Cubemap sampling
#elif defined(SCENE_CUBEMAP)
float lod = ENVMAP_MAX_MIP_LEVEL * _roughness;
return SAMPLE_CUBE_FNC( SCENE_CUBEMAP, _normal, lod).rgb;
// Default
#else
return fakeCube(_normal, toShininess(_roughness, _metallic));
#endif
}
float3 envMap(float3 _normal, float _roughness) {
return envMap(_normal, _roughness, 1.0);
}
#endif
LYGIA is dual-licensed under the Prosperity License and the Patron License for sponsors and contributors.
Sponsors and contributors are automatically added to the Patron License and they can ignore the any non-commercial rule of the Prosperity Licensed software (please take a look to the exception).
It's also possible to get a permanent comercial license hook to a single and specific version of LYGIA.
Sign up for the news letter bellow, joing the LYGIA's channel on Discord or follow the Github repository