update palleta spec
This commit is contained in:
parent
490b1243d8
commit
a9345244e3
@ -407,7 +407,184 @@ Regras:
|
||||
|
||||
---
|
||||
|
||||
## 18. Resumo
|
||||
## 18. Sistema de Paletas
|
||||
|
||||
### 18.1. Visão Geral
|
||||
|
||||
O PROMETEU utiliza **exclusivamente** gráficos indexados por paleta.
|
||||
|
||||
Não existe modo RGB direto por pixel.
|
||||
Todo pixel gráfico é um **índice** que aponta para uma cor real em uma paleta.
|
||||
|
||||
Objetivos:
|
||||
|
||||
- reduzir uso de RAM e storage
|
||||
- permitir troca de cores sem shader
|
||||
- manter identidade retrô
|
||||
- facilitar efeitos como variação, dano, dia/noite
|
||||
|
||||
---
|
||||
|
||||
### 18.2. Formato de Pixel
|
||||
|
||||
Cada pixel de um tile ou sprite é:
|
||||
|
||||
- **4 bits por pixel (4bpp)**
|
||||
- valores: `0..15`
|
||||
|
||||
Regra fixa:
|
||||
|
||||
- Índice `0` = TRANSPARENTE
|
||||
- Índices `1..15` = cores válidas da paleta
|
||||
|
||||
---
|
||||
|
||||
### 18.3. Estrutura de Paletas
|
||||
|
||||
Cada **Tile Bank** contém:
|
||||
|
||||
- Até **256 paletas**
|
||||
- Cada paleta tem:
|
||||
- **16 cores**
|
||||
- cada cor em **RGB565 (u16)**
|
||||
|
||||
Tamanho:
|
||||
|
||||
- 1 paleta = 16 × 2 bytes = **32 bytes**
|
||||
- 256 paletas = **8 KB por bank**
|
||||
- 16 banks = **128 KB máximo de paletas**
|
||||
|
||||
---
|
||||
|
||||
### 18.4. Associação de Paleta
|
||||
|
||||
#### Regra Fundamental
|
||||
|
||||
- Cada **tile** usa **uma única paleta**
|
||||
- Cada **sprite** usa **uma única paleta**
|
||||
- A paleta deve ser informada **explicitamente** em todo draw
|
||||
|
||||
Não existe troca de paleta dentro do mesmo tile ou sprite.
|
||||
|
||||
---
|
||||
|
||||
### 18.5. Onde a Paleta é Definida
|
||||
|
||||
#### Tilemap
|
||||
|
||||
Cada célula do tilemap contém:
|
||||
|
||||
- `tile_id`
|
||||
- `palette_id (u8)`
|
||||
- `flip_x`
|
||||
- `flip_y`
|
||||
|
||||
#### Sprite
|
||||
|
||||
Cada sprite draw contém:
|
||||
|
||||
- `bank_id`
|
||||
- `tile_id`
|
||||
- `palette_id (u8)`
|
||||
- `x`, `y`
|
||||
- `flip_x`, `flip_y`
|
||||
- `priority`
|
||||
|
||||
---
|
||||
|
||||
### 18.6. Resolução de Cor
|
||||
|
||||
O pipeline funciona assim:
|
||||
|
||||
1. Ler pixel indexado do tile (valor 0..15)
|
||||
2. Se índice == 0 → pixel transparente
|
||||
3. Caso contrário:
|
||||
- cor_real = paleta[palette_id][indice]
|
||||
4. Aplicar:
|
||||
- flip
|
||||
- blend discreto
|
||||
- escrita no back buffer
|
||||
|
||||
Ou seja:
|
||||
```
|
||||
pixel_index = tile_pixel(x,y)
|
||||
if pixel_index == 0:
|
||||
skip
|
||||
else:
|
||||
color = bank.palettes[palette_id][pixel_index]
|
||||
draw(color)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 18.7. Organização dos Tile Banks
|
||||
|
||||
Os Tile Banks são “assets fortes”:
|
||||
|
||||
- Tiles e paletas vivem juntos
|
||||
- Exportação/importação sempre leva:
|
||||
- tiles + paletas
|
||||
- O hardware não impõe organização semântica:
|
||||
- o agrupamento é decisão do criador
|
||||
- Tooling e scripts podem criar convenções:
|
||||
- ex.: paletas 0..15 = inimigos
|
||||
- 16..31 = cenário
|
||||
- etc.
|
||||
|
||||
---
|
||||
|
||||
### 18.8. Efeitos Possíveis com Paletas
|
||||
|
||||
Sem shader, é possível:
|
||||
|
||||
- Palette swap:
|
||||
- inimigos com variação de cor
|
||||
- Estados:
|
||||
- dano, gelo, veneno, power-up
|
||||
- Dia / noite:
|
||||
- trocar paletas globalmente
|
||||
- Biomas:
|
||||
- mesma arte, clima diferente
|
||||
- UI themes
|
||||
|
||||
Tudo isso sem mudar os tiles.
|
||||
|
||||
---
|
||||
|
||||
### 18.9. Limitações Artísticas
|
||||
|
||||
- Cada tile/sprite:
|
||||
|
||||
- máximo de 16 cores
|
||||
|
||||
- Gradientes suaves exigem:
|
||||
|
||||
- dithering
|
||||
- blend discreto
|
||||
- glow/emission
|
||||
|
||||
Essa limitação é intencional e faz parte da identidade do PROMETEU.
|
||||
|
||||
---
|
||||
|
||||
### 18.10. Métricas para Certificação (CAP)
|
||||
|
||||
O sistema pode medir:
|
||||
|
||||
- `palettes_loaded_total`
|
||||
- `palettes_referenced_this_frame`
|
||||
- `tiles_drawn_by_palette_id`
|
||||
- `sprites_drawn_by_palette_id`
|
||||
|
||||
Isso permite:
|
||||
|
||||
- analisar custo artístico
|
||||
- ensinar impacto de variedade excessiva
|
||||
- sugerir boas práticas de coesão visual
|
||||
|
||||
---
|
||||
|
||||
## 19. Resumo
|
||||
|
||||
O GFX do PROMETEU é simples **por escolha**, não por limitação.
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user