From: Mikko Rasa Date: Sat, 19 Mar 2022 07:57:38 +0000 (+0200) Subject: Move environment map handling to its own shader file X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=commitdiff_plain;h=857c2db0fb3112b750b618625649d12e13d9ae1a Move environment map handling to its own shader file --- diff --git a/shaderlib/common.glsl b/shaderlib/common.glsl index 6bac9c37..300726dc 100644 --- a/shaderlib/common.glsl +++ b/shaderlib/common.glsl @@ -1,14 +1,7 @@ import msp_interface; import shadow; -layout(set=0) uniform EnvMap -{ - mat3 env_world_matrix; -}; - layout(set=1) uniform sampler2D normal_map; -layout(set=0) uniform samplerCube environment_map; -layout(set=0) uniform samplerCube irradiance_map; layout(constant_id=auto) const bool use_instancing = false; layout(constant_id=auto) const bool use_normal_map = false; @@ -102,23 +95,6 @@ virtual IncomingLight get_incoming_light(int index, vec3 world_pos) return IncomingLight(rel_pos/d, light_sources[index].color*attenuation); } -virtual vec3 get_environment_sample(vec3 direction, float roughness) -{ - float lod = (2-roughness)*roughness*(textureQueryLevels(environment_map)-1); - return textureLod(environment_map, env_world_matrix*direction, lod).rgb; -} - -virtual vec3 get_reflection(vec3 normal, vec3 look) -{ - vec3 reflect_dir = reflect(look, normal); - return get_environment_sample(reflect_dir, 0.0); -} - -virtual vec3 get_irradiance_sample(vec3 normal) -{ - return texture(irradiance_map, env_world_matrix*normal).rgb; -} - vec3 apply_fog(vec3 color) { float fog_value = exp(fog_coord*fog_density); diff --git a/shaderlib/cooktorrance.glsl b/shaderlib/cooktorrance.glsl index fe6179b7..e942b49e 100644 --- a/shaderlib/cooktorrance.glsl +++ b/shaderlib/cooktorrance.glsl @@ -1,5 +1,6 @@ import msp_interface; import common; +import environment; import shadow; struct PbrMaterialParameters diff --git a/shaderlib/environment.glsl b/shaderlib/environment.glsl new file mode 100644 index 00000000..b5f0cdfb --- /dev/null +++ b/shaderlib/environment.glsl @@ -0,0 +1,26 @@ +layout(set=0) uniform EnvMap +{ + mat3 env_world_matrix; +}; + +layout(set=0) uniform samplerCube environment_map; +layout(set=0) uniform samplerCube irradiance_map; + +#pragma MSP stage(fragment) +virtual vec3 get_environment_sample(vec3 direction, float roughness) +{ + float lod = (2-roughness)*roughness*(textureQueryLevels(environment_map)-1); + return textureLod(environment_map, env_world_matrix*direction, lod).rgb; +} + +virtual vec3 get_reflection(vec3 normal, vec3 look) +{ + vec3 reflect_dir = reflect(look, normal); + return get_environment_sample(reflect_dir, 0.0); +} + +virtual vec3 get_irradiance_sample(vec3 normal) +{ + return texture(irradiance_map, env_world_matrix*normal).rgb; +} +