Criando arte 3d para o Nintendo DS – Especificações Técnicas
Quando eu tava preparando meu portfolio pre enviar pra Ubisoft ano passado resolvi que seria uma boa idéia pesquisar sobre o hardware do DS, já que o Bertrand disse na entrevista para o UOL que o primeiro jogo do estúdio seria para o DS. Foi meio dificil encontrar informações precisas na época, a maioria era desencontrada e bizarra. Como a maior parte do pessoal que mexe com homebrew e corre atrás dessas informações é programador a parte sobre arte era bem resumida.
Antes de tudo, eu acho extremamente importante para quem deseja trabalhar como game artist profissionalmente entender muito bem o lado técnico das coisas. Não basta saber modelar ou texturizar, tem de conhecer as limitações do hardware também. Afinal seus assets ou levels deve funcionar corretamente dentro do jogo. Vejo muita gente hoje em dia falando que é environment artist sendo que no portfolio só tem render de Vray. Mas deixemos essa discussão pra depois. Vamos ao que interessa, o Nintendo DS!
Atenção: Este artigo não contém informações confidenciais. Tudo que está descrito aqui foi obtido através de pesquisa na própria internet, em sites como wikipedia e sites de entusiastas.
Dois CPUs? Como assim?
Como vocês devem saber o DS possui dois CPUs: O ARM9, que trabalha com a engine 3d e o ARM7, que trabalha com duas engines 2d. Basicamente quando a Nintendo projetou o DS, eles turbinaram o CPU do Gameboy Advance (o ARM7) e adicionaram um segundo CPU, capaz de renderizar gráficos 3D. Não vou entrar em detalhes tão técnicos sobre essa parte, mas o que você precisa entender é que esses CPUs podem ser utilizadas de várias maneiras, depende da natureza do projeto. Eles também não são atados à nenhuma tela. Você pode setar a tela de cima pra usar a engine 3d e a de baixo pra usar uma engine 2d (ou vice-versa), ou ainda setar as duas para utilizar 3d. Porém se fizer isso o FPS cai pela metade (30) e os recursos ficam partilhados entre as telas. Num jogo de ação isso fica ináceitavel. Mais explicações sobre dual 3d abaixo.
Só pra constar, a tela do DS tem 256 pixels de largura por 192 pixels de altura.
A Engine 3d: Características
A Engine 3d do DS é capaz de: Transforming, Clipping e Lighting (TCL), mapeamento de texturas, alpha blending, cel shading, edge marking (desenha uma linha na silhueta dos meshes), distance fog e z-buffering. O problema dos gráficos 3d dele não serem tão bonitos está no fato do DS não possuir um texture filtering decente (ele usa nearest neighbor pra quem se interessar). Isso significa que quando o número de texels da textura não batem com o número de pixels que ela ocupa na tela artefatos vão aparecer. Quando a quantidade de texels é maior que a de pixels isso não é tão problemático, mas quando é o contrário a textura já começa a ficar serrilhada e bem feia. Trocando em miúdos: Se a sua textura tem 64 pixels de altura é ideal que ela também ocupe 64 pixels de altura na tela. Em um jogo 3d é impossível deixar tudo pixel perfect mas com um pouco de paciência e tato dá pra aproximar bem.
O limite de polígonos visíveis por vez é de 2048. Um erro cometido por quem não conhece o sistema é de achar que toda a cena deve ter no máximo 2048 triângulos. Não é verdade. O DS é capaz de renderizar quads, desde que todos os vértices da face sejam coplanares. Porém o limite de poligonos em quads cai para algo em torno de 1.500 por tela. Outro detalhe importante (e que quase ninguém sabe) é que o DS possui backface culling. No 3d studio max quando estiver trabalhando em seu modelo, colapse tudo, vá no sub-object face, ligue “ignore backfacing” e faça uma seleção que ocupe toda a tela. Se você tiver as estatísticas ligadas ele vai mostrar quantas faces estão visíveis naquele ângulo de câmera no momento. Um limite comum para personagens é de 200/300 poligonos. Pode até ser um pouco mais se for o personagem principal e ocupar boa parte da tela.
Iluminação
A iluminação no DS é bem básica, por vértice. Para os level artists que estão lendo: é legal aprender vertex painting e vertex baking, se você não conhece.
Texturas e Bancos de VRam
A engine 3d tem um limite de até 512kb para texturas. Para tudo. Cenário, personagem, HUD, menu, qualquer coisa. Geralmente todas essas texturas são carregadas quando o level é carregado, então é bom prestar bastante atenção nisso e não abusar. Se o seu jogo utilizar dual 3d o limite cai para 256 kb para as DUAS telas simultaneamente. Isso ocorre pois o DS tem de ocupar um dos bancos de VRam (memória de video) para renderizar a segunda tela. É como se ele tirasse uma screenshot da segunda tela, armazenasse num dos bancos e enviasse a mesma para a outra tela. Isso também explica o fato dos FPS cairem pela metade.
Formatos: As texturas no DS geralmente são palhetizadas em 4, 16 ou 256 cores. Existem outros modos mas não vou abordar porque não são práticos e quase nunca usados. Para palhetizar uma textura no Photoshop, vá no menu Mode – Indexed. Utilize “local” no Palette, “none” no forced e coloque o número de cores desejado. Saiba que se você utilizar entre 16 e 256 cores, no DS contará como uma palheta de 256 portanto preste bastante atenção nisso. Salve suas texturas como .bmp para evitar aborrecimentos.
O DS também suporta compressão de texturas, mas ela é um pouco bizarra e não vou abordar em detalhes aqui. Resumindo: pra esse modo funcionar as palhetas deverão ser compartilhadas ao máximo entre as texturas, o que pode até ser bom dependendo da direção de arte. Podem aparecer alguns artefatos nas texturas também devido à compressão. Tenho a impressão que o Metroid Prime Hunters usa bastante esse recurso.
Transparência
Existem duas maneiras de se fazer transparência no DS: Através de alpha maps ou texturas “non-zero”.
Alpha Maps: É arriscado usar alpha maps no DS. A engine 3d (a única que suporta) tem problemas com z-buffering, o que significa que se existirem 2 alphas se sobrepondo na tela ela não sabe direito qual renderizar primeiro, o que pode levar a erros de renderização e artefatos. Para utilizar alphas você deve salvar um bitmap separado para ele, em tons de cinza onde o preto é totalmente trasparente e branco é opaco, assim como máscaras de photoshop. Você também deverá palhetizar essas duas texturas de uma forma diferente: Uma deve ter 8 cores e a outra 32. Cabe ao artista avaliar qual textura merece mais cores e qual merece mais níveis de transparência.
Non-Zero: Bem mais leve que alpha maps. O que ele faz é pegar a primeira cor da palheta (não importa se é de 4, 16 ou 256 cores) e transformar em transparente. Geralmente utilizamos a cor 255 0 255 (magenta puro) pois raramente alguma textura usará essa cor. No Photoshop na hora de palhetizar sua textura coloque “custom” em Forced e adicione essa cor na primeira posição da palheta. Na hora de gerar a palheta ele vai colocar o magenta na primeira posição. Com esse modo você não terá problemas com o z-buffer. Todas as florestas do Call of Duty: World at War (versão DS claro) foram feitas com esse método.
Animação
Animação não é minha praia mas sei o DS suporta os seguintes modos: Animação com bones (no máximo 2 vertices por bone), Morphing (interpolação de vértices) e Animação Modular (Num modelo de personagem por exemplo cada membro é um mesh separado, o Dragon Ball Origins usa isso).
Vizualizando seu modelo 3d no DS!
Sim, existe como vizualizar seus modelos no DS sem saber programar ou possuir o Dev-Kit oficial. Basta ter um flashcard (como o R4) e esse aplicativo home brew pra carregar modelos dentro do próprio DS. Ele trabalha com .obj e .bmp. Ótimo pra testar os modelos no próprio DS e ir pegando as manhas e vendo o que fica bom e o que não fica. O link para o aplicativo e instruções estão aqui.
Bons Jogos 3d no DS
Alguns jogos que julgo utilizarem muito bem os recursos 3d do DS. Estude esses jogos e você aprenderá uma coisa ou outra:
- Nanostray 2 (O jogo 3d mais bonito do DS na minha opinião)
- Zelda: Phantom Hourglass (Utiliza muito bem os recursos do DS, como cel shading e edge marking)
- Mario 64 DS (Eles refizeram as texturas originais, estão muito mais bonitas)
- Call of Duty: World at War (Cenários 3d impressionantes)
- Pokémon Platinum (Cenários 3d low poly bem charmosos, conseguiram fazer muito bem a transição do 2d pra 3d)
- Tony Hawk: Proving Grounds (O mesmo que o de cima)
- Metroid Prime Hunters (Utiliza compressão nas texturas. As texturas são quase todas cinzas e as cores são dadas através da iluminação no cenário)
É isso… se alguma coisa ficou confusa pergutem ai nos comentários!
Atualizado em: 06/05/09
Muito bacana até mesmo para programadores saberem alguns dos recursos e limitações do Nintendo DS.
Excelente artigo.
‘Demais Thiago, mandou super bem no artigo, muito interessante e informativo! valeu !
Boa minão! Nunca tinha lido algo do gênero para o DS.
Fergonez~~
Muito bom, mas se botasse umas ilustrações ficaria melhor ainda! hehe
Você fez faculdade ou algum curso? Queria trabalhar no mesmo ramo, mas não tenho idéia do que fazer quando terminar o ensino médio.
Anyway, ótimo artigo.
E ai Gabriel: Não sei se ilustrações ajudariam ali, o artigo é pra ser bem técnico mesmo… serve mais como um guia de referência rápida do que um how-to =)
E sobre cursos: Nunca fiz curso de game dev não (fazia faculdade de Design mas abandonei). Na verdade acho cursos de game dev um pouco desnecessários, considerando que você pode ter o mesmo conteúdo e com muito mais qualidade de graça na internet, basta ter muita paciência, revirar o google e criar seus próprios mods/games em casa =)
Mas se você realmente estiver afim de fazer um curso de game dev recomendo começar a fazer seus próprios jogos em casa antes, pra ver se é isso mesmo que você quer. É meio foda entrar num curso caro desses não sabendo nada, você vai aproveitar bem menos o conteúdo. E descubra a área que mais te agrada (level design, arte, programação, game design etc) e foque nela. Esses cursos tendem a ser bem generalistas mas você deve ser especialista em uma área pelo menos para ter chances reais.
Se quiser saber o que as empresas procuram pra determinadas funções basta entrar no site delas e ir na seção jobs. Geralmente eles colocam o que é esperado do candidato, quais habilidades o cara deve ter, quais softwares etc…
Vitor, Rafel, Fergonez: Valeu boys!
Ótimo artigo, parabéns!
Seria muito legal também ter um artigo sobre a especificação técnica pensando na programação de um jogo para o DS.
Até mais!
E ai Bruno
Então, esse blog é sobre level design e arte para games… artigos sobre programação pro DS existem ao monte na rede. Alguns que eu tinha salvo aqui nos favoritos:
http://www.double.co.nz/nintendo_ds/
http://dev-scene.com/NDS/Tutorials
http://www.dspassme.com/programmers_guide/tutorial/
http://www.dcemu.co.uk/vbulletin/showthread.php?t=37928
abç
parabens pelo artigo!!
vc conhece algo parecido para o psp?
E ai Eduardo
Nao conheço muito bem as especificações do PSP mas achei isso no Polycount:
Sony PSP
suggested polygon count for performance (total visible): 50,000
texture memory (per screen): 2mb
max texture size: 128px x 128px ?
screen colour depth: 16-bit (65,536 colours)
3d data format: ? (probably custom export)
texture format: ? (safe to assume TGA)
alpha blending: 8-bit (256 colours)
http://boards.polycount.net/showthread.php?t=40563
abç
Excelente tópico, meus parabéns!
Ainda acho que um dos jogos que fizeram melhor uso do hardware do DS é o Zelda: The Phantom Hourglass, levando o DS ao limite sem “estragar” o desempenho do jogo.
É engraçado, parece que a maioria dos jogos que são referência de qualidade para o DS são os que foram lançados há anos atrás.
Parabéns pelo blog rapaz, vou acompanhar suas postagens
@eduardo
Olá, tenho uma dica de onde você pode procurar ou pedir informações sobre o PSP. Alguns alunos da Unicsul desenvolveram um framework para PSP, aqui está o link para o site de um deles: http://www.neyestrabelli.com/blog/
Site do framework: http://pspframework.sourceforge.net/wordpress/
Até
Valeu pela dica Régis, deixo o link registrado para o interessados!
E bora marcar outra cervejada MIB
abração
Tudo bem Thiago?!?!
Gostaria, se possivel uma orientação sua.eu não entendo nada sobre
Tudo bem Thiago?!?!
Gostaria, se possivel é claro, uma orientação sua.Eu não entendo nada ART 3D,mas tenho uma ideia, que a tempos vem martelando em minha mente, que nem sei por onde começar;pois estive lendo suas materias, que por sinal muito objetiva e interessante e resolvi falar contigo.Estive brincando com um jogo(NEED FOR SPEED UNDERGROUND 2)e achei demais os graficos dele,foi ai que surgiu a ideia de criar um jogo semelhante, mais com outro tipo de trajeto e historia tambem, que no meu ver poderia ser um sucesso.Mas a pergunta é, existe empresa interessada nesse tipo de ideia,é importante patentea-la, a quem eu devo procurar um primeiro lugar ou alguem quem possa me orientar melhor.
Obrigado e sucesso….Parabens!!!
Ola Laercio.
Cara, não precisa se preocupar muito com patente nem com ninguem roubando sua idéia, isso é paranóia =) Idéias são apenas idéias e até que sejam colocadas em práticas não tem muito valor. Mas se você realmente acha que alguem poderia roubar sua idéia, trabalhe no projeto sozinho ou com uma equipe fechada e libere apenas as informações que você julgar necessárias. Mas a menos que você for comercializar o projeto (o que é extremamente dificil) você não deve se preocupar com esses assuntos legais. Preocupe-se apenas em fazer algo que você gosta e que te diverte. Veja isso como um hobby.
Sobre como começar: primeiro você deve escolher um software 3d, de preferencia o Max (o que eu uso e recomendo) ou o Maya (é tão poderoso quanto o max). Depois é só ir lendo tutoriais, praticando e pesquisando até você atingir um nivel de conhecimento minimo para poder dar inicio ao seu projeto. Depois de saber modelar, texturizar e iluminar seus modelos é hora de pesquisar e descobrir qual engine usar para o seu projeto.
Espero ter ajudado, abçs!
Valeu….Ajudou bastante!!!
abs