Grass blades now spawn and work with the progressive terrain generation
Grass blades now spawn and work with the progressive terrain generation
I am continuing work on gpu meshing and just in general world creation. I improved the mesher by adding full LoD support, and I started a gpu memory allocator. I store the state of each chunk column. So it allowed me to have this progressive mesh generator because I also have made the mesher use batches instead(Which was difficult to add). The blogs are gonna be much more sparse because for me to have something to blog about I need to do a lot of work as all the low hanging fruits were already picked
I’ve implemented the first version of GPU meshing and meshlet generation.
It’s about 20 times faster than what my CPU can do (I have an rx 9070 and a 5950x)
Also I don’t need to upload all the data so it’s even faster there (it was also quite slow to do)
Of course, we are comparing an algorithm I tinkered and worked on for months to the GPU version which I just finished, so it’s completely unfair, as the CPU also can utilize more tricks with chunk generation skipping etc… using data that the GPU currently doesn’t yet have
I am continuing work on my main project, it’s a voxel engine utilizing virtualized geometry and splatting. It’s software rasterized but uses hardware rasterization in some cases. I’ve implemented clouds using raymarching and secondary lights. Currently the light is accelerated using only chunks. Nothing fancy yet but it’s a start
I implemented a chunk based acceleration tree, so that only chunks within the radius of the light get lit. Not that much. Been busy with school and studying math. I will be working on documenting the technical changes since the last blog post. Currently just releasing since a lot of hours accumulated since the last release
I have implemented lights, currently they are pixel pixel. Not going with per voxel probes, too expensive. Probably gonna do irradiance 8^3 probes. Very simple not yet optimized
I’ll let the video speak for itself
I’ve implemented gradual world gen, so instead of generating all at once they get generated on demand. Currently it’s still constrained to a specific size but I will fix it by changing to a hashmap. I need to also implement chunk prioritization for better experience and multi thread it better.
Clouds and more optimizations.
I store 2 pre-calculated noise maps, one is height, the other is density I use them in combination to create clouds
I’ve begun work on entities, right now I only implemented a wondering behaviour. The plan is too implement multiple different behaviours so you can config them. Like for example if hungry wonder and find a carrot
I have implemented more different world types, gui improvements, water reflections, world loading and unloading etc… Mostly general optimizations and QOL improvements rather than a deep technique. Something I plan for the release after this one
I implemented larger worlds and a very basic menu to choose it’s size. Along with the ability to dynamically change resolutions, (currently controllable by keyboard but I want to make a full ui for all the graphical stuff). I removed trees as I want to move towards space colonization and ones that will actually look good. Overall rendering a world that is 4096^2x512 is not much slower than 8192^2x512 thanks to distance fields. I am moving forward with getting acceptable performance for a game, but it’s still not perfect. Also superliminal gave me a license to their cpu debugging software suite for free ;) so it will get fine tuned after I have all techniques implemented
I’ve been working on documenting my ray tracer further. Here’s a link to my blog post explaining the technical details: https://nixuntris.github.io/Private-Website/blueprint.html?id=raytracer
I implemented colored lighting, and light absorption, eg different materials absorb different amounts of light along with light diffusion so that light scatters, I am working on an upscaler and on demand probe allocation(it’s easily the heaviest part of the storage). I also implemented quantizing distance4 values to consume less memory. I also speed up world generation and multithreaded it. Overall focusing on memory storage. It’s very buggy rn however so a lot of bug fixing incoming
I’ve been optimizing the project. Now it can handle much larger render distances, at higher fps and I added deduping along with light absorption per material. It’s highly experimental but it works. I’ve improved on the terrain gen a bit more so that the scene is a bit more complex. I also finished lods. I am preping the ship
I’ve been working on optimizing the renderer and the world structure and acceleration data generation. I’ve implemented that low resolution pass, screen space lods that calculate the distance to start based on resolution and fovy. Along with just making the algorithm faster. I added secondary rays that use per voxel data as it’s faster to calculate (so a cheat code in a way because per pixel shadows are more expensive) they are only a visibility check for now. Along with speeding up the world gen and adding actual tree crowns. I plan on simiding the rays themself now along with the fact that speeding up world gen and making it more interesting is one of my more important tasks along with implementing proper global illumination and upscaling(there is a partial simple implementantion however it does no edge detection and smoothing). This is all running on a 5950x at 1000x1000 resolution at about 40-45 fps average (yes I know a frame time should be given instead of fps but I haven’t yet exactly built a debugger for it) however at 80% internal resolution it’s about 50-60 fps.
I’ve been working on a realtime CPU voxel raytracer. It utilizes raymarching combined with multi level DDA for fast primary rays. I calculate distance fields stored in an octree format to optimize the raymarcher. I simded the ray direction calculation and multithreaded it. It utilizes checkerboard rendering while keeping the quality seemless. Every even frame gets to use odd’s frame distance, to speed up the traversal speeds. I want to implement a low level traversal algorithm for odd frames to speed up their traversal as well. Sadly I am not yet ready to blog but I am forced to as to not lose more hours. I tried to experiment with more techniques but I decided to still go with raytracing as I already have anotehr rasterization project going on.