1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
void node_tex_environment_texco(vec3 viewvec, out vec3 worldvec)
{
#ifdef MESH_SHADER
worldvec = worldPosition;
#else
vec4 v = (ProjectionMatrix[3][3] == 0.0) ? vec4(viewvec, 1.0) : vec4(0.0, 0.0, 1.0, 1.0);
vec4 co_homogenous = (ProjectionMatrixInverse * v);
vec3 co = co_homogenous.xyz / co_homogenous.w;
# if defined(WORLD_BACKGROUND) || defined(PROBE_CAPTURE)
worldvec = mat3(ViewMatrixInverse) * co;
# else
worldvec = mat3(ModelMatrixInverse) * (mat3(ViewMatrixInverse) * co);
# endif
#endif
}
void node_tex_environment_equirectangular(vec3 co, out vec3 uv)
{
vec3 nco = normalize(co);
uv.x = -atan(nco.y, nco.x) / (2.0 * M_PI) + 0.5;
uv.y = atan(nco.z, hypot(nco.x, nco.y)) / M_PI + 0.5;
}
void node_tex_environment_mirror_ball(vec3 co, out vec3 uv)
{
vec3 nco = normalize(co);
nco.y -= 1.0;
float div = 2.0 * sqrt(max(-0.5 * nco.y, 0.0));
nco /= max(1e-8, div);
uv = 0.5 * nco.xzz + 0.5;
}
void node_tex_environment_empty(vec3 co, out vec4 color)
{
color = vec4(1.0, 0.0, 1.0, 1.0);
}
|