I’ll let the video speak for itself
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.
I have been working on improving rigid bodies. Along with adding collisions to them by the player so you can pick them up. I’ve been working on floating terrain detection but I realized it’s either gonna be a very expensive and complicated algorithm or something in world gen. I am probably gonna leave it at that even though the rigid bodies are incredibly janky and just release it. I am tired and want to move on to a side project
Not visual. However I’ve been working on optimizing the engine. I’ve implemented face culling for physics object. Eg only pixels that aren’t covered will have collision checks with other objects. As well as AABBs, so that unless their general shapes collides, no per pixel collisions arise. I implemented multiple light optimizations, most important is rendering it a lower resolution as at this scale, as at half resolution it’s indistinguishable from native. As well as I started work on a player controller.
So for example light update went from 39157us to 3399 us.
I have implemented rigid bodies into the engine. Rn this is a very basic and slow version. I plan to finish their interactions with lighting, optimize their collisions and then add JFA to check for disconnected terrain to become rigid bodies. Happy coding
I’ve been working on multithreading and general optimizations. I use OMP for it, it makes multihreading much easier however I still needed to make some changes. I split away everything rendering related from physics and lighting updates. I am using OMP as well because CA is much more of a problem of throughput than one of on demand updates. As you update millions of pixels every frame and don’t need to care about splitting physics and sound. However in the future I will ideally have a combination of both. Let’s say 4 threads manually controlled for sound, enemy ai, physics so that they can be responsive while CA uses 8 threads for pure throughput. Please keep in mind light updates are not done every frame, so it being 39157 us doesn’t mean it actually runs at sub 60 fps. One other thing I improved as well is support for larger world. You can have any size you want as long as it is smaller than the 32 bit integer limit.
In the meantime, I’ve worked on optimizing the project. I am trying to implement a more traditional physics solver but I am tired of rigid bodies constantly failing. So I am shipping it as it is in a bit. I will come back and work on it in the future as I still want to play around with it