Veloren is a multiplayer voxel RPG written in Rust
veloren.net
veloren.net
It was still hard to get into the social element of the game, because of so few players and such a large map. I think other players tended to be concentrated at the main spawn point, so a lot of the rest of the world was a backwater essentially.
They also have a giant tree. It will cost you some hours, but it's quite different than anything else you'll find.
I miss that mechanic so much I'll try any game to get my kick
edit: I was Vag/Dis, played PB Mod from 00-04' if anyone's still around. |!i!PbP|
Ah, so it's an MMO then?
Though, fair warning, the game, at least last time I played it, 2-3 months ago, was still very much balanced toward teaming up with at least one other person to beat most dungeons. You can beat them alone, at least the low level ones, but it becomes tedious since you respawn at the entrance of the dungeon, and they can be quite deep.
The fundamental complexity of voxel data structures is higher: O(n^3) for iteration, and the density of polygons required after meshing is generally much higher. The only real benefit from a complexity standpoint is that storage and access of specific voxels is much faster, but this often doesn't represent a payoff.
Voxels are great for a lot of things, but making a game like Veloren run quickly is much harder than you might initially realise. There's a reason that we're told at least every 3 years that a new company has come up with the 'engine of the future' using voxel tech only to have it vanish into obscurity as they try to turn it into something that's not a tech demo.
For Veloren, there is a big benefit: we get to create enormous procedural worlds. But actually controlling the complexity of that data and efficiently storing/accessing it is a non-trivial change as you'll see from the project's dev blog.
That seems a bit misleading. With uniform voxels the occlusion culling becomes much easier and you only render surface polygons.
On the other side you don't get hand made imposters so rendering far away mountains and such becomes a challenge. You dont want to render every voxel of a distant object if a voxel is smaller than a pixel.
On a non-voxel game it'd be very obvious that there were a bunch of different artists involved who were working somewhat independently.
I think one benefit this gives us is on the artist contribution side. Being an art contributor on the project has a lot less overhead of being a formal "artist", since you can quite easily make fauna or creatures or just concept art. We've seen lots of this in our blog posts!
But also, in terms of terrain itself, I think it allows us to really crank up how wild and wacky our procedural generation is, and still have a great looking world (unlike something higher-fidelity like No Man's Sky). We do a lot of cool things under the hood; we have a full erosion system that creates the mountains out of the sea, a site system that places villages in places that make sense, and the ability to mash together shapes that then get "rasterized" into voxel houses. I don't know how much of this would be possible and still look alright if we weren't taking a voxel approach.
Currently Veloren has water and lava, but neither will flow (e.g. if water blocks are manually placed on top of a hill, they won't flow downhill, fortunately this is rare due to worldgen). A simple way to fix this would be to have an ECS system that uses CA-style rules (e.g. a water block with an adjacent-and-below air block swaps places with that air block), though naively doing this would be expensive (iterating over all loaded terrain chunks every tick). A possible optimization would be to detect such blocks, remove them from the main terrain grid, put them in a separate entity-with-terrain-collider (the same kind we use for airships), and only iterate the (sparsely populated) AABB of fluids-that-have-recently-moved. This is similar to what Noita does with keeping track of recently-updated terrain rectangles. Once this is in place, it can be straightforwardly extended with more fluid interactions (e.g. Minecraft-style water + lava = obsidian, more Noita-inspired gases rising).
Just to parrot back what (it sounds like) you're saying: using voxel-based assets in a game with community-contributed assets that extends itself using procedural generation is that the difficult of integration tends to be lower. This is because voxel shapes allow "artists" (which don't necessarily have to be highly-skilled) to build game-appropriate assets fairly easily, and for the generative process to more easily combine those elements into a cohesive world model than might be possible with polygon-based assets. Does that sound about right?
So basically + Cohesive world + Ease for artists + Doesn't need to look so real
I think this is the basic principle as to why Nintendo was able to get away with underpowered consoles for as long as they did. At least in comparison against other beefier consoles out during each releases duration.
So long as the aesthetics and quality are consistent, people are willing to accept a lot.
There are comments from some developers over the matter from a while back. I think one of them was Todd Howard, back from when 'Todd rays' still weren't a thing.
Erosion - https://veloren.net/devblog-43/ Erosion + rivers - https://veloren.net/devblog-36/ Towns - https://veloren.net/devblog-31/
There are lots of other blog posts that discuss these topics, I should really aggregate some of these sections in the future. Those links go into the most detail I think, future stuff is more about tweaks than the core systems (we've been putting out a blog post each week for 160+ weeks now!)
Imagine, if you would: build a 64x64 "flat" foundation of stone. Clicky-clicky-pokey-pokey to place/remove colored blocks. Post something somewhere to someone: "Hey, I have some fresh voxels for someone to do something with!" => scrape-world.php => asset.vxl => etc...
Basically, games with a built-in level-editor tend to be easier to contribute to. Minimally: the potential "editors" are already familiar with 90% of controls, viewpoints, and can see the asset "in-game" already (and they're probably already "in the game / editor" already, no context-switching to blender or autocad or something).
I'm 1000% sure that if minecraft added some sort of symmetry + polygon + joint/bone/connection-point tooling, you'd see an explosion of polygon assets available within the community.
The technical reason that voxel games are "easier to build" is that you can easily make a 1000x1000x1000 array of integers/chars, and get a 50-"voxel" radius from somewhere and start rendering it with raycasting. Can you render a square? Can you render 100 squares? Boom => voxel engine. Can you get/set a 3d-pixel (voxel)? Can you click "destroy/create" on a raycast target? Boom => voxel editor.
Things seemed pretty clean, and because everything has source posted I was able to mess around with the apis, and try a few things against your services :) (hope I didn't set off any alarms lol). That said, what I'm assuming is Sha256 could always be a bit tighter, consider a strength upgrade on those credentials.
There's a bit of snobbery going on here for go / voxel hate, but I really enjoyed digging into a completely open source setup for something that is already a nice intro of game, services, and execution, well done :)
I'm from a bcrypt crowd which is why I offered the suggestion but as long as you're taking things seriously I'm all for it :)
We currently have an MR where we're overhauling some of the auth, and I know in the future we do want to explore what else we could add/improve for our backends :)
I would love to help them make the step from playing games to hacking on games. This was very simple back when I was a kid, but is quite hard now. The games you can make are so much less impressive than the games they are used to.
The procedural generation somehow instantly provides a sense of mystery, that makes you want to discover what this "fresh" world has to offer. Like Minecraft, the unexplored feeling adds a sense of adventure, that is hard to mimic in a handcrafted map.
When you climb over a hill and are greeted with an amazing view, you feel like you are experiencing something unique, instead of the exact same curated sensation all the other players of the game will be having.
The fact that you cannot destroy every block in it does make the game feel more solid. The freedom you have in a game like Minecraft also limits certain gameplay aspects: you can always dig a hole and hide.
Personally I don't mind the lack of building options at all. It's fun, but it can get a bit grindy when you are trying to create something big in survival mode.
It was such a shame Cube World never got anywhere, I'm glad this is here to pick up where that left off!
Imagine I started learning Rust at 10 years old...
I'm really happy that I could get more integrated with the Rust Gamedev "Working Group", since I've been able to chat with so many cool people through the podcast, and host a monthly meetup to see what people have been working on. It's a great community!
Another great Rust gamedev link if you want to see how the ecosystem is doing: https://arewegameyet.com
We got a couple of nights together out of the game. However, unfortunately the game is rather short, and after we had conquered a level 6 dungeon, and obtained the best gear, there was little left to do. Development is still ongoing, and it is exciting to read the devlogs every now and then to check on the progress however. And maybe once there is enough extra content we’ll jump back in for another session.
The world generation in the game is absolutely breathtaking. Might even go as far as saying it rivals that of the new Minecraft 1.18 World generation update, at least with the mountains. And I really love the music in the game, it fits really well with the whimsical aesthetic of the game, and I get it stuck in my head every now and again, even though I haven’t heard it in months.
The game had its fair share of jank as well, as is to be expected with a (pre-alpha?) early version of the game. The movement took a while to get used to, and it felt a bit floaty at times, and didn’t always feel like I was fully in control. As well the camera was really close to the ground, which was a lot to get used to, as I am used to the taller perspective of Minecraft. However, the game does a great job of allowing the player to switch between first and third person, merely by scrolling the mouse wheel. (You can take the camera really far out too to get great cinematic screenshots, of which I have a collection)
The combat felt a bit off at times as well, as the cooldown between attacks, and the speed of the attackers often matching that of the player felt like you couldn’t escape once an enemy locked on. Luckily the middle button roll could usually get you out of attack range, but it felt like this could be improved (and I think it may have been improved since).
At the time I was playing, the trading system was also really confusing, but I believe it has been changed since.
All in all, it is well worth checking out the game. Make sure you play the nightly. Best enjoyed with a group of mates, but it is also fun just exploring by yourself. I can’t wait to see what cool stuff is still to come with this game.
Edit: added section about janky combat.
Well I'm glad to see this so early on, considering it looks like a Cube World knock off.
Although to be fair, I would imagine this game was first thought of as people's expectations for CW fell flat upon the initial (and only?) release
Are we not going to mention the 900lb gorilla, Minecraft?
That's Cube World. This game looks a lot like Cube World. And not just in the way that Cube World looked like Minecraft in that it was blocks and procedural (which is mostly where Cube World and Minecraft intersected, cw has no block building in the game).
Looking at this game and knowing a little of the saga of Cube World I'd bet Veloren is an Open Source response to Cube World making an appearance, exciting a lot of people with potential, going silent for years, then eventually releasing something less fun than the initial preview and dropping into obscurity. It looks at a glance like this began development during the aforementioned silent period.
Of course, since that was in mid 2018, many of the devs that have joined the project haven't played Cube World, and are inspired by other games or mechanics they enjoy. We list our inspirations as Cube World, BotW, and Dwarf Fortress as our primary ones. As is mentioned in other comments here, Minecraft is also part of this lineage, however, we aren't going down the path of buildable blocks very much.
Since the early days of Veloren, we've defintely worked to break away from "just a clone", into gameplay that is more derivative of what we can achive with our engine, but there is still a lot of work to go before we consider it "released" :)
Are there plans for an M1 version? I checked Gitlab issues and didn't see anything.
It looks like the chmod issue has been around a long time. I found Reddit posts going back a year or two. If it's not going to be fixed, why not put a note on the downloads page so people can actually run the game?
If you want to do the same:
brew install cmake git-lfs
git lfs install
git clone https://gitlab.com/veloren/veloren.git
cd veloren
cargo run
Based on this, I see no reason for a downloadable M1-ready version of Veloren to be made available. Compilation is trivial and fast, so might as well.Last time I played, it wasn't really there as a game yet, but I think it's about time to try again!
I got myself up into the Giant Tree and spent three nights. The colors and effects are wonderful. I could zoom way out to the neighboring mountains and pan around to see the whole landscape, then back in to see the crazy creatures on top of the tree.
I put on my glider and jumped out of the tree and realized I didn't know how to fly yet and splat!!
Even though it's multiplayer and has quests and lots of activities, I had a great time just exploring around by myself. Thanks for a fun game!
Launcher GitHub page: https://github.com/veloren/Airshipper
Any help? I really want to play it!
(2) Try installing the Veloren Flatpak direclty, not the Airshipper launcher one. Maybe it helps...
I very much appreciate the stability and performance Rust brings. I believe software written in Rust is much more long-lived that similar C/C++ software since memory issues are almost certain to occur with the latter.
Not to mention the security benefits Rust brings to the table.
I don't really care for the game itself. I'm much more a BZFlag player anyway.
The other two choices people usually bring up are OpenGL and Vulkan. The project was originally using OpenGL and was quite limited as a result; theoretically, you can do better by abandoning portable versions of OpenGL, but many modern OpenGL drivers are incredibly poor (particularly on Windows), and a lot of machines support, e.g., DirectX 11 or Metal but not a version of OpenGL with the same feature set. Going with straight Vulkan means you're either going through a (slow) translation layer on many older machines (and Macs), or giving up on them entirely. Vulkan is also incredibly hard to use correctly if you're using it directly and want to be portable across GPUs; the spec has a lot of edge cases that are quite unclear even to experts, and often requires consulting with driver developers to figure out exactly how they were interpreted (to be fair, this has become less of a problem over time, but it's still an issue for corner cases in the spec).
For FOSS in particular, it helps that people are willing to devote massive amounts of free time to programming when the outcome is a video game--it's why a lot of people got into computer science in the first place, after all.
Another cost is that you lose support for older GPUs.
(But it looks cool, definitely gonna browse through the source code a little)
Ie: is it authorative? How does it handle collision detection between players, combat, projectiles, area of effect spells etc?
I’m looking more for documentation and thought process vs straight up code as I’m not a rust dev
I can't imagine myself being stuck for 10 minutes to see a change happen on screen
Just take a look at a Veloren dev changing a line, then compiling it: https://www.youtube.com/watch?v=nR2WDBMjkh8&t=976s
Rust is not made for game dev, this project is the proof, your progress will stall at some point because you won't be able to iterate on your game anymore!
That's the curse of Rust
Where are the gamedev that announced using Rust from now on 5 years ago? they still stuck compiling their projects!
What a disaster: https://github.com/veloren/veloren/blob/master/Cargo.lock
7.5k LOC just for dependencies..
* Compilation is a ton faster on an M1 and with a non-default linker. Compilation from scratch (including all dependencies) took around 10 minutes for me last time I tried; compilation of the main game is much faster (I think in the ~ 1 minute range, which is more than acceptable if you're not doing something sensitive like animation work.). Obviously, not everyone has an M1, but it's hardly a dealbreaker if you've got a machine designed for development.
* The developer in your video is changing a line in veloren-common, a "root" crate that leads to a bunch of other stuff recompiling. The vast majority of changes are in leaf crates, which compile much faster. For animations, in particular (which require quick feedback) we have a separate compilation unit that compiles on the order of seconds and can be configured to be dynamically linked to the main game, so they can get pretty much instant feedback. For as many kinds of assets and data as possible, we also push it out to configuration files with hot reloading, so most people working on models, item and color tweaks, etc. don't have to wait for compilation at all and can just save their files.
* Many games written in C++ also take ages to compile. Rust isn't unique in that regard. Clearly, it hasn't stopped Veloren's development (I can't think of anyone who quit development because of the compile times, though there's a lot of grumbling). In fact, I'd venture to say that Veloren has had some of the most developers and fastest development of any 3D open source game I'm aware of, regardless of language.
* No major developer I'm aware of announced using Rust for games 5 years ago. What are you talking about? If you mean the Chucklefish title, that had nothing to do with compile times. As far as I know, the game companies using Rust right now are mostly using it for tooling.
* The file you linked is the equivalent of yarn.lock, Cargo.toml is the actual dependency file. Dependencies do not need to be recompiled each time you compile Veloren, only the first time. Additionally, most dependencies compile pretty quickly and parallelize well. There are a handful of dependencies (the procedural macro ones in particular) that take a huge percentage of the overall compile time and/or act as bottlenecks, which is tolerated because they are extremely useful.
Veloren could optimize more aggressively for compile time, if the project was so inclined. A lot of that compile time is spent on generated code from macros like serde. Veloren also deliberately tends to use very large crates rather than trying to split everything into very small compilation units (some of them have been split up to improve compile times, but not too much). The project's perspective is that benefits of using those libraries (which greatly simplify development) and having fewer crates (which makes it much easier to avoid exposing internal APIs to get anything done) far outweigh the compile time costs, but not every project takes that approach and there are a lot of games that compile much faster than Veloren. It's really not a fundamental limitation of the language.
Only if they didn't took the effort to use binary libraries for third party dependencies, or using hot code reloading tools like Live++ or Visual Studio's hot reload for native code.
Granted, nothing prevents Rust to have similar options, but they don't seem to be a high priority currently.
By the way, Rust incremental compilation is broken again, yes I know of the workarounds.
All the best for the project.
It looks broken to me.
Eh, I just tried it because I was curious about M1-ready builds, and:
Finished dev [optimized] target(s) in 5m 08s
veloren on master via v1.59.0-nightly took 5m18s
5 minutes doesn't sound bad to me. Mostly because I remember how long it took me to compile Gnome back in the day :')There is still room for improvement, even having interpreter/JITs, the focus has been in other more critical areas though.
Even though I complain a bit, I must also aknowledge that it has significantly improved during the last couple of years.
PS: It would be great with a repository link on the downloads page. I missed the sentence about the license on the front page, and incorrectly assumed the game to be closed-source when the download page only showed binaries.
> An alpha version of [Cube World] was released in July 2013, but saw sparse updates and communication from von Funck, with many considering the game to be vaporware until he officially released it on September 30, 2019.
Yes and nope. Some fun and promising features were removed and whenever you switched zones all your levels would reset, except for some minor stats, breaking any sense of progress and nerfing the need to explore.
Gameplay loop is defined though and it is definitely more finished than the alpha, but there are some very annoying game design choices and it is very repetitive, but people are trying to fix those things with mods, not sure how well since I haven't touched it since launch.
- A much larger world (compare the number of blocks in Veloren's trees against those of Minecraft, or the fact that mountains in Veloren are regularly many thousands of blocks tall, compared to Minecraft's 256 block height limit)
- PBR rendering
- Shadow-mapping
- Bloom
- A level of detail system, along with horizon maps for dynamic terrain-scale shadows
- More advanced voxel lighting that respects normals
- Fully volumetric cloud, aurora, and atmospheric rendering with raycasting
- More detailed character models and animations
- A more detailed particle system
- Dynamic point lights and related effects (point light diffusion, for example)
- High-detail terrain objects like grass, corn, etc.
As another poster said, there's not really much point in comparing the performance of the game to that of Minecraft. They have virtually nothing in common from a rendering perspective other than the fact that their polygon normals are mostly oriented toward the cardinal axes.
In ‘Vangers’, the map is made and rendered with real voxels. Now that's some shit: https://www.youtube.com/watch?v=P9R7QJ5Sh1o
Simply having blocky cubes as units is just not the same, at all.
The first, as is the case with this, is moreso on the data structure side of things, in which a voxel is like a point in a point cloud, but the point cloud is fixed to a 3d grid. The meshes can be anything, but cubes are the most common, and they are almost always polygonal.
The second is, as you describe, a fundamentally different rendering method using "3d pixels" instead of polygons. These kinds of voxels almost always use the same data structure above as well, but as you say they aren't polygons.
Strange we ended up with the same word for both, unless I'm mistaken
> All the worlds in Vangers were created with Surmap A.R.T., K-D Lab's proprietary terrain editor, and the accompanying voxel-polygonal technology.
How do you figure you can render a voxel without any sort of polygon?
IIRC Vangers could work without 3d acceleration (in the original release, at least), and possibly did not require it at all. Polygons are used for vehicles and items, and there are maybe fifty polygons per a vehicle. You'll notice also that the depth of the voxel terrain is quite limited, as is the main view dimensions.
Also, the game engine is open-sourced, though it's the updated re-release: https://github.com/KranX/Vangers