v3.0.0
O Turian 3.0.0 muda a forma como um mesh renderer vincula materiais: por
slot de material, não por índice de submesh. Um mesh renderer agora
desenha materials[submesh.material_slot], de modo que um modelo com
milhares de submeshes compartilhando um punhado de materiais precisa apenas
desse punhado de slots. É isso que permite que uma cena inteira achatada em
uma única mesh — centenas de materiais — seja renderizada por completo em
vez de parar nos primeiros 32.
O que mudou
MeshRendererComponent— o arraymaterialsagora é indexado pelo slot de material (Submesh.material_slot), não pelo índice da submesh. Tanto o renderizador de GPU quanto o de software consultammaterials[submesh.material_slot].- Limite de materiais — o limite por renderer subiu de 32 para
160 (
MAX_MATERIALS). Meshes com mais de 32 materiais agora vinculam e renderizam todos eles. - Submeshes de GPU — não são mais limitadas a 32; todas as submeshes de uma mesh são desenhadas a cada frame.
- Arquivos de cena —
material_guidsagora são armazenados por slot de material (antes eram por submesh). O campoversionda cena sobe de1para2. - O formato de mesh compilado (TMSH) não mudou — nenhum recook é necessário. Apenas o formato de cena/componente mudou.
Quem é afetado
Qualquer projeto com cenas que atribuem materiais a modelos multi-material,
e qualquer código de jogo que lê ou escreve
MeshRendererComponent.materials / material_count assumindo a antiga
vinculação posicional (por submesh).
Passos de atualização
1. Atualize para 3.0.0
Baixe o SDK 3.0.0. Os SDKs são autocontidos, então você pode manter o SDK 2.x instalado lado a lado enquanto migra (veja a política de releases).
2. Migre os arquivos de cena
Cenas antigas continuam carregando — as vinculações de materiais de uma
cena v1 são reconstruídas em memória e um aviso é registrado. Para
persistir a conversão em todo o projeto de uma só vez, execute o migrador
em um projeto cujos assets já tenham sido importados pelo menos uma vez
(abri-lo no Studio, ou turian-cli import, faz isso — o migrador precisa
do artefato compilado de cada modelo para reconstruir os materiais por
slot):
turian-cli migrate path/to/project
O comando varre todas as cenas, reescreve as que ainda estão no formato antigo, e reporta o que foi alterado. Faça commit do diff resultante. (Abrir uma cena no Studio já a migra ao carregar e a marca como suja, então salvá-la também a persiste — o CLI é apenas a versão em lote.)
Substituições manuais por submesh são resetadas. O formato 2.x por submesh não pode ser mapeado para slots de material sem ambiguidade, então a migração reconstrói a tabela de cada renderer de modelo a partir dos slots padrão do modelo e registra um aviso. Se você havia atribuído manualmente um material não padrão a uma submesh específica, reatribua-o por slot no Inspector após migrar. Projetos que usaram os materiais atribuídos automaticamente (o caso comum) não precisam de nenhuma ação adicional.
3. Atualize o código do jogo
Se seu código atribuía ou lia materiais do renderer por índice de submesh:
// 2.x — materials[i] vinculado à submesh i
renderer.materials[submesh_index] = my_material_ref;
// 3.0.0 — materials[slot] vinculado pelo material_slot da submesh
renderer.materials[material_slot] = my_material_ref;
renderer.material_count = slot_count; // número de slots de material únicos
Meshes com um único material não são afetadas: materials[0] ainda se
aplica à mesh inteira (uma mesh sem tabela de submesh desenha inteiramente
com o slot 0). Um slot não definido ou fora do intervalo recorre ao
material padrão. O Inspector agora mostra uma linha por slot de material.
4. Verifique modelos grandes / achatados
Modelos com mais de 32 submeshes ou materiais eram cortados pelo 2.x — apenas as primeiras 32 submeshes eram desenhadas. Após migrar, eles renderizam por completo: espere que geometria antes ausente apareça, cada superfície com seu próprio material de slot.
Não faça downgrade depois
Cenas salvas pelo 3.0.0 armazenam material_guids por slot e
version: 2; o 2.x lê essas entradas como se fossem por submesh e vincula
os materiais errados. Migre um projeto uma vez, apenas para frente; se
precisar experimentar antes, faça isso em uma branch.