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.
|
O GFX do PROMETEU é simples **por escolha**, não por limitação.
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user