Substance Workflow with Octane Render in Cinema 4D
This guide is meant to help you quickly get Substance Archives (SBSARs) into C4D, and then use them to build Octane materials with as little stress as possible.
There are two sections to this document. The section up front contains a .C4D that makes this process easier, and a quick(-ish) stepthrough of how to use it. The second section is an extended walkthrough that shows how the file was constructed from scratch, and should be helpful for a deeper understanding of the process.
This file uses the Octane Universal Material, which is perfect for Substance files. For more info on the Universal Material, find the Universal Material guide.
The Files
Go ahead and download the Substance Builder file above. These were made in C4D S22, but should work in C4D R17 and later, and newer versions of Octane Render that support the Universal Material. You can also have the Header Graphic source file that I used to make the banner image - I left notes in all the annotation tags to explain some of the more advanced things I had to do to make those. Free SBSARs can be found at Substance Source, Substance Share, and CC0Textures
The Workflow
Setup
The Long Version
Intro
A Substance Archive (file format is SBSAR, often just called "Substance" - I use all these terms interchangeably) is an amazing file format that contains a ton of information about a material - color, pattern, roughness, bump, displacement, even advanced properties like subsurface scattering, masks and custom channels. This file can be used directly in Cinema 4D (and Octane by extension). What really makes it powerful is that one small file contains everything needed to create an entire customizable material. You can change properties within the SBSAR itself to try out different looks, and even set different resolutions for the textures, and it will update your Octane material instantly (or just very quickly - depends on your hardware).
In order for C4D and Octane to actually use the output of a SBSAR, all of the channels need to be rendered (or baked) into a series of image files known to as "maps". Those maps then need to be piped into their respective channels in an Octane material. There are two ways to do this.The basic manual way: Open your SBSAR in Substance Player (free), set all your parameters, and then tell it to generate all the maps at whatever resolution you want. Put these maps in your /tex folder, and then manually drop them in and use them in various channels of the Universal Material. This is great if you want to just use the material (or specific maps from it) as-is.
Now that you're sold on the glorious format that is SBSAR, let's walk through how to set a file up from scratch.
The Process
The first thing you need is an SBSAR file (not SBS - that's something else). You can get some free ones to test out at Substance Source, Substance Share, or CC0Textures. Then, if you want to follow along, and don't want to scroll allll the way back up to the top of the page, you can grab my file here. I'm going to use Cross Brushed Copper (free) from Substance Source in this example.Next, let's drag the SBSAR into it from Finder or Explorer (or File>Load Substance from the Substance Asset Manager). It will automatically create a standard C4D material from it. Select the C4D material, and then choose "Convert Materials" from the Octane Live Viewer window, under the Materials menu (toward the bottom). This will generate a crappy Octane material that we have to fix now.
I mean, wow...
First things first, we're going to want to change the Material type to Universal when using SBSARs (which really should be default, but alas) - this is going to make our lives easier, and really, there are very few reasons not to use the Universal Material anyway.
Next up, consider what kind of material you're making. If you're doing a metal, or if you want to use anisotropy, you'll need to change the BRDF Model to something other than Octane. I usually pick GGX because it tends to work better for metals. I haven't figured out a good, concise way to really explain BRDF models in layman's terms, so just know they are different ways light is calculated when it hits a surface. If you're not doing a metal or anisotropy, you can leave it on Octane.
On the right, under Texture, there are fields for Asset and Channel. This is what tells C4D which Substance to use, and which Substance Channel to use. This is how it knows to refresh the maps when you change any settings for your SBSAR. From here on out, we're going to go into the Node Editor because it's easier to understand and is less clicking around. So let's hit the Node Editor button and get to work.
Well, at least it's shiny now. That's because the Universal Material defaults to 1 in the Metallic channel. This is going to get overridden anyway when we pipe in the Metallic map anyway, so let's not worry about that for now.
Next up, we're going to disconnect the Displacement node so we can work faster and also see what we're doing.
Now we're getting somewhere. 15 second render rather than a minute and a half (at least on my state of the art 50 Octanebench setup here).
What came over from the auto-generated material was a Base Color map (correctly routed into the Albedo channel), a Normal map (correctly routed into the Normal channel), and a Height map (which is for both Displacement and Bump). If you click on any of the Substance Shader nodes, you'll see which channel they're set to. This SBSAR has a lot more channels, though, and looking at the Substance Asset Manager gives us a clue as to how many.
Cross Brushed Copper generates 9 maps. If we want to see what they all are, we can select the cross_brushed_copper SBSAR asset and then in Attributes manager, scroll all the way down to the bottom and we can see what those maps look like and what they're called.
Of those, we're going to ignore three of them right off the bat. Octane doesn't support Diffuse maps (other apps and engines do, which is why they exist at all). It also doesn't use Glossiness maps - it uses Roughness instead. Octane doesn't support AO directly - we can use it with a more advanced setup (using the Curvature node or multiplying it into the base color for the Albedo channel), but that's out of scope for this guide... it's wordy enough :D.
We're going to use the Base Color, Normal, and Height maps that came standard with the conversion, and then also the Specular, Roughness and Metallic maps. Currently we only have three Substance Shader nodes. We need six - one for each channel.
This part's a little annoying. First off, there doesn't appear to be a Substance node in the list on the left or in the search. To get one, you either have go into the Texture dropdown in the options for the Channel you want and find Substance Shader at the bottom, and then it magically appears in the Node editor, or you simply copy one that's there. If you copy one, it immediately loses the link to the Substance for some inexplicable reason.
The best way around this seems to be to just duplicate the node as many times as we need (again, we want a total of six here), and then select the new ones, and drag the Substance from the Substance Asset Manager into the Shader's Asset field.
Then we need to go through them one at a time and choose the correct channels (in this case Specular, Metallic and Roughness). Once you know that you need to do this, it's not so bad.
Now we can just go ahead and hook the maps up to the correct nodes. We're still not going to do Displacement yet, but the Height map can go into Bump. It's definitely looking more like copper now, but not a whole lot like brushed copper. Ok, let's hook up the Displacement and see what happens.
Welp, nothing good, that's for sure. Looks like it got thrown in an industrial paper shredder. The problem here is resolution, and in two different places at that.
First off, Substances come into C4D at 256x256 by default. It's really fast to generate new maps, but with fine details (especially in displacement), it's going to look terrible. By clicking the Substance in the Asset Manager, we can go into the Attributes manager and change either Width or Height to 2048. Lock Ratio is on by default, so it will change the other one for us.
Now let's get the Displacement resolution up to match by clicking the Displacement node and changing the level of detail to 2048x2048. Lastly, our Shaderball is only about 20cm, so a displacement height of 10cm is a bit much. Let's reduce that to 1cm. For some materials like cloth, you can save a bunch of render time by just disconnecting the Displacement node altogether.
Voila - that's looking good. So now we can start changing the exposed parameters and get some variations going. For this, you want to make new instances of the SBSAR in the Substance Asset Manager. Then make copies of the material, select all the nodes, and drag the new instance of the SBSAR into the Asset field to link to that. Now when all the parameters are altered, it won't mess up the original.
It might be a good idea to reduce the resolution and disconnect Displacement again while you're playing to save some time with the render and new map generation.
The last thing you may need to do, depending on your geometry & UV map is to change the tiling and projection of your material. One great thing about Octane is that you can usually do this in the Node Editor. One not so great thing about the Substance Shader node is that there's no input for a Projection or Transform node. A quick way around this is to use C4D's texture tag to control the tiling and projection.
So that's it for the basics. If you made it this far, you probably have a good understanding of how Substances work with C4D and Octane. From here, you can do all kinds of cool stuff like use the various maps in ways the creators never intended (try throwing the Height map into a Texture Emission for fun). If you decide that you're totally happy with the maps and you want to do more advanced stuff in Octane's node editor, you can simply replace all the Substance nodes with Image Texture nodes and use the cached versions of the maps. Then you'll have access to the Transform and Projection nodes again.