Hi to all,
I have been working on a project to do with blocky-voxels whenever time availed itself for a while now. I feel like it is the right time to showcase the progress I have made thus far.
Before I begin, a few things:
- This will be a rather lengthy post.
- Please note that the in-game framerate is higher than that shown in the captured videos provided.
- Please note that the mouse-pointer does not appear in the actual game-section, that appears to be a bug in the screen-capturing software I used.
- Please view the captured videos at the highest resolution setting available. (720p+).
(The demonstrative videos are very short, between 10 seconds to 2 minutes. This initial post will just show the different tools in action, since I barely created any content in the system myself. This is because I firstly wanted to deal with the technical side of things, before creating art samples later on. The art is also programmer art…so forgive me in advance! )
What is Vokcel?
Vokcel is a content creation system that utilizes blocky voxels to the full degree of their versatility. That is, it seeks to encompass all blocky-voxel styles, not just the standard style that has been used in games like Minecraft, CubeWorld or the heavily anticipated, upcoming-title Hytale. The reason I think blocky-voxel projects are still worth developing is because barely anyone has attempted to delve fully into them, even though fans and players of the genre would appreciate such efforts, as indicated for example, by the millions of views and hype Hytale has garnered thus far.
Examples of different ways of rendering blocky-voxels, beyond the standard “minecraft style”. See more voxel art on sketchfab.
Vokcel is a project that will allow players and content-creators to easily make blocky-voxels of any style. It is divided into 5 segments:
- Creating voxel pieces.
- Joining voxel pieces to form compound models .
- Animating the joined voxel pieces.
- Adding contextual sounds to voxel pieces and joined-voxel-pieces.
- A game section within a fully modifiable world where static and dynamic character models can be added to create different gameplay experiences.
I will now show the different segments of the Vokcel project.
A. Creating Voxel Pieces.
The current Vokcel Mainmenu.
The first segment is “New Piece” and here, users can easily create standalone voxel pieces via planar-extrusion:
Creating pieces using extrusion. These 2 samples already show 2 different voxel-art styles.
Basically, users would draw on a layered 2d-canvas whatever it is they want to create and then proceed to “build” it into a 3d-version of the same. The 3d version would be the standalone voxel piece that is optimized via greedy-meshing and culling. Here are 3 videos that I highly, highly, recommend watching to see this in action, if it interests you:
That’s about it for the “New Piece” section. “Edit Piece” would simply preload voxel-piece data as shown in the video “createPieceB” for the user to edit. Now we move to the “Join Pieces” section.
B. Joining Voxel Pieces.
Once standalone voxel pieces have been created, they can be joined together to form compound objects or character-models. Compound objects are called “figures” and character-models are called “avatars”.
An example of an avatar or character-model created via joining different voxel-pieces together.
Users can join individual voxel pieces and modify them via all transforms: translation, rotation and scaling. This means for example, that a user can mix flat-surfaces with blocky-ones to simulate wings, or facial features like eyes and eye-brows that can move around and so on. Here are 2 videos that show this in action, which again, I recommend you watch if you want to get a better idea of what this entails:
That’s it for joining voxel-pieces. Once joined, the voxel-pieces become panda3d actor egg-files. Next we move on to animating them.
C. Animating Joined Voxel Pieces
After users have created different figure and avatar models, they can animate them. All the individual voxel pieces are treated as joints and the animation employed is skeletal-animation.
An example of how a set of joined voxel-pieces would be easily animated.
Here is a video that shows how animation is easily done, please watch it to get a better idea if interested:
Animation egg-files can be saved from this process. Now we move on to the “Add sounds” section.
D. Adding Sounds.
“Contextual sounds” is just my way of categorizing sounds based on when they will be played within the game. For example, the sound made when mounting a car, a horse, a hover-board or the sound made when eating an apple to recharge hp.
Sounds can be added to pieces, figures, avatars and animations for different contexts.
Here is a video that shows sounds being added:
That marks the end of the portion of the project that deals with easy asset-creation. The next portion will deal with adding these assets into a game-world and playing around with them.
E. Game Section.
The game-section is divided into modes: edit mode and game mode. In edit mode, users build a game-session that can then be played in game mode (or edit mode again, for that matter).
For this section, pictures aren’t that useful as they don’t do much to show running gameplay. Therefore, the demonstrations are video based that show some of the things that can be currently done within the game.
First segment, proceeding to the game:
The user can play as any asset created, from a standalone voxel piece, to a figure to an avatar and can also load up different animations to the asset before placing it into a world.
Second segment, captures from within the game. I’ve divided them to show specific gameplay features per video:
Basic motion in water: (The recording is rather choppy, but the ingame experience is not).
Follow motion, showing an npc following the player around:
Evade motion, showing an npc evading the player:
Switching from third person to first person camera and back:
Changing the speed and power (offense and defense) of individual loaded animations:
Extremely basic, unrefined attack sample:
Add an asset to the world:
Add assets to the world via grid-mode:
Add animated assets to the world:
Create in-game world object:
Modify terrain using tools simple:
Lastly, a simple switch-system:
The game-section is still incomplete and there are quite a few things left to do before it is finished. The other 4 sections are fully complete, but could do with a bit of polishing here and there. However, the foundations have more or less been fully set and what is left now are the specifics, which are significantly less challenging to implement.
To close this nascent post, I will state some of the features that I am working on adding to the game-section. Sounds need to be added, the terrain needs to be polished, more animation types are needed in-game and so on. More sophisticated features are things like a link-system. This creates relationships between the in game characters, the player and the created in-game world objects. For example, a mount link would enable players and npcs to mount horses, dragons, cars, jets, boats, etc. Equip links would allow for items like swords, shields, guns and the like. A merchant link would allow certain npcs to perform barter trade within the world. Animation links would allow add certain features such as a grapple-feature in a boss fight and so on. Second would be interactive texts such as in games like UnderTale or Skyrim, quests and of course, particle effects as well as some shaders to flesh out the world.
I would like to thank @rdb, @Epihaius, @ninth, @wezu, @Thaumaturge, @serega-kkz, @eldee and anyone else who aided me while using Panda3D. I know some of the people I mentioned are hardly ever active, but I thank them nonetheless. I especially want to thank @rdb and @Epihaius for their indispensible help, without which it would have been extremely difficult to get this far.
That said, I welcome any feedback, criticism and even collaborative offers, if this has piqued anyone’s interest that much. (Though for collaborative endeavours, I wouldn’t want to take anyone’s time too soon, so I would only be looking for people with genuine interest, open-mindedness and specific skills: voxel artists, or those who can learn voxel art, help with porting some python code to c++, people with an existing networking codebase and skills, people with experience with basic shaders/lighting and experience with vehicle/plane/boat mechanics without over-relying on the bullet engine.)
I will update this thread and use it as a sort of devlog, as I continue to work towards the end and launch of Vokcel, showcasing more features, better artwork and so on, as time allows.
I have also attached some basic procedural .bam and .egg files produced 100% from within the game if anyone would be interested in them, as samples of what can easily be produced using Vokcel:
vokSamp.zip (181.3 KB) [For the models to render with textures, please follow the instructions in the “README” file, to know where to place the texture-folder, thank you].