Skip to content

Releases: SolarLune/tetra3d

v0.8 - Material Panel, Marker Importing, Animated Textures, Multiple Vertex Colors, Paths

18 Mar 23:12
Compare
Choose a tag to compare

Yo! It's been a bit since the last version of Tetra3D - here's v0.8! This one has quite a few improvements in it!

It Breeds Fear - Construction Worker

Material Panel 🧱

A new Material Panel has been added to the Tetra3D Blender add-on, making it easier to color Materials, set shading or blending parameters, and backface culling, all from one place.

Marker Importing 🚩

Markers placed in animations can now be imported from Blender into Tetra3D! This can be very useful in timing events like sound playback (e.g. playing a footstep sound in time with an animation) or marking traits in an animation.

Animated Textures 🏃

Being that old-school renderers were working with such limited poly counts, utilizing animated textures were a key part of the experience in doing more with less. This being the case, I've added both a TextureAnimation and TexturePlayer struct - these structs allow you to play back simple sprite animations on a collection of vertices on a Mesh. This can be useful for facial animations for 3D characters, or 2D animations, among other things.

Multiple Vertex Colors 🔴 🔵

Previously, vertices only supported a single vertex color channel. I was unsure about how to go about selecting vertices (say, for animation) easily - after some different attempts, I've come to the conclusion that the simplest way to do this was just to support multiple vertex channels. This way, you can use channels to select vertices of interest (i.e. the faces of a person's face, to do facial animation).

Paths ♾️

Path support has been added to Tetra3D, allowing you to both create paths through code, or import paths from Blender into Tetra3D. You can use paths to easily make NPCs walk on a route, for example.


There are quite a few other bugfixes and optimizations, as well, including one made by the creator of the Golang GLTF parsing library, @qmuntal - thanks a lot to him for his assistance and contribution!

Full Changelog: v0.7...v0.8

v0.7 - Tetra3D Blender Addon!

22 Feb 07:53
Compare
Choose a tag to compare
Pre-release

Yo, 'sup~!

Here's another Tetra3D release - this one has a new Blender add-on I made to assist with the process of creating stuff for Tetra3D.

There's a bit more info on what it does over on the Wiki, but in short, it offers exporting to GLTF on save, easy bounds node setting, and object property creation. I've attached the Tetra3D add-on, of course. I've attached it below.

Full Changelog: v0.6...v0.7

v0.6 - Multiple Material Support, Auto Transparency, Custom Fragment Shaders

31 Jan 08:39
Compare
Choose a tag to compare

Yo, 'sup!

Here's another Tetra3D release, this time implementing support for multiple materials, an automatic transparency mode, and custom fragment shaders!

Multiple material support

Previously, each Model in Tetra3D could only have one singular material. Now, a Model can have multiple materials (one material per triangle). This has been implemented internally by the creation of a new utility, the MeshPart. The MeshPart represents a group of triangles and vertices, tied to a material. When exporting a mesh from your content creation program (e.g. Blender), each material slot or mesh primitive becomes its own MeshPart in Tetra3D.

This allows you to more easily and simply construct your model, since you can use multiple tilesets or textures for different parts of a single mesh. Note, however, that when rendering, each MeshPart constitutes a separate draw call, which is slower than rendering a single draw call. Try to consolidate MeshParts if possible. On the flip side, separate MeshParts can visually intersect, meaning that there is some inter-object depth testing now, which is nice. For more information on draw calls, see the Debugging wiki page and the Materials wiki page.

Automatic transparency

Automatic transparency has been added! Now, by default, a material's transparency mode will be set to the automatic transparency setting, meaning that if the material was exported as opaque from Blender, it will be treated as opaque unless the material or object's alpha transparency levels fall below 1.0 - in this case, the material will be treated as transparent. This way, objects that are wholly opaque or transparent will be rendered properly automatically.

Custom fragment shaders

Custom fragment shaders (written in Kage) have been added, and are able to be set directly on Materials. By using a custom fragment shader, you can control how a 3D object is visualized. Note that by using a custom fragment shader, you will override the default texturing and lighting.

