Como criar um portal de alta qualidade e efeito rápido?

9

EDIT: Então, consegui que o efeito visual do portal funcionasse sem problemas de desempenho, e tenho a física configurada de objetos com corpos rígidos movendo-se através de portais sem interrupções e objetos com controladores de caracteres movendo-os sem interrupções. A única coisa que estou tentando descobrir agora é misturar duas visualizações da câmera para obter o efeito de transição adequado na primeira pessoa. Alguma idéia de como eu misturaria esses dois? Estou pensando em algo usando um shader somente de profundidade ou a janela de visualização normalizada rect. Meu principal problema é calcular isso em tempo real e com ângulos.

Então, eu tenho trabalhado na criação de um efeito de portal no Unity3D. Obviamente, tomei o Portal da Valve como uma grande influência para programar isso. Atualmente, estou simplesmente usando a textura de renderização de uma câmera para obter o efeito gráfico e, em seguida, algum código para fazer o resto. O problema é 2048x2048 e tem a mesma qualidade do Portal, mas causa uma grande perda de FPS. Para resolver isso, eu teria que diminuir a qualidade da textura ou o número de vezes que atualizo a textura.

A válvula obteve um efeito de portal de alta qualidade sem causar alta perda de taxa de quadros. Como posso fazer o mesmo? Alguém tem alguma boa idéia para renderizar em uma textura de alta resolução sem causar perda de quadro?

Estou pensando em criar meu próprio código para renderizar texturas, em vez de usar o sistema interno do Unity, é factível, mas definitivamente seria um aborrecimento. Portanto, quaisquer pensamentos, idéias ou sugestões são muito apreciados.

Timothy Williams
fonte
3
Não consigo encontrar a referência, mas lembro-me de alguém dizendo que o Portal não usou renderizar para texturizar isso.
msell
11
Dê uma olhada no Pseudo Form , um jogo semelhante ao Portal (a fonte está no download principal). Também existem outras "implementações de portal" na Web, mas acho que essa é a mais conhecida. Além disso, jogue o Portal com os comentários do desenvolvedor. Em alguns deles, eles falam sobre os desafios da implementação dos portais.
Vasco Correia
7
Não consigo entender por que você precisaria de uma textura de 2028x2048 para fazer com que um portal renderizado a menos de 1080p parecesse nítido. Você definitivamente não precisa ir acima da resolução de tela que está usando no seu jogo em geral. Eu diria que você deve descobrir o tamanho do portal na tela e usá-lo para selecionar uma textura de renderização de tamanho apropriado (tornando-o muito eficiente quando está longe e "mais pesado" à medida que o portal fica com mais tela -espaço.
Stig-Rune Skansgård
11
Para o efeito visual, que abordagem você adotou? Você descobriu como renderizar apenas o que era visível através do portal?
Jhocking
11
Você deve manter a pergunta original como estava e fazer uma nova pergunta sobre o novo problema.
msell

Respostas:

5

Após horas de pesquisa e programação, descobri como obter o efeito visual adequado para isso. Se você deseja apenas comprar um sistema de portal que funcione para recursos visuais e quase tudo o que você precisa, confira o Pacote do Portalizer Unity.

Eu programa em C # e esse pacote está em JS, mas a lógica por trás disso é incrivelmente útil e bem pensada. Em geral, segui seu pensamento lógico, com alguns ajustes para o meu jogo e um controle em primeira pessoa.

Essencialmente, o que você faz é usar uma versão modificada deste script / shader de água. Tenha dois espelhos na cena e uma câmera renderize o que vê em cada reflexo no outro espelho. Você precisará criar uma matriz de transformação modificada para dar conta das relações entre os dois portais. Para ajudar a diminuir o impacto no desempenho, leia Este artigo sobre o recorte próximo ao plano. Isso o ajudará a renderizar apenas o que precisa ser visto através do portal.

Eu posso criar um tutorial mais detalhado com fotos e fontes assim que descobrir como misturar as câmeras corretamente para um teleporte de FPS. No momento, estou exausto e ocupado para escrever um tutorial completo, e isso deve ser suficiente, pois fornece a maior parte do código necessário.

Timothy Williams
fonte
Você poderia postar um link para o repositório?
Roma Fedor