You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: AGENTS.md
+6-6Lines changed: 6 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -320,15 +320,15 @@ VibeGame has its own CI workflow in `VibeGame/.github/workflows/` (Bun + TypeScr
320
320
321
321
## Learned Workspace Facts
322
322
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.
324
324
- 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.
325
326
- 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.
328
328
- 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.
329
329
- 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.
333
333
- 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.
334
334
- 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.
|[**VibeGame**](VibeGame/)|**vibegame** — TypeScript 3D engine (ECS, Three.js, declarative XML); **Bun** + **Vite**. See [VibeGame/README.md](VibeGame/README.md). |
31
32
32
33
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.
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]
191
198
192
199
| Component | License | Note |
193
200
|-----------|---------|------|
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 |
195
202
| Materialize CLI (Rust) | MIT |[Materialize/LICENSE](Materialize/LICENSE)|
196
203
| 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 |
197
204
| 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
216
223
|`TEXT2SOUND_BIN`| GameAssets | Path to `text2sound`|
217
224
|`MATERIALIZE_BIN`| GameAssets, Text3D | Path to `materialize`|
218
225
|`GAMEDEVLAB_BIN`| GameAssets | Path to `gamedev-lab`|
226
+
|`TERRAINGEN_BIN`| GameAssets | Path to `terraingen`|
219
227
|`TEXT2D_MODEL_ID`| Text2D | HF model override for Text2D |
220
228
|`TEXTURE2D_MODEL_ID`| Texture2D | HF model override for Texture2D |
221
229
|`SKYMAP2D_MODEL_ID`| Skymap2D | HF model override for Skymap2D |
@@ -254,6 +262,7 @@ make test # Pytest all packages + Cargo test
254
262
make test-shared # Pytest Shared only
255
263
make test-text2d # Pytest Text2D only
256
264
make test-gamedevlab # Pytest GameDevLab only
265
+
make test-terraingen # Pytest TerrainGen only
257
266
make typecheck # MyPy on Shared/src
258
267
make check # lint + fmt-check + typecheck + test (full CI)
|[**VibeGame**](VibeGame/)|**vibegame** — motor 3D em TypeScript (ECS, Three.js, XML declarativo); **Bun** + **Vite**. Ver [VibeGame/README.md](VibeGame/README.md). |
31
32
32
33
Cada projeto tem o seu próprio `README`, `setup`, requisitos e licença.
| 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 |
190
194
| Materialize CLI (Rust) | MIT |[Materialize/LICENSE](Materialize/LICENSE)|
191
195
| 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 |
192
196
| 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
210
214
|`TEXTURE2D_BIN`| GameAssets | Caminho para o binário `texture2d`|
211
215
|`TEXT2SOUND_BIN`| GameAssets | Caminho para o binário `text2sound`|
212
216
|`MATERIALIZE_BIN`| GameAssets, Text3D | Caminho para o binário `materialize`|
217
+
|`TERRAINGEN_BIN`| GameAssets | Caminho para o binário `terraingen`|
213
218
|`TEXT2D_MODEL_ID`| Text2D | Override do modelo HF para Text2D |
214
219
|`TEXTURE2D_MODEL_ID`| Texture2D | Override do modelo HF para Texture2D |
215
220
|`SKYMAP2D_MODEL_ID`| Skymap2D | Override do modelo HF para Skymap2D |
0 commit comments