@@ -16,25 +16,19 @@ const vec3 normals[6] = vec3[6]
16
16
vec3 get_position(
17
17
const uint voxel)
18
18
{
19
- return vec3 (voxel >> VOXEL_X_OFFSET & VOXEL_X_MASK,
19
+ return vec3 (
20
+ voxel >> VOXEL_X_OFFSET & VOXEL_X_MASK,
20
21
voxel >> VOXEL_Y_OFFSET & VOXEL_Y_MASK,
21
22
voxel >> VOXEL_Z_OFFSET & VOXEL_Z_MASK);
22
23
}
23
24
24
- vec2 get_atlas(
25
- const vec2 position)
26
- {
27
- return vec2 (
28
- position.x / ATLAS_WIDTH * ATLAS_FACE_WIDTH,
29
- position.y / ATLAS_HEIGHT * ATLAS_FACE_HEIGHT);
30
- }
31
-
32
- vec2 get_uv(
25
+ vec3 get_uv(
33
26
const uint voxel)
34
27
{
35
- return get_atlas( vec2 (
28
+ return vec3 (
36
29
voxel >> VOXEL_U_OFFSET & VOXEL_U_MASK,
37
- voxel >> VOXEL_V_OFFSET & VOXEL_V_MASK));
30
+ voxel >> VOXEL_V_OFFSET & VOXEL_V_MASK,
31
+ voxel >> VOXEL_FACE_OFFSET & VOXEL_FACE_MASK);
38
32
}
39
33
40
34
uint get_direction(
@@ -80,10 +74,10 @@ float get_fog(
80
74
}
81
75
82
76
vec4 get_color(
83
- const sampler2D atlas,
77
+ const sampler2DArray atlas,
84
78
const sampler2D shadowmap,
85
79
const vec3 position,
86
- const vec2 uv,
80
+ const vec3 uv,
87
81
const vec3 normal,
88
82
const vec3 player_position,
89
83
const vec3 shadow_position,
@@ -98,37 +92,30 @@ vec4 get_color(
98
92
shadow_uv.x = shadow_position.x * 0.5 + 0.5 ;
99
93
shadow_uv.y = 1.0 - (shadow_position.y * 0.5 + 0.5 );
100
94
shadow_uv.z = shadow_position.z;
101
- float a ;
102
- float b ;
103
- float c ;
95
+ float ao = ssao * 0.4 ;
96
+ float ambient = 0.2 ;
97
+ float directional = 0.0 ;
104
98
const float angle = dot (normal, - shadow_vector);
105
99
const float depth = shadow_uv.z - 0.001 ;
106
- if (shadowed && ((angle < 0.0 ) || (
107
- all (greaterThanEqual (shadow_uv, vec3 (0.0 ))) &&
108
- all (lessThanEqual (shadow_uv, vec3 (1.0 ))) &&
109
- (depth > texture(shadowmap, shadow_uv.xy).x))))
110
- {
111
- a = ssao * 0.2 ;
112
- b = 0.3 ;
113
- c = 0.0 ;
114
- }
115
- else
100
+ if (! shadowed || (angle > 0.0 && (
101
+ all (lessThanEqual (shadow_uv, vec3 (0.0 ))) ||
102
+ all (greaterThanEqual (shadow_uv, vec3 (1.0 ))) ||
103
+ (depth < texture(shadowmap, shadow_uv.xy).x))))
116
104
{
117
- a = ssao * 0.4 ;
118
- b = 0.3 ;
119
- c = max (angle, 0.0 ) * 1.2 ;
105
+ directional = max (angle, 0.0 ) * 1.2 ;
120
106
}
121
107
if (! occluded)
122
108
{
123
- a = 0.7 ;
109
+ ao = 0.7 ;
124
110
}
125
111
vec4 color = texture(atlas, uv);
126
112
color.a = clamp (color.a + alpha, 0.0 , 1.0 );
127
- const vec4 composite = vec4 (color.xyz * (a + b + c), color.a) ;
113
+ const float light = ao + ambient + directional ;
128
114
const float dy = position.y - player_position.y;
129
115
const float dx = distance (position.xz, player_position.xz);
130
116
const float pitch = atan (dy, dx);
131
117
const vec4 sky = vec4 (get_sky(pitch), 1.0 );
118
+ const vec4 composite = vec4 (color.xyz * light, color.a);
132
119
return mix (composite, sky, fog);
133
120
}
134
121
0 commit comments