From 0c7f07bc7b2ddc71b08ceb1944f93fec8f3c483c Mon Sep 17 00:00:00 2001 From: Piotrek Date: Tue, 11 May 2021 13:22:09 +0200 Subject: [PATCH] Made blocks texture have equal size, this created problems with memory usage --- src/renderer/buffers/content.rs | 25 +++++++++++++++--------- src/shaders/raytrace/.bin/main.frag.spv | Bin 14124 -> 14388 bytes src/shaders/raytrace/main.frag | 4 ++-- src/shaders/raytrace/raycasting.cginc | 10 +++++++--- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/renderer/buffers/content.rs b/src/renderer/buffers/content.rs index d03684a..1f44001 100644 --- a/src/renderer/buffers/content.rs +++ b/src/renderer/buffers/content.rs @@ -6,10 +6,12 @@ use crate::game::world::block::WorldBlock; //note: remember to update in main.frag pub const BLOCK_SIZE : usize = 32; // 32x32x32 block size -pub const BLOCK_TEX_SIZE : usize = 256; // 128x128 blocks in texture +pub const BLOCK_TEX_SIZE : usize = 32; // 32x32x32 blocks in texture (1GB) pub const NODE_TEX_SIZE: usize = 128; // 32x32x32 nodes in texture const BLOCK_SIZE_QB: usize = BLOCK_SIZE*BLOCK_SIZE*BLOCK_SIZE; + const BLOCK_TEX_SIZE_SQ: usize = BLOCK_TEX_SIZE*BLOCK_TEX_SIZE; +const BLOCK_TEX_SIZE_QB: usize = BLOCK_TEX_SIZE*BLOCK_TEX_SIZE*BLOCK_TEX_SIZE; const NODE_TEX_SIZE_SQ: usize = NODE_TEX_SIZE*NODE_TEX_SIZE; const NODE_TEX_SIZE_QB: usize = NODE_TEX_SIZE*NODE_TEX_SIZE*NODE_TEX_SIZE; @@ -41,7 +43,7 @@ impl Content { let node_texture = device.create_texture( &wgpu::TextureDescriptor { mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D3, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, label: None, + usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, label: Some("NodeTexture"), size: wgpu::Extent3d{ width: NODE_TEX_SIZE as u32, height: NODE_TEX_SIZE as u32, depth: NODE_TEX_SIZE as u32 }, format: wgpu::TextureFormat::R32Uint, } @@ -49,12 +51,13 @@ impl Content { let block_texture = device.create_texture( &wgpu::TextureDescriptor { mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D3, - usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, label: None, - size: wgpu::Extent3d{ width: BLOCK_SIZE as u32, height: (BLOCK_TEX_SIZE * BLOCK_SIZE) as u32, depth: (BLOCK_TEX_SIZE * BLOCK_SIZE) as u32 }, + usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST, label: Some("BlockTexture"), + size: wgpu::Extent3d{ width: (BLOCK_TEX_SIZE * BLOCK_SIZE) as u32, height: (BLOCK_TEX_SIZE * BLOCK_SIZE) as u32, depth: (BLOCK_TEX_SIZE * BLOCK_SIZE) as u32 }, format: wgpu::TextureFormat::R8Uint, } ); + // Bind layout let texture_entry = wgpu::BindGroupLayoutEntry { binding: 0, visibility: wgpu::ShaderStage::FRAGMENT, count: None, @@ -89,11 +92,11 @@ impl Content { const TO_MB: f64 = 1.0 / (1024.0 * 1024.0); let block_used = self.block_freeidx as u64; - let block_count = BLOCK_TEX_SIZE_SQ as u64; + let block_count = BLOCK_TEX_SIZE_QB as u64; let node_tex_size = (NODE_TEX_SIZE_QB*4) as f64 * TO_MB; let block_tex_used = (block_used * BLOCK_SIZE_QB as u64) as f64 * TO_MB; - let block_tex_size = (BLOCK_TEX_SIZE_SQ*BLOCK_SIZE_QB) as f64 * TO_MB; + let block_tex_size = (BLOCK_TEX_SIZE_QB*BLOCK_SIZE_QB) as f64 * TO_MB; ContentStats { node_tex_size, block_tex_size, block_tex_used, block_count, block_used } } @@ -117,9 +120,13 @@ impl Content { } // Calculate position in block texture - let y = ((value-1) % BLOCK_TEX_SIZE * BLOCK_SIZE) as u32; - let z = ((value-1) / BLOCK_TEX_SIZE * BLOCK_SIZE) as u32; - let block_origin = wgpu::Origin3d{ x:0, y, z }; + let mut idx = value-1; + let z = idx / BLOCK_TEX_SIZE_SQ; + idx -= z * BLOCK_TEX_SIZE_SQ; + let y = idx / BLOCK_TEX_SIZE; + let x = idx % BLOCK_TEX_SIZE; + + let block_origin = wgpu::Origin3d{ x: (x*BLOCK_SIZE) as u32, y: (y*BLOCK_SIZE) as u32, z: (z*BLOCK_SIZE) as u32 }; let block_size = wgpu::Extent3d{ width: BLOCK_SIZE as u32, height: BLOCK_SIZE as u32, depth: BLOCK_SIZE as u32 }; let block_bytes : [u8;BLOCK_SIZE*BLOCK_SIZE*BLOCK_SIZE] = block.materials.try_into().unwrap(); diff --git a/src/shaders/raytrace/.bin/main.frag.spv b/src/shaders/raytrace/.bin/main.frag.spv index 653209dca3b6a955b1356aaea3d682338442f294..e2e034e25ef6e4d4103e9eed8ad283a475f0304b 100644 GIT binary patch literal 14388 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 K%~kGy_xe9EQIJjm literal 14124 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 diff --git a/src/shaders/raytrace/main.frag b/src/shaders/raytrace/main.frag index d56a3ea..35f4415 100644 --- a/src/shaders/raytrace/main.frag +++ b/src/shaders/raytrace/main.frag @@ -22,7 +22,7 @@ layout(set=2, binding=0) uniform Materials { Material _Materials[256]; }; #define EPSILON 0.00000001 #define SCALE 1.0 #define NODE_TEX_SIZE 128 -#define BLOCK_TEX_SIZE 256 +#define BLOCK_TEX_SIZE 32 #define BLOCK_SIZE 32 // Includes @@ -57,7 +57,7 @@ vec3 solve() // Fog float dist = distance(primary.pos, primaryRay.origin); - float fog = exp2(-pow(0.02*dist, 2)); + float fog = exp2(-pow(0.015*dist, 2)); color = mix(vec3(0.8, 0.8, 0.75), color, clamp(fog, 0.0, 1.0)); return color; diff --git a/src/shaders/raytrace/raycasting.cginc b/src/shaders/raytrace/raycasting.cginc index 0d0360c..154cacd 100644 --- a/src/shaders/raytrace/raycasting.cginc +++ b/src/shaders/raytrace/raycasting.cginc @@ -22,9 +22,13 @@ HitResult castBricks(vec3 origin, vec3 start, vec3 dir, vec3 incAxis, uint addr) vec3 dist = (pos-origin+0.5 + raySign*0.5) * rayInv; // Calculate offset - uint y = (addr-1) % BLOCK_TEX_SIZE * BLOCK_SIZE; - uint z = (addr-1) / BLOCK_TEX_SIZE * BLOCK_SIZE; - ivec3 offset = ivec3(0, y, z); + uint idx = addr-1; + uint z = idx / (BLOCK_TEX_SIZE*BLOCK_TEX_SIZE); + idx -= z * (BLOCK_TEX_SIZE*BLOCK_TEX_SIZE); + uint y = idx / BLOCK_TEX_SIZE; + uint x = idx % BLOCK_TEX_SIZE; + + ivec3 offset = ivec3(x * BLOCK_SIZE, y * BLOCK_SIZE, z * BLOCK_SIZE); for(int i=0;i<110;i++) {