This devlog is going to be a little bit different from the rest since I want to talk about the 3d
modeling process, there's really no one better to explain it than the person who's actually doing
it. So I'm going to hand it off to João who's been an amazing help so far making Hyperbolica look
really good. Hi, I'm João. I'm a 3D artist and I've worked in the past with a variety
of projects. But Hyperbolica is unlike anything I have seen before. Working with non-Euclidean
geometry has some really unique challenges that are very different from most things you're taught
from traditional 3d modeling. The most noticeable one is probably the horizontal distortion.
When we take an object that's modeled in Euclidean space and project it to hyperbolic or
spherical space, even though the line stays straight, the angles and sizes get distorted.
And so in a hyperbolic space, the closer an object is to the corner the more stretched it becomes.
So let's say we want to make these paintings look right in the game. The closer they are to
the corner of the tile, the more we have to make it squished to compensate for that distortion.
And besides horizontal distortion there is also a vertical distortion
and due to mapping from Euclidean space to hyperbolic,
it means there is a height limit where things get mapped to infinity. And this
invisible limit can make modeling difficult. So to make things easier, Hyperbolica remaps height
to match the actual hyperbolic distance. And doing this makes it easy to build tall objects without
worrying about limits, but it also means heights get distorted in a different way.
When you're looking at the map, the different projections mean that even the straight lines
have to bend. And because of that, we have to add this particular subdivision pattern.
In this example, the corners of this tile stretch all the way to infinity. And if we had no
subdivisions on the floor, the outline would look very choppy. So to get smooth curves,
the floor gets a cut halfway to the corner, then a quarter, then an 8th,
and so on. Another problem that you might notice is that the shadows don't always line up with the
objects that cast them. And this is because shadows and image occlusion are baked into a
texture, but it doesn't get interpolated perfectly since only vertices get the right transformations.
And subdivision can help, but it's not the best solution. The best one is to remove any self
intersections in the geometry. Every edge needs to be shared with neighboring triangles and can't
just sit on top of them or intersect, which is something that is quite common in 3d modeling.
After we make the geometry it's finally time to give it some color. And traditionally each object
has several materials with different textures that give it color, but in our case we had to think
about a lighter approach, and we ended up making it so most objects share a single small texture.
The tile UVs are projected from a plane which is then infinitely squished in the horizontal axis,
making it so you can control which gradient you want to pick and how big it's going to be.
And as a bonus, if we want to change the color theme of a scene,
any change to the palette is carried through all of the tiles making it really quick to iterate.
Each object carries two UV channels. The first one uses the palette to define its colors,
and the latter uses the light map with traditional UVs to define the shadows and ambient occlusion.
In the end, they both overlap in Unity to give the final shaded look.
Adopting a low poly art style allows us to go for these optimizations which are especially important
when you keep in mind Hyperbolica is also going to run in VR. And it also gets the point across
without being too time consuming so that's why we decided not to go with the PBR workflow for now.
We're making all of the assets in Blender, an amazing 3d software that is completely free
along with some custom Python scripts we made to help us automate most of our workflow. And
as you can see, most things are really uncommon to anything you would learn about 3D modeling,
but that is exactly what makes 3D modeling for Hyperbolica so challenging and fun. So I hope
you've enjoyed that overview of the modeling process. I've linked some of João's accounts in
the description if you're interested in following him, and I'll see you all in the next devlog!