These past few weeks have been super busy for the team. We have been working on adding new features, tech improvements, and more content. The new stuff you saw in our “In the Works” videos are in place and we’re just working on the best part now, bug fixing!
So what have we been working on since the last update?
The most anticipated feature ever – functional doors!
You can now craft Crude and Wood Doors for your builds. Modding in your own doors is super simple. All you have to do is just add our “door.lua” script to your door object schematic.
Our revamped SkyDome now has generated clouds, a moon, and a sun that revolves around the player on a hemisphere. We just added a feature that allows the sky to transition between biomes. You’ll notice darker clouds and fog in swampy areas while the rolling hills is filled with blue skies.
Body Morph & Growing to a Teen Seed
Still an early prototype of the system but we wanted to get this out for you to play with. Food consumption will now impact your body weight. How about growing? That will depend on your crafting activity.
There are two new biomes added, Red Cliffs and Bedrock. Five previous biomes were improved but we’ll list the details in the patch notes once we’re ready.
Creative Mode Rework
Let’s not forget about creative mode! You have a new UI to play with and the option to switch to survival interaction.
New crafting stations and recipes
The artisan workbench and the loom were added without any bugs *fingers crossed*. This includes new recipes and resources to go along with them.
These are just the few things we are working on that will be released in the next update. We are working on larger systems too but not much can be said until we make more progress.
You’re probably wondering when the next patch is coming and we don’t blame you. We don’t have a set date because play testing and bug fixing can take anywhere from 1-3 weeks. We’re aiming early June if everything goes smoothly and @input_output_7 stops breaking code.
For those of you who gave us a heads up about our launcher issues, thank you! @JoshuaBrookover is on it and we’ll be making some changes to resolve the issues. We don’t have a time frame yet but he’s been working on it since it was reported.
Hey guys. This is Grim from NK here to tell you a little about how the voxel shapes in TUG are represented. This will get a little technical, so bear with me!
Many people try to think about voxels in terms of blocks. Blocks are easy to think about! Blocks can be either solid or air which are stored as 1’s or 0’s in data.
In TUG we have smooth voxel contouring that can represent a variety of shapes. Smooth shapes are hard to represent as blocks. Because there is no good way to tell if a block should be smoothed-over or not. We solve this issue by storing our voxel data as a signed distance field. A signed distance field is a grid of numbers that tells us the distance away from the nearest geometrical surface. A positive value means we are outside of the surface, and a negative value means we are inside the surface. Here’s an example in 2D for a circle:
Red values are negative (inside) and green values are positive (outside).
Each voxel is assigned a field value based on the distance to the center of the circle.
A signed distance field shape representation is convenient when it comes to adding and subtracting geometry from the world. To add another shape, we just have to take the smallest distance-field value from both shapes.
Notice how the field values outside the first circle have been replaced with the smaller field values of the second circle.
Removing geometry is also easy! All we have to do is negate the field values of the circle being removed so the inside (negative) field values become outside (positive) field values, and then take the largest field value. Adding and subtracting any shape is possible as long as a field function for the shape can be defined.
Now you might be wondering how a signed distance field is actually turned into triangles that can be rendered in-game. Remember that a surface sits where the field values change from positive to negative. We start by identifying the edges along voxels where there are sign changes.
After we have identified a surface edge, we have to find where the surface actually sits along the edge. Depending on the field values at the two edge end-points, we can place a point along the edge.
After these edges and points are identified, we use the surface-edge intersections to come up with a single vertex position for each voxel. We calculate a voxel vertex position by averaging together all of the intersection points.
There are more expensive techniques to place interior-voxel points more accurately (like Dual Contouring with QEFs), but we have opted for speed over accuracy.
Now that we have voxel points, we have to figure out how to connect them together into faces. This is done by connecting together points across edges that have sign changes.
You can see that the average points connected together do not perfectly represent the circle, but it is pretty close.
This process extends directly to 3D except that the squares are cubes, and that a cube edge has four voxel neighbors instead of two. Across these edges we connect all 4 voxel neighbor positions together to form two triangles.
I hope you have an idea about how geometry in TUG is represented underneath the hood. I hope you’ve enjoyed my overview!
If you have any questions, feel free to send me a message on twitter @NKGrim.
Don’t forget to check out the latest “In The Works” video on Creative mode rework.