Rookie Awards 2024 - Open for Entries!
Arctic
Share

Arctic

Antoine Danion
by antoinedanion on 17 Jul 2023

Hey ! Here is my graduation project, or as I like to call it, The Boat Of All Times, or BOAT for intimates. What is so special about it ? Well, it is fully procedural, and the glacier is too ! If it interests you, feel free to dive into the The Rookies project, where I explain the process I followed.

6 483 1
Round of applause for our sponsors

The Global Project

Hello ! Today, I'd like to present my final-year project. I carried it out alone from the end of October 2022 to mid-June 2023.

My main objective was to practice procedural modeling as much as possible, so I thought about assets that would allow me to work on as many aspects of this modeling technique as possible. The organic and natural character of a rock being something I'd never worked on before, I knew I wanted to incorporate a reef, cliff, or something similar into my final image.

My passion for maritime engineering in the 18th century led me to model a ship from that era. Curved surfaces, a complex rope system, planks in every direction, etc. I could hardly think of a better way to beat myself up this year.

The Arctic is a magnificent region, largely unexplored at the time, and particularly inhospitable. It's calm and beautiful, and it reminds us of the magnificence of nature. So I imagined a two-ship expedition to these waters. One of the two ships I chose is the Azov, a 74-gun ship of the line of the Imperial Russian Navy built in 1826. The other is the Hermione, a 32-gun Concorde-class frigate of the French Navy.

The Glacier

To make the glacier, I started with a cylinder and fractured it. By removing all the outer parts, the result is a more chaotic, organic shape. I went on to add layer upon layer of noises until I achieved a decent final result. As the final highpoly was too heavy, I generated a low poly. Once the UVs of this version are done, we can then bake the details of the high poly on the low poly and thus obtain maps of normal, displacement, etc.

I took the opportunity to learn Tops (Task Operators) and automate the generation of ten different glaciers from which I could choose my favorite.

The Boat

The boat was a major technical challenge. Indeed, in addition to the already high technical difficulty of the task, my decision to model it procedurally implied optimizing the setup as much as possible in order to minimize computation time. Another major challenge was to create a controller that was as easy to use as possible, despite the presence of over 400 parameters.


Thanks to the controller, the user can decide on the shape of certain key curves, such as those that give the hull its shape. Once these curves have been generated, a surface passing through several of them is created, which is the surface that gives the object its basic shape. In order to go into more details, I use this surface as the basis for my work. One of my techniques is then to boolean several intersecting surfaces, which gives me a new curve with which to create new surfaces, and so on.

The sails are automatically generated and fold in the same way as they used to in the old days on this type of boat. I made this choice in order to get as close as possible to a realistic and coherent result.

Created Tools

To carry out this project, I created several HDAs (Houdini Digital Assets).

AD Curve Normal

The AD Curve Normal allows me to calculate the normals of a curve in different ways:

- Concave

- Convex

- Tangent

- Increasing (aligned with the next segment)

- Decreasing (aligned with the previous segment)

- Normal (equivalent to the cross-product of the next and previous segments)

Allowing you to calculate the normals of each end of the curve independently of the rest of the curve and offering numerous bonus options for manipulating or calculating them differently, this node was extremely useful to me. In order to optimize it as much as possible and to train myself in VEX, it only consists of an attribute wrangle containing approximately 800 lines of VEX. This node was developed in the absence of any knowledge of the Orient Along Curve, Houdini's native node for doing the same thing.

AD Mirror

Again, with the aim of optimizing the boat setup, I multithreaded numerous for-eachs using compiled blocks. Unfortunately, Houdini's native Mirror node is not compatible with compiled blocks. So I recreated a Mirror node, allowing me to mirror polygons in a compilable (and therefore multithreadable) way. Thanks to this node, I've been able to save several minutes in total calculation time, which is no mean feat.

AD Pulley Gen

It was necessary to simplify the generation of the boat's ropes as much as possible. The solution I opted for was to create a node to convert a curve into a pulley system. In this way, a setup intelligently connects the masts, yards, deck, etc., via curves which are then converted into a pulley and rope system. This node allows me to simplify rope generation by adding a few features, such as having the rope automatically attempt to dodge certain obstacles. The node outputs all the groups and attributes required for the simulation setup that follows, in order to simulate the curvature of the rope as a function of gravity.

The entire project was carried out using Houdini. Each asset (glacier, boats, etc.) was shaded entirely and directly on Houdini, without the need for third-party software, then exported in USD (Universal Scene Description). Some assets, such as anchors, cannons and rudder, were modeled on Maya. Unlike anchors and rudders, cannons are not placed by hand, but automatically by the boat's setup. Only the figureheads of the two boats are assets downloaded from the Internet.

The entire final scene was assembled in Solaris, in a separate Houdini file, and rendered on Redshift. Compositing was then carried out on Nuke and editing was done on DaVinci Resolve.

Some breakdown shots were rendered on Karma.


Comments (1)