Some tips have been added to the wiki, as well, to help out with using Tetra more easily!

There's also been a variety of bugfixes added, which can be seen by looking through the changelog in more detail below.

Full Changelog: v0.5.2...v0.6

Welp, thank you very much for reading, and I hope you enjoy checking out Tetra3D~!

v0.5.2 - Transparency! Depth Buffer Accuracy Improvements!

10 Jan 05:24
Compare
Choose a tag to compare

cap_2022-01-09 20-49-50_00:00:04_01

Yo! This release features transparency, tweakable on an Model's Material, as well as depth buffer accuracy improvements!

Transparency

Transparency has three modes - opaque (which is default), fully transparent, and alpha clip. Note that the differences between these materials primarily influence how they write to the depth buffer, and so if they obscure other objects. Changing their color or texture to be transparent is an important part, but changing the transparency on the material is also important.

  • Opaque materials write to the depth buffer and obscure objects behind them. Simple.
  • Transparent materials don't write to the depth buffer - they do not obscure objects behind them. They are rendered in a second render pass after all non-transparent materials, and in back-to-front sorting order.
  • Alpha clip materials write their textures' alpha values to the depth buffer, but not the transparent portions - this would be useful for certain textures or materials that are wholly transparent or opaque - for example, for a 2D sprite, or a cloak with frayed edges.

Depth Buffer accuracy improvements

improvedDepthBuffer

The depth buffer previously was wildly inaccurate when objects intersected. This is because the texture was written to naively, storing the depth (which is a value from 0 to 1) directly in the color of the texture (so it was grayscale). All three channels (R, G, and B) were used to indicate the same value of depth, which meant that the G and B channels were duplicates of the R channel, and so you only really had 256 possible values of depth).

To improve this, the depth is now encoded and distributed into the R, G, and B channels. This changes the amount of possible depth values from 256 to 256 * 256 * 256, or 16777216 possible values. This means that intersecting objects should look far more natural. Hurray!

Full Changelog: v0.5.1...v0.5.2

v0.5.1

07 Jan 06:27
Compare
Choose a tag to compare
v0.5.1 Pre-release
Pre-release

Screenshot from 2022-01-06 22-32-09

Small bugfix release and a pretty huge optimization for point lights (around 300% faster than the previous iteration!). Sun lights are similarly optimized by simply shading whole triangles rather than individual vertices, though the difference wouldn't be as noticeable because sun lights are far simpler.

Active and total light counts are also added to the debug text printout.

Full Changelog: v0.5.0...v0.5.1

v0.5.0

05 Jan 09:01
Compare
Choose a tag to compare
v0.5.0 Pre-release
Pre-release

Yo, 'sup~!

This release mainly has vertex-based lighting, huzzah~

Full Changelog: v0.4.3...v0.5.0

v0.4.3

21 Dec 06:32
Compare
Choose a tag to compare
v0.4.3 Pre-release
Pre-release

Cameras are now loaded from GLTF files, and cloned armatures now reassign their skinned meshes properly if they are children of the armature.

Full Changelog: v0.4.2...v0.4.3

v0.4.1

12 Dec 21:43
Compare
Choose a tag to compare
v0.4.1 Pre-release
Pre-release

Minor fixes and optimizations.

The major point of this release is optimization of the vertex transformation process. Now we sort triangles directly rather than sorting vertices and then looping through their triangles afterwards. These optimizations represent a ~50% increase in speed, going from ~20FPS in the stress test to ~30 (on my machine).

Full Changelog: v0.4...v0.4.1

v0.4

11 Dec 06:27
Compare
Choose a tag to compare
v0.4 Pre-release
Pre-release

Intersection testing!

Full Changelog: v0.3...v0.4

v0.3

28 Nov 22:51
Compare
Choose a tag to compare
v0.3 Pre-release
Pre-release

Yo, 'sup!

Here's Tetra3D v0.3, this one including object and armature animation support, GLTF support, and orthographic projection~!

Full Changelog: v0.1...v0.3