¿Cómo crear un efecto de portal rápido y de alta calidad?

9

EDITAR: Así que conseguí que el efecto visual del portal funcionara sin ningún impacto en el rendimiento, y tengo la configuración física de objetos con cuerpos rígidos que se mueven a través de portales sin problemas, y objetos con controladores de personajes que se mueven a través de ellos sin problemas. Lo único que estoy tratando de resolver ahora es combinar dos vistas de cámara para obtener el efecto de transición en primera persona adecuado. ¿Alguna idea sobre cómo combinaría esos dos? Estoy pensando en algo usando un sombreador de profundidad solamente, o el rectificador de ventana normalizado. Mi principal problema es calcular eso en tiempo real y con ángulos.

Así que he estado trabajando para crear un efecto de portal en Unity3D. Obviamente, he tomado el Portal de Valve como una gran influencia para programar esto. Actualmente, simplemente estoy usando el rendertexture de una cámara para obtener el efecto gráfico, y luego algo de código para hacer el resto. El problema está en 2048x2048, parece tan de alta calidad como el de Portal, pero causa una gran pérdida de FPS. Para resolver esto, tendría que reducir la calidad de la textura o la cantidad de veces que actualizo la textura.

Valve ha logrado un efecto de portal de alta calidad sin causar una gran pérdida de velocidad de cuadros. ¿Cómo puedo hacer lo mismo? ¿Alguien tiene alguna buena idea para renderizar a una textura de alta resolución sin causar pérdida de fotogramas?

Estoy considerando hacer mi propio código para renderizar a texturas en lugar de usar el sistema incorporado de Unity, es factible pero definitivamente sería una molestia. Por lo tanto, cualquier idea, idea o sugerencia es muy apreciada.

Timothy Williams
fuente
3
No puedo encontrar la referencia, pero recuerdo que alguien dijo que Portal no usaba renderizar para texturizar eso.
msell
1
Echa un vistazo a Pseudo Form , un juego de portal-esque (la fuente está en la descarga principal). También hay otras "implementaciones de portal" en la web, pero creo que esta es la más conocida. Además, juegue Portal con los comentarios de los desarrolladores. En algunos de ellos, hablan sobre los desafíos de implementar los portales.
Vasco Correia
77
No puedo entender por qué necesitarías una textura de 2028x2048 para hacer que un portal renderizado a menos de 1080p se vea nítido. Definitivamente no deberías superar la resolución de pantalla que estás utilizando para tu juego en general. Llegaría al extremo de decir que debe calcular el tamaño en pantalla del portal y usarlo para seleccionar una textura de rende del tamaño apropiado (lo que lo hace muy eficiente cuando está lejos y "más pesado" a medida que el portal obtiene más pantalla) -espacio.
Stig-Rune Skansgård
1
Para el efecto visual, ¿qué enfoque tomaste? ¿Has descubierto cómo representar solo lo que era visible a través del portal?
jhocking
1
Debe mantener la pregunta original como estaba y hacer una nueva pregunta sobre el nuevo problema.
msell

Respuestas:

5

Después de horas de investigación y programación, descubrí cómo obtener adecuadamente el efecto visual de esto. Si desea comprar un sistema de portal que funcione para imágenes y la mayoría de todo lo que necesita, consulte el Paquete Portalizer Unity.

Programa en C # y ese paquete está en JS, pero la lógica detrás de esto es increíblemente útil y bien pensada. En general seguí su pensamiento lógico, con algunos ajustes para mi juego y un controlador en primera persona.

Esencialmente, lo que debe hacer es utilizar una versión modificada de Este sombreador de agua / script. Tenga dos espejos en la escena y haga que una cámara muestre lo que ve en cada reflejo al otro espejo. Deberá crear una matriz de transformación modificada para tener en cuenta las relaciones entre los dos portales. Para ayudar a disminuir el impacto en el rendimiento, lea este artículo sobre recorte de plano cercano. Esto lo ayudará a representar solo lo que necesita verse a través del portal.

Puedo crear un tutorial más detallado con imágenes y fuente una vez que descubra cómo combinar las cámaras correctamente para un teletransporte FPS. En este momento estoy demasiado agotado y ocupado para escribir un tutorial completo y esto debería ser suficiente porque le brinda la mayor parte del código necesario.

Timothy Williams
fuente
¿Podría publicar un enlace al repositorio?
Roma Fedor