Files
XCEngine/参考/Fermion/Boson/Resources/Shaders/EquirectToCube.glsl

44 lines
1023 B
GLSL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#type vertex
#version 450 core
layout(location = 0) in vec3 a_Position;
out vec3 v_LocalPos;
uniform mat4 u_Projection;
uniform mat4 u_View;
void main() {
v_LocalPos = a_Position;
// 只使用view的旋转部分移除平移与skybox一致
mat4 rotView = mat4(mat3(u_View));
vec4 clipPos = u_Projection * rotView * vec4(a_Position, 1.0);
gl_Position = clipPos.xyww; // 防止从立方体内部渲染时被近平面裁剪
}
#type fragment
#version 450 core
out vec4 FragColor;
in vec3 v_LocalPos;
uniform sampler2D u_EquirectangularMap;
const vec2 invAtan = vec2(0.1591, 0.3183);
vec2 SampleSphericalMap(vec3 v) {
vec2 uv = vec2(atan(v.z, v.x), asin(v.y));
uv *= invAtan;
uv += 0.5;
return uv;
}
void main() {
vec2 uv = SampleSphericalMap(normalize(v_LocalPos));
vec3 color = texture(u_EquirectangularMap, uv).rgb;
// 限制极端HDR值防止后续IBL生成时出现问题
color = min(color, vec3(500.0));
FragColor = vec4(color, 1.0);
}