Aprendendo a fazer impostores manualmente no Unity - como renderizar um objeto em uma textura e não o que a câmera vê?

8

Estou tentando aprender a maneira mais eficiente de criar um impostor no Unity manualmente - sem usar soluções pré-fabricadas.

Meu primeiro palpite é que isso deve ser alcançado usando RenderTexture e uma segunda câmera e, em seguida, tirando diferentes "instantâneos" de diferentes ângulos do objeto. Se houver alternativas melhores em termos de desempenho (mesmo que sejam mais difíceis de implementar), eu adoraria ouvir.

Caso esse seja o único caminho, aprendi como renderizar de uma câmera para uma textura via script, mas ainda não consegui descobrir como fazer o seguinte, que é o que preciso fazer primeiro: como renderizar -com textura de um objeto específico sem o fundo da câmera (isto é, com o restante da textura sendo transparente) de maneira eficiente?

Ponteiros, sugestões ou pelo menos recomendação de links serão ótimos.

Desde já, obrigado.

AndraSol
fonte
Reduza sua postagem para uma única pergunta. Você pode criar 2 postagens de perguntas diferentes para suas duas perguntas.
Vaillancourt
@AlexandreVaillancourt Sem problemas! Eu fiz. Deixe-me saber se ele ainda precisa de melhorias adicionais
AndraSol 4/16
Você também não pode pedir 'links' como respostas que fornecem apenas links não são considerados boa resposta para este site, caso contrário, sua pergunta é bem :)
Vaillancourt
@AlexandreVaillancourt Thanks! Mas acho que boas recomendações de links podem vir por meio de comentários, estou correto?
AndraSol
Algo assim, sim. Uma resposta pode ser bem escrita e ter links para mais detalhes. Uma resposta que contém apenas links será removida. Os comentários não estão sujeitos a essas regras.
Vaillancourt

Respostas:

3

Há uma variedade de técnicas diferentes de impostores.

O nível de detalhe é provavelmente o mais fácil de alcançar, mas tem duas desvantagens principais. O notável efeito 'pop' quando você alterna entre modelos de baixa e alta resolução, resolvido por transições graduais entre LODs. O segundo problema é que é muito mais trabalhoso para o artista gerar LODs para cada modelo. Há uma palestra da GDC sobre uma maneira automatizada de gerar LODS - "Geração automatizada de nível de detalhe para HALO: REACH"

Uma técnica mais simples seria o outdoor, onde você usa apenas um polígono plano, em vez de uma malha de baixa resolução. Esse polígono está voltado para a câmera e é texturizado a partir de uma renderização do seu modelo. Este método requer ter várias visões diferentes do seu objeto, assim como os inimigos em ruínas. Você pode pré-renderizar todas as suas visualizações para um atlas de textura. Os jogos modernos usam essa abordagem, como Far Cry 3 https://www.youtube.com/watch?v=9P3EI17kHaI

Você também pode ter vários outdoors estáticos diferentes e combiná-los como neste pacote da unidade https://forum.unity3d.com/threads/abi-automatic-3d-billboard-imposters-released.204579/

Mas a melhor maneira (que eu acho que você deseja) é renderizar dinamicamente seus outdoors, como neste artigo do gamasutra. http://www.gamasutra.com/view/feature/130911/dynamic_2d_imposters_a_simple_.php Isso foi feito pela primeira vez pelo Jurrassic Park: Trespasser em 1998, portanto não é uma técnica nova. Confira a revisão de código aqui http://fabiensanglard.net/trespasser/index.php Role para baixo até a seção wavelets para ver seus impostores.

Exceto a abordagem LOD padrão, seu primeiro passo provavelmente seria encontrar um tutorial de textura de renderização. A orientação da câmera renderTexture deve ser a mesma da câmera principal, mas cortada em torno do gameObject para garantir a eficácia. Você precisará isolar os gameObject (s) que deseja renderizar com uma máscara de seleção. E defina as sinalizações claras da câmera para obter um fundo transparente. Em seguida, renderize um cartaz impostor no lugar do objeto original.

Reuben Crimp
fonte