Skip to content

Commit fd06d78

Browse files
committed
depth shading
1 parent c4fece5 commit fd06d78

13 files changed

Lines changed: 89 additions & 73 deletions

shaders/bin/chunk.vert.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{ "samplers": 0, "storage_textures": 0, "storage_buffers": 0, "uniform_buffers": 3, "inputs": [{ "name": "in.var.TEXCOORD0", "type": "uint", "location": 0 }], "outputs": [{ "name": "out.var.TEXCOORD0", "type": "float4", "location": 0 }, { "name": "out.var.TEXCOORD1", "type": "float3", "location": 1 }, { "name": "out.var.TEXCOORD2", "type": "float3", "location": 2 }, { "name": "out.var.TEXCOORD3", "type": "uint", "location": 3 }] }
1+
{ "samplers": 0, "storage_textures": 0, "storage_buffers": 0, "uniform_buffers": 3, "inputs": [{ "name": "in.var.TEXCOORD0", "type": "uint", "location": 0 }], "outputs": [{ "name": "out.var.TEXCOORD0", "type": "float4", "location": 0 }, { "name": "out.var.TEXCOORD1", "type": "float3", "location": 1 }, { "name": "out.var.TEXCOORD2", "type": "float3", "location": 2 }, { "name": "out.var.TEXCOORD3", "type": "uint", "location": 3 }, { "name": "out.var.TEXCOORD4", "type": "float2", "location": 4 }] }

shaders/bin/chunk.vert.msl

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,17 @@ struct type_UniformBuffer_2
5959
int2 ChunkPosition;
6060
};
6161

62-
constant float4 _67 = {};
62+
constant float4 _72 = {};
6363

64-
constant spvUnsafeArray<float3, 10> _66 = spvUnsafeArray<float3, 10>({ float3(0.0, 0.0, 1.0), float3(0.0, 0.0, -1.0), float3(1.0, 0.0, 0.0), float3(-1.0, 0.0, 0.0), float3(0.0, 1.0, 0.0), float3(0.0, -1.0, 0.0), float3(-0.769999980926513671875, 0.0, 0.769999980926513671875), float3(0.769999980926513671875, 0.0, -0.769999980926513671875), float3(-0.769999980926513671875, 0.0, -0.769999980926513671875), float3(0.769999980926513671875, 0.0, 0.769999980926513671875) });
64+
constant spvUnsafeArray<float3, 10> _71 = spvUnsafeArray<float3, 10>({ float3(0.0, 0.0, 1.0), float3(0.0, 0.0, -1.0), float3(1.0, 0.0, 0.0), float3(-1.0, 0.0, 0.0), float3(0.0, 1.0, 0.0), float3(0.0, -1.0, 0.0), float3(-0.769999980926513671875, 0.0, 0.769999980926513671875), float3(0.769999980926513671875, 0.0, -0.769999980926513671875), float3(-0.769999980926513671875, 0.0, -0.769999980926513671875), float3(0.769999980926513671875, 0.0, 0.769999980926513671875) });
6565

6666
struct main0_out
6767
{
6868
float4 out_var_TEXCOORD0 [[user(locn0)]];
6969
float3 out_var_TEXCOORD1 [[user(locn1)]];
7070
float3 out_var_TEXCOORD2 [[user(locn2)]];
7171
uint out_var_TEXCOORD3 [[user(locn3)]];
72+
float2 out_var_TEXCOORD4 [[user(locn4)]];
7273
float4 gl_Position [[position]];
7374
};
7475

