Agent skill

3D Wood Material

by MengTo in MengTo/Skills

Build convincing timber for Three.js as one procedural MeshPhysicalMaterial with growth rings, cathedral figure, pores, medullary rays, checks, tool marks, end grain, and oil, wax, or lacquer…

MITAuto-check passedGame Development

Install 3D Wood Material

skills CLI
$ npx skills add MengTo/Skills --skill 3d-wood-material -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install MengTo/Skills 3d-wood-material --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/MengTo/Skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/agent-skills/3d/3d-wood-material .claude/skills/3d-wood-material && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
3d-wood-material
GitHub stars
6.7k
Token cost
~2.8k tokens
SKILL.md length
1,523 words
Files
5
Skills in repo
39
Repo updated
First seen
Licence
MIT

At a glance

Build convincing timber for Three.js as one procedural MeshPhysicalMaterial with growth rings, cathedral figure, pores, medullary rays, checks, tool marks, end grain, and oil, wax, or lacquer…

  • Works in 5 steps: Patch, do not replace. Build… → Bake one field. A 1024² RepeatWrapping,… → Grain axis. uAxis 0/1/2 picks the log… → …
  • Any request to make 3D wood look real
  • SKILL.md covers Recipe, Species constants (from the…, Anchored failures and Budgets, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

3D Wood Material is an agent skill from MengTo/Skills. Build convincing timber for Three.js as one procedural MeshPhysicalMaterial with growth rings, cathedral figure, pores, medullary rays, checks, tool marks, end grain, and oil, wax, or lacquer finishes, so the grain follows the form and survives macro close-ups without image textures. Use for wood boards, benches, carved panels, tool handles, joinery, floors, and any request to make 3D wood look real, detailed, or less like a tiled photo or plastic.

Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files (for example `PROMPT.md` and `agents/openai.yaml`).

It sits in Game Development, covering 3D graphics and WebGL. It works with Three.js. The repository describes itself as: Agent skills for designers and builders using Codex, Claude, Cursor, and other AI coding agents. The licence is MIT.

When your agent uses it

  • Any request to make 3D wood look real
  • Less like a tiled photo

Example prompts

  • “/3d-wood-material”

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Patch, do not replace. Build MeshPhysicalMaterial({color:0xffffff, roughness:max(0.43,r), ior:1.43, specularIntensity:0.72}) and edit it…
  2. Bake one field. A 1024² RepeatWrapping, LinearMipmapLinear, NoColorSpace render target of periodic gradient noise (period 64, three…
  3. Grain axis. uAxis 0/1/2 picks the log axis; along is that coordinate and cross2 the other two. endgrain = pow(|n·axis|, 6) flips pores…
  4. Rings. Drift the pith with two slow fields, radius=|(cross2+(-drift, offAxis+0.48))*(1,0.56)|, growth=radius*ringFreq plus fbm wobble…
  5. Detail layers, each faded by its own footprint (fwidth of growth, length(dFdx,dFdy) of the pore, fibre and ray coordinates)

What it can do on your machine

Read from SKILL.md and the folder at commit 83a47fe. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

3D Wood Material loads about 2.8k tokens when it runs. Until then it costs about 117 tokens; SKILL.md has 1,523 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~117
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from MengTo/Skills at commit 83a47fe, republished under its MIT licence (© MengTo). 1,523 words, ~2,757 tokens.

Download SKILL.mdSave it as .claude/skills/3d-wood-material/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
3d-wood-material
description
Build convincing timber for Three.js as one procedural MeshPhysicalMaterial with growth rings, cathedral figure, pores, medullary rays, checks, tool marks, end grain, and oil, wax, or lacquer finishes, so the grain follows the form and survives macro close-ups without image textures. Use for wood boards, benches, carved panels, tool handles, joinery, floors, and any request to make 3D wood look real, detailed, or less like a tiled photo or plastic.

3D Wood Material

Mechanism: one small periodic noise field, mip-filtered, is read at several different stretches and scales inside the fragment shader, so ring position, latewood, pores, fibres, rays and tool marks all come from the same wandering grain and feed colour, roughness and relief together, each fading out by its own screen footprint.

Boundary. This skill is the wood surface itself. For whole-scene light, rays and scoring wood renders, use 3d-wood-lighting-scorecard. For image-based PBR sets (downloaded maps, texel budgets, KTX2 delivery) use 3d-high-resolution-textures; reach for it when you need a photographed or scanned species. For silhouette, bevel and LOD geometry use 3d-high-poly-models; this skill only needs a rounded arris (below). Cloth, metal and paper have their own siblings.

Run demo.html first (Kibori bench, four species, four finishes, macro views, and a switch that swaps in the failure). PROMPT.md recreates it.

Recipe

  1. Patch, do not replace. Build MeshPhysicalMaterial({color:0xffffff, roughness:max(0.43,r), ior:1.43, specularIntensity:0.72}) and edit it in onBeforeCompile: #include <map_fragment> multiplies diffuseColor by the wood colour, #include <roughnessmap_fragment> sets roughnessFactor=clamp(roughness*W.rough,0.35,1), #include <normal_fragment_maps> replaces the normal with a screen-space bump of the wood height W.h. Lighting, shadows, IBL and tone-mapping stay stock. The vertex stage only passes object-space position vOP and the object normal.
  2. Bake one field. A 1024² RepeatWrapping, LinearMipmapLinear, NoColorSpace render target of periodic gradient noise (period 64, three octaves: .r base, .g fbm 0.60/0.27/0.13, .b a shifted copy). Reading it as texture(p/64) costs one tap. All timber shares it; per-board difference is a seed offset, not a texture.
  3. Grain axis. uAxis 0/1/2 picks the log axis; along is that coordinate and cross2 the other two. endgrain = pow(|n·axis|, 6) flips pores from streaks to open cells and dulls the colour on cut faces.
  4. Rings. Drift the pith with two slow fields, radius=|(cross2+(-drift, offAxis+0.48))*(1,0.56)|, growth=radius*ringFreq plus fbm wobble (±1.25 rings), ring=floor(growth), phase=fract. Each ring draws its own width from annual noise: lateWidth=0.065+annual*0.21. Latewood is a steep smoothstep(0.94-w, 0.97-w, phase) cut off by 1-smoothstep(0.965,1,phase). Small offAxis gives cathedral arcs; large offAxis gives straight quarter-sawn lines.
  5. Detail layers, each faded by its own footprint (fwidth of growth, length(dFdx,dFdy) of the pore, fibre and ray coordinates):
layercoordinatesstrength
pores (vessels)(fiberX*96, along*7.5), cells at end grain cross2*88, smoothstep(0.59,0.75)tone +0.25, rough +0.19, height -0.42
fibres(fiberX*230, along*2.4)tone -0.16, height +0.09, x0.25 at end grain
rays(across*13, along*115), smoothstep(0.64,0.78)tone +0.26 towards pale, rough -0.075
checkscurl.b smoothstep(0.70,0.82) x uCheckstone toward dark*0.68, height -0.20
knotshash cell 1.85 x 4.6, 29% occupied, influence dies at the cell edgetone +0.44 core, deflects fibres
tool marks(along*17, across*0.4)height +0.045 x uTool
  1. Tone: tone=0.075+late*0.40+early*0.070+pores*0.25-fibres*0.16+(broad.g-0.5)*0.23+knotCore*0.44, colour mix(pale,dark,clamp(tone,0.035,0.83)), then *(0.93+annual*0.095+…). Roughness 0.91+late*0.13+pores*0.19+(broad.b-0.5)*0.20-rays*0.075+endgrain*0.14.
  2. Bump, not normal map. bumpNormal uses the derivative-based Mikkelsen bump and clamps the gradient to 0.38*|det|, so a steep step never flips the normal. uBump=bump*0.020.
  3. Finishes are parameters, not textures. Raw: clearcoat 0. Oil: pow(rgb,1.16) and rough*0.88, clearcoat 0.10 / 0.55. Wax: clearcoat 0.22 / 0.38. Urushi: luminance curve pow(l,0.5), end grain darkened *(1-eg*0.55), warm tint, worn arrises rubbed back to the pale colour, clearcoat 0.42 / 0.40.
  4. Round the arris. chamferBox on every board, radius min(w,h,d)*0.055 (at most 0.24 of any side), 3 to 5 segments, with normals set from the rounded corner. A sharp box edge has no highlight and reads as a cut-out.
  5. Give every board its own seed, and keep it stable when species or finish changes (save and restore woodMaterialSerial around the build, seed n*7.113). Offset the geometry through the field (woodBox(..., ox,oy,oz)) so merged or shared materials still differ.

Species constants (from the workshop)

speciespale / darkroughgrainringFreqoffAxisnotes
keyaki#8a5f38 / #3d24120.621.520 to 340.75rays 0.35, bump 0.10
sugi#c8a579 / #9b774d0.581.88 to 302.8crisp latewood, tool 0.30
hinoki#d8c096 / #8a6b400.44 to 0.502.26 to 421.6close-grained, low contrast
kuri#6f4d2c / #2c1a0b0.553.05 to 221.4rays 0.5, checks 0.10
charred siding#1a1511 / #0e0b080.970.890.55rays 0, checks 0.30

ringFreq is per unit of the model, so set it from real ring spacing (about 2 to 5 mm at the scale you are modelling) rather than copying a number between scenes: the workshop's 7 to 8 read as bold stripes at demo scale until raised to 20 to 42.

Show full SKILL.md (807 more words)Show less

Anchored failures

  • A repeated tile is visible at the second board. A canvas tile with repeat prints identical rings on every board and shows its seam in a raking light. Sample object-space position, seed per material, offset geometry through the field.
  • Flat roughness looks like plastic. Roughness must move with the grain: pores rougher (+0.19), latewood slightly rougher (+0.13), rays glossier (-0.075). A constant 0.3 gives a uniform bright sheen that never breaks along a ring.
  • Colour only, no relief. Rings drawn only in albedo go flat when the light rakes. Feed the same late, pores and fibres into the height and bump it; and clamp the gradient or a hard ring edge turns the normal inside out.
  • Grain not following the form. Take along from the member's real axis, not from UV. UV on a chamfered box stretches the pores at the rounded edge and turns a board into a stripe test. With object-space sampling the grain runs straight through corners and end faces switch pores to cells automatically.
  • Detail shimmers or crawls at distance and on grazing faces. Every high-frequency layer must fade by its own screen footprint: x *= 1 - smoothstep(a, b, fwidth-of-its-coordinate). Mip the field, and blend late and early toward their averages when fwidth(growth) passes 0.16..0.72. Without this, rings moire into the wall of the board at 3 m.
  • Macro looks smeared, blobby, or a faint square lattice shows in the relief. The 1024² field is being magnified past about 2,500 to 4,000 px per unit at grain 1.0: bilinear texel edges leak into the bump derivatives as a grid, pore cells go soft and ring edges dot at the boundary. Raise uGrainScale for a finer fibre size, or raise the bake to 2048 for hero surfaces; never rescale the mesh instead.
  • Colour-space slip. The field is data: NoColorSpace, not sRGB. Tone-mapping is applied once at the end (the workshop does it in a hand-written final pass; the demo uses ACESFilmicToneMapping).
  • The oil finish lit the raw finish. Materials that differ only by the extra snippet share one program cache key (onBeforeCompile.toString()), so the second material silently reuses the first program. Set a distinct customProgramCacheKey per finish; the Urushi wrapper does.
  • Environment lights no roughness variation. envMapIntensity is ignored when only scene.environment is set (r163+); use scene.environmentIntensity. The wood needs a bright window card in the PMREM to show its roughness map; a grey dome hides it.
  • Cut faces read the same as the top. Multiply cut faces by 1 - endgrain*(0.045+pores*0.10) and raise their roughness +0.14: end grain drinks finish and stays matt, the fastest cue that this is a solid block.
  • Sharp boards float. A box with no arris and no contact shadow looks pasted. Rest each part exactly on its support (y = h/2), bake the shadow map once (shadowMap.autoUpdate=false) and check the close-up for a gap.

Budgets

  • Bake once, 1024² RGBA8 with mips (about 5.6 MB GPU), shared by every timber.
  • Measured on this Apple GPU in headless Chrome, 13 draw calls and about 2,000 triangles (chamfered boxes, bench, wall) with MSAA on: 1.0 to 1.5 ms per frame at 1440 by 900, 3.4 to 4.5 ms at 2880 by 1800, against 0.65 ms and 4.2 ms for a plain tiled MeshStandardMaterial. The procedural shader costs roughly 0.4 ms at 1x on this scene and vanishes into fill cost at 2x. Fill rate (DPR, MSAA) is the lever, not the noise.
  • Cap DPR at 2. Bake shadows once when the boards are static. Pause on document.hidden and reset the clock. Clamp dt to 1/30 s.
  • Under prefers-reduced-motion skip the slow orbit and snap camera moves; the still is the composed hero view. Controls stay live.

Self-score of this material (0 to 10, anchored)

Anchors: 2 tiled photo with flat roughness. 4 procedural stripes with albedo only. 6 rings plus relief plus varied roughness, holds at arm's length. 8 pores, rays and end grain hold at 5 cm, finish and wear are believable, no shimmer. 10 scanned-species photograph at every distance.

dimensionscorewhy
grain structure at arm's length7.5per-ring widths, cathedral arcs and knots; keyaki at default still reads a little ruled
macro (3 to 5 cm)6.5pores, fibres and tool marks resolve; the 1024² field softens past 4,000 px per unit
roughness and finish7.5oil, wax and urushi respond to rings and pores; no anisotropic highlight
end grain and edges7open cells and matt cut faces; arris round, no true edge wear
shimmer and grazing8footprint fades leave grazing and distance clean
overall7.3

Provenance

Extracted from the Kibori 木彫 workshop page, where one woodMat() timber shader dresses the walls, benches, tool handles, kumiko lattice and lacquered chests; the generators in demo.html are copied from that file unchanged. The wood was tuned for a close inspect camera, so every constant above is the workshop's own.

© MengTo, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files in agent-skills/3d/3d-wood-material of MengTo/Skills.

  • SKILL.md
  • PROMPT.md
  • agents/openai.yaml
  • demo.html
  • preview.jpg

Open the folder on GitHubat commit 83a47fe

Compare with similar skills

3D Wood Material next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

3D Wood Material compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
3D Wood Material this skillMengTo/Skills6.7k—~2.8kAutomated safety check: PassMIT
Image to Three.js Modelimg2threejs/img2threejs18k1 repos~8.2kAutomated safety check: PassApache-2.0
Web CloneJane-xiaoer/claude-skill-web-clone1k1 repos~2.7kAutomated safety check: PassMIT
Threejs Game Directormajidmanzarpour/threejs-game-skills2.5k—~2.2kAutomated safety check: PassMIT
Threejs Gameplay Systemsvalkor-ai/loom1.2k1 repos~1.4kAutomated safety check: PassApache-2.0
Threejs World Generationcalesthio/OpenMontage66k—~2kAutomated safety check: PassAGPL-3.0

Similar skills

  • Image to Three.js Model

    img2threejs/img2threejs

    Rebuilds the object in a reference image as a procedural, animation-ready Three.js model written entirely in code, using staged sculpting with quality checks.

    18k GitHub starsUsed in 1 repo~8.2k tokens
    Game DevelopmentAuto-check passed
  • Web Clone

    Jane-xiaoer/claude-skill-web-clone

    网站复刻 / 克隆方法论。USE WHEN 用户说 复刻网站、克隆网站、clone website、抄个站、仿站、 照着这个站做一个、reproduce site、还原某个网页效果、把这个站搬下来改成我的、 复刻某个交互/WebGL/Canvas/Three.js 效果。提供「先拿真源码 → 判路径 → 逆向拆解 → 搭工程 → 替换内容」的可移植决策树,覆盖静态站 /…

    1k GitHub starsUsed in 1 repo~2.7k tokens
    Game DevelopmentAuto-check passed
  • Threejs Game Director

    majidmanzarpour/threejs-game-skills

    Entrypoint for building, upgrading, and finishing Three.js browser games.

    2.5k GitHub stars~2.2k tokensUpdated 13 days ago
    Game DevelopmentAuto-check passed
  • Build and iterate playable Three.js game systems: starter scaffold, architecture, design briefs, core loops, level and encounter design, entities, input, camera, collision and physics, scoring…

    1.2k GitHub starsUsed in 1 repo~1.4k tokens
    Game DevelopmentAuto-check passed
  • Threejs World Generation

    calesthio/OpenMontage

    Build deterministic, editable, free-viewpoint Three.js worlds from text or structured briefs.

    66k GitHub stars~2k tokensUpdated 7 days ago
    Game DevelopmentAuto-check passed
  • 3Dviz Pro Max Scene Builder

    viettranx/3dviz-pro-max

    Guides building an expressive 3D scene in Three.js or Blender by reasoning through intent, object construction and scientific grounding before using a catalog of recipes and kits.

    709 GitHub stars~2.8k tokensUpdated 1 mo ago
    Game DevelopmentAuto-check passed

More from MengTo/Skills

All 39 skills in this repo
  • Draws hand-authored SVG spot illustrations in a bold pop-geometric style for design and coding scenes.

    6.7k GitHub stars~5.1k tokensUpdated 4 days ago
    Auto-check passed
  • Draws a slim, long-limbed character acting out one coding or design moment as an outline-free flat SVG card, in a fixed measured palette with confetti and no ground line.

    6.7k GitHub stars~4.9k tokensUpdated 4 days ago
    Auto-check passed
  • Draws flat vector spot illustrations of lanky people doing design and coding things, with solid black as a main fill, for empty states, onboarding and error pages.

    6.7k GitHub stars~5.2k tokensUpdated 4 days ago
    Auto-check passed
  • Draws cozy animal scenes as hand-authored 480x360 SVG cards in a grainy, risograph-like gouache style on hot pink, for empty states, headers and marketing cards.

    6.7k GitHub stars~5.2k tokensUpdated 4 days ago
    Auto-check passed
  • Draws hand-authored SVG spot illustrations in a halftone line style for design and coding scenes.

    6.7k GitHub stars~4.7k tokensUpdated 4 days ago
    Auto-check passed
  • Draws hand-inked cartoon critters and living objects as SVG cards (480x360), each acting out a coding or design idea.

    6.7k GitHub stars~4.6k tokensUpdated 4 days ago
    Auto-check passed

Works with

Questions about 3D Wood Material

What does 3D Wood Material do?

Build convincing timber for Three.js as one procedural MeshPhysicalMaterial with growth rings, cathedral figure, pores, medullary rays, checks, tool marks, end grain, and oil, wax, or lacquer…. 3D Wood Material is an agent skill from MengTo/Skills.js as one procedural MeshPhysicalMaterial with growth rings, cathedral figure, pores, medullary rays, checks, tool marks, end grain, and oil, wax, or lacquer finishes, so the grain follows the form and survives macro close-ups without image textures.

When should I use 3D Wood Material?

3D Wood Material fits situations like: any request to make 3D wood look real; less like a tiled photo.

How do I install 3D Wood Material in Claude Code?

Run `npx skills add MengTo/Skills --skill 3d-wood-material -a claude-code`. Or copy the skill folder (agent-skills/3d/3d-wood-material in MengTo/Skills) into .claude/skills/3d-wood-material in your project. Claude Code loads it when a task matches its description.

How do I install 3D Wood Material in Codex?

Run `npx skills add MengTo/Skills --skill 3d-wood-material -a codex`. Or copy the skill folder (agent-skills/3d/3d-wood-material in MengTo/Skills) into .agents/skills/3d-wood-material in your project. Codex loads it when a task matches its description.

Can I use 3D Wood Material in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add MengTo/Skills --skill 3d-wood-material -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/3d-wood-material, .gemini/skills/3d-wood-material, .github/skills/3d-wood-material and .opencode/skills/3d-wood-material in your project.

What does 3D Wood Material need to run?

SKILL.md names no scripts, command-line tools or credentials: 3D Wood Material is instructions for the agent only.

Does 3D Wood Material access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is 3D Wood Material safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does 3D Wood Material use?

3D Wood Material is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does 3D Wood Material use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to 3D Wood Material?

Skills that share tags, products or a category with 3D Wood Material: Image to Three.js Model (img2threejs/img2threejs, 18k stars), Web Clone (Jane-xiaoer/claude-skill-web-clone, 1k stars), Threejs Game Director (majidmanzarpour/threejs-game-skills, 2.5k stars) and Threejs Gameplay Systems (valkor-ai/loom, 1.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains 3D Wood Material?

MengTo (a GitHub user) maintains it in MengTo/Skills, which has 6,694 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 6, 2026.

Source: MengTo/Skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.