Brushwork in albedo. Geometry supports paint, not microdetail.
Tenets
- Paint values in albedo
- Low roughness variation unless wet/metal accents
- Soft bevels for paint catch
- Atlas-friendly for kits
- Avoid photoreal photo-bashed noise
Recipe
Target a 512-1024 px per-asset painted atlas feel: baked-in value in albedo, roughness 0.85-1.0, almost no specular, soft overcast light for checking the paint.
- Base material:
pbr_material.pyroughness0.9,specular_ior_level0.2,metallic0 (paint carries the form; add the painted texture throughtextures{"base_color": path} once it exists). - Preview lighting:
light_rig.pypresetovercastso painted shading is not fighting real shadows. - Soft bevels for paint catch: add a Bevel modifier (width ~0.01, 2 segments) on hand-painted kit pieces.
- Render:
render_preset.pyeevee_final, thencomp_grade.pyclean. - Textures: paint in Texture Paint mode or bake with
texture-workflowbefore final.
import runpy
skills = "<skills_dir>" # parent folder of this skill (the plugin's skills/ directory)
target = "SM_Asset" # object to style / dress
r = {}
r["material"] = runpy.run_path(f"{skills}/materials/scripts/pbr_material.py", init_globals={"ARGS": {"name": "MAT_HandPainted", "base_color": [0.55, 0.4, 0.25], "roughness": 0.9, "metallic": 0.0, "specular_ior_level": 0.2, "objects": [target]}})["result"]
r["light"] = runpy.run_path(f"{skills}/lighting/scripts/light_rig.py", init_globals={"ARGS": {"preset": "overcast", "target": target}})["result"]
r["render"] = runpy.run_path(f"{skills}/rendering/scripts/render_preset.py", init_globals={"ARGS": {"preset": "eevee_final"}})["result"]
r["grade"] = runpy.run_path(f"{skills}/compositing/scripts/comp_grade.py", init_globals={"ARGS": {"preset": "clean"}})["result"]
result = r