@@ -80,15 +81,19 @@ struct main0_in
8081
vertex main0_out main0(main0_in in [[stage_in]], constant type_UniformBuffer& UniformBuffer [[buffer(0)]], constant type_UniformBuffer_1& UniformBuffer_1 [[buffer(1)]], constant type_UniformBuffer_2& UniformBuffer_2 [[buffer(2)]])
8182
{
8283
main0_out out = {};
83-
float3 _89 = float3(float((in.in_var_TEXCOORD0 >> 6u) & 31u), float((in.in_var_TEXCOORD0 >> 11u) & 255u), float((in.in_var_TEXCOORD0 >> 19u) & 31u)) + float3(int3(float3(float(UniformBuffer_2.ChunkPosition.x), 0.0, float(UniformBuffer_2.ChunkPosition.y))));
84-
float4 _90 = float4(_89.x, _89.y, _89.z, _67.w);
85-
float4 _101 = UniformBuffer_1.View * float4(_89, 1.0);
86-
_90.w = _101.z;
87-
out.gl_Position = UniformBuffer.Proj * _101;
88-
out.out_var_TEXCOORD0 = _90;
89-
out.out_var_TEXCOORD1 = _66[(in.in_var_TEXCOORD0 >> 1u) & 15u];
84+
float3 _94 = float3(float((in.in_var_TEXCOORD0 >> 6u) & 31u), float((in.in_var_TEXCOORD0 >> 11u) & 255u), float((in.in_var_TEXCOORD0 >> 19u) & 31u)) + float3(int3(float3(float(UniformBuffer_2.ChunkPosition.x), 0.0, float(UniformBuffer_2.ChunkPosition.y))));
85+
float4 _95 = float4(_94.x, _94.y, _94.z, _72.w);
86+
float4 _106 = UniformBuffer_1.View * float4(_94, 1.0);
87+
_95.w = _106.z;
88+
float4 _111 = UniformBuffer.Proj * _106;
89+
float2 _127 = ((_111.xy / float2(_111.w)) * 0.5) + float2(0.5);
90+
_127.y = 1.0 - _127.y;
91+
out.gl_Position = _111;
92+
out.out_var_TEXCOORD0 = _95;
93+
out.out_var_TEXCOORD1 = _71[(in.in_var_TEXCOORD0 >> 1u) & 15u];
9094
out.out_var_TEXCOORD2 = float3(float((in.in_var_TEXCOORD0 >> 24u) & 1u), float((in.in_var_TEXCOORD0 >> 25u) & 1u), float((in.in_var_TEXCOORD0 >> 26u) & 63u));
9195
out.out_var_TEXCOORD3 = in.in_var_TEXCOORD0;
96+
out.out_var_TEXCOORD4 = _127;
9297
return out;
9398
}
9499

shaders/bin/chunk.vert.spv

336 Bytes
Binary file not shown.

shaders/bin/transparent.frag.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{ "samplers": 2, "storage_textures": 0, "storage_buffers": 1, "uniform_buffers": 3, "inputs": [{ "name": "in.var.TEXCOORD0", "type": "float4", "location": 0 }, { "name": "in.var.TEXCOORD1", "type": "float3", "location": 1 }, { "name": "in.var.TEXCOORD2", "type": "float3", "location": 2 }, { "name": "in.var.TEXCOORD3", "type": "uint", "location": 3 }], "outputs": [{ "name": "out.var.SV_Target0", "type": "float4", "location": 0 }] }
1+
{ "samplers": 3, "storage_textures": 0, "storage_buffers": 1, "uniform_buffers": 3, "inputs": [{ "name": "in.var.TEXCOORD0", "type": "float4", "location": 0 }, { "name": "in.var.TEXCOORD1", "type": "float3", "location": 1 }, { "name": "in.var.TEXCOORD2", "type": "float3", "location": 2 }, { "name": "in.var.TEXCOORD3", "type": "uint", "location": 3 }, { "name": "in.var.TEXCOORD4", "type": "float2", "location": 4 }], "outputs": [{ "name": "out.var.SV_Target0", "type": "float4", "location": 0 }] }

shaders/bin/transparent.frag.msl

Lines changed: 54 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -42,117 +42,118 @@ struct main0_in
4242
float3 in_var_TEXCOORD1 [[user(locn1), flat]];
4343
float3 in_var_TEXCOORD2 [[user(locn2)]];
4444
uint in_var_TEXCOORD3 [[user(locn3)]];
45+
float2 in_var_TEXCOORD4 [[user(locn4)]];
4546
};
4647

