Skip to content

Commit 1ccf0b0

Browse files
committed
docs: update monorepo README and AGENTS for TerrainGen and VibeGame
Document TerrainGen, terrain/LOD-related workflows, and installer notes. Made-with: Cursor
1 parent ae40584 commit 1ccf0b0

3 files changed

Lines changed: 22 additions & 8 deletions

File tree

AGENTS.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -320,15 +320,15 @@ VibeGame has its own CI workflow in `VibeGame/.github/workflows/` (Bun + TypeScr
320320

321321
## Learned Workspace Facts
322322

323-
- Terreno tipo voxel em exemplos VibeGame: amostragem multi-ponto ou suavização costuma ser necessária para alinhar props ao chão; árvores a flutuar/enterrar ligam-se em grande parte a GLB com origem ao centro do mesh — preferir origem na base na pipeline (Text3D/GameAssets), com pivô ao centro só quando fizer sentido para o tipo de asset.
323+
- Terreno em exemplos VibeGame pode parecer voxel/escadinha; amostragem de altura/normal com um único ponto tende a falhar — estratégias multi-amostra ou suavização costumam ser necessárias para alinhar props ao chão. Problemas de árvores a flutuar ou enterrar foram atribuídos em grande parte a pivô/origem do GLB no centro do mesh em vez da base; o utilizador espera que a pipeline Text3D/GameAssets posicione a origem na base por omissão, com pivô ao centro só quando explicitamente adequado ao tipo de asset. No recipe `<Terrain>`, muitos campos do componente `Terrain` são configuráveis por atributos XML em kebab-case (defaults do plugin); `collision-resolution` (32/64/128) é aplicado ao `TerrainLOD`/`three-terrain-lod` sem ser sobrescrito pela `resolution` da malha do chunk.
324324
- O comando `gameassets mesh reorigin-feet` repõe a origem de GLBs estáticos nos pés/base; modelos rigged com animação podem precisar de correção de orientação de root (ex. rotação) antes de centrar o pivô — não aplicar só `reorigin-feet` sem validar o resultado.
325+
- Text3D / Hunyuan3D (marching cubes): saídas costumam ter paredes grossas/duplas e rachas minúsculas; no repair convém merge/manifold e fechar só buracos muito pequenos antes de watertight, para solidificar a caixa sem tratar a abertura grande da base (ex. crate após remover pedestal) como defeito a tapar em bloco.
325326
- O comando `vibegame run` foi concebido para rebuild/atualização da engine face a exemplos que usam `file:vibegame`; em Windows podem ocorrer falhas de cópia/cache (`ENOENT` no pacote `vibegame`) e é preciso alvo/cwd coerente com a raiz da engine ou exemplo com `dev` ligado à engine.
326-
- O modelo HF Flux-LoRA-Equirectangular-v3 devolve imagens em resolução errada (1024×768 em vez do pedido 2048×1024) e com os polos ao centro vertical em vez das bordas; Skymap2D `generator.py` faz auto-resize e shift vertical de 50% para corrigir.
327-
- Equirect e PMREM no Three.js: o `PMREMGenerator` ignora `texture.offset`/`repeat` — ajustar UV no bitmap antes de `fromEquirectangular()`. Convenção: `u = atan(dir.z, dir.x)`, `v = asin(dir.y)`; texturas em retrato ou com eixos trocados podem causar artefactos «pilares» — normalizar para 2:1 em paisagem antes do PMREM quando necessário.
327+
- Skymap2D e equirect/PMREM: o modelo HF Flux-LoRA-Equirectangular-v3 devolve imagens em resolução errada (1024×768 em vez do pedido 2048×1024) e com os polos ao centro vertical em vez das bordas; Skymap2D `generator.py` faz auto-resize e shift vertical de 50% para corrigir. O `PMREMGenerator` do Three.js ignora `texture.offset`/`repeat` no shader interno — para ajustar UV de texturas equirect antes de `fromEquirectangular()` é necessário manipular o bitmap a nível de píxeis (canvas). Convenção equirect Three.js: `u = atan(dir.z, dir.x)`, `v = asin(dir.y)` — centro da imagem = horizonte, topo = zénite, fundo = nadir. Texturas equirect em **retrato** (altura > largura) ou com eixos trocados podem mapear o azimute ao eixo vertical do bitmap e produzir artefactos tipo «pilares» no céu; convém normalizar para panorama 2:1 em paisagem antes do PMREM quando isso ocorrer.
328328
- Dependências de screen-space / pós-processamento (ex. `screen-space-reflections`) podem importar símbolos removidos ou renomeados no Three.js (ex. `WebGLMultipleRenderTargets`), falhando no Vite com «No matching export» até alinhar versões do Three ou substituir o efeito. Em áudio Web, `AudioContext` bloqueado ou `listener.positionX` indisponível costuma ligar-se a autoplay sem gesto do utilizador e/ou à ausência de cadeia válida `AudioListener` + câmera principal.
329329
- O conteúdo sob `<Scene>` no VibeGame é injetado como HTML (`innerHTML`); a tag nativa **`<script>`** não serve para marcar módulos TS do motor — usar atributo `script` nos recipes ou um nome de elemento que não colida com HTML.
330-
- No recipe `<Terrain>`, muitos campos do componente `Terrain` são configuráveis por atributos XML em kebab-case (defaults do plugin); `collision-resolution` (32/64/128) é aplicado ao `TerrainLOD`/`three-terrain-lod` sem ser sobrescrito pela `resolution` da malha do chunk.
331-
- Corpos dinâmicos GLTF no VibeGame podem ter colisor desalinhado do mesh visível se o centro do AABB não coincidir com a origem da entidade; é necessário definir `Collider.posOffset*` a partir do delta AABB→Transform em espaço local.
332-
- No plugin de partículas (`three.quarks`), o simulador usa o emissor interno `ParticleSystem.emitter`; adicionar à cena um wrapper `ParticleEmitter` novo em vez desse nó faz o batch descartar o sistema no update e as partículas deixam de aparecer — integrar com `ps.emitter` diretamente.
330+
- Sem URL de heightmap no terreno, `TerrainLOD` / `@interverse/three-terrain-lod` pode gerar um heightmap procedural internamente; os ficheiros exportados pelo TerrainGen (`terrain.json`, `heightmap.png`, etc.) só têm efeito se o recipe/plugin apontar para eles — atributos XML não suportados podem ser ignorados em silêncio.
331+
- OpenCode (`opencode.json` no repositório): entradas MCP locais devem declarar `type: "local"` e `command` como array de strings com executável e argumentos (não o par `command` + `args` usado noutras ferramentas).
332+
- VibeGame: corpos dinâmicos GLTF podem ter colisor desalinhado do mesh se o centro do AABB não coincidir com a origem da entidade — definir `Collider.posOffset*` a partir do delta AABB→Transform em espaço local. No plugin de partículas (`three.quarks`), usar o emissor interno `ParticleSystem.emitter`; um wrapper `ParticleEmitter` à parte faz o batch descartar o sistema no update e as partículas deixam de aparecer.
333333
- No PyPI, `bpy==5.1.0` exige Python 3.13; o Rigging3D (inferência UniRig) fixa Python 3.11 com `bpy==5.0.1` e `open3d` porque não há combinação estável Open3D + `bpy` 5.1 no mesmo venv. O **Animator3D** usa stack **3.13 + `bpy==5.1.0`** em paralelo — não assumir um único Python/`bpy` para todo o monorepo.
334334
- O **Part3D** expõe quantização do DiT (modo `auto` ou bitsandbytes int8/int4) para reduzir VRAM na fase que mais pesa; `--no-quantize-dit` desliga essa optimização quando se quer precisão máxima.

README.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Monorepo for **text-to-image**, **text-to-3D**, **text-to-audio**, **textures an
2727
| [**Animator3D**](Animator3D/) | **animator3d****bpy** 5.1; Python **3.13**; procedural clips, **`game-pack`** (humanoid/creature/flying presets), GLB export after rigging. |
2828
| [**Materialize**](Materialize/) | **PBR maps** CLI (Rust/wgpu): normal, AO, metallic, smoothness from a diffuse texture. |
2929
| [**GameDevLab**](GameDevLab/) | **Lab CLI**: debug 3D, quantization benches, profiling, pipeline optimization. |
30+
| [**TerrainGen**](TerrainGen/) | **terraingen** — Procedural terrain generation: heightmaps, erosion, rivers, lakes (Python 3.10+). |
3031
| [**VibeGame**](VibeGame/) | **vibegame** — TypeScript 3D engine (ECS, Three.js, declarative XML); **Bun** + **Vite**. See [VibeGame/README.md](VibeGame/README.md). |
3132

3233
Each project has its own `README`, setup, requirements, and license. Portuguese: [`README_PT.md`](README_PT.md) (root) and per-package `README_PT.md` where provided.
@@ -47,6 +48,7 @@ GameDev/
4748
Rigging3D/ ← rigging3d (pip) — Shared; inference Py 3.11 + bpy 5.0.x
4849
Animator3D/ ← animator3d (pip) — Shared; Py 3.13 + bpy 5.1 (animation)
4950
GameDevLab/ ← gamedev-lab (pip) — depends on Shared; debug 3D, benches, profiling
51+
TerrainGen/ ← terraingen (pip) — depends on Shared; procedural terrain generation
5052
Materialize/ ← materialize-cli (cargo) — Python installer uses Shared
5153
VibeGame/ ← vibegame (npm/Bun + Vite) — browser 3D engine; standalone, not pip
5254
```
@@ -96,6 +98,7 @@ The monorepo includes a unified installer for every registered tool:
9698
./install.sh rigging3d # Rigging3D (bundled UniRig + PyTorch/CUDA via installer)
9799
./install.sh animator3d # Animator3D (bpy / animation; no PyTorch)
98100
./install.sh gamedevlab # GameDevLab (debug 3D, benches, profiling)
101+
./install.sh terraingen # TerrainGen (procedural terrain; no GPU)
99102
./install.sh all # Install everything present
100103

101104
# Windows PowerShell (recommended on Windows: script detects `python` and passes it to the installer)
@@ -112,6 +115,7 @@ The monorepo includes a unified installer for every registered tool:
112115
.\install.ps1 rigging3d
113116
.\install.ps1 animator3d
114117
.\install.ps1 gamedevlab
118+
.\install.ps1 terraingen
115119
.\install.ps1 all
116120

117121
# Windows CMD (same: `install.bat` passes the interpreter to the installer)
@@ -183,6 +187,9 @@ cd ../Materialize && ./install.sh
183187

184188
# 13. GameDevLab (debug 3D, benches, profiling; no PyTorch required)
185189
cd ../GameDevLab && python -m venv .venv && source .venv/bin/activate && pip install -e ".[dev]" && gamedev-lab --help
190+
191+
# 14. TerrainGen (procedural terrain; no GPU required)
192+
cd ../TerrainGen && python -m venv .venv && source .venv/bin/activate && pip install -e ".[dev]" && terraingen --help
186193
```
187194

188195
Full instructions: [docs/INSTALLING.md](docs/INSTALLING.md), [docs/NEW_TOOLS.md](docs/NEW_TOOLS.md) (registering new tools), [Shared/README.md](Shared/README.md), and each package README.
@@ -191,7 +198,7 @@ Full instructions: [docs/INSTALLING.md](docs/INSTALLING.md), [docs/NEW_TOOLS.md]
191198

192199
| Component | License | Note |
193200
|-----------|---------|------|
194-
| Monorepo code (Text2D, Text3D, Part3D, Paint3D, Texture2D, Skymap2D, Text2Sound, Rigging3D, Animator3D, GameAssets, GameDevLab, Shared) | MIT | See `LICENSE` in each folder |
201+
| Monorepo code (Text2D, Text3D, Part3D, Paint3D, Texture2D, Skymap2D, Text2Sound, Rigging3D, Animator3D, GameAssets, GameDevLab, TerrainGen, Shared) | MIT | See `LICENSE` in each folder |
195202
| Materialize CLI (Rust) | MIT | [Materialize/LICENSE](Materialize/LICENSE) |
196203
| FLUX.2 Klein 4B (official, BF16) | Apache 2.0 | [black-forest-labs/FLUX.2-klein-4B](https://huggingface.co/black-forest-labs/FLUX.2-klein-4B) — commercial use allowed per model card; more VRAM than SDNQ |
197204
| FLUX.2 Klein 4B SDNQ (Text2D default) | FLUX Non-Commercial (HF metadata) | [Disty0/FLUX.2-klein-4B-SDNQ-4bit-dynamic](https://huggingface.co/Disty0/FLUX.2-klein-4B-SDNQ-4bit-dynamic) declares `flux-non-commercial-license`; **not** the same as the official Apache 2.0 checkpoint. For commercial products prefer `TEXT2D_MODEL_ID=black-forest-labs/FLUX.2-klein-4B` or a BFL agreement |
@@ -216,6 +223,7 @@ The monorepo uses environment variables to locate binaries and configure behavio
216223
| `TEXT2SOUND_BIN` | GameAssets | Path to `text2sound` |
217224
| `MATERIALIZE_BIN` | GameAssets, Text3D | Path to `materialize` |
218225
| `GAMEDEVLAB_BIN` | GameAssets | Path to `gamedev-lab` |
226+
| `TERRAINGEN_BIN` | GameAssets | Path to `terraingen` |
219227
| `TEXT2D_MODEL_ID` | Text2D | HF model override for Text2D |
220228
| `TEXTURE2D_MODEL_ID` | Texture2D | HF model override for Texture2D |
221229
| `SKYMAP2D_MODEL_ID` | Skymap2D | HF model override for Skymap2D |
@@ -254,6 +262,7 @@ make test # Pytest all packages + Cargo test
254262
make test-shared # Pytest Shared only
255263
make test-text2d # Pytest Text2D only
256264
make test-gamedevlab # Pytest GameDevLab only
265+
make test-terraingen # Pytest TerrainGen only
257266
make typecheck # MyPy on Shared/src
258267
make check # lint + fmt-check + typecheck + test (full CI)
259268
make clean # Remove __pycache__, caches, builds

README_PT.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Monorepo com ferramentas de **texto→imagem**, **texto→3D**, **texto→áudio
2727
| [**Animator3D**](Animator3D/) | **animator3d****bpy** 5.1; Python **3.13**; clips procedimentais, **`game-pack`** (presets humanoid/creature/flying), export GLB após rigging. |
2828
| [**Materialize**](Materialize/) | CLI **PBR maps** (Rust/wgpu): gera normal, AO, metallic, smoothness a partir de textura difusa. |
2929
| [**GameDevLab**](GameDevLab/) | **Lab CLI**: debug 3D, bancos de quantização, profiling, otimização de pipeline. |
30+
| [**TerrainGen**](TerrainGen/) | **terraingen** — Geração procedural de terreno: heightmaps, erosão, rios, lagos (Python 3.10+). |
3031
| [**VibeGame**](VibeGame/) | **vibegame** — motor 3D em TypeScript (ECS, Three.js, XML declarativo); **Bun** + **Vite**. Ver [VibeGame/README.md](VibeGame/README.md). |
3132

3233
Cada projeto tem o seu próprio `README`, `setup`, requisitos e licença.
@@ -47,6 +48,7 @@ GameDev/
4748
Rigging3D/ ← rigging3d (pip) — Shared; inferência Py 3.11 + bpy 5.0.x
4849
Animator3D/ ← animator3d (pip) — Shared; Py 3.13 + bpy 5.1 (animação)
4950
GameDevLab/ ← gamedev-lab (pip) — depende de Shared; debug 3D, benches, profiling
51+
TerrainGen/ ← terraingen (pip) — depende de Shared; geração procedural de terreno
5052
Materialize/ ← materialize-cli (cargo) — instalador Python usa Shared
5153
VibeGame/ ← vibegame (npm/Bun + Vite) — motor 3D no browser; standalone, não é pip
5254
```
@@ -95,6 +97,7 @@ O monorepo inclui um instalador unificado que instala qualquer ferramenta regist
9597
./install.sh paint3d # Paint3D (textura + nvdiffrast)
9698
./install.sh rigging3d # Rigging3D (UniRig empacotado + PyTorch/CUDA via instalador)
9799
./install.sh animator3d # Animator3D (bpy / animação; sem PyTorch)
100+
./install.sh terraingen # TerrainGen (terreno procedural; sem GPU)
98101
./install.sh all # Instalar tudo
99102

100103
# Windows PowerShell (recomendado no Windows: o script detecta `python` e passa-o ao instalador)
@@ -110,6 +113,7 @@ O monorepo inclui um instalador unificado que instala qualquer ferramenta regist
110113
.\install.ps1 paint3d
111114
.\install.ps1 rigging3d
112115
.\install.ps1 animator3d
116+
.\install.ps1 terraingen
113117
.\install.ps1 all
114118

115119
# Windows CMD (idem: `install.bat` passa o interpretador ao instalador)
@@ -186,7 +190,7 @@ Instruções completas: [docs/INSTALLING_PT.md](docs/INSTALLING_PT.md), [docs/NE
186190

187191
| Componente | Licença | Nota |
188192
|-----------|---------|------|
189-
| Código do monorepo (Text2D, Text3D, Part3D, Paint3D, Texture2D, Skymap2D, Text2Sound, Rigging3D, Animator3D, GameAssets, Shared) | MIT | Ver `LICENSE` em cada pasta |
193+
| Código do monorepo (Text2D, Text3D, Part3D, Paint3D, Texture2D, Skymap2D, Text2Sound, Rigging3D, Animator3D, GameAssets, GameDevLab, TerrainGen, Shared) | MIT | Ver `LICENSE` em cada pasta |
190194
| Materialize CLI (Rust) | MIT | [Materialize/LICENSE](Materialize/LICENSE) |
191195
| FLUX.2 Klein 4B (oficial, BF16) | Apache 2.0 | [black-forest-labs/FLUX.2-klein-4B](https://huggingface.co/black-forest-labs/FLUX.2-klein-4B) — uso comercial permitido segundo o model card; mais VRAM que o SDNQ |
192196
| FLUX.2 Klein 4B SDNQ (default Text2D) | FLUX Non-Commercial (metadata HF) | [Disty0/FLUX.2-klein-4B-SDNQ-4bit-dynamic](https://huggingface.co/Disty0/FLUX.2-klein-4B-SDNQ-4bit-dynamic) declara `flux-non-commercial-license`; **não** é o mesmo regime que o checkpoint oficial Apache 2.0. Para produto comercial, prefira `TEXT2D_MODEL_ID=black-forest-labs/FLUX.2-klein-4B` ou acordo com a BFL |
@@ -210,6 +214,7 @@ O monorepo usa variáveis de ambiente para localizar binários e configurar comp
210214
| `TEXTURE2D_BIN` | GameAssets | Caminho para o binário `texture2d` |
211215
| `TEXT2SOUND_BIN` | GameAssets | Caminho para o binário `text2sound` |
212216
| `MATERIALIZE_BIN` | GameAssets, Text3D | Caminho para o binário `materialize` |
217+
| `TERRAINGEN_BIN` | GameAssets | Caminho para o binário `terraingen` |
213218
| `TEXT2D_MODEL_ID` | Text2D | Override do modelo HF para Text2D |
214219
| `TEXTURE2D_MODEL_ID` | Texture2D | Override do modelo HF para Texture2D |
215220
| `SKYMAP2D_MODEL_ID` | Skymap2D | Override do modelo HF para Skymap2D |

0 commit comments

Comments
 (0)