diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4339028 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# Unity generated folders +/Library/ +/Temp/ +/Logs/ +/UserSettings/ +/MemoryCaptures/ +/Recordings/ + +# Local OS/editor files +.DS_Store +*.swp +*.swo + +# Local analysis outputs +/local-evidence/ diff --git a/docs/character/2d-to-3d-character-workflow.md b/docs/character/2d-to-3d-character-workflow.md new file mode 100644 index 0000000..2e85dc8 --- /dev/null +++ b/docs/character/2d-to-3d-character-workflow.md @@ -0,0 +1,187 @@ +# 2D To 3D Character Workflow + +Status: production workflow note for using 2D concept images as the starting +point for Meshy/Maya/engine character creation. + +## Direct Answer + +Maya should not be treated as a one-click "2D character image to commercial 3D +game character" converter. + +What Maya can do well: + +- place 2D concept art as image planes for modeling reference +- trace silhouettes or hard-surface motifs into curves +- extrude flat logos, shields, blades, reliefs, and symbols from curves +- use height/displacement/normal-style images for surface relief +- clean, retopo, UV, rig, skin, pose-test, and export the resulting model + +What should use AI/Meshy first: + +- rough 3D shape from one concept image +- better rough 3D shape from multiple concept views +- early comparison of several silhouettes before manual cleanup + +What must still be done by hand or at least human-reviewed: + +- top-down silhouette judgement +- production topology around shoulders, elbows, knees, hands, cloth, and weapon +- UV layout and material separation +- skin weights +- attack animation timing +- game-camera readability +- legal/IP similarity review + +## Practical Route For This Project + +Use 2D images as a gate before any paid 3D generation. + +1. Create 2D concept sheets for 3 hero candidates: + - `H07 White-Charcoal Judgement Axe` + - `H02 Black-Iron Pincer Knight` + - `H08 Navy-Lantern Threadbinder` +2. Each sheet must include: + - black silhouette strip + - front view + - back view + - side or 3/4 view + - top-down gameplay readability crop + - weapon close-up + - material/value swatches + - explicit reject notes +3. Run a 64-128 px thumbnail test before 3D generation. +4. Use Meshy Image-to-3D or Multi-Image-to-3D for preview only. +5. Bring the preview into Maya. +6. Clean the mesh, split parts, fix weapon thickness, and verify top-down shape. +7. Only then spend on refine, texture, rig, animation, or engine import. + +## 2D Sheet Requirements + +Every candidate sheet must answer these questions without text labels: + +- Which direction is the character facing? +- What is the weapon? +- What is the class fantasy? +- Where is the head? +- Where are the shoulders? +- What one shape makes this character different from any other dark knight? +- Does the silhouette survive when reduced to 96 px tall? + +If the answer is unclear, do not generate 3D. + +## Candidate 2D Prompts + +These prompts are for creating 2D concept sheets. They are intentionally not +final game art prompts. + +### H07 White-Charcoal Judgement Axe + +```text +dark fantasy top-down ARPG playable hero concept sheet, white-charcoal +execution axe warrior, one oversized arm, one huge one-sided axe head wider +than the shoulders, charcoal black body, white ash cracks, dark red cloth, +clear black silhouette strip, front view, back view, side view, top-down +gameplay readability crop, weapon close-up, material swatches, practical game +character design, readable at small size +``` + +Reject: + +```text +no generic barbarian, no viking helmet, no tiny axe, no realistic bodybuilder, +no gore, no huge fur cloak, no unreadable black blob, no excessive ornamental +detail +``` + +### H02 Black-Iron Pincer Knight + +```text +dark fantasy top-down ARPG playable hero concept sheet, asymmetric black-iron +pincer knight, one huge shoulder pincer silhouette, one-handed great shears +weapon, short shield blade, rust red cloth, pale scar edge lines, clear black +silhouette strip, front view, back view, side view, top-down gameplay +readability crop, weapon close-up, material swatches, practical game character +design, readable at small size +``` + +Reject: + +```text +no literal crab body, no robot armor, no tiny scissors, no hidden weapon, no +long cape covering legs, no excessive spikes, no merged hands, no extra arms, +no gore +``` + +### H08 Navy-Lantern Threadbinder + +```text +dark fantasy top-down ARPG playable hero concept sheet, navy-lantern +threadbinder, small pale lantern floating above the head, black lacquer armor, +dark navy cloth, visible thick magical thread loops around the hands, compact +body silhouette, fingertip blade shapes, clear black silhouette strip, front +view, back view, side view, top-down gameplay readability crop, material +swatches, practical game character design, readable at small size +``` + +Reject: + +```text +no puppet master cliche, no thin invisible threads, no dolls, no anime school +outfit, no cyber wires, no wings, no face-detail focus, no huge robe blob +``` + +## Maya Use Cases By Asset Type + +| Asset Type | Best 2D Input | Maya Method | Meshy Useful? | +| --- | --- | --- | --- | +| Player hero | concept sheet with multiple views | image planes, blockout, cleanup, retopo, rig, skin | yes, preview only | +| Enemy fodder | concept sheet or strong silhouette | model over reference, simplify forms | yes | +| Boss | front/top silhouette plus attack-shape sheet | blockout in simple masses first | limited; cleanup heavy | +| Weapon | side view and top view | curve/mesh modeling, thickness pass | sometimes | +| Shield/emblem | vector/black shape | curve/extrude/bevel | rarely needed | +| Floor relief | grayscale height/ornament map | displacement/normal/mesh relief | not needed | +| UI icon | flat concept/vector | keep 2D or vector; do not force 3D | no | + +## Preview Pass/Fail + +Pass: + +- 96 px grayscale still reads as the same role. +- Weapon silhouette is obvious. +- Character has one dominant hook, not five small hooks. +- Head and shoulders are separable from cape/body. +- The design can be modeled without relying on hair-thin details. + +Fail: + +- It only works as a full-resolution illustration. +- The weapon disappears in top-down view. +- The pose is doing all the work. +- Materials are all the same dark value. +- It depends on floating particles or VFX to identify the character. +- It looks like a known commercial character, class skin, or franchise mascot. + +## First Batch Decision + +Run 2D concept exploration first, not 3D generation. + +Batch size: + +- 3 hero candidates +- 2 variations each +- 6 concept sheets total + +Pick one for Meshy preview only after this review: + +1. H07 if the goal is strongest melee impact. +2. H02 if the goal is strongest dark-fantasy identity. +3. H08 if the goal is novelty, accepting higher production risk. + +No refine/rig/animation spend until a 2D sheet passes the tiny-camera test. + +## Sources + +- Autodesk Maya Help: https://help.autodesk.com/view/MAYAUL/2026/ENU/ +- Meshy Image to 3D API: https://docs.meshy.ai/en/api/image-to-3d +- Meshy Multi-Image to 3D API: https://docs.meshy.ai/en/api/multi-image-to-3d +- Meshy for Maya plugin: https://docs.meshy.ai/en/maya-plugin/introduction diff --git a/docs/character/character-pattern-cards.md b/docs/character/character-pattern-cards.md new file mode 100644 index 0000000..a64928a --- /dev/null +++ b/docs/character/character-pattern-cards.md @@ -0,0 +1,322 @@ +# Character Pattern Cards + +Status: paused as final protagonist direction. Use these concepts as part +library and risk evidence before spending Meshy/API credits. + +## Why This Exists + +The current Phase 1 character is not worth polishing as the final direction. +However, the first generated concept round skewed too rugged: armored bodies, +large weapons, and grim combat silhouettes are not enough to sell the game. + +The current product direction is `Threadlight Pilgrimage`; see +`docs/product/game-definition-threadlight.md`. Character work should now start +from role, world rule, hub, and emotional promise. Weapons are only supporting +props. + +Preserve useful parts: + +- H09: hooded field-worker mass and relic weight. +- F01: pale veil/crest and polearm readability. +- F03: bell-root ecology and occult support shape. +- H08: lantern/thread action language. +- H02/H07: enemy, guard, elite, or boss mass. + +Do not adopt any generated sheet wholesale as the first hero. + +Before generating or modeling, compare several readable silhouettes at gameplay +camera distance. Reject weak patterns early. + +Judgement order: + +1. black silhouette at tiny size +2. grayscale value separation +3. job tool, facing, and action readability from top-down +4. attack pose and telegraph +5. material identity +6. only then texture detail + +## Hero Pattern Cards + +| ID | Concept | Silhouette Hook | Weapon | Material/Value Bands | Animation Identity | VFX Role | Reject If | +| --- | --- | --- | --- | --- | --- | --- | --- | +| H01 | Lantern-Coffin Pilgrim | Tall coffin box on back, one-shoulder cloak | Hooked spear with candle head | Black cloth, dark wood, dull gold, bright face area | Heavy steps, flame jumps only on attack | Amber; cleanse/heal | Angel wings, cross overload, generic paladin | +| H02 | Black-Iron Pincer Knight | Asymmetric huge shoulder pincers | One-handed great shears plus short shield blade | Black iron, rust red, white scar lines | Side-stepping, opens wide before clamping | Red-black; bind/bleed | Literal crab/insect, robot read | +| H03 | Ash-Glass Scout | Slim body, broken glass blade-fan on back | Reverse-grip twin daggers | Gray leather, transparent glass, silver edges | Low sliding motion, afterimage shatters after attack | Pale blue; dodge/critical | Ninja costume, cyber glow | +| H04 | Mud-Crown Hexer | Huge clay crown, round body mass | Bone staff and hanging jar | Dry clay, bone white, black cords | Swaying chant, jar lags behind body | Green-brown; poison/summon | Real-world tribal mimicry, tiny symbols | +| H05 | Silver-Needle Execution Medic | Long beak mask, needle bundle on back | Telescoping injection spear | Black leather, dull silver, dirty white cloth | Small footwork, body becomes a straight thrust line | Sick yellow-green; weaken/drain | Direct plague doctor copy, medical clutter | +| H06 | Star-Eater Chain Monk | Circular back-chain halo, small head | Weighted chain ring | Black cloth, bronze, sparse white star dots | Constant visible circular orbit | Deep purple; pull/area control | Space wizard, zodiac ornament spam | +| H07 | White-Charcoal Judgement Axe | One giant arm, axe head wider than shoulders | One-sided execution axe | Charcoal body, white ash cracks, dark red cloth | Long charge, kneels after slam | White ash; stun/shatter | Barbarian cliche, muscle-only design | +| H08 | Navy-Lantern Threadbinder | Floating small lantern overhead, threads outward | Thread spool ring and fingertip blades | Navy cloth, black lacquer, pale lantern white | Body stays calm; threads move first | Blue-white; traps/remote cuts | Puppet-master cliche, invisible thin threads | +| H09 | Veiled Oath Relic Duelist | Hooded mantle, heavy beads, broad reliquary greatblade | Broken cathedral-slab greatblade | Charcoal hood, slate mantle, bone-white blade edge, brass beads | Guarded forward stance, heavy sweeping cuts | Cyan seam plus iron censer sparks | Key-shaped weapon, star charm, black zipper coat, recognizable franchise read | + +## Heroine Pattern Cards + +| ID | Concept | Silhouette Hook | Weapon | Material/Value Bands | Animation Identity | VFX Role | Reject If | +| --- | --- | --- | --- | --- | --- | --- | --- | +| F01 | Ash-Veil Halberd Matron | Tall ash veil crest, broad shoulders | Crescent halberd with thick blade | Charcoal armor, ash-white veil, oxblood sash, dull brass | Guarded spear stance, deliberate sweeping control | Pale ash plus warm steel sparks | Bikini armor, generic valkyrie, tiny spear, face-detail focus | +| F02 | Glass-Moth Duelist | Broken glass moth-wing back shape | Paired broad crescent daggers | Dark leather, pale glass-blue blade edges, muted teal cloth | Low lateral cuts, glass afterimage shatters | Pale blue crit/dodge shards | Ninja costume, fairy wings, thin daggers, cyber glow | +| F03 | Bell-Root Hex Huntress | Broken bell shoulder mantle, root cords | Crescent sickle-staff with bronze bells | Black-green leather, bone mask crest, tarnished bronze | Trap-setting stance, bell-root summon gestures | Green-black roots plus bronze pulse | Sexy witch, pointed hat, tiny charms, cultural stereotype symbols | + +## Enemy Pattern Cards + +| Role | Concept | Top-Down Silhouette Hook | Telegraph | Color/Value Role | Audio Cue | Reject If | +| --- | --- | --- | --- | --- | --- | --- | +| Fodder | Soot-Split Crawler | Small black teardrop, one long claw side | Claw side glows pale and half-steps | Low value body, claw marks facing | Dry claw scrape | Generic zombie, detail noise | +| Charger | Spineback Rammer | Thick triangle head and straight back-spine | Drops head, red line shadow appears | Dark red mid-value, high-contrast head | Low inhale into burst | Literal bull/boar, unreadable curved charge | +| Ranged | Lamp-Eye Shellgun | Round body plus one long arm cannon | Cannon tip point-light, impact circle appears | Cold blue-white, projectile brightest | Short glass pluck | Human archer, bullet same value as body | +| Summoner | Womb-Bell Conductor | Bell robe with small satellite shards | Shards stop spinning, summon sigil appears | Purple mid-value, pale gold sigil | Distant bell, reversed whisper | Wizard hat, unclear summon point | +| Tank | Black-Shield Gravekeeper | Huge half-moon front shield, tiny rear legs | Shield rim lights, front cone hardens | Black shield, bright metal rim | Dull metal scrape | Omnidirectional invincible read, unclear shield facing | +| Elite | Twin-Blade Shadow Priest | Thin cross shape, long blade sleeves left/right | Sleeves open, cross slash range appears | Black plus green poison light, bright blade tips | Cloth snap into metal hit | Ninja/reaper copy, instant attack | +| Miniboss | Furnace-Back Execution Bug | Large oval body, glowing back furnace, axe legs | Furnace brightens in three stages, axe legs lift | Black body, orange furnace danger meter | Furnace hum, steam vent | Just a bigger fodder, hidden weak point | +| Boss | Abyssal Crown Tree | Central crown trunk, radial root arms | Each root pulses white, then tears floor | Low-value trunk, white crown, red-black attack roots | Heartbeat plus heavy wood split | Generic tentacle boss, full-screen unreadable telegraphs | + +## Historical Hero Candidate Notes + +These notes were useful before the world direction was defined. They are no +longer direct Meshy/Maya targets. + +### H02 Black-Iron Pincer Knight + +Use as enemy, guard, or heavy alternate silhouette if the game needs brutal +melee identity. + +Pass condition: + +- pincer shoulder and shears read in a 96 px thumbnail +- attack telegraph can open/close clearly +- body does not become a crab/robot + +### H07 White-Charcoal Judgement Axe + +Use as boss, elite, or backup combat readability reference if the game needs +heavy hit-stop and clear impact. + +Pass condition: + +- giant arm and axe head read as one bold silhouette +- white ash cracks separate hero from floor +- attack anticipation is readable in a still frame + +### H08 Navy-Lantern Threadbinder + +Use as threadlight tool reference. Do not keep the thin magical loops without a +physical survey device. + +Pass condition: + +- floating lantern and thread field remain visible without becoming noise +- thread attacks are thick enough to read +- body stays distinguishable from trap/VFX layer + +## First Enemy Pack + +Use these only as historical combat-role references. The first Threadlight +enemy set is defined in `docs/product/game-definition-threadlight.md`. + +1. `Soot-Split Crawler`: fodder; teaches basic hit/death. +2. `Spineback Rammer`: charger; creates dodge pressure. +3. `Black-Shield Gravekeeper`: tank; teaches facing/positioning. +4. `Womb-Bell Conductor`: summoner; creates priority target. +5. `Furnace-Back Execution Bug`: miniboss; creates trailer frame. + +Do not add all eight enemy patterns at once. Five is already enough for the +first enemy readability test. + +## Historical Meshy Preview Prompt Patterns + +These prompts are archived. Do not run them as-is. New prompts must start from +the Threadlight Surveyor, route tool, light-moth, or loom-gate language in +`docs/product/game-definition-threadlight.md`. + +### Hero Preview: Black-Iron Pincer Knight + +```text +dark fantasy top-down ARPG hero character, full body, centered, neutral A-pose, +asymmetric black iron pincer knight, one huge shoulder pincer silhouette, +one-handed great shears weapon, short shield blade, oversized gauntlets and +boots, rust red cloth accents, pale scar edge lines, stylized realistic game +character, clean separate armor shapes, strong readable silhouette for +isometric camera, Maya-ready 3D asset +``` + +Reject: + +```text +no literal crab body, no robot armor, no tiny scissors, no hidden weapon, no +long cape hiding legs, no excessive spikes, no merged hands, no extra arms, no +realistic face focus, no gore +``` + +Maya cleanup expected: + +- separate shears, shield blade, shoulders, body, and cloth +- thicken the shears so they read from top-down +- reduce tiny armor shards +- add clear top-facing value bands + +### Hero Preview: White-Charcoal Judgement Axe + +```text +dark fantasy top-down ARPG hero character, full body, centered, neutral A-pose, +white-charcoal execution axe warrior, one oversized arm, huge one-sided axe +head wider than shoulders, charcoal black body, white ash cracks, dark red +cloth, heavy readable silhouette, stylized realistic proportions, broad upper +body, game-ready 3D character, Maya-ready asset +``` + +Reject: + +```text +no generic barbarian, no bodybuilder focus, no tiny axe, no symmetrical normal +arms, no horned viking look, no long fur cape, no fused weapon hand, no gore +``` + +Maya cleanup expected: + +- separate axe mesh and hand socket +- exaggerate axe top plane and white cracks +- simplify muscles into readable armor/body masses +- pose-test charge, impact, and recovery silhouette + +### Hero Preview: Navy-Lantern Threadbinder + +```text +dark fantasy top-down ARPG hero character, full body, centered, neutral A-pose, +navy lantern threadbinder, small pale lantern floating above head, dark navy +cloth, black lacquer armor pieces, visible thick magical thread loops around +hands, compact body silhouette, finger blade shapes, stylized game character, +readable from isometric camera, Maya-ready 3D asset +``` + +Reject: + +```text +no puppet master cliche, no tiny invisible threads, no huge robe blob, no +multiple dolls, no anime school outfit, no cyber wires, no wings, no face detail +focus +``` + +Maya cleanup expected: + +- make thread loops separate, thick, and optional +- lantern must stay above head without hiding body +- split cloth layers so legs and facing remain clear +- keep VFX/trap geometry separate from body mesh + +### Enemy Preview: Soot-Split Crawler + +```text +dark top-down ARPG fodder enemy, small soot-black crawling creature, teardrop +body silhouette, one side has one long pale claw, hunched low stance, simple +large forms, readable facing direction from top-down, dark fantasy game enemy, +Maya-ready 3D model +``` + +Reject: + +```text +no generic zombie, no exposed gore, no many tiny fingers, no realistic human +face, no fully black silhouette, no thin unreadable claw +``` + +### Enemy Preview: Spineback Rammer + +```text +dark top-down ARPG charger enemy, thick triangular head, straight spine ridge +on back, compact heavy body, dark red hide, high contrast head plate, low +aggressive stance, readable charging silhouette, stylized dark fantasy creature, +Maya-ready 3D asset +``` + +Reject: + +```text +no literal bull, no boar copy, no realistic animal, no curved unreadable horns, +no thin legs, no cluttered spikes +``` + +### Enemy Preview: Black-Shield Gravekeeper + +```text +dark top-down ARPG shield tank enemy, huge half-moon black shield on front, +small legs visible behind shield, gravekeeper armor, bright worn metal rim, +clear front-facing silhouette, dark fantasy dungeon enemy, stylized game-ready +3D character, Maya-ready asset +``` + +Reject: + +```text +no full round turtle shell, no hero knight read, no shield covering entire body +from all angles, no tiny shield, no ornate unreadable engraving +``` + +## Preview Spend Rules + +- One preview per pattern per review round. +- No refine unless the preview passes 64-128 px readability. +- No rig/animation until Maya cleanup scope is written. +- Store task id, prompt, negative prompt, export format, credit cost, and + preview verdict in the asset ledger. +- Kill patterns quickly. Weak silhouette is not fixed by texture quality. + +## Selection Matrix + +| Candidate | Differentiation | Gameplay Readability | Meshy Risk | Maya Cleanup Risk | First Slice Fit | +| --- | --- | --- | --- | --- | --- | +| H02 Pincer Knight | High | High | Medium | Medium | Strong melee identity | +| H07 Judgement Axe | Medium | Very high | Low-medium | Low-medium | Strong hit-stop demo | +| H08 Threadbinder | High | Medium | High | High | Unique but risky | +| H09 Relic Duelist | High | High | Medium | Medium | Strong hooded relic-weapon identity | +| F01 Halberd Matron | Medium-high | High | Low-medium | Medium | Strong female melee/control read | +| F02 Glass Moth | Medium-high | Medium | High | Medium | Visually strong, risks thin-wing/ninja read | +| F03 Bell Root | High | Medium-high | Medium | Medium-high | Strong caster/enemy-boss crossover | +| H01 Lantern Pilgrim | Medium-high | Medium | Medium | Medium | Strong world identity | +| H03 Glass Scout | Medium | Medium-low | High | Medium | Risks thin unreadable blades | +| H04 Mud-Crown Hexer | Medium | Medium | Medium | Medium | Better as NPC/enemy first | +| H05 Execution Medic | Medium | Medium | Medium | Medium | IP/cliche risk if too plague-doctor | +| H06 Chain Monk | High | Medium | High | High | VFX-dependent, risky first hero | + +Historical recommendation after first concept-sheet generation round: + +1. H09 `Veiled Oath Relic Duelist` +2. F01 `Ash-Veil Halberd Matron` +3. H07 `White-Charcoal Judgement Axe` +4. F03 `Bell-Root Hex Huntress` + +Keep H02, H08, and F02. Do not discard them: + +- H02 can become a heavy enemy elite, armor skin, or alternate melee class. +- H08 can become a trap-focused class after thread/VFX readability is proven. +- F02 can become a rogue class or enemy assassin, but avoid the ninja/fairy read. + +Do not generate Meshy previews from these sheets directly. First create the +Threadlight world contact sheet and gameplay mock, then choose at most two +assets that prove the new world rule. + +## Generated Concept Sheets + +Generated with built-in `image_gen` as pre-Meshy 2D concept exploration: + +- `docs/character/concepts/h07-white-charcoal-judgement-axe-sheet.png` +- `docs/character/concepts/h02-black-iron-pincer-knight-sheet.png` +- `docs/character/concepts/h08-navy-lantern-threadbinder-sheet.png` +- `docs/character/concepts/h09-veiled-oath-relic-duelist-sheet.png` +- `docs/character/concepts/f01-ash-veil-halberd-matron-sheet.png` +- `docs/character/concepts/f02-glass-moth-duelist-sheet.png` +- `docs/character/concepts/f03-bell-root-hex-huntress-sheet.png` +- `docs/character/concepts/concept-comparison-contact-sheet.png` +- `docs/character/concepts/concept-silhouette-strip.png` + +Current reuse verdict: + +| Candidate | Verdict | Reason | +| --- | --- | --- | +| H09 Relic Duelist | Part library | Keep hooded field-worker mass and relic weight; do not keep weapon-first identity. | +| F01 Halberd Matron | Part library | Keep pale veil/crest and polearm readability; convert armor into field uniform. | +| H07 Judgement Axe | Enemy/boss backup | Most readable impact/weight, but too rugged for first hero. | +| F03 Bell Root | Strong region motif | Use bell-root ecology for NPC, elite enemy, or boss-adjacent caster. | +| H02 Pincer Knight | Keep for reuse | Strong silhouette, but leans heavily armored/monster; better as elite or alternate class. | +| H08 Threadbinder | Keep for later | Novel, but thread readability and production risk are high. | +| F02 Glass Moth | Keep with caution | Good image, but wing/ninja/fairy read risks IP/generic drift and thin silhouette issues. | diff --git a/docs/character/concepts/concept-comparison-contact-sheet.png b/docs/character/concepts/concept-comparison-contact-sheet.png new file mode 100644 index 0000000..08414e3 Binary files /dev/null and b/docs/character/concepts/concept-comparison-contact-sheet.png differ diff --git a/docs/character/concepts/concept-silhouette-strip.png b/docs/character/concepts/concept-silhouette-strip.png new file mode 100644 index 0000000..67896be Binary files /dev/null and b/docs/character/concepts/concept-silhouette-strip.png differ diff --git a/docs/character/concepts/f01-ash-veil-halberd-matron-sheet.png b/docs/character/concepts/f01-ash-veil-halberd-matron-sheet.png new file mode 100644 index 0000000..f21903b Binary files /dev/null and b/docs/character/concepts/f01-ash-veil-halberd-matron-sheet.png differ diff --git a/docs/character/concepts/f02-glass-moth-duelist-sheet.png b/docs/character/concepts/f02-glass-moth-duelist-sheet.png new file mode 100644 index 0000000..5f4e329 Binary files /dev/null and b/docs/character/concepts/f02-glass-moth-duelist-sheet.png differ diff --git a/docs/character/concepts/f03-bell-root-hex-huntress-sheet.png b/docs/character/concepts/f03-bell-root-hex-huntress-sheet.png new file mode 100644 index 0000000..121d6c2 Binary files /dev/null and b/docs/character/concepts/f03-bell-root-hex-huntress-sheet.png differ diff --git a/docs/character/concepts/generation-log.md b/docs/character/concepts/generation-log.md new file mode 100644 index 0000000..61c8099 --- /dev/null +++ b/docs/character/concepts/generation-log.md @@ -0,0 +1,53 @@ +# Character Concept Generation Log + +Status: record of generated 2D concept sheets before any Meshy/Maya spend. + +Tool path: + +- Built-in `image_gen` tool. +- Outputs copied from `$CODEX_HOME/generated_images/...` into + `docs/character/concepts/`. + +## IP Safety Notes + +The user provided a hooded reference image for mood. It was not used as a direct +edit target. The derived H09 direction keeps only broad, generic ideas: + +- hooded anonymity +- ritual weapon weight +- occult pilgrim mood +- heavy beads/charms as silhouette support + +Explicitly rejected from H09: + +- key-shaped weapon +- star charm +- black zipper coat +- school-uniform silhouette +- childlike proportions +- recognizable franchise character design + +## Generated Sheets + +| File | Prompt Direction | Current Verdict | +| --- | --- | --- | +| `h07-white-charcoal-judgement-axe-sheet.png` | Oversized-arm execution axe hero. | Reuse as enemy/boss mass or impact reference; too rugged for first hero. | +| `h02-black-iron-pincer-knight-sheet.png` | Asymmetric pincer knight with shears. | Keep: useful for elite/alternate class. | +| `h08-navy-lantern-threadbinder-sheet.png` | Lantern and thick thread-loop trap hero. | Keep: novel but production-risky. | +| `h09-veiled-oath-relic-duelist-sheet.png` | Hooded relic duelist with broad reliquary greatblade. | Part library: hooded field-worker mass and relic weight. | +| `f01-ash-veil-halberd-matron-sheet.png` | Female halberd warrior with ash veil crest. | Part library: pale veil/crest and polearm readability. | +| `f02-glass-moth-duelist-sheet.png` | Female glass-moth rogue with crescent daggers. | Keep with caution: strong art, risky ninja/fairy read. | +| `f03-bell-root-hex-huntress-sheet.png` | Female bell-root occult hunter/summoner. | Strong alternate; could become heroine or elite enemy. | +| `concept-comparison-contact-sheet.png` | Combined overview of all generated sheets. | Used for visual triage. | +| `concept-silhouette-strip.png` | Cropped top silhouette strips in grayscale. | Used for tiny-readability triage. | + +## Next Gate + +Before Meshy preview: + +1. Accept or replace `docs/product/game-definition-threadlight.md`. +2. Create a world contact sheet and gameplay mock. +3. Choose no more than two assets that prove the world rule. +4. Run only Meshy preview/draft first. +5. Do not refine, HD texture, rig, or animate until the preview survives the + game-camera test. diff --git a/docs/character/concepts/h02-black-iron-pincer-knight-sheet.png b/docs/character/concepts/h02-black-iron-pincer-knight-sheet.png new file mode 100644 index 0000000..a7a4b2d Binary files /dev/null and b/docs/character/concepts/h02-black-iron-pincer-knight-sheet.png differ diff --git a/docs/character/concepts/h07-white-charcoal-judgement-axe-sheet.png b/docs/character/concepts/h07-white-charcoal-judgement-axe-sheet.png new file mode 100644 index 0000000..2cc8f13 Binary files /dev/null and b/docs/character/concepts/h07-white-charcoal-judgement-axe-sheet.png differ diff --git a/docs/character/concepts/h08-navy-lantern-threadbinder-sheet.png b/docs/character/concepts/h08-navy-lantern-threadbinder-sheet.png new file mode 100644 index 0000000..8e6a64f Binary files /dev/null and b/docs/character/concepts/h08-navy-lantern-threadbinder-sheet.png differ diff --git a/docs/character/concepts/h09-veiled-oath-relic-duelist-sheet.png b/docs/character/concepts/h09-veiled-oath-relic-duelist-sheet.png new file mode 100644 index 0000000..5a038d8 Binary files /dev/null and b/docs/character/concepts/h09-veiled-oath-relic-duelist-sheet.png differ diff --git a/docs/product/game-definition-threadlight.md b/docs/product/game-definition-threadlight.md new file mode 100644 index 0000000..ef31ecb --- /dev/null +++ b/docs/product/game-definition-threadlight.md @@ -0,0 +1,284 @@ +# Game Definition: Threadlight Pilgrimage + +Status: proposed product direction after market-expression research. +Date: 2026-06-30. + +This document replaces weapon-first character exploration as the current +creative gate. Character, Meshy, Maya, Unreal, and Unity work should serve this +definition until it is intentionally changed. + +## One-Line Pitch + +Enter frayed provinces as a lantern-thread surveyor, read the traces of a +broken land, bind its monsters and routes with threadlight, and bring lost +memories back to a growing pilgrimage caravan. + +## What The Player Buys + +The player is not buying a sword, axe, or armor set. + +The player is buying the fantasy of becoming a careful, brave field worker in a +beautifully damaged world: + +- reading danger before it kills them +- restoring paths others can no longer cross +- rescuing memories, names, and people from places that have come apart +- returning to a caravan that becomes warmer and stranger after each expedition +- mastering action combat because they understand the land, not because they + found a bigger weapon + +## Genre + +Top-down action roguelite / compact ARPG. + +The first commercial prototype should prove: + +- readable movement, dodge, and melee timing +- one exploration tool that changes combat and navigation +- short expeditions with retreat/deeper risk +- one hub that visibly grows +- one boss whose attacks are explained by the region's world rule + +## Player Role + +The player is a `Threadlight Surveyor`. + +Surveyors belong to a travelling repair pilgrimage. They enter provinces where +roads, names, memories, and buildings have frayed into physical thread. Their +job is not conquest. Their job is to make a route safe enough that others can +return. + +The hero should read as profession first, warrior second: + +- lantern or thread tool +- field coat, mantle, sash, or work apron +- measuring pins, spools, charms, chalk, map cloth, and route tags +- one practical weapon that also supports the job +- clear top-down value mark: pale lantern, white thread, red route cloth, or + blue-black coat + +Avoid hero-first signals: + +- chosen-one crown +- generic holy knight +- huge spiked armor +- skull overload +- weapon collector silhouette +- black-on-black body with no job identity + +## World Premise + +The world entered a `Long Night`. Some provinces did not simply fall into ruin; +they came unstitched. + +Memory became thread. Grief became knots. Roads now loop back on themselves. +Old flags, wedding veils, work clothes, banners, curtains, and burial cloth +wake as hostile relics. Lamps and bells are the safest way to mark a true path. + +People survive by travelling in pilgrimage caravans built around looms, +lantern racks, map cloth, kitchens, sleeping shelves, and memory archives. + +## Hub + +The hub is a mobile `Loom Caravan`. + +It is not a menu room. It is the emotional anchor. + +Hub upgrades should be visible: + +- lantern shelf fills with recovered lights +- NPC bunks appear and become lived-in +- map cloth expands across the wall +- repaired tools hang from hooks +- cooking area becomes warmer +- memory fragments become small exhibits +- failed expeditions leave stains, torn cloth, or missing markers + +This is how runs gain emotional weight beyond loot. + +## Core Loop + +1. Prepare at the Loom Caravan. +2. Choose a frayed province and one route objective. +3. Enter a compact top-down expedition. +4. Read traces: loose threads, lamp color, footprints, corpse direction, bell + rhythm, cloth movement, floor seams. +5. Use the threadlight tool to reveal, bind, anchor, or cut a route. +6. Fight enemies whose attacks come from the same local rule. +7. Decide to retreat with rescued memory or push deeper for a route seal. +8. Return to the caravan and see the world, NPCs, or tools change. + +## First Prototype Slice + +The first 30-second slice should not try to show the whole game. + +It should show: + +- a surveyor entering a rain-dark cloth street +- the threadlight lantern revealing a hidden route seam +- one enemy that eats light +- one enemy that tangles the player's route line +- one elite with a clear bell or banner telegraph +- a short fight with hit stop, knockback, and readable danger colors +- one rescued memory returned to a visible caravan object +- one boss tease: a giant loom gate or bell tower begins moving + +## Visual Pillars + +Use these before character detail: + +1. `Thread and cloth`: route lines, torn banners, veils, knots, sashes, ropes, + stitching, repair tags. +2. `Lantern light`: warm safety, pale memory light, reflected wet stone, + readable player mark. +3. `Soft dark fantasy`: dangerous and melancholy, not rugged armor brutality. +4. `Profession silhouettes`: surveyor, weaver, bell keeper, route guard, + lantern carrier, map stitcher. +5. `Repair over conquest`: visual payoff is opening, mending, lighting, and + returning, not only killing. + +Primary palette: + +- ink blue +- black cloth +- wet stone gray +- warm lantern gold +- pale memory white +- oxblood route cloth +- moss green + +Avoid: + +- one-note slate/dark-blue UI +- generic brown dungeon +- all-black hero on all-black floor +- purple-blue magic as the main palette +- sand/beige fantasy ruins + +## Character Direction + +Existing generated sheets are not final protagonist direction. Preserve them as +parts: + +- H09: hooded field-worker mood, relic weight, top-down cloak mass. +- F01: pale veil/crest and long polearm readability, but convert armor into + ritual field uniform. +- F03: bell-root motif and occult ecology, useful for NPC, elite, or region + boss language. +- H08: lantern/thread action language, but make it a physical survey tool + instead of thin VFX loops. +- H02/H07: reserve for enemy, guard, or boss silhouettes, not first hero. +- F02: hold for redesign; current ninja/fairy signal is off-direction. + +New character prompts should lead with job and world: + +- rain surveyor with lantern-thread spool +- route mender with map cloth and short blade +- bell keeper with cracked bronze mantle +- caravan stitcher with field apron and measuring pins +- ash veil route guard with practical polearm + +Do not lead with: + +- dark fantasy warrior +- magic swordsman +- execution axe hero +- armored valkyrie +- rogue assassin + +## Enemy Ecology + +Enemies are not demons for their own sake. They are frayed memories and hostile +relic behavior. + +First enemy set: + +- `Light-Moth`: small fast creature that dims safe lantern zones. +- `Knot Hound`: low runner that pulls thread routes into hazards. +- `Banner Husk`: cloth soldier that hides attack direction until lit. +- `Bell Root`: stationary pulse enemy that changes floor rhythm. +- `Loom Gate Keeper`: first boss; a doorway/loom/bell machine that controls the + route network. + +Each enemy must teach the world rule: + +- light reveals +- thread binds +- knots trap +- bells warn +- repaired routes create safety + +## Store Page Promise + +The first store-facing image should show: + +- a small readable surveyor with a warm lantern +- a visible thread route crossing a dark floor +- a hostile relic or cloth creature pulling the route apart +- a large landmark: loom gate, bell tower, sunken wedding hall, or stitched + street +- a hint of the caravan or rescued memory, so the game is not only combat + +First trailer structure: + +1. `0-3s`: lantern lights a thread route in a dark street. +2. `3-7s`: the route reveals danger before an enemy strikes. +3. `7-12s`: combat with a white hit core, warm thread trail, and knockback. +4. `12-16s`: retreat/deeper choice at a fraying doorway. +5. `16-21s`: caravan return, recovered memory changes a visible object. +6. `21-26s`: boss landmark wakes. +7. `26-30s`: high-readability combat beat, title card. + +## Audio Direction + +The sound should be dark but not generic. + +Signature materials: + +- taut thread plucks +- loom wood knocks +- lantern glass clicks +- soft bells +- rain on cloth +- low strings +- dry hand percussion +- breath-like choir fragments + +Combat mix: + +- player attacks: short cloth/metal motion plus clear contact +- enemy tells: bells, thread tension, breath, low scrape +- route tool: satisfying pluck, glow, and latch +- reward: small memory chime, not long fanfare + +## Production Gate + +Before any new Meshy/API spend: + +1. Create a world contact sheet for Threadlight Pilgrimage. +2. Create a 1280x800 gameplay mock with surveyor, thread route, enemy, hub + payoff, and boss tease. +3. Create one environment style tile. +4. Create a 30-second trailer beatboard. +5. Only then choose up to two assets for 3D preview. + +Preferred first 3D targets: + +1. threadlight route tool +2. light-moth enemy +3. surveyor body blockout + +Do not start with a fully polished hero model. + +## Rejection Rules + +Reject any direction that: + +- can only be explained as "dark fantasy ARPG" +- looks like weapon concept art without a world rule +- makes every character rugged, armored, and grim +- has no hub or non-combat desire +- cannot show the game promise in one screenshot +- requires paid generation to look convincing +- would still work if the thread, lantern, caravan, and repair ideas were + removed diff --git a/docs/production/maya-meshy-gate.md b/docs/production/maya-meshy-gate.md index c4f53dd..6f08358 100644 --- a/docs/production/maya-meshy-gate.md +++ b/docs/production/maya-meshy-gate.md @@ -2,6 +2,14 @@ Status: active production gate. +## World Gate Precondition + +New character generation is paused until the world direction in +`docs/product/game-definition-threadlight.md` is accepted or replaced. + +Maya and Meshy should not be used to rescue a vague fantasy character. They are +only useful after the asset proves a specific game promise on screen. + ## Allowed Use Maya: @@ -33,10 +41,19 @@ Do not spend API credits on: ## First Candidate If Needed -The only next permitted new generation target is one playable hero candidate: +The next permitted generated asset is not a fully polished hero. Use one +low-cost preview only after the world contact sheet and gameplay mock exist. + +Preferred order: -- top-down action RPG playable hero -- original dark fantasy magic swordsman +1. threadlight route tool +2. light-moth enemy +3. surveyor body blockout + +The first playable body candidate must be: + +- top-down action RPG surveyor +- original threadlight repair-pilgrimage field worker - readable head, shoulders, cape, weapon - asymmetrical facing cues - broad color blocking @@ -47,8 +64,8 @@ Failure means: - generic armor NPC - unreadable at camera scale -- weapon too thin +- tool or weapon too thin - facing unclear +- job identity unclear - famous-character resemblance - requires changing the game direction to justify it - diff --git a/docs/production/task-split.md b/docs/production/task-split.md index 4916278..a3b07c2 100644 --- a/docs/production/task-split.md +++ b/docs/production/task-split.md @@ -11,10 +11,14 @@ Status: first PR task map for Veripsa/Core review. ## Milestone 1: Visual Target Without Engine Lock +- [ ] M1-T00: Accept or replace `Threadlight Pilgrimage` as the concrete world + and store-facing promise. - [ ] M1-T01: Create one-page final-frame brief. - [ ] M1-T02: Build free/CC0 asset shortlist for hero, enemy, floor, and props. - [ ] M1-T03: Create visual mood board using only licensed links and notes. - [ ] M1-T04: Define 30-second storyboard acceptance checklist. +- [ ] M1-T05: Create gameplay mock showing world rule, hub payoff, and one + combat beat before any Meshy/Maya spend. ## Milestone 2: Engine Bakeoff @@ -47,4 +51,3 @@ Status: first PR task map for Veripsa/Core review. - Do not mix market research, engine setup, gameplay, and art import in one PR. - Every asset PR needs source/license notes. - Every visual PR needs screenshot evidence. - diff --git a/docs/research/commercial-expression-benchmark.md b/docs/research/commercial-expression-benchmark.md new file mode 100644 index 0000000..fbffd73 --- /dev/null +++ b/docs/research/commercial-expression-benchmark.md @@ -0,0 +1,96 @@ +# Commercial Expression Benchmark + +Status: market-facing expression research for the next art direction gate. +Date: 2026-06-30. + +Use these references as market evidence only. Do not copy their characters, +costumes, UI, worlds, palettes, trailers, logos, music, or named systems. + +## Core Finding + +Successful top-down action RPG and roguelite games do not sell a weapon first. +They sell a role, a world rule, and an emotional reason to continue. + +The buyer-facing promise is usually simple: + +- become a specific kind of person +- enter a world with a memorable rule +- repeat a dangerous loop that changes the world, the cast, or the player +- see growth in the screen, home base, relationships, or build identity + +Weapon art is useful only when it makes that promise easier to understand. + +## Benchmarks + +| Game | Market Signal | What The Store/Trailer Sells | Expression Principle To Absorb | +| --- | --- | --- | --- | +| Hades | Reported over one million copies before/around launch; Steam page remains a benchmark for action roguelite presentation. | A rebellious escape from the underworld, family conflict, gods as vivid personalities, fast readable combat. | Sell relationships and role before builds. Combat rewards work because characters and return visits matter. | +| Hades II | Strong Steam reception and high launch attention; official positioning centers on witchcraft, the underworld, and the Titan of Time. | A witch against Time, ritual identity, moon/night colors, new protagonist role. | A sequel or adjacent design must shift job, color, ritual, and emotional fantasy, not just add weapons. | +| Cult of the Lamb | Reported one million copies in its first week. | Cute lamb, evil cult, rituals, followers, base life, dark humor. | A strong mascot plus an uncomfortable verb can sell instantly. The base and rituals are as important as combat. | +| V Rising | Reported five million copies sold by 2025. | Weak vampire becoming a ruler, castle building, blood hunting, daylight as a hard rule. | A visible world constraint, such as sunlight, makes screenshots explain gameplay without text. | +| No Rest for the Wicked | Reported near two million copies during Early Access. | Painterly isometric world, heavy manual melee, disease and island dread. | Premium appeal comes from art quality plus input weight. Screens must show craft, not just darkness. | +| Diablo IV | Large mainstream dark fantasy benchmark. | Lilith, hell, gothic religion, class fantasy, season/live-service scale. | The villain and world architecture can be the product face. Darkness needs strong iconography. | +| Path of Exile 2 | High-interest ARPG benchmark with deep systems. | Brutal bosses, build depth, grim world, complex mastery. | Depth is also a visual promise. Boss tells, skill trees, and build screens can be sellable images. | +| Death's Door | High-signal indie action adventure benchmark. | A small crow reaper, dead-end job premise, melancholy humor, clean diorama worlds. | A small protagonist plus a large job concept can be more memorable than detailed armor. | +| Children of Morta | Strong family/action roguelite reference. | A family of heroes, home warmth, corruption outside the home. | A roster is stronger when it is a relationship network, not a class list. | +| Curse of the Dead Gods | Smaller but useful readability benchmark. | Torches, greed, traps, curses, temple risk. | A player vice can be a mechanic. Make greed, fear, or retreat visible on screen. | + +## Trailer And Screenshot Patterns + +- First 3-5 seconds show the promise, not the tutorial. +- Strong trailers alternate world, combat, boss, reward, and identity. +- HUD is usually hidden or reduced in the first store-facing shots. +- A hero needs a dedicated value/color accent that survives dark floors. +- Hit impact usually uses a white or yellow core, colored outer shape, hit stop, + knockback, and debris or body reaction. +- Bosses sell by screen control: large silhouette, strong telegraph, and a tiny + readable player. +- A screenshot should expose the world rule. Good examples: sunlight, cult + ritual, family home, underworld exit, torch/curse pressure, or a giant gate. + +## Audio Patterns + +Strong games have a sound identity that can be described in one line: + +- Hades: mythic percussion and rock energy. +- Cult of the Lamb: cute ritual unease. +- V Rising: gothic predator ownership. +- Diablo IV and Path of Exile 2: heavy corruption, metal, flesh, and dread. +- Death's Door and Children of Morta: melancholy warmth around dark subject + matter. + +Our direction should avoid generic cinematic fantasy. Use a specific sonic +signature tied to the world rule: thread tension, lantern glass, looms, rain, +soft bells, breath, low strings, and dry percussion. + +## Implications For This Project + +The current generated characters are too often rugged armor plus oversized +weapon. That can support a combat prototype, but it is not enough to sell the +game. + +The product needs a world-language first: + +- a clear player job +- a hub or community worth returning to +- a visible rule that changes exploration and combat +- enemy ecology, not generic demons +- a non-combat desire such as repair, rescue, memory, cult, castle, family, or + home growth + +## Sources + +- Hades Steam: https://store.steampowered.com/app/1145360/Hades/ +- Hades sales report: https://www.gamedeveloper.com/business/-i-hades-i-has-sold-over-1-million-copies-in-under-two-years +- Hades II Steam: https://store.steampowered.com/app/1145350/Hades_II/ +- Cult of the Lamb Steam: https://store.steampowered.com/app/1313140/Cult_of_the_Lamb/ +- Cult of the Lamb one million sales report: https://www.gematsu.com/2022/08/cult-of-the-lamb-sales-top-one-million +- V Rising Steam: https://store.steampowered.com/app/1604030/V_Rising/ +- V Rising five million sales report: https://www.gematsu.com/2025/01/v-rising-sales-top-five-million +- No Rest for the Wicked Steam: https://store.steampowered.com/app/1371980/No_Rest_for_the_Wicked/ +- No Rest for the Wicked sales report: https://www.gamesradar.com/games/action-rpg/after-2-years-in-steam-early-access-and-almost-2-million-copies-sold-arpg-no-rest-for-the-wicked-is-not-slowing-down-on-its-way-to-1-0/ +- Diablo IV Steam: https://store.steampowered.com/app/2344520/Diablo_IV/ +- Path of Exile 2 Steam: https://store.steampowered.com/app/2694490/Path_of_Exile_2/ +- Death's Door Steam: https://store.steampowered.com/app/894020/Deaths_Door/ +- Children of Morta Steam: https://store.steampowered.com/app/330020/Children_of_Morta/ +- Curse of the Dead Gods Steam: https://store.steampowered.com/app/1123770/Curse_of_the_Dead_Gods/ diff --git a/docs/research/game-character-production-pipeline.md b/docs/research/game-character-production-pipeline.md new file mode 100644 index 0000000..35a597d --- /dev/null +++ b/docs/research/game-character-production-pipeline.md @@ -0,0 +1,194 @@ +# Game Character Production Pipeline + +Status: research note for deciding how to create the first commercial-looking +ARPG character without wasting Maya/Meshy/API spend. + +## Blunt Finding + +The current Phase 1 character fails as a commercial character because it is a +procedural gameplay marker, not a production character. A production character +needs readable identity, authored shape language, deformation-safe topology, +materials that survive the game camera, animation poses that sell intent, and +engine evidence. Meshy can help create starting geometry. Maya is where the +result must be judged, cleaned, rigged, skinned, and made usable. + +Do not spend paid generation credits until the character has a one-page +direction sheet and a pass/fail test at gameplay camera distance. + +## Pipeline + +| Stage | Output | Pass Gate | +| --- | --- | --- | +| 1. Role and camera brief | One sentence role, weapon, scale, camera-distance crop, color/value target. | Readable as hero/enemy at 256 px tall screenshot. | +| 2. Silhouette sheet | 6-12 black silhouettes, front/side/back roughs, weapon profile. | Head, shoulders, weapon, facing direction readable in black. | +| 3. Color/material key | 2-3 material/value studies, no final render dependency. | Hero separates from blue-gray dungeon floor and warm torches. | +| 4. Generation or blockout | Meshy preview, Maya blockout, or kitbash blockout. | Shape works untextured from top-down. | +| 5. Cleanup/retopo | Animation-ready low/mid poly mesh, named parts, pivot/origin set. | No melted limbs, no ambiguous hands/weapon, no tangled intersections. | +| 6. UV/materials | Base color, normal, roughness/metal where useful. | Materials read under engine lighting, not only in DCC viewport. | +| 7. Rig/skin | Skeleton, skin weights, weapon sockets, optional cloth/cape bones. | Idle/run/attack/death poses deform without collapsing volume. | +| 8. Animation set | Idle, run, dodge, attack, hit, death, and one skill pose. | Each pose reads in a still frame before motion blur/VFX. | +| 9. Engine import | Unity or Unreal prefab/blueprint with scale, materials, animator. | Screenshot and contact sheet prove commercial direction. | +| 10. Ledger | Source, license, prompts, task IDs, edits, export formats. | Rebuildable, reviewable, legally traceable asset. | + +## Maya's Correct Role + +Maya is not where we should improvise a finished character from nothing. It is +the production control point: + +- clean Meshy/kitbash geometry +- fix scale, forward axis, pivot, naming, hierarchy +- retopologize or simplify problem areas +- create/adjust skeleton joints +- bind mesh to skeleton and paint skin weights +- pose-test shoulders, cape, weapon, hands, knees, and death collapse +- export FBX/GLB for engine import + +Unreal's FBX skeletal mesh pipeline describes the same basic production facts: +characters are exported from DCC software as FBX, contain mesh and skeleton, can +include animations/morph targets, and support materials, multiple UVs, vertex +colors, smoothing groups, and LODs. It also calls out Maya Joint Tool, Smooth +Bind, Paint Skin Weights, manual triangulation control, normal-map baking, and +Skeletal Mesh LOD setup as production concerns. + +## Meshy/API Role + +Meshy is useful only if treated as a draft asset generator plus cleanup input. +The official Text to 3D API uses a two-step preview/refine flow: preview creates +untextured geometry, refine textures it. It can request `glb`, `obj`, `fbx`, +`stl`, `usdz`, and `3mf` outputs, supports A/T pose requests, target polycount, +and PBR/HD texture options. The docs also show that tasks consume credits, so +preview spam is waste. + +Meshy's Rigging API can add skeletons to humanoid models, but the official docs +state that programmatic rigging currently works well only for standard bipedal +humanoids with clear limbs/body. It is not suitable for untextured meshes, +non-humanoids, unclear humanoids, or models over 300,000 faces when using a +task ID. Model URL rigging requires textured GLB and forward-facing +Z. + +Meshy's Animation API applies library animations to a previously rigged +character. That can accelerate tests, but it does not solve game-specific attack +timing, hit stop, dodge frames, weapon sockets, or top-down pose readability. + +## Unity/Unreal Import Facts + +Unity: + +- Humanoid import needs a valid Avatar mapped to a human-like skeleton. +- Unity distinguishes Humanoid and Generic rigs; non-human enemies may need + Generic. +- Unity recommends checking Avatar mapping even when automatic mapping succeeds. +- The Rig import tab defaults to 4 bone skin weights for performance, and higher + bone influence has cost. +- Animation clips can be masked, clipped, loop-optimized, and event-marked at + import. + +Unreal: + +- The foundational character asset is Skeletal Mesh: geometry plus skeleton. +- FBX import can bring mesh, skeleton, animations, morph targets, materials, + multiple UVs, smoothing groups, vertex colors, and LODs. +- Character behavior is assembled in a Character Blueprint and Animation + Blueprint. +- Skeleton compatibility and retargeting matter if we want to reuse animations. +- LODs should align to the same skeleton/pivot and can reduce material/detail + complexity at distance. + +## Top-Down ARPG Character Readability Rules + +For this project, character quality is judged from gameplay camera first, not +from a beauty render. + +Required: + +- oversized weapon or signature prop visible from top-down +- head/shoulder silhouette separated from cape/body mass +- one bright hero value band and one dark anchor band +- warm/cool material contrast that survives dungeon lighting +- asymmetry: shoulder plate, cape tear, lantern, relic, horn, or weapon shape +- attack pose with clear anticipation, contact, follow-through +- enemy silhouette that differs in size, color, and facing language + +Rejected: + +- white blob hero +- generic armored human with no weapon identity +- details only visible close-up +- hair/cape/cloth fused into a single soft mass +- Meshy output used directly in-engine without cleanup +- animation that reads only when moving, not in still frames + +## First Character Target + +Do not start with a complex full hero. Start with a "hero-readable prototype +character" that can pass gameplay distance: + +- role: cursed foldblade knight / relic duelist +- camera: top-down/isometric gameplay distance, character occupies 12-16% of + screen height in hero evidence shot +- silhouette: broad left shoulder, long diagonal folding blade, short torn cape, + bright mask/crest, dark lower body +- materials: pale mask/crest, blackened armor, oxblood cloth, cyan relic glow, + warm edge highlights from torches +- animations: idle, run, dodge, light attack, heavy attack, hit, death + +This is intentionally narrow. If this fails, adding more enemies or skills will +not fix the game. + +## Spend Gate For Meshy + +Before any paid/API generation: + +- [ ] final role sentence approved +- [ ] 6+ silhouettes reviewed at gameplay crop +- [ ] front/side/back rough or reference sheet exists +- [ ] prompt includes pose, camera-readability, weapon, material bands, and + forbidden details +- [ ] one preview limit per candidate; no refine until preview passes silhouette +- [ ] task IDs and prompts will be logged in asset ledger +- [ ] exported model will be cleaned in Maya before engine import + +First allowed API experiment: + +```text +Create one Meshy preview only, A-pose, GLB output, low-to-mid poly target, +for a dark fantasy top-down ARPG hero with exaggerated readable silhouette: +bright mask/crest, asymmetrical shoulder armor, torn short cape, long diagonal +foldblade weapon, blackened armor, oxblood cloth, cyan relic accent. Avoid tiny +ornaments, fused hands, hidden weapon, symmetrical generic knight, realistic +face detail, and long trailing cloth that would break top-down readability. +``` + +Do not refine/texture until the preview silhouette passes against the current +game camera. + +## Immediate Next PR + +The next implementation PR should not be another procedural body polish pass. +It should create a character-evidence lane: + +1. Add `docs/asset-ledger/character-ledger.md`. +2. Add a `docs/character/hero-readable-prototype-brief.md` with silhouette, + material, animation, and Meshy spend gate. +3. Add a Unity/Unreal neutral screenshot checklist for imported character + evidence. + +Only after that should a Meshy/Maya/engine import PR be opened. + +## Sources + +- Meshy API introduction and endpoint list: https://docs.meshy.ai/en +- Meshy Text to 3D API: https://docs.meshy.ai/en/api/text-to-3d +- Meshy Rigging API: https://docs.meshy.ai/en/api/rigging +- Meshy Animation API: https://docs.meshy.ai/en/api/animation +- Meshy Remesh API: https://docs.meshy.ai/en/api/remesh +- Meshy for Maya plugin: https://docs.meshy.ai/en/maya-plugin/introduction +- Unity Humanoid import and Avatar configuration: + https://docs.unity3d.com/Manual/ConfiguringtheAvatar.html +- Unity Rig import settings: + https://docs.unity3d.com/Manual/FBXImporter-Rig.html +- Unreal Skeletal Mesh assets: + https://dev.epicgames.com/documentation/en-us/unreal-engine/skeletal-mesh-assets-in-unreal-engine +- Unreal FBX Skeletal Mesh Pipeline: + https://dev.epicgames.com/documentation/en-us/unreal-engine/fbx-skeletal-mesh-pipeline-in-unreal-engine +- Unreal Animation Retargeting: + https://dev.epicgames.com/documentation/en-us/unreal-engine/animation-retargeting-in-unreal-engine diff --git a/docs/research/market-fit.md b/docs/research/market-fit.md index a40b9b5..f76c5c4 100644 --- a/docs/research/market-fit.md +++ b/docs/research/market-fit.md @@ -24,27 +24,30 @@ characters, UI, logos, costumes, palettes, silhouettes, lore, or named systems. Small commercial target: -- 3D top-down dark fantasy survivor ARPG +- top-down action roguelite / compact ARPG - manual movement, dodge, and melee timing -- semi-automatic magic, cursed relics, traps, or summons layered on top -- 15-25 minute runs +- one exploration tool that changes navigation and combat +- short expeditions with retreat/deeper pressure +- a visible hub that grows after successful runs - one clear boss or elite moment in the first short capture - low-to-mid price premium indie positioning -The store hook should be: +Current product definition: -> dodge through a cursed cathedral, stack forbidden relics, and turn one -> readable melee hero into a screen-clearing build within minutes. +> Enter frayed provinces as a lantern-thread surveyor, read the traces of a +> broken land, bind its monsters and routes with threadlight, and bring lost +> memories back to a growing pilgrimage caravan. + +See `docs/product/game-definition-threadlight.md`. ## First Store-Facing Promise The first screenshot/video must show: -- one readable hero +- one readable surveyor +- a thread route, lantern mark, or repaired path - diagonal motion -- enemy density rising from edges -- one strong skill shape -- one medium enemy or boss threat -- one reward/build choice +- one enemy interacting with light/thread +- one medium enemy or boss threat tied to the world rule +- one visible hub or rescued-memory payoff - dark setting with readable foreground action - diff --git a/docs/research/video-analysis-tooling.md b/docs/research/video-analysis-tooling.md new file mode 100644 index 0000000..bda04fb --- /dev/null +++ b/docs/research/video-analysis-tooling.md @@ -0,0 +1,171 @@ +# Video Analysis Tooling + +Status: local free-tool setup note. + +## Installed Tool + +Installed with Homebrew: + +```bash +brew install ffmpeg +``` + +Verified tools: + +- `ffmpeg 8.1.2` +- `ffprobe 8.1.2` + +`ffmpeg` is the baseline free tool for trailer/gameplay evidence work: + +- read video metadata +- extract exact frames +- generate contact sheets +- extract audio +- measure volume +- generate spectrogram/waveform evidence +- transcode Unity/Unreal captures to reviewable MP4 + +Do not commit downloaded commercial reference videos to the repository. Store +temporary analysis inputs under `/tmp` or another ignored local evidence +folder, and cite the source URL in research docs. + +## Smoke Test Performed + +Created a one-second synthetic video and audio test: + +```bash +ffmpeg -y \ + -f lavfi -i testsrc2=duration=1:size=960x540:rate=24 \ + -f lavfi -i sine=frequency=440:duration=1 \ + -pix_fmt yuv420p \ + -shortest \ + /tmp/arpg-ffmpeg-smoke.mp4 +``` + +Read metadata: + +```bash +ffprobe -v error \ + -show_entries format=duration:stream=index,codec_type,width,height,r_frame_rate,sample_rate \ + -of default=noprint_wrappers=1 \ + /tmp/arpg-ffmpeg-smoke.mp4 +``` + +Extracted one frame: + +```bash +ffmpeg -y \ + -ss 0.5 \ + -i /tmp/arpg-ffmpeg-smoke.mp4 \ + -frames:v 1 \ + -update 1 \ + /tmp/arpg-ffmpeg-smoke-frame.png +``` + +Measured volume: + +```bash +ffmpeg \ + -i /tmp/arpg-ffmpeg-smoke.mp4 \ + -af volumedetect \ + -f null - +``` + +Observed output included: + +- video stream: 960x540, 24 fps +- audio stream: 44.1 kHz +- duration: 1.000000 seconds +- mean volume: about `-21.2 dB` +- max volume: about `-17.7 dB` + +## Reference Trailer Analysis Commands + +For local, permitted trailer/gameplay files: + +Metadata: + +```bash +ffprobe -v error \ + -show_entries format=duration,bit_rate:stream=index,codec_type,width,height,r_frame_rate,sample_rate \ + -of json \ + /path/to/reference.mp4 +``` + +One frame every two seconds: + +```bash +mkdir -p /tmp/arpg-reference-frames +ffmpeg -y \ + -i /path/to/reference.mp4 \ + -vf fps=1/2,scale=1280:-2 \ + /tmp/arpg-reference-frames/frame_%03d.png +``` + +Contact sheet from extracted frames: + +```bash +ffmpeg -y \ + -pattern_type glob \ + -i "/tmp/arpg-reference-frames/*.png" \ + -vf "scale=320:-2,tile=4x3" \ + /tmp/arpg-reference-contact-sheet.png +``` + +Audio waveform image: + +```bash +ffmpeg -y \ + -i /path/to/reference.mp4 \ + -filter_complex "aformat=channel_layouts=mono,showwavespic=s=1600x300:colors=cyan" \ + -frames:v 1 \ + /tmp/arpg-reference-waveform.png +``` + +Audio spectrogram image: + +```bash +ffmpeg -y \ + -i /path/to/reference.mp4 \ + -lavfi showspectrumpic=s=1600x900:legend=disabled \ + /tmp/arpg-reference-spectrogram.png +``` + +Volume: + +```bash +ffmpeg \ + -i /path/to/reference.mp4 \ + -af volumedetect \ + -f null - +``` + +## What To Measure For This Game + +For each reference trailer/gameplay clip: + +- first readable hero frame time +- first enemy-threat frame time +- first hit/impact frame time +- first reward/build-choice frame time +- camera distance and character screen-height percentage +- screen center occupancy by character/enemy/VFX vs empty floor +- audio presence in first 3 seconds +- mean/max loudness from `volumedetect` +- waveform density during attacks vs downtime + +For our own capture: + +- reject silent clips for store-facing evidence +- reject clips where the hero is not readable in extracted frames +- reject clips where the first 5 seconds show only floor/idle motion +- always produce a contact sheet and a waveform alongside any video PR + +## Tooling Gaps + +`ffmpeg` is enough for immediate free analysis. Optional later tools: + +- `yt-dlp`: free downloader/metadata extractor for public video URLs, but use + only where source terms and rights permit local analysis. +- Python OpenCV: useful for automated frame statistics, but not required before + we have local video captures and reference files. diff --git a/docs/research/visual-audio-benchmark.md b/docs/research/visual-audio-benchmark.md index 8d8adb4..6735d62 100644 --- a/docs/research/visual-audio-benchmark.md +++ b/docs/research/visual-audio-benchmark.md @@ -28,14 +28,14 @@ Status: research input for PR review. ## First 30 Seconds Storyboard -1. `0-2s`: hero alone on dark readable floor, weapon/identity visible. -2. `2-6s`: diagonal movement, first hit, dodge, enemy death, drop feedback. -3. `6-10s`: first signature skill with a clear shape. -4. `10-15s`: enemies enter from edges; keep a readable player pocket. -5. `15-20s`: medium enemy or mini-boss with size, color, and telegraph. -6. `20-24s`: reward/build choice, three options maximum. -7. `24-28s`: chosen upgrade immediately changes the combat shape. -8. `28-30s`: highest-density frame, then title/CTA. +1. `0-2s`: surveyor lights a thread route on a dark readable floor. +2. `2-6s`: diagonal movement, hidden danger revealed, first dodge and hit. +3. `6-10s`: threadlight tool binds or anchors one route/enemy. +4. `10-15s`: light-moth or knot enemy attacks the route; keep player readable. +5. `15-20s`: medium enemy or mini-boss with bell/banner telegraph. +6. `20-24s`: rescued memory or route seal returns to the caravan. +7. `24-28s`: boss landmark wakes and changes the room rule. +8. `28-30s`: highest-readability combat frame, then title/CTA. ## Audio Direction @@ -43,7 +43,7 @@ Music: - low drone - metal or skin percussion -- short string/guitar/synth motif +- short thread pluck, string, or hammered-loom motif - optional low choir for boss pressure - SFX-forward mix with space in the 2-5 kHz range @@ -53,7 +53,8 @@ Combat SFX: - dodge = short cloth/leather/air burst, 0.2-0.4 seconds - enemy death = short collapse plus soul/ember tail - player death = low drop, breath/heartbeat stop, momentary BGM duck -- reward = rarity-coded stings, not long fanfares +- threadlight route tool = taut pluck + lantern glass click + latch +- reward = memory chime, not long fanfares Minimum audio set: @@ -71,4 +72,3 @@ Minimum audio set: - inconsistent UI fonts, frames, or icon resolution - no knockback, hit stop, death reaction, or reward feedback - 30 seconds of the same enemy, same attack, same floor -