From e90126333e9835dffa5f1ac0cfb89905ede303eb Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Wed, 4 Mar 2026 04:28:59 +0000 Subject: [PATCH] minecraft: terrain textures --- minecraft.lua | 38 ++++++++++++--- minecraft/block_id_to_texture_id.data | Bin 0 -> 1024 bytes minecraft/terrain.png | Bin 0 -> 65555 bytes pixel_minecraft.glsl | 38 ++++++++++++--- vertex_minecraft.glsl | 67 ++++++++++++++------------ 5 files changed, 100 insertions(+), 43 deletions(-) create mode 100644 minecraft/block_id_to_texture_id.data create mode 100644 minecraft/terrain.png diff --git a/minecraft.lua b/minecraft.lua index 5592360..7b08154 100644 --- a/minecraft.lua +++ b/minecraft.lua @@ -16,13 +16,15 @@ local cube_indices = { 6, 20, 7, 9, 21, 10, 12, 22, 13, - 15, 23, 16 + 15, 23, 16, } local cube_indices_count = #cube_indices local cube_index_buffer local blocks local shader_minecraft -local region_buffers = {} +local region_buffers +local terrain_texture +local block_id_to_texture_id_buffer local load_blocks_buffer = function(name) local data = love.filesystem.newFileData(name) @@ -43,6 +45,15 @@ local load_region_buffer = function(path) return buffer end +local load_block_id_to_texture_id_buffer = function() + local data = love.filesystem.newFileData("minecraft/block_id_to_texture_id.data") + local format = { + { format = "uint8vec4" }, + } + local buffer = love.graphics.newBuffer(format, data, { shaderstorage = true, usage = "static" }) + return buffer +end + local load_cube_index_buffer = function() local data = love.data.newByteData(cube_indices_count * 4) local ptr = ffi.cast("uint32_t*", data:getFFIPointer()) @@ -60,13 +71,23 @@ local load_minecraft_shader = function() return shader end +local load_terrain_texture = function() + local image_data = love.image.newImageData("minecraft/terrain.png") + local texture = love.graphics.newTexture(image_data) + return texture +end + local init = function() - table.insert(region_buffers, load_region_buffer("minecraft/region.0.0.data")) - table.insert(region_buffers, load_region_buffer("minecraft/region.-1.0.data")) - table.insert(region_buffers, load_region_buffer("minecraft/region.0.-1.data")) - table.insert(region_buffers, load_region_buffer("minecraft/region.-1.-1.data")) + region_buffers = { + load_region_buffer("minecraft/region.0.0.data"), + load_region_buffer("minecraft/region.-1.0.data"), + load_region_buffer("minecraft/region.0.-1.data"), + load_region_buffer("minecraft/region.-1.-1.data"), + } + terrain_texture = load_terrain_texture() cube_index_buffer = load_cube_index_buffer() shader_minecraft = load_minecraft_shader() + block_id_to_texture_id_buffer = load_block_id_to_texture_id_buffer() end local viewpos = { @@ -91,9 +112,12 @@ local draw = function(projection) local view_projection = view * projection + shader_minecraft:send("terrain_sampler", terrain_texture) + shader_minecraft:send("TexturesLayout", block_id_to_texture_id_buffer) + shader_minecraft:send("transform", "column", view_projection:data()) + for _, region_buffer in ipairs(region_buffers) do local instance_count = math.floor(region_buffer:getSize() / (4 * 2)) - shader_minecraft:send("transform", "column", view_projection:data()) shader_minecraft:send("BlocksLayout", region_buffer) love.graphics.drawFromShader(cube_index_buffer, cube_indices_count, instance_count, 1) end diff --git a/minecraft/block_id_to_texture_id.data b/minecraft/block_id_to_texture_id.data new file mode 100644 index 0000000000000000000000000000000000000000..94099dfc0c0e5568b74c643ddf3ffc6c2425545c GIT binary patch literal 1024 zcmeIw%}Rnn6b9hWNNbV(XuAw6%>-SjwGFI5tW`fkE(O7A-3@eGUWAv@J@_1$jXPJa z9C&z{;lP|Z%sk7o9ID8ye)3 zJ-JVfI@i2X<$>t`j1fJWv>5YAn|q?qH$M0y-X3QY3cRPhmEo5uQS-=C%7Gm6%nNb< Vj4!_V;gC36cQ)I)?W{KO2bSCWld}K- literal 0 HcmV?d00001 diff --git a/minecraft/terrain.png b/minecraft/terrain.png new file mode 100644 index 0000000000000000000000000000000000000000..7a4f29f71411aaa3c5bb9a47c2e30ecede25738e GIT binary patch literal 65555 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 @E8sYE%olw9o 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 literal 0 HcmV?d00001 diff --git a/pixel_minecraft.glsl b/pixel_minecraft.glsl index 6b7d8fa..f70f0c0 100644 --- a/pixel_minecraft.glsl +++ b/pixel_minecraft.glsl @@ -1,22 +1,48 @@ #pragma language glsl4 in vec3 PixelNormal; -in vec3 PixelColor; +//in vec3 PixelColor; +in vec2 PixelTexture; in float PixelBlock; +uniform sampler2D terrain_sampler; + out vec4 out_color; +layout (std430) readonly buffer TexturesLayout +{ + uint Textures[]; +}; + void pixelmain() { - if (PixelBlock == 0) { + vec3 light_direction = normalize(vec3(-1, -0.5, 0.5)); + float diffuse_intensity = max(dot(PixelNormal, light_direction), 0.0); + + //vec3 color = PixelColor * diffuse_intensity; + + //int t_ix = int(PixelBlock) / 4; + //int t_shift = (int(PixelBlock) % 4) * 8; + //int terrain_ix = int(Textures[t_ix] >> t_shift); + int terrain_ix = int(Textures[int(PixelBlock)]); + int terrain_x = terrain_ix % 16; + int terrain_y = terrain_ix / 16; + + ivec2 coord = ivec2(terrain_x, terrain_y) * 16; + coord += ivec2(int(PixelTexture.x * 16.0), int(PixelTexture.y * 16.0)); + + vec4 texture_color = texelFetch(terrain_sampler, coord, 0); + if (texture_color.w != 1.0) { discard; return; } - vec3 light_direction = normalize(vec3(-1, -0.5, 0.5)); - float diffuse_intensity = max(dot(PixelNormal, light_direction), 0.0); + if (int(PixelBlock) == 18) // leaves + texture_color.xyz *= vec3(0.125, 0.494, 0.027); - vec3 color = PixelColor * diffuse_intensity; - out_color = vec4(color, 1.0); + + //out_color = vec4(color, 1.0); + out_color = vec4((texture_color * diffuse_intensity).xyz, 1.0); + //out_color = vec4(diffuse_intensity); } diff --git a/vertex_minecraft.glsl b/vertex_minecraft.glsl index 6e4a39e..da41a02 100644 --- a/vertex_minecraft.glsl +++ b/vertex_minecraft.glsl @@ -1,39 +1,43 @@ #pragma language glsl4 struct vertex_t { - vec3 position; - vec3 normal; + vec3 Position; + vec3 Normal; + vec2 Texture; }; -vertex_t vertices[] = vertex_t[](vertex_t(vec3(-1.0, 1.0, -1.0), vec3(0.0, 1.0, 0.0)), - vertex_t(vec3(1.0, 1.0, 1.0), vec3(0.0, 1.0, 0.0)), - vertex_t(vec3(1.0, 1.0, -1.0), vec3(0.0, 1.0, 0.0)), - vertex_t(vec3(1.0, 1.0, 1.0), vec3(0.0, 0.0, 1.0)), - vertex_t(vec3(-1.0, -1.0, 1.0), vec3(0.0, 0.0, 1.0)), - vertex_t(vec3(1.0, -1.0, 1.0), vec3(0.0, 0.0, 1.0)), - vertex_t(vec3(-1.0, 1.0, 1.0), vec3(-1.0, 0.0, 0.0)), - vertex_t(vec3(-1.0, -1.0, -1.0), vec3(-1.0, 0.0, 0.0)), - vertex_t(vec3(-1.0, -1.0, 1.0), vec3(-1.0, 0.0, 0.0)), - vertex_t(vec3(1.0, -1.0, -1.0), vec3(0.0, -1.0, 0.0)), - vertex_t(vec3(-1.0, -1.0, 1.0), vec3(0.0, -1.0, 0.0)), - vertex_t(vec3(-1.0, -1.0, -1.0), vec3(0.0, -1.0, 0.0)), - vertex_t(vec3(1.0, 1.0, -1.0), vec3(1.0, 0.0, 0.0)), - vertex_t(vec3(1.0, -1.0, 1.0), vec3(1.0, 0.0, 0.0)), - vertex_t(vec3(1.0, -1.0, -1.0), vec3(1.0, 0.0, 0.0)), - vertex_t(vec3(-1.0, 1.0, -1.0), vec3(0.0, 0.0, -1.0)), - vertex_t(vec3(1.0, -1.0, -1.0), vec3(0.0, 0.0, -1.0)), - vertex_t(vec3(-1.0, -1.0, -1.0), vec3(0.0, 0.0, -1.0)), - vertex_t(vec3(-1.0, 1.0, 1.0), vec3(0.0, 1.0, 0.0)), - vertex_t(vec3(-1.0, 1.0, 1.0), vec3(0.0, 0.0, 1.0)), - vertex_t(vec3(-1.0, 1.0, -1.0), vec3(-1.0, 0.0, 0.0)), - vertex_t(vec3(1.0, -1.0, 1.0), vec3(0.0, -1.0, 0.0)), - vertex_t(vec3(1.0, 1.0, 1.0), vec3(1.0, 0.0, 0.0)), - vertex_t(vec3(1.0, 1.0, -1.0), vec3(0.0, 0.0, -1.0))); +vertex_t vertices[] = vertex_t[]( +vertex_t(vec3(-1.0, 1.0, -1.0), vec3(0.0, 1.0, 0.0), vec2(1.0, 0.0)), +vertex_t(vec3(1.0, 1.0, 1.0), vec3(0.0, 1.0, 0.0), vec2(0.0, 1.0)), +vertex_t(vec3(1.0, 1.0, -1.0), vec3(0.0, 1.0, 0.0), vec2(0.0, 0.0)), +vertex_t(vec3(1.0, 1.0, 1.0), vec3(0.0, 0.0, 1.0), vec2(1.0, 1.0)), +vertex_t(vec3(-1.0, -1.0, 1.0), vec3(0.0, 0.0, 1.0), vec2(0.0, 0.0)), +vertex_t(vec3(1.0, -1.0, 1.0), vec3(0.0, 0.0, 1.0), vec2(1.0, 0.0)), +vertex_t(vec3(-1.0, 1.0, 1.0), vec3(-1.0, 0.0, 0.0), vec2(1.0, 1.0)), +vertex_t(vec3(-1.0, -1.0, -1.0), vec3(-1.0, 0.0, 0.0), vec2(0.0, 0.0)), +vertex_t(vec3(-1.0, -1.0, 1.0), vec3(-1.0, 0.0, 0.0), vec2(1.0, 0.0)), +vertex_t(vec3(1.0, -1.0, -1.0), vec3(0.0, -1.0, 0.0), vec2(1.0, 0.0)), +vertex_t(vec3(-1.0, -1.0, 1.0), vec3(0.0, -1.0, 0.0), vec2(0.0, 1.0)), +vertex_t(vec3(-1.0, -1.0, -1.0), vec3(0.0, -1.0, 0.0), vec2(0.0, 0.0)), +vertex_t(vec3(1.0, 1.0, -1.0), vec3(1.0, 0.0, 0.0), vec2(1.0, 1.0)), +vertex_t(vec3(1.0, -1.0, 1.0), vec3(1.0, 0.0, 0.0), vec2(0.0, 0.0)), +vertex_t(vec3(1.0, -1.0, -1.0), vec3(1.0, 0.0, 0.0), vec2(1.0, 0.0)), +vertex_t(vec3(-1.0, 1.0, -1.0), vec3(0.0, 0.0, -1.0), vec2(1.0, 1.0)), +vertex_t(vec3(1.0, -1.0, -1.0), vec3(0.0, 0.0, -1.0), vec2(0.0, 0.0)), +vertex_t(vec3(-1.0, -1.0, -1.0), vec3(0.0, 0.0, -1.0), vec2(1.0, 0.0)), +vertex_t(vec3(-1.0, 1.0, 1.0), vec3(0.0, 1.0, 0.0), vec2(1.0, 1.0)), +vertex_t(vec3(-1.0, 1.0, 1.0), vec3(0.0, 0.0, 1.0), vec2(0.0, 1.0)), +vertex_t(vec3(-1.0, 1.0, -1.0), vec3(-1.0, 0.0, 0.0), vec2(0.0, 1.0)), +vertex_t(vec3(1.0, -1.0, 1.0), vec3(0.0, -1.0, 0.0), vec2(1.0, 1.0)), +vertex_t(vec3(1.0, 1.0, 1.0), vec3(1.0, 0.0, 0.0), vec2(0.0, 1.0)), +vertex_t(vec3(1.0, 1.0, -1.0), vec3(0.0, 0.0, -1.0), vec2(0.0, 1.0)) +); uniform mat4 transform; out vec3 PixelNormal; -out vec3 PixelColor; +//out vec3 PixelColor; +out vec2 PixelTexture; out float PixelBlock; struct block_t { @@ -46,6 +50,7 @@ layout (std430) readonly buffer BlocksLayout block_t Blocks[]; }; +/* vec3 palette(float t) { vec3 a = vec3(0.5, 0.5, 0.5); vec3 b = vec3(0.5, 0.5, 0.5); @@ -54,6 +59,7 @@ vec3 palette(float t) { return a + b * cos(6.28318 * (c * t + d)); } +*/ int sign_extend(uint x) { @@ -73,9 +79,10 @@ void vertexmain() float chunk_z = float(sign_extend((block.x_z_blockid >> 8) & 0xff)); int block_id = int((block.x_z_blockid >> 16) & 0xff); - PixelNormal = vertex.normal; - PixelColor = palette(float(block_id) * 0.01); + PixelNormal = vertex.Normal; + //PixelColor = palette(float(block_id) * 0.01); PixelBlock = block_id; - vec3 position = ((vertex.position * 0.4) + vec3(x, z, y) + vec3(chunk_x * 16.0, chunk_z * 16.0, 0)); + PixelTexture = vertex.Texture; + vec3 position = ((vertex.Position * 0.5) + vec3(x, z, y) + vec3(chunk_x * 16.0, chunk_z * 16.0, 0)); love_Position = transform * vec4(position, 1.0); }