lygia
/v1.1.4
/lighting
/material
/new
)Material Constructor. Designed to integrate with GlslViewer's defines https://github.com/patriciogonzalezvivo/glslViewer/wiki/GlslViewer-DEFINES#material-defines
Dependencies:
lygia
/v1.1.4
/lighting
/material
/albedo
.glsl
lygia
/v1.1.4
/lighting
/material
/specular
.glsl
lygia
/v1.1.4
/lighting
/material
/emissive
.glsl
lygia
/v1.1.4
/lighting
/material
/occlusion
.glsl
lygia
/v1.1.4
/lighting
/material
/normal
.glsl
lygia
/v1.1.4
/lighting
/material
/metallic
.glsl
lygia
/v1.1.4
/lighting
/material
/roughness
.glsl
lygia
/v1.1.4
/lighting
/material
/shininess
.glsl
lygia
/v1.1.4
/lighting
/material
.glsl
lygia
/v1.1.4
/lighting
/shadow
.glsl
lygia
/v1.1.4
/lighting
/ior
.glsl
lygia
/v1.1.4
/sample
.glsl
Use:
void materialNew(out <material> _mat)
<material> materialNew()
#ifndef SURFACE_POSITION
#define SURFACE_POSITION vec3(0.0, 0.0, 0.0)
#endif
#ifndef SHADOW_INIT
#if defined(LIGHT_SHADOWMAP) && defined(LIGHT_SHADOWMAP_SIZE) && defined(LIGHT_COORD)
#define SHADOW_INIT shadow(LIGHT_SHADOWMAP, vec2(LIGHT_SHADOWMAP_SIZE), (LIGHT_COORD).xy, (LIGHT_COORD).z)
#else
#define SHADOW_INIT 1.0
#endif
#endif
#ifndef FNC_MATERIAL_NEW
#define FNC_MATERIAL_NEW
void materialNew(out Material _mat) {
// Surface data
_mat.position = (SURFACE_POSITION).xyz;
_mat.normal = materialNormal();
#if defined(SCENE_BACK_SURFACE) && defined(RESOLUTION)
vec4 back_surface = SAMPLER_FNC(SCENE_BACK_SURFACE, gl_FragCoord.xy / RESOLUTION);
_mat.normal_back = back_surface.xyz;
#if defined(SHADING_MODEL_SUBSURFACE)
_mat.thickness = saturate(gl_FragCoord.z - back_surface.a);
#endif
#else
#if defined(SCENE_BACK_SURFACE)
_mat.normal_back = -_mat.normal;
#endif
#if defined(SHADING_MODEL_SUBSURFACE)
_mat.thickness = 0.5;
#endif
#endif
// PBR Properties
_mat.albedo = materialAlbedo();
_mat.emissive = materialEmissive();
_mat.roughness = materialRoughness();
_mat.metallic = materialMetallic();
_mat.ior = vec3(IOR_GLASS_RGB); // Index of Refraction
_mat.f0 = vec3(0.04, 0.04, 0.04); // reflectance at 0 degree
// Shade
_mat.ambientOcclusion = materialOcclusion();
_mat.shadow = SHADOW_INIT;
// Clear Coat Model
// #if defined(MATERIAL_HAS_CLEAR_COAT)
_mat.clearCoat = 0.0;
_mat.clearCoatRoughness = 0.01;
#if defined(MATERIAL_HAS_CLEAR_COAT_NORMAL)
_mat.clearCoatNormal = vec3(0.0, 0.0, 1.0);
#endif
// #endif
// SubSurface Model
#if defined(SHADING_MODEL_SUBSURFACE)
_mat.subsurfacePower = 12.234;
#endif
#if defined(MATERIAL_SUBSURFACE_COLOR)
#if defined(SHADING_MODEL_SUBSURFACE)
_mat.subsurfaceColor = vec3(1.0, 1.0, 1.0);
#else
_mat.subsurfaceColor = vec3(0.0, 0.0, 0.0);
#endif
#endif
// Cloath Model
#if defined(SHADING_MODEL_CLOTH)
_mat.sheenColor = sqrt(_mat.albedo.rgb);
#endif
}
Material materialNew() {
Material mat;
materialNew(mat);
return mat;
}
#endif
Dependencies:
lygia
/v1.1.4
/lighting
/material
/albedo
.glsl
lygia
/v1.1.4
/lighting
/material
/specular
.glsl
lygia
/v1.1.4
/lighting
/material
/emissive
.glsl
lygia
/v1.1.4
/lighting
/material
/occlusion
.glsl
lygia
/v1.1.4
/lighting
/material
/normal
.glsl
lygia
/v1.1.4
/lighting
/material
/metallic
.glsl
lygia
/v1.1.4
/lighting
/material
/roughness
.glsl
lygia
/v1.1.4
/lighting
/material
/shininess
.glsl
lygia
/v1.1.4
/lighting
/material
.glsl
lygia
/v1.1.4
/lighting
/ior
.glsl
lygia
/v1.1.4
/sample
.glsl
Use:
void materialNew(out <material> _mat)
<material> materialNew()
#ifndef SURFACE_POSITION
#define SURFACE_POSITION float3(0.0, 0.0, 0.0)
#endif
#ifndef SHADOW_INIT
#if defined(LIGHT_SHADOWMAP) && defined(LIGHT_SHADOWMAP_SIZE) && defined(LIGHT_COORD)
#define SHADOW_INIT shadow(LIGHT_SHADOWMAP, vec2(LIGHT_SHADOWMAP_SIZE), (LIGHT_COORD).xy, (LIGHT_COORD).z)
#else
#define SHADOW_INIT 1.0
#endif
#endif
#ifndef FNC_MATERIAL_NEW
#define FNC_MATERIAL_NEW
void materialNew(out Material _mat) {
// Surface data
_mat.position = (SURFACE_POSITION).xyz;
_mat.normal = materialNormal();
#if defined(SCENE_BACK_SURFACE) && defined(RESOLUTION)
vec4 back_surface = SAMPLER_FNC(SCENE_BACK_SURFACE, gl_FragCoord.xy / RESOLUTION);
_mat.normal_back = back_surface.xyz;
#if defined(SHADING_MODEL_SUBSURFACE)
_mat.thickness = saturate(gl_FragCoord.z - back_surface.a);
#endif
#else
#if defined(SCENE_BACK_SURFACE)
_mat.normal_back = -_mat.normal;
#endif
#if defined(SHADING_MODEL_SUBSURFACE)
_mat.thickness = 0.5;
#endif
#endif
// PBR Properties
_mat.albedo = materialAlbedo();
_mat.emissive = materialEmissive();
_mat.roughness = materialRoughness();
_mat.metallic = materialMetallic();
_mat.ior = float3(IOR_GLASS_RGB); // Index of Refraction
_mat.f0 = float3(0.04, 0.04, 0.04); // reflectance at 0 degree
// Shade
_mat.ambientOcclusion = materialOcclusion();
_mat.shadow = SHADOW_INIT;
// Clear Coat Model
_mat.clearCoat = 0.0;
_mat.clearCoatRoughness = 0.01;
#if defined(MATERIAL_HAS_CLEAR_COAT_NORMAL)
_mat.clearCoatNormal = float3(0.0, 0.0, 1.0);
#endif
// SubSurface Model
#if defined(SHADING_MODEL_SUBSURFACE)
_mat.subsurfacePower = 12.234;
#endif
#if defined(MATERIAL_SUBSURFACE_COLOR)
#if defined(SHADING_MODEL_SUBSURFACE)
_mat.subsurfaceColor = float3(1.0, 1.0, 1.0);
#else
_mat.subsurfaceColor = float3(0.0, 0.0, 0.0);
#endif
#endif
// Cloath Model
#if defined(SHADING_MODEL_CLOTH)
_mat.sheenColor = sqrt(_mat.albedo.rgb);
#endif
}
Material materialNew() {
Material mat;
materialNew(mat);
return mat;
}
#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