Тёмный
Douglas
Douglas
Douglas
Подписаться
Building a massively-detailed voxel engine and sharing my game development progress!
Комментарии
@VcSaJen
@VcSaJen 10 дней назад
I understand why it's like that, but still, "real" rotating and moving in the voxel world wouldn't involve rotation of voxels themselves (just like how pixels don't rotate and move on a 2D screen when 2D objects are rotated and moved).
@Harald723
@Harald723 11 дней назад
Can you make a toutorial for making mods?
@quetolical_5178
@quetolical_5178 12 дней назад
I absolutely love the per-voxel lighting. I can’t explain it but the specular highlights and sharp shadows give a really nostalgic feel. The GI adds just enough realism 😇
@haydennorris2913
@haydennorris2913 12 дней назад
Simulating soft body voxels i think is usually hardware intensive. Minute papers had a video about a paper where people trained AI to handle the physics and made it an order of magnitude faster while being a very convincing fake simulation.
@MountainLabsYT
@MountainLabsYT 12 дней назад
Awesome.
@TeltStory
@TeltStory 16 дней назад
I can't wait to use this as a voxel renderer in godot
@thHogBox
@thHogBox 19 дней назад
Need to support low end gpus, just knock the res to 480p haha
@PlayBASIC-Developer
@PlayBASIC-Developer 21 день назад
The low res render looks very N64
@MrUbister
@MrUbister 21 день назад
0:13 Idk why but that pixelated lens flare is so cute hahaha
@Permaviolet
@Permaviolet 24 дня назад
I think one of the coolest things about averaged normals per-voxel is that you get nice edge bevels on sharp objects basically for free
@cosmo9762
@cosmo9762 25 дней назад
This technique is amazing and so simple! I've just implemented this in my own engine and it looks very promising. Thank you!
@sambubu4195
@sambubu4195 25 дней назад
Very cool
@Gandalf_Le_Dev
@Gandalf_Le_Dev 26 дней назад
Quick question, how would you load assets such as new textures or models from a mod ?
@marc5137
@marc5137 26 дней назад
I'm working on building a modding system for Bevy. It's tough getting all the different parts working together, especially between wasm and the engine but very rewarding when it finally does. Great work!
@marceloferrante
@marceloferrante 26 дней назад
What about using lua for scripting?
@gsestream
@gsestream 27 дней назад
nice webassembly hijacked the wasm name, from a native assembly compiler, lol. also your engine works like unreal engine visual coding with the mods. kinda. yep the mods are like visual coding system. xbox controllers are used often on pc games too. how about party animals, gang beasts or human fall flat style of physics game. also 3d worms style landscape pixel destruction game. or just 3d destructive landscape shooter.
@felix8307
@felix8307 27 дней назад
is the engine/game itself written in rust?
@DouglasDwyer
@DouglasDwyer 27 дней назад
Yes, it's Rust all the way down :)
@felix8307
@felix8307 26 дней назад
@@DouglasDwyer thanks for taking your time to reply!
@dmitry-diehl
@dmitry-diehl 27 дней назад
Please, look at Voxtopolis game. It is amazing and author releases video about his new building system yesterday.
@JanoschNr1
@JanoschNr1 27 дней назад
Well duckless, I hope you find your duck! :D
@daveyboon9433
@daveyboon9433 28 дней назад
I'm loving it! Multi player would be something I would be interested in.
@RagBrokeHisThumb
@RagBrokeHisThumb 28 дней назад
This is one of the best voxel engine's I've ever seen. Probably not that fastest but wow, the compatibilities are insane. It's very well thought out.
@Raffa064
@Raffa064 28 дней назад
I've heard "dogless"
@alimadco
@alimadco 28 дней назад
Solid bro
@samfromcadott
@samfromcadott 28 дней назад
This is an idea I've had for awhile to let an engine allow developers to use any language they want.
@lever1209
@lever1209 28 дней назад
java with extra steps
@derrickpriester738
@derrickpriester738 28 дней назад
Are you planning on allowing mods to add arbitary features to voxels? I'd really like to make a factory building game with only in-world crafting using this engine, so adding material properties like hardness and coatings is important to me. Dynamic properties like temperature, lifespan (for plants / animals), and electric charge would be a big plus too!
@i.8530
@i.8530 28 дней назад
I like that I can immediately recognize that glorious egui action
@sechmascm
@sechmascm 28 дней назад
Did you have to build Nuke from scratch or did you read a map file and automatically transformed it into a voxel destructible one? Could be cool to see a completely destructible map CS experience
@DouglasDwyer
@DouglasDwyer 28 дней назад
Right now, that model is taken from a Teardown mod. The mod creator made it by hand. That said, it is possible to voxelize 3D models/maps so that's something I might explore in the future!
@kras_mazov
@kras_mazov 28 дней назад
You're doing it right.
@nullp0inter
@nullp0inter 28 дней назад
Shut up and take my money 🤧
@zactron1997
@zactron1997 28 дней назад
Excellent video! I'm one of the developers working on the Bevy engine (also written in Rust) and I just love seeing other ways of tackling these problems. You've got something really well polished here that you should be proud of
@marc5137
@marc5137 26 дней назад
Haha, I'm working on building a modding system for bevy in the same sort of vein. Had to rebuild the entire ecs from the ground up to do it properly from within wasm haha.
@rodrigofernandes6449
@rodrigofernandes6449 29 дней назад
Cool. Could you do a more in depth video of wasm plugins and rust and HMR?
@MI08SK
@MI08SK 29 дней назад
How do you handle/will handle the rust abi instability between versions?
@DouglasDwyer
@DouglasDwyer 28 дней назад
The calling convention for WASM methods uses the C ABI (with custom serialization logic that I've added, so any serde type can be passed across the boundary)
@AndrewBrownK
@AndrewBrownK 29 дней назад
I use controllers with PC all the time, I think it's pretty common, so it's a good feature
@hootis1
@hootis1 29 дней назад
this is awesome, thanks youtube algorithm
@bluesillybeard
@bluesillybeard 29 дней назад
For my own game, I'm also thinking of going with WASM. I really like the idea of letting modders use whatever language they like, as long as it can be run on WASM. So C, C++, Zig. Rust, even GC languages like Python and C# could theoretically work. The only issue I can think of is how separate mods will link together - if mod A wants to call a function in mod B, how would that happen? I'm curious about how doable that is, although it could be really obvious since I haven't actually implemented anything yet.
@reedthorngag1810
@reedthorngag1810 29 дней назад
you could have an interface that lets mods tell the game about functions they want to make available, and then other mods can query for them (disclaimer, I have no idea how wasm sandboxs actually work, so this may not be nearly so simple in practice, espcially to still keep them secure)
@DouglasDwyer
@DouglasDwyer 28 дней назад
That's a neat idea! It was an approach that I wanted to try, too, but allowing mods in multiple languages turned out to be really complex. You end up needing to define a custom calling convention and type system so that mods written in different languages can call each other. There's a project called the "WASM component model" for this, but it turned out to be too complex for my use case. It's a very difficult problem to solve :)
@bluesillybeard
@bluesillybeard 28 дней назад
@@DouglasDwyer I thought WASM had a defined standard calling convention. Since that's apparently not the case, I would probably just make a C api (traditional header files), and leave it to the community to make bindings for other languages. Most languages already have a mechanism to interact with C - Zig can even directly import C headers.
@e3.14c4
@e3.14c4 29 дней назад
Okay but will a GUI covering the entire screen increase or reduce performance? If it affects the actual game and how it does stuff would conflicts occur, or would every mod having a GUI start to get real messy without a unified front for GUI handling (such as the crosshair getting added by lets say 7 mods) in which case I imagine GUI toggles for the GUI so you can have less GUI for all that GUI ... would be a good practice? Would a mod be possible to force all isolated GUI environments to replicate to itself and cull the original mods in order to organize? my brain hurted.
@oglothenerd
@oglothenerd 29 дней назад
WASM is cool.
@Aleod_
@Aleod_ 29 дней назад
Contoller support is essential for accessibility as most disabled players use controller support to play games with their custom controllers
@thomasmcbride2287
@thomasmcbride2287 29 дней назад
Great video as always. Are there any drawbacks to WASM’s usage of a separate address space? Just wondering why Minecraft mods use main memory if there’s a safer alternative.
@DouglasDwyer
@DouglasDwyer 29 дней назад
Great question. There is a big drawback: it's much, much harder to share data between the engine and WASM mods. With WASM, if a mod wants to call an engine function (or vice versa) the only data that can be passed as arguments is binary arrays. You can't pass structured data (such as a tree of objects); it has to be serialized to a binary array first, and then deserialized on the other side. The "Rust macro magic" that I mentioned handles this for mod developers, so it's not a huge deal, but it comes with limitations. Basically, you can't persistently share structured data between engine/mods - it has to be copied back and forth. Like anything, it's a tradeoff. For what it's worth, Minecraft mods use main memory because: - Minecraft mods aren't officially supported, they basically hack the official game in order to run. So of course mods are going to access engine internals directly, as there's no other API exposed. - It's a lot easier for Minecraft to support modding in main memory since Minecraft is written in Java. Java is a JIT'd language whereas Rust is compiled in advance. Because Java uses JIT compilation, loading additional mod code at runtime and linking it with the main Minecraft code is much simpler.
@GabeRundlett
@GabeRundlett 29 дней назад
LIKE AND SUBSCRIBE BRUH
@chaineddepths9523
@chaineddepths9523 29 дней назад
ur using this over lua bc?
@oliverdowning1543
@oliverdowning1543 29 дней назад
Presumably because it's WASM based you can actually use any language with a WASM compile target not just Rust?
@DouglasDwyer
@DouglasDwyer 29 дней назад
In theory, yes, but that would require having an API that's compatible across languages. For now, I'm focusing on developing Rust-specific tooling (for example, the GUI library egui is Rust-specific) so that the development experience is as robust and streamlined as possible.
@oliverdowning1543
@oliverdowning1543 29 дней назад
​@@DouglasDwyerOh ok. I must admit my own raycasters engine uses a much much simpler scripting system (I made a custom assembly-style language interpreter in a program agnostic way that could be fed functions to use as "sysCalls") so I don't really know how it works with your system at that deeper level although I will definitely go and have a look at the code on your gitHub at some point. Either way, the entire modding system for your voxel engine seems amazing.
@decare696
@decare696 29 дней назад
I'm reminded of a thing in minetest, where placing a large amount of voxels (called "nodes" in minetest) from a mod is often really slow. Not sure how much faster WASM is than Lua (and whether there's any JIT going on), but this might be something to look out for when designing more of the mod API.
@DouglasDwyer
@DouglasDwyer 29 дней назад
There is JIT when the game is running on desktop platforms. But ideally, the API is designed in such a way that mods aren't placing voxel-by-voxel. Mods should be able to call a method like "copy voxels" and then the engine (optimized native code) should do the work.
@TheBrotado
@TheBrotado 29 дней назад
Douglas your profile picture looks like Luke Skywalker. I just thought you should know. 😊
@DouglasDwyer
@DouglasDwyer 29 дней назад
Haha I never noticed that before!
@radicalradish
@radicalradish 29 дней назад
You are wildly talented
@DouglasDwyer
@DouglasDwyer 29 дней назад
Thank you!
@OceJlot
@OceJlot 29 дней назад
It's so cool to see how this game engine is growing with each new video You are amazing!
@frozein
@frozein 29 дней назад
Smart to integrate mod support early. You've mentioned that the end goal for your engine is a platform for game creation/sharing. Do you plan to allow users to create their own games primarily through this modding method? Or do you plan to have some sort of library or some other method.
@DouglasDwyer
@DouglasDwyer 29 дней назад
@@frozein right now, my primary focus is to support game creation through the modding library! But, as always, this is a prototype. I've been thinking about a couple of other concepts for modding too (like using C#) and I might try exploring them eventually :)
@frozein
@frozein 27 дней назад
@@DouglasDwyer Very nice. I'm curious though as to why you don't just release this project as a library, as this is the approach I plan to take with my engine. Is there an advantage to releasing it as a "game" with no gameplay that must be modded?
@DouglasDwyer
@DouglasDwyer 27 дней назад
You raise a very good point! There are two reasons why it's not a library: 1. When I originally conceived of my engine, I wanted to build a "platform" (sort of like Roblox) where users could create their own games. For example, a user might connect to a server or open a world file which use mods. The user's game client automatically loads the mods (without any installation process) and they are able to play. This setup works differently than having the user download a separate game executable for every game built in the engine. It also facilitates monetization, since it's easier to charge end-users for buying a modpack than it is to charge developers for using my library. 2. Designing a generalized voxel engine is very difficult! My project isn't currently set up to be consumed as a library. I commend you for pursuing that route - but a rewrite would take a lot of time for me, and I don't know if I have the knowledge/vision to create such a library yet. At the end of the day, I think it comes down to having a "vision" for the project. I had a certain vision (originally) regarding creating a Roblox-style platform, although I fear the scope of that may be too big. I'm going back to school for the fall now, so I'll be taking a break from engine dev for a bit. Who knows? Maybe I'll change my approach - I would also be interested in a C#-based modding system because that has a lot of advantages over WASM. But I probably should try to finish one iteration of this project before starting another :) Thanks for commenting and good luck with your own engine!
@frozein
@frozein 26 дней назад
@@DouglasDwyer That makes a lot of sense, the hot reloading feature especially is very useful for users making their own games. Sounds like a very interesting vision! And yes, trying to set up an engine as a library is very difficult, I've probably spent >50% of the development time on my engine just working on a solid API 🙃 Best of luck in school this semester! My classes start soon as well haha
@williamist
@williamist 29 дней назад
hell yeah, modding!
@tommycard4569
@tommycard4569 29 дней назад
I've been waiting for this video for a while having seen ur plugin repos under development. Super exciting stuff!