It’s been a little while, but over this past weekend I had a vision and I set out to do it with my free-time. My goal is to try out a few new 3D styles, some photo-real and some not. Here is my first attempt:
Some refer to this as “low-poly,” but I don’t think it fits into that realm. I take “low-poly” as an art form to be more about achieving as much as possible with as little as possible. This is really about stylizing polygons and using them as a defining element of the art, rather than a construction material. Practical miniature models fueled the original idea, and now I wonder if this has been captured in this or not.
I had a few different ideas on how to approach this, and ultimately the last (and most simple) way I thought of was the best. Originally, I wanted to model the geometry and then scatter particles on it so that I could offset each particle with noise and then join the whole system back together as a new model. All of that was easy except for creating the final mesh. Due to the randomized order of the particles, creating a mesh out of them resulted in a ridiculous (and abstract) mess. I had a working solution where I created triangles from the nearest particles, but there were some problems around tight corners and thin meshes with relatively few particles.
I ended up creating a tool that would subdivide the mesh X amount of times, then reduce the mesh by a percentage of the vertices. Reducing the mesh resulted in a triangulated mesh, which I then randomly offset the vertices along its normal to achieve the jagged appearance. The jagged appearance only works because I have disabled Phong shading and am shading each face as a flat object.
A lot of the style comes from how much I subdivide and reduce each mesh. Each material has its own unique process. For example, to create the logs I scaled them down horizontally before using the tool, then scaled them back to get longer, wood-like jagged streaks.
I also had a few different approaches for the snow. First, I wrote a shader that used the dot product between the normal of the face and the scene’s up vector, and then used that to determine if the face should be white (because it was facing up and could receive snow) or the color I assigned to it. This worked, but because of the jagged nature of the faces the snow was spotty and mostly uncontrollable.
After some failed particle attempts I ended up with a solution similar to my first. Each object that could receive snow was given another shader that displaced faces upwards if their normal pointed anywhere between sideways and up (using a similar dot product as earlier mentioned) and then shaded white. This approach worked better because it looks as if the snow is resting on the object and it has an interesting falloff for the sides of objects.
I also experimented with breaking up the polygons visually by giving each face a slightly varied color compared to its overall color. In the end, I found a more visually appealing solution was to use different lights for different objects and place them to accentuate faces that pointed in certain directions.