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
ordelete
keys- Principled BSDF node is used for realistic rendering
shift+a
, then search for Image Texture and add that- Connect
Color
toSurface
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, pressingl
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.
- Switch to the Shading tab
- 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 toFac
on the Color Ramp - Add a Mix node
- Connect
Color
on the Color Ramp toFactor
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 toB
on the Mix - Connect
Result
on the Mix toSurface
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 toColor
on the Hue/Saturation/Value - Connect
Color
on the Hue/Saturation/Value toA
on the Mix
- There are a lot of ways to color shadows; we could also use a dedicated shadow texture for example.
- Switch to the Shading tab
- 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)