Over time, I've learned that it's more efficient to use software for their specific strengths. This, unfortunately (for cost and startup knowledge reasons), means that I jump around between a few different programs.

Each is suited best for different tasks - like Fusion360 for hard-surface modeling, Cinema4D for motion graphics, RizomUV for unwrapping UVs and Substance Painter for 3D painting/texturing. And Houdini for wasting time building things from scratch 🙂 jk

Here's my current basic workflow:

Cinema4D R21+ to Substance Painter 2018+

  1. Make sure your mesh(es) have UV's and a unique, basic C4D material for each individual piece.
    • It's good practice to keep a border between UV shells and a safe margin to your UV set (say 5-10px).
    • If you have individual meshes, but not unique materials applied to each mesh, SP will not recognize the different material sets.
  2. File > Export > FBX
    • Settings: Make sure to enable "Normals" and "Textures and Materials".

Substance Painter 2018+ to Redshift or Unity 2019+ / Unreal Engine 4+

  1. File > New...
    • Template: "PBR - Metallic Roughness"
    • Normal Map Format: "OpenGL"
      • Use "DirectX" for Unreal Engine.
    • "Compute Tangent Space Per Fragment"
      • For Unity HDRP/URP workflow or Unreal Engine, enable this.
  2. Bake Mesh Maps (under Texture Set Settings window view)
    1. Common Parameters
      • Resolution: 2048+
      • Enable High Poly Parameters > Use Low Poly As Mesh
        • Skip this if you do have a high poly mesh that you're going to bake (and instead add it to the High Definition Meshes box)
    2. Ambient Occlusion
      • Consider baking separately, at higher resolution (4096+)
      • Secondary Rays: 128+ (higher values equal more quality & calculation time)
      • Self Occlusion: Only Same Name Mesh
        • Consider setting to "Always" if you have separate meshes in the scene that you want to be calculated
    3. Curvature
      • Algorithm: Per Pixel
        • Meaning it is derived from the Normals of the high poly mesh
        • Use Per Vertex if you want it to be derived from the actual geometry of base mesh itself.
      • Details: 1