Value-first. Screentone feel. Panel staging. Distinct from full-color anime.
Tenets
- Design in grayscale values first
- Screentone / hatch textures sparingly
- Speed lines and emphasis FX
- Expressive faces / eyes per demographic
- Black-heavy compositions OK
Vs anime-style
Anime = color cel; Manga = print value language (can still be 3D color with manga staging).
Recipe
Target a print-value look: 2 hard bands, black-heavy shadows, desaturated to grayscale, thin consistent contour, dynamic angles.
- Cel material:
toon_material.pywithbands2,rim0 andoutline0.015, base color a mid-gray. - Lighting:
light_rig.pypresetgolden_hourfor one hard key and deep shadow (grayscale in comp). - Camera:
camera_rig.pylens_mm35,elevation_deg-5,azimuth_deg35,aspect"9:16" for a tall panel. - Render:
render_preset.pystylized_flat, thencomp_grade.pypresetnoir(saturation 0 = monochrome) withvignette0. - Screentone and speed lines have no script: use an Image Texture dot pattern with Nearest filtering as a mix over the shadow band, and radial line meshes for FX.
import runpy
skills = "<skills_dir>" # parent folder of this skill (the plugin's skills/ directory)
target = "SM_Asset" # object to style / dress
r = {}
r["toon"] = runpy.run_path(f"{skills}/stylized-style/scripts/toon_material.py", init_globals={"ARGS": {"name": "MAT_Toon_Manga", "base_color": [0.6, 0.6, 0.6], "bands": 2, "rim": 0.0, "objects": [target], "outline": 0.015}})["result"]
r["light"] = runpy.run_path(f"{skills}/lighting/scripts/light_rig.py", init_globals={"ARGS": {"preset": "golden_hour", "target": target}})["result"]
r["camera"] = runpy.run_path(f"{skills}/camera-cinematography/scripts/camera_rig.py", init_globals={"ARGS": {"name": "CAM_Style", "target": target, "lens_mm": 35, "elevation_deg": -5, "azimuth_deg": 35, "aspect": "9:16"}})["result"]
r["render"] = runpy.run_path(f"{skills}/rendering/scripts/render_preset.py", init_globals={"ARGS": {"preset": "stylized_flat"}})["result"]
r["grade"] = runpy.run_path(f"{skills}/compositing/scripts/comp_grade.py", init_globals={"ARGS": {"preset": "noir", "vignette": 0.0}})["result"]
result = r