47-
fragment main0_out main0(main0_in in [[stage_in]], constant type_UniformBuffer& UniformBuffer [[buffer(0)]], constant type_UniformBuffer_1& UniformBuffer_1 [[buffer(1)]], constant type_UniformBuffer_2& UniformBuffer_2 [[buffer(2)]], const device type_StructuredBuffer_Light& lightBuffer [[buffer(3)]], texture2d_array<float> atlasTexture [[texture(0)]], texture2d<float> shadowTexture [[texture(1)]], sampler atlasSampler [[sampler(0)]], sampler shadowSampler [[sampler(1)]])
48+
fragment main0_out main0(main0_in in [[stage_in]], constant type_UniformBuffer& UniformBuffer [[buffer(0)]], constant type_UniformBuffer_1& UniformBuffer_1 [[buffer(1)]], constant type_UniformBuffer_2& UniformBuffer_2 [[buffer(2)]], const device type_StructuredBuffer_Light& lightBuffer [[buffer(3)]], texture2d_array<float> atlasTexture [[texture(0)]], texture2d<float> shadowTexture [[texture(1)]], texture2d<float> positionTexture [[texture(2)]], sampler atlasSampler [[sampler(0)]], sampler shadowSampler [[sampler(1)]], sampler positionSampler [[sampler(2)]])
4849
{
4950
main0_out out = {};
50-
float4 _95 = atlasTexture.sample(atlasSampler, in.in_var_TEXCOORD2.xy, uint(rint(in.in_var_TEXCOORD2.z)));
51-
uint _100 = uint(UniformBuffer.LightCount);
52-
float3 _102;
53-
_102 = float3(0.0);
54-
float3 _103;
55-
for (uint _105 = 0u; _105 < _100; _102 = _103, _105++)
51+
float4 _103 = atlasTexture.sample(atlasSampler, in.in_var_TEXCOORD2.xy, uint(rint(in.in_var_TEXCOORD2.z)));
52+
uint _108 = uint(UniformBuffer.LightCount);
53+
float3 _110;
54+
_110 = float3(0.0);
55+
float3 _111;
56+
for (uint _113 = 0u; _113 < _108; _110 = _111, _113++)
5657
{
57-
float _118 = float((lightBuffer._m0[_105].Color & 4278190080u) >> 24u);
58-
float3 _125 = (float3(float(lightBuffer._m0[_105].X), float(lightBuffer._m0[_105].Y), float(lightBuffer._m0[_105].Z)) + float3(0.5)) - in.in_var_TEXCOORD0.xyz;
59-
float _126 = length(_125);
60-
bool _132;
61-
if (!(_126 >= _118))
58+
float _126 = float((lightBuffer._m0[_113].Color & 4278190080u) >> 24u);
59+
float3 _133 = (float3(float(lightBuffer._m0[_113].X), float(lightBuffer._m0[_113].Y), float(lightBuffer._m0[_113].Z)) + float3(0.5)) - in.in_var_TEXCOORD0.xyz;
60+
float _134 = length(_133);
61+
bool _140;
62+
if (!(_134 >= _126))
6263
{
63-
_132 = _118 <= 0.0;
64+
_140 = _126 <= 0.0;
6465
}
6566
else
6667
{
67-
_132 = true;
68+
_140 = true;
6869
}
69-
if (_132)
70+
if (_140)
7071
{
71-
_103 = _102;
72+
_111 = _110;
7273
continue;
7374
}
74-
float _146;
75-
if (_126 > 0.20000000298023223876953125)
75+
float _154;
76+
if (_134 > 0.20000000298023223876953125)
7677
{
77-
float _142 = fast::clamp(dot(in.in_var_TEXCOORD1, _125 / float3(_126)), 0.0, 1.0);
78-
if (_142 <= 0.0)
78+
float _150 = fast::clamp(dot(in.in_var_TEXCOORD1, _133 / float3(_134)), 0.0, 1.0);
79+
if (_150 <= 0.0)
7980
{
80-
_103 = _102;
81+
_111 = _110;
8182
continue;
8283
}
83-
_146 = _142;
84+
_154 = _150;
8485
}
8586
else
8687
{
87-
_146 = 1.0;
88+
_154 = 1.0;
8889
}
89-
float _149 = fast::clamp(1.0 - (_126 / _118), 0.0, 1.0);
90-
_103 = _102 + ((float3(float(lightBuffer._m0[_105].Color & 255u) * 0.0039215688593685626983642578125, float((lightBuffer._m0[_105].Color & 65280u) >> 8u) * 0.0039215688593685626983642578125, float((lightBuffer._m0[_105].Color & 16711680u) >> 16u) * 0.0039215688593685626983642578125) * _146) * (_149 * _149));
90+
float _157 = fast::clamp(1.0 - (_134 / _126), 0.0, 1.0);
91+
_111 = _110 + ((float3(float(lightBuffer._m0[_113].Color & 255u) * 0.0039215688593685626983642578125, float((lightBuffer._m0[_113].Color & 65280u) >> 8u) * 0.0039215688593685626983642578125, float((lightBuffer._m0[_113].Color & 16711680u) >> 16u) * 0.0039215688593685626983642578125) * _154) * (_157 * _157));
9192
}
92-
float _227;
93+
float _235;
9394
do
9495
{
95-
float4 _177 = UniformBuffer_1.ShadowTransform * float4(in.in_var_TEXCOORD0.xyz, 1.0);
96-
float3 _181 = _177.xyz / float3(_177.w);
97-
float2 _184 = (_181.xy * 0.5) + float2(0.5);
98-
float _186 = 1.0 - _184.y;
99-
float2 _187 = _184;
100-
_187.y = _186;
101-
float _188 = _184.x;
102-
bool _194;
103-
if (!(_188 < 0.0))
96+
float4 _185 = UniformBuffer_1.ShadowTransform * float4(in.in_var_TEXCOORD0.xyz, 1.0);
97+
float3 _189 = _185.xyz / float3(_185.w);
98+
float2 _192 = (_189.xy * 0.5) + float2(0.5);
99+
float _194 = 1.0 - _192.y;
100+
float2 _195 = _192;
101+
_195.y = _194;
102+
float _196 = _192.x;
103+
bool _202;
104+
if (!(_196 < 0.0))
104105
{
105-
_194 = _188 > 1.0;
106+
_202 = _196 > 1.0;
106107
}
107108
else
108109
{
109-
_194 = true;
110+
_202 = true;
110111
}
111-
bool _199;
112-
if (!_194)
112+
bool _207;
113+
if (!_202)
113114
{
114-
_199 = _186 < 0.0;
115+
_207 = _194 < 0.0;
115116
}
116117
else
117118
{
118-
_199 = true;
119+
_207 = true;
119120
}
120-
bool _204;
121-
if (!_199)
121+
bool _212;
122+
if (!_207)
122123
{
123-
_204 = _186 > 1.0;
124+
_212 = _194 > 1.0;
124125
}
125126
else
126127
{
127-
_204 = true;
128+
_212 = true;
128129
}
129-
if (_204)
130+
if (_212)
130131
{
131-
_227 = 0.0;
132+
_235 = 0.0;
132133
break;
133134
}
134135
if ((in.in_var_TEXCOORD3 & 1u) != 0u)
135136
{
136137
if (dot(in.in_var_TEXCOORD1, fast::normalize(float4(UniformBuffer_1.ShadowTransform[0][2], UniformBuffer_1.ShadowTransform[1][2], UniformBuffer_1.ShadowTransform[2][2], UniformBuffer_1.ShadowTransform[3][2]).xyz)) > 0.0)
137138
{
138-
_227 = 0.4000000059604644775390625;
139+
_235 = 0.4000000059604644775390625;
139140
break;
140141
}
141142
}
142-
if ((_181.z - 0.001000000047497451305389404296875) <= shadowTexture.sample(shadowSampler, _187, level(0.0)).x)
143+
if ((_189.z - 0.001000000047497451305389404296875) <= shadowTexture.sample(shadowSampler, _195, level(0.0)).x)
143144
{
144-
_227 = 0.0;
145+
_235 = 0.0;
145146
break;
146147
}
147148
else
148149
{
149-
_227 = 0.4000000059604644775390625;
150+
_235 = 0.4000000059604644775390625;
150151
break;
151152
}
152153
break; // unreachable workaround
153154
} while(false);
154-
float3 _235 = in.in_var_TEXCOORD0.xyz - UniformBuffer_2.PlayerPosition;
155-
out.out_var_SV_Target0 = float4(mix(_95.xyz * (((_102 * 2.0) + float3(0.5)) - float3(_227)), mix(float3(0.2199999988079071044921875, 0.3490000069141387939453125, 0.70200002193450927734375), float3(0.21199999749660491943359375, 0.7730000019073486328125, 0.9570000171661376953125), float3((precise::atan2(_235.y, length(float2(_235.xz))) + 1.57079637050628662109375) * 0.3183098733425140380859375)), float3(precise::min(powr(distance(in.in_var_TEXCOORD0.xz, UniformBuffer_2.PlayerPosition.xz) * 0.0040000001899898052215576171875, 2.5), 1.0))), _95.w);
155+
float3 _243 = in.in_var_TEXCOORD0.xyz - UniformBuffer_2.PlayerPosition;
156+
out.out_var_SV_Target0 = float4(mix(_103.xyz * (((_110 * 2.0) + float3(0.5)) - float3(_235)), mix(float3(0.2199999988079071044921875, 0.3490000069141387939453125, 0.70200002193450927734375), float3(0.21199999749660491943359375, 0.7730000019073486328125, 0.9570000171661376953125), float3((precise::atan2(_243.y, length(float2(_243.xz))) + 1.57079637050628662109375) * 0.3183098733425140380859375)), float3(precise::min(powr(distance(in.in_var_TEXCOORD0.xz, UniformBuffer_2.PlayerPosition.xz) * 0.0040000001899898052215576171875, 2.5), 1.0))), fast::clamp(_103.w + ((in.in_var_TEXCOORD0.y - positionTexture.sample(positionSampler, in.in_var_TEXCOORD4).y) * 0.0500000007450580596923828125), 0.0, 1.0));
156157
return out;
157158
}
158159

shaders/bin/transparent.frag.spv

512 Bytes
Binary file not shown.

shaders/blur.comp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ void main(uint3 threadID : SV_DispatchThreadID)
1818
float value = 0.0f;
1919
for (int y = -kernel; y <= kernel; y++)
2020
{
21-
int yi = clamp(threadID.y + y, 0, height - 1);
21+
int yy = clamp(threadID.y + y, 0, height - 1);
2222
for (int x = -kernel; x <= kernel; x++)
2323
{
24-
int xi = clamp(threadID.x + x, 0, width - 1);
25-
value += inputTexture[uint2(xi, yi)];
24+
int xx = clamp(threadID.x + x, 0, width - 1);
25+
value += inputTexture[uint2(xx, yy)];
2626
}
2727
}
2828
kernel = kKernel * 2 + 1;

shaders/chunk.vert

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ struct Output
2727
nointerpolation float3 Normal : TEXCOORD1;
2828
float3 Texcoord : TEXCOORD2;
2929
nointerpolation uint Voxel : TEXCOORD3;
30+
float2 Fragment : TEXCOORD4;
3031
};
3132

3233
Output main(Input input)
@@ -40,5 +41,8 @@ Output main(Input input)
4041
output.Position = mul(Proj, output.Position);
4142
output.Texcoord = GetVoxelTexcoord(input.Voxel);
4243
output.Voxel = input.Voxel;
44+
output.Fragment = output.Position.xy / output.Position.w;
45+
output.Fragment = output.Fragment * 0.5f + 0.5f;
46+
output.Fragment.y = 1.0f - output.Fragment.y;
4347
return output;
4448
}

shaders/shader.hlsl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ float3 GetLight(StructuredBuffer<Light> lights, uint lightCount, float4 position
4343
float3 finalColor = float3(0.0f, 0.0f, 0.0f);
4444
for (uint i = 0; i < lightCount; i++)
4545
{
46-
// TODO: performance with branches
4746
Light light = lights[i];
4847
float radius = (light.Color & 0xFF000000) >> 24;
4948
float3 lightPosition = float3(light.X, light.Y, light.Z) + 0.5f;

shaders/transparent.frag

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ Texture2DArray<float4> atlasTexture : register(t0, space2);
44
SamplerState atlasSampler : register(s0, space2);
55
Texture2D<float> shadowTexture : register(t1, space2);
66
SamplerState shadowSampler : register(s1, space2);
7-
StructuredBuffer<Light> lightBuffer : register(t2, space2);
7+
Texture2D<float4> positionTexture : register(t2, space2);
8+
SamplerState positionSampler : register(s2, space2);
9+
StructuredBuffer<Light> lightBuffer : register(t3, space2);
810

911
cbuffer UniformBuffer : register(b0, space3)
1012
{
@@ -27,6 +29,7 @@ struct Input
2729
nointerpolation float3 Normal : TEXCOORD1;
2830
float3 Texcoord : TEXCOORD2;
2931
nointerpolation uint Voxel : TEXCOORD3;
32+
float2 Fragment : TEXCOORD4;
3033
};
3134

3235
// TODO: sky
@@ -44,5 +47,7 @@ float4 main(Input input) : SV_Target0
4447
float3 skyColor = GetSkyColor(input.WorldPosition.xyz - PlayerPosition);
4548
float fog = GetFog(distance(position.xz, PlayerPosition.xz));
4649
finalColor = lerp(finalColor, skyColor, fog);
50+
float3 groundPosition = positionTexture.Sample(positionSampler, input.Fragment).xyz;
51+
alpha = saturate(alpha + (input.WorldPosition.y - groundPosition.y) / 20.0f);
4752
return float4(finalColor, alpha);
4853
}

0 commit comments

Comments
 (0)