From 6206800df90c062e8fc87d27b8db82a37b21bfe7 Mon Sep 17 00:00:00 2001 From: Piotrek Date: Mon, 26 Apr 2021 14:01:13 +0200 Subject: [PATCH] changed brick texture from being 32x32x32 1D to 32x32x32 2D (smaller indexes) --- src/renderer/buffers/blocks.rs | 16 +++++++++------- src/renderer/buffers/mod.rs | 14 +++++++++----- src/renderer/buffers/nodes.rs | 8 ++++---- src/renderer/mod.rs | 11 ++++++++--- src/shaders/bin/shader.frag.spv | Bin 15660 -> 14428 bytes src/shaders/raycasting.cginc | 12 ++++++++---- src/shaders/shader.frag | 10 ++++++---- 7 files changed, 44 insertions(+), 27 deletions(-) diff --git a/src/renderer/buffers/blocks.rs b/src/renderer/buffers/blocks.rs index fcca948..8b607c7 100644 --- a/src/renderer/buffers/blocks.rs +++ b/src/renderer/buffers/blocks.rs @@ -1,7 +1,5 @@ use std::convert::TryInto; - -use crate::renderer::buffers::{BLOCK_SIZE, BLOCK_NUM, BLOCK_LEN}; -const DATA_LEN : usize = BLOCK_LEN * BLOCK_NUM; +use crate::renderer::buffers::{BLOCK_SIZE, BLOCK_TEX_SIZE, BLOCK_TEX_LEN, BLOCK_LEN}; pub struct Blocks { @@ -20,7 +18,8 @@ impl Blocks { pub fn new(device: &wgpu::Device) -> Self { // Create texture - let size = wgpu::Extent3d { width: BLOCK_SIZE as u32, height: BLOCK_SIZE as u32, depth: (BLOCK_SIZE*BLOCK_NUM) as u32 }; + let BLOCK_TEX_DIM = BLOCK_TEX_SIZE * BLOCK_SIZE; + let size = wgpu::Extent3d { width: BLOCK_SIZE as u32, height: BLOCK_TEX_DIM as u32, depth: BLOCK_TEX_DIM as u32 }; let texture = device.create_texture( &wgpu::TextureDescriptor { size: size, @@ -73,9 +72,9 @@ impl Blocks { ); // Data - let mut blocks = vec![0_u8; DATA_LEN].into_boxed_slice(); + let mut blocks = vec![0_u8; BLOCK_TEX_LEN].into_boxed_slice(); blocks[0] = 1; - println!("block buffer size: {} MB", DATA_LEN as f32 / 1024.0 / 1024.0); + println!("block buffer size: {} MB", BLOCK_TEX_LEN as f32 / 1024.0 / 1024.0); // Done Self { blocks, texture, bind_layout, bind_group, free_block: 0 } @@ -90,7 +89,10 @@ impl Blocks { let block_offset = block*BLOCK_LEN; let block_bytes : [u8;BLOCK_LEN] = self.blocks[block_offset..block_offset+BLOCK_LEN].try_into().unwrap(); let block_size = wgpu::Extent3d{ width: BLOCK_SIZE as u32, height: BLOCK_SIZE as u32, depth: BLOCK_SIZE as u32 }; - let block_origin = wgpu::Origin3d{ x:0, y:0, z: (block*BLOCK_SIZE) as u32 }; + + let y = (block%BLOCK_TEX_SIZE * BLOCK_SIZE) as u32; + let z = (block/BLOCK_TEX_SIZE * BLOCK_SIZE) as u32; + let block_origin = wgpu::Origin3d{ x:0, y, z }; // Write queue.write_texture( diff --git a/src/renderer/buffers/mod.rs b/src/renderer/buffers/mod.rs index e5f426f..ffb0e63 100644 --- a/src/renderer/buffers/mod.rs +++ b/src/renderer/buffers/mod.rs @@ -1,12 +1,16 @@ // Consts -pub const WORLD_SIZE: usize = 32; -pub const NUM_NODES: usize = (WORLD_SIZE*WORLD_SIZE*WORLD_SIZE) as usize; +pub const BLOCK_SIZE : usize = 32; // 32x32x32 block size +pub const BLOCK_TEX_SIZE : usize = 64; // 64x64 blocks in texture +pub const NODE_TEX_SIZE: usize = 32; // 32x32x32 nodes in texture + + +pub const NODE_TEX_LEN: usize = NODE_TEX_SIZE*NODE_TEX_SIZE*NODE_TEX_SIZE; // Number of u32 in node texture +pub const BLOCK_LEN : usize = BLOCK_SIZE*BLOCK_SIZE*BLOCK_SIZE; // Number of u8 in one block +pub const BLOCK_TEX_LEN: usize = BLOCK_TEX_SIZE*BLOCK_TEX_SIZE * BLOCK_LEN; // Number of u8 in block texture + -pub const BLOCK_SIZE : usize = 32; // 32x32x32 brick size -pub const BLOCK_NUM : usize = 32768; // max bricks in texture -pub const BLOCK_LEN : usize = BLOCK_SIZE*BLOCK_SIZE*BLOCK_SIZE; // Import names diff --git a/src/renderer/buffers/nodes.rs b/src/renderer/buffers/nodes.rs index 0ab90a7..a668a1f 100644 --- a/src/renderer/buffers/nodes.rs +++ b/src/renderer/buffers/nodes.rs @@ -1,7 +1,7 @@ use byteorder::{ByteOrder, LittleEndian}; use rand::prelude::*; -use crate::renderer::buffers::{WORLD_SIZE, NUM_NODES}; +use crate::renderer::buffers::{NODE_TEX_SIZE, NODE_TEX_LEN}; pub struct Nodes { pub nodes: Box<[u32]>, @@ -16,7 +16,7 @@ impl Nodes { pub fn new(device: &wgpu::Device) -> Self { // Create texture - let size = wgpu::Extent3d { width: WORLD_SIZE as u32, height: WORLD_SIZE as u32, depth: WORLD_SIZE as u32 }; + let size = wgpu::Extent3d { width: NODE_TEX_SIZE as u32, height: NODE_TEX_SIZE as u32, depth: NODE_TEX_SIZE as u32 }; let texture = device.create_texture( &wgpu::TextureDescriptor { size: size, @@ -69,7 +69,7 @@ impl Nodes { ); // Data - let nodes = vec![0_u32; NUM_NODES].into_boxed_slice(); + let nodes = vec![0_u32; NODE_TEX_LEN].into_boxed_slice(); println!("Node buffer size: {} MB", nodes.len() as f32 * 4.0 / 1024.0 / 1024.0); // Done @@ -78,7 +78,7 @@ impl Nodes { pub fn write(&mut self, queue: &wgpu::Queue) { // Convert 32 bit values to 8 bit - let mut bytes = [0_u8; NUM_NODES*4]; + let mut bytes = [0_u8; NODE_TEX_LEN*4]; LittleEndian::write_u32_into(&self.nodes, &mut bytes); // Write diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index 993c010..49b2112 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -7,7 +7,8 @@ use buffers::{Nodes, Blocks, Uniform, Raster, Materials}; mod passes; use passes::RaytracePass; -pub mod camera; use camera::Camera; +pub mod camera; +use camera::Camera; pub struct Renderer { @@ -124,7 +125,11 @@ impl Renderer { self.brick_buffer.write(&self.queue, *node); } - println!("Changed: {}", self.changed_bricks.len()); + let used = self.brick_buffer.next_block(false); + let total = buffers::BLOCK_TEX_SIZE * buffers::BLOCK_TEX_SIZE; + let changed = self.changed_bricks.len(); + println!("Used: {}/{} Changed: {}", used, total, changed); + self.changed_bricks.clear(); } @@ -192,7 +197,7 @@ impl Renderer { */ pub fn block_get_id(&mut self, pos: Point3, apply: bool) -> usize { // Get node - let node_idx = pos.x + buffers::WORLD_SIZE * (pos.y + buffers::WORLD_SIZE * pos.z); + let node_idx = pos.x + buffers::NODE_TEX_SIZE * (pos.y + buffers::NODE_TEX_SIZE * pos.z); let mut node_value = self.node_buffer.nodes[node_idx]; // Use new brick if neccesary diff --git a/src/shaders/bin/shader.frag.spv b/src/shaders/bin/shader.frag.spv index 4e09391c753c0ca40178fa77195c13377aae7466..d305dd6690424608bc2c2684e643da407b43dfe3 100644 GIT binary patch literal 14428 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 31 || pos.y > 31 || pos.z > 31) { break; } + if(pos.x >= BLOCK_SIZE || pos.y >= BLOCK_SIZE || pos.z >= BLOCK_SIZE) { break; } } return HitResult(0, vec3(0,0,0), vec3(0,0,0)); @@ -92,8 +96,8 @@ HitResult castNodes(Ray ray, uint maxSteps) pos += incAxis * raySign; // Outside bounds - //if(pos.x < 0 || pos.y < 0 || pos.z < 0) { break; } - // if(pos.x > 1 || pos.y > 1 || pos.z > 1) { break; } + if(pos.x < 0 || pos.y < 0 || pos.z < 0) { break; } + if(pos.x >= BLOCK_TEX_SIZE || pos.y > BLOCK_TEX_SIZE || pos.z >= NODE_TEX_SIZE) { break; } } // Not found diff --git a/src/shaders/shader.frag b/src/shaders/shader.frag index 4f575f5..a8cbf6d 100644 --- a/src/shaders/shader.frag +++ b/src/shaders/shader.frag @@ -24,9 +24,11 @@ layout(set=3, binding=0) uniform Materials { }; // Defines -// #define PI 3.141592 -// #define EPSILON 0.01 -// #define NEAR 0.01 +#define EPSILON 0.00000001 +#define NODE_TEX_SIZE 32 +#define BLOCK_TEX_SIZE 64 +#define BLOCK_SIZE 32 + // Include #include "structs.cginc" @@ -66,7 +68,7 @@ vec3 solve() if(primary.data > 0) { vec3 color = applyLighting(primary.pos, primaryRay.dir, primary.normal, primary.data); - vec3 hitPos = primary.pos-primaryRay.dir*0.00000001; + vec3 hitPos = primary.pos-primary.normal*EPSILON; // Shadow ray Ray shadowRay = Ray(hitPos, _SunDir);