NVIDIA Omniverse USD Composer (formerly Create) is a great scene composition tool that provides breathtaking real-time RTX rendering. Its incredible assembling abilities are based on Universal Scene Description (USD), which allows users to easily organize, navigate, and modify their scenes. The application also includes animation, physics, and streaming capabilities.
We started using USD Composer just after it became available, but in the beginning we were not really interested in USD. We needed a simple tool to make high-quality renders of our real-time 3D models for the customer’s approval. Composer coped with this task perfectly. Over time, we discovered many features that make assembling scenes and even the 3D model development process much easier than our existing tools and approaches.
The idea to create a lighthouse scene was born by chance. We just finished a small port database that included an old lighthouse for one of our customers. The lighthouse area was very nice in source photos, but 3D models in navigation terrains usually have low resolution and don’t convey the beauty of such landmarks to the full extent. So we decided to sharpen our maritime visualization skills and create a 3D asset according to our own rules and specifications. There are not many requirements we make for a real-world lighthouse – it should be located on a small island, it should look cool, and it should be famous enough. So after a short research, we selected the Boston Light, located on Little Brewster Island near Boston, Massachusetts.
We never make demo projects we can’t use later in commerce (sell on a marketplace or directly, as the turnkey project), so all assets we produce for outside or internal usage must be technically accurate and optimized. The resulting terrain database should be real-time and can be easily imported into any modern game engine. Even if the term “real-time” is a fuzzy concept now, we use it when we want to say that a polycount has reasonable limitations or levels of details.
Several buildings, except the lighthouse itself, are located on the island. But all of them have common features and a single architectural style. So the decision to make a limited set of textures and share it between all buildings was obvious. We used only one unique and seven repeatable textures for all buildings on the island.
We didn’t use USD export or connectors to DCC applications but assembled FBX files (because of a limited number of Omniverse workstations in our studio). So we utilized the USD reference feature to make quick geometry updates when needed. We saved all materials in the scene in a materials USD file and combined references to this material library and FBX geometry in a separate USD for each building. So we could change the geometry and materials independently and not make repetitive adjustments in Omniverse.
As for the geometry, the lighthouse with adjacent houses includes 34k polygons, while other buildings have only 2-4k per model. Thus, the total polycount of all constructions on the island is just 43k polygons. That is unbelievable when you see the renders.
We had no task to create a geospecific terrain database, so we didn’t use professional terrain generation tools to produce the landscape. But at the same time, we wanted to have the terrain realistic as possible. So we decided to use WorldCreator to model the island. GoogleMaps imagery was utilized as the template for outlines and aerial photos as a texturing reference. We limited the number of terrain textures for better rendering performance to four.
When the elevation was finished, we exported the heightmap, normal map, and splat maps to reproduce the terrain in USD Composer. We used Maya to create the island geometry based on heightmap (using Deform|Texture tool), optimized polycount, and added some fine details using Maya paint tools. Omniverse USD Composer has an intuitive, powerful, and well-documented MDL Material Graph, thanks to which it was not hard to create a custom shader for utilizing splat maps.
Finally, we added detailed stone models to make the shoreline more realistic. Since we used a proprietary asset to do that, we put it in a separate USD layer in case we want to sell the database model and not just render it. The layers concept is a very powerful tool for organizing the scene in USD Composer
When all components were ready and saved in separate USD files, we turned to assemble the scene. This process is surprisingly simple – all you need is to drag files from the content browser to the stage tab.
As a result, we got a well-structured hierarchy where we could edit each component in a non-destructible manner. After fine tunings were ended, it was time to render the result.
We decided to concentrate on two compositions – day and night. And again, the layers concept gave us an incredibly flexible workflow. We made all objects, lighting, and camera adjustments for each variant in separate layers so we could switch between day and night with one click. Using this approach, we received only two small files, about 4 kb each, instead of complete scene copies like they would have been in Maya, Max, or other traditional scene assembling tools.
As a result, we got amazing images that we can use to showcase our studio’s strong points in producing maritime visualizations. We will continue to use USD Composer as well as other applications from the NVIDIA Omniverse family. But we yet have to solve several challenging tasks, like working off realistic and dynamic water rendering in this platform.
You can read more about our maritime visualization and terrain development services on our website. Also, our blog contains many articles about other projects in the area of ship and port 3D modeling for simulators, real-time architecture 3D models for virtual reality, and many others.