GodotCon Boston 2025 Anime Workshop

  • Assets for the workshop are at https://github.com/codernunk/godotcon-anime-style-2025
  • Arc System Works pioneered the anime 3D style with Guilty Gear Xrd
  • Topology is more intentional and exaggerated on faces, to get the most out of animation and shadows
  • More reliance on vertex painting and secondary texture maps to control shading instead of normal maps and bump maps
  • Texture atlas technique
    • Since the art style relies on little detail, we can simplify texturing with atlas textures
    • A texture atlas is just a very small texture split into zones with flat colors
    • Place UVs in the parts of the texture with the colors you want
    • There is black padding between the colors in the example, because the paint bucket tool can bleed into other sections. The speaker feels that having a border helps avoid this issue.
  • Using a Texture atlas
    • Switch to the Shading tab
      • Create a new material for the model
      • In the shader for the material, remove the Principled BSDF node by using the x or delete keys
        • Principled BSDF node is used for realistic rendering
      • shift+a, then search for Image Texture and add that
      • Connect Color to Surface on the Material Output. The model should be black now.
    • Switch to UV Editing
      • Browse image to be linked in the left panel.
      • Change Viewport Shading to Solid, then change the Color to Texture in the right panel.
      • Might have to use scroll wheel on the bar to see the Viewport Shading option.
      • Hover over hands and face, and press l on each to select all of the linked vertexes.
      • Press u in the right panel, pick any of the three uv unwrap options.
      • Press s in the left panel to scale the UVs down until they fit in one of the color boxes.
      • Press g in the left panel to move the UVs into the desire color box.
      • Press 3 to switching to face selection mode, pressing l in this mode lets you select all of the faces that are linked without crossing seams
      • You can mark seams with u when you have a loop selected.
  • Shadows
    • Switch to the Shading tab
      • We’re going to make the toon shader now.
      • Specifically, an important part of the shader is the color ramp node with Constant interpolation. We use this to make hard shadows.
      • Add a Diffuse BSDF to get some basic lighting information
      • Add a Shader to RGB node
      • Connect the BSDF to Shader on the Shader
      • Connect Color on the Shader to RGB to Fac on the Color Ramp
      • Add a Mix node
      • Connect Color on the Color Ramp to Factor on the Mix
      • Change A on the Mix to Black (or any other color you want to use for shadows)
      • Connect Color on the Texture node to B on the Mix
      • Connect Result on the Mix to Surface on the Material Output
      • We can color the shadows by using HSV adjustment
        • Add a Hue/Saturation/Value node
        • Set it to 0.5 Hue, 2 Saturation, and .8 Value
        • Connect Color on the Texture node to Color on the Hue/Saturation/Value
        • Connect Color on the Hue/Saturation/Value to A on the Mix
      • There are a lot of ways to color shadows; we could also use a dedicated shadow texture for example.
  • Outlines
    • Could use Inverted Hull for outlines. It’s not perfect; other options include stencil shaders.
    • Switch to the Layout tab
      • Add a new material, change it to the emission texture, set the color to black, enable backface culling camera
      • Add the Solidify modifier in Blender, 0.003 Thickness, 1.0 Offset
      • Flip normals, change thickness, set the material offset to 1
      • The outlines on the face look bad, but by using weight painting to control the thickness of the Solidifier modifier.
      • Create a new vertex group and change the vertex group of the Solidifier modifier
      • Now you can change the weights on the model
  • Editing face normals
    • Some shadows are on the face, but it doesn’t look good.
    • Add a sphere, set to smooth shading
    • Add a modifier to data transfer, so we use the normals of the sphere for the face.
  • Exporting to Godot
    • We don’t want to export the outline, because it breaks compatibility with shape keys if we want to use them.
    • Instead, we need to write the outline shader in Godot to pull the weights from the model data.
    • We can store data in the vertex colors (R for outline weight and G for custom shadow)