6 ms·
Bonsai: A Voxel Engine, from scratch
- wiz21c 10mo agodidn't find any video so: https://www.youtube.com/watch?v=sRL_RU7-jfc https://www.youtube.com/watch?v=sRL_RU7-jfc
- javantanna 10mo agobtw the license is nuts
- nonoesp 10mo agoWTFPL (Do What The F*k You Want To Public License) https://en.wikipedia.org/wiki/WTFPL https://en.wikipedia.org/wiki/WTFPL
- andersa 10mo agoThis seems like a bad idea. Surely the warranty and liability disclaimer found in licenses like MIT exists for a reason.
- swiftcoder 10mo ago> Surely the warranty and liability disclaimer found in licenses like MIT exists for a reason Obviously IANAL, but I entirely don't see how the WTFPL (which does not ask the consumer to accept any restrictions) would create an implied contract (which would seem to be a necessary precondition for a warranty obligation)?
- codeflo 10mo agoIANAL either, so my own legal theories are as creative as yours, but I'd like to offer the following data point: All unrestricted open-source licenses that were written by actual lawyers, from MIT to CC0, have found it necessary to include such a liability clause.
- Zambyte 10mo agoIn what sense is the MIT license "unrestricted"?
- codeflo 10mo agoIn the sense that when people want to use a piece of MIT-licensed software in another piece of software, they don't in practice find themselves restricted from doing so by the conditions of the license. "Permissive" might be a word I should rather have used.
- swiftcoder 10mo agoThe MIT license does place one specific license restriction on its users. Specifically: "subject to the following conditions: the above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software"
- Zambyte 10mo agoThis is what I was getting at. The MIT license has restrictions, so calling it "unrestricted" doesn't make sense.
- gorgoiler 10mo agoOff the top of my head the CAPITALIZED WARRANTY DISCLAIMER is specific to a subset of states in the US. If you’re outside those jurisdictions (or any other where it is required) then for aesthetic or principled reasons I can see why you wouldn’t kowtow to the legalese spiral.
- infogulch 10mo agoMaybe don't drop the warranty disclaimer just yet. > The MMWA requires conspicuous disclosure of warranty terms (e.g., designations like "Full" or "Limited" as prominent titles). > The common practice of ALL-CAPS WARRANTY DISCLAIMERS (e.g., "AS IS, NO WARRANTY") stems primarily from state adoptions of UCC § 2-316, which requires disclaimers of implied warranties to be "conspicuous" (and suggests all-caps as one way, especially in plain text). - Grok https://grok.com/share/bGVnYWN5_5c7db73a-ffd2-48b2-bb36-296f92756bf5 https://grok.com/share/bGVnYWN5_5c7db73a-ffd2-48b2-bb36-296f... That said, maybe it wouldn't be too hard to argue there is obviously no implied warranty with a crass license like WTFPL.
- Zambyte 10mo agoTo be fair, most are.
- nurettin 10mo agoBetter than LGPL which prevents you from static linking even if you give attribution.
- Joel_Mckay 10mo agoThat is a fact.. LGPL can unintentionally contaminate the code base, and why https://wxwidgets.org/ https://wxwidgets.org/ had to have a more open license to cross-port programs from/to other platforms (especially Android and windows often needed Static builds just for practical reasons.) Additionally, a public-domain/CC0 license can run up against some organizations policies. It is better to release under several licenses to reach as many users as possible. Personally prefer Apache 2.0, as 10 years from now someones situation may need that... Sad a grief'er decided to bury your response. Happy holidays =3
- jesse__ 10mo agoAuthor here.. that was kind of the point.
- another_twist 10mo agoThe author mentions simplicity in their Readme. I would be very interested to read their journey and some of the decisions they made where they preferred simplicity. More of this please !
- jesse__ 10mo agoHello, author here :) I've been thinking of doing a series of blogs on the journey but .. it's been a journey, which is a lot to write about in full. In short, a few places where I've been able to prefer simplicity: 1. Allocators are all pretty much as simple as you can get. Most memory in the program is bump/arena allocated. There is a buddy-style heap allocator for things that are annoying to arena allocate (strings that can be edited, for example). I make heavy use of temp memory and freelists. 2. Containers are all very straight-forward, and it's definitely a feature. The example I always give here is std::map from C++. On paper, it looks great; it has very good looking properties. In practice, the implementation is a nightmare; it's slow, and has a comically large rebalancing-shaped performance cliff. My containers strive to be simple, with reasonable average and worst-case performance. 3. I wrote my own metaprogramming language instead of using C++ template metaprogramming. Writing an entire programming language sounds like the antithesis of simplicity, but in reality, having a good metaprogramming layer makes your life immeasurably easier in the long run. With strong metaprogramming capabilities, stuff like realtime debug UI and state serialization becomes nearly trivial. Once you start doing versioned data serialization in C++, you quickly realize you need a better compiler (see: protobuf, cap'n proto)
- Joel_Mckay 10mo agoNice project, this tutorial was also helpful for a hobby volumetric data display routine. Cheers =3 "I Optimised My Game Engine Up To 12000 FPS" ( https://www.youtube.com/watch?v=40JzyaOYJeY https://www.youtube.com/watch?v=40JzyaOYJeY ) https://github.com/vercidium-patreon/meshing https://github.com/vercidium-patreon/meshing
- xyzsparetimexyz 10mo agoIt's really not that hard to ray trace the voxels instead of using rasterization and allows for way higher voxel counts. https://dubiousconst282.github.io/2024/10/03/voxel-ray-tracing/ https://dubiousconst282.github.io/2024/10/03/voxel-ray-traci...
- ghc 10mo agoI've always wondered why voxel engines tend to produce output that looks so blocky. I didn't realize it was a performance issue. Still, games like "C&C: Red Alert" used voxels, but with a normal mapping that resulted in a much less blocky appearance. Are normal maps also a performance bottleneck?
- codeflo 10mo agoBefore Minecraft, basically all voxel engines used some form of non-axis-aligned normals to hide the sharp blocks. Those engines did this either through explicit normal mapping, or at the very least, by deriving intermediate angles from the Marching Cubes algorithm. Nowadays, the blocky look has become stylish, and I don't think it really even occurs to people that they could try to make the voxels smooth.
- wongarsu 10mo agoI think marching cubes is still decently popular in games with modifiable terrain, we just stopped referring to it as voxels
- reactordev 10mo agoVoxels have been around since the 1980s. The smoothness came from that beautiful CRT and its inability to display crisp images. Normals weren’t really used until early 90s and used heavily by games like Comanche by NovaLogic. The reason why Minecraft voxels are blocks is because Notch (Markus Persson) famously said he was “Not good at art”. He didn’t implement the triangulation and kept them unit blocks. Games that had voxels AND were triangulated that came before Minecraft were Red Faction, Delta Force, Outcast just to name a few. The point is, voxels aren’t anything special, no more than a texel, or a vertex, or a splat, a normal, or a uv. It’s just a representation of 3D space (occupied/not occupied) and can just as easily be used for culling as it can for rendering. The Minecraft style because popular because it reminds people of pixels, it reminded people of legos, and Minecraft was so popular
- deleted 10mo ago[deleted]
- tyleo 10mo agoI’ve been using Voxel Max for the last couple weeks to draw voxel art for a game and it’s incredible. I’ll have to try some of my assets out in this engine.
- jesse__ 10mo agoI'm curious, did you specifically choose Voxel Max over MagicaVoxel for any reason? > I’ll have to try some of my assets out in this engine. The asset loading is currently broken in Bonsai after a big rewrite, but it's the next thing on my list to fix! Would love to see your art :)
- tyleo 10mo agoI did a decent amount of work in MagicaVoxel in the past. I like that Voxel Max works on iPad. It also allows 3D meshes to be imported and voxelized. Voxel Max has a good amount of polish these days. It’s my top option with MagicaVoxel a close second. I’ve also used Qubicle and Goxel. Qubicle is okay for specific things. I really like its masking planes feature. I really don’t like Goxel. It’s UI just feels clunky.
- jesse__ 10mo agoSweet, thanks for the summary :) I've been wanting a good mesh->voxel pipeline. I'll have to check out Voxel Max's facilities there.
- tyleo 10mo agoI think you’d really like Voxel Max’s capabilities there. Even if you just use it for the mesh -> voxel conversion and then reexport to MagickaVoxel. The Voxel Max folks have been very helpful in their Discord server too.
- blastro 10mo agovery cool
- tim-fan 10mo agoNot to be confused with Bonxai (Fast, hierarchical, sparse Voxel Grid) https://github.com/facontidavide/Bonxai https://github.com/facontidavide/Bonxai Is there some connection between Voxel grids and Bonsai trees that I'm missing??
- jesse__ 10mo agoFunny coincidence on naming. I called the project Bonsai because I tended to it in a similar way that someone tends a bonsai tree; carefully, over years. Not sure of the origin of the Bonxai name
- dirtybirdnj 10mo agothe look and aesthetic of some of your screenshots is awesome. reminds me of ultima online in the best way possible. It's like looking into the future, will there be a point where you can just render the entire scene in voxels at high enough res where it's indistinguishable from modern 3d graphics?
- jesse__ 10mo ago> the look and aesthetic of some of your screenshots is awesome. reminds me of ultima online in the best way possible Thank you! > It's like looking into the future, will there be a point where you can just render the entire scene in voxels at high enough res where it's indistinguishable from modern 3d graphics? There are two really big problems getting in the way of this. 1. Data size. One of the ways that my engine gets away with rendering such large volumes is by discarding most of the voxel data after it gets generated and converted to triangles. In the context of a traditional 3D pipeline, where artists hand-author content in zbrush, maya, blender, etc, which is then imported and drawn in the engine .. it gets complicated. 2. Animation. Animating voxel data is hard. I'm going to completely gloss over all the details, but current techniques mostly boil down to playing back 3D video, which is problem (1) on steroids. That all said, many voxel-based techniques are used in commercial 3D game engines today. Unreal Engine just landed a feature that voxelizes foliage in the distance, and just draws the ~1px voxels instead of textured quads. Voxel Cone Tracing is another prominent example. Fluid sims and many volumetric effects are also commonly done using voxel grids.
- dustbunny 10mo agoSo many of these voxel engines suck, but it appears that this person totally nailed it. Bravo