Aprendiendo a hacer impostores manualmente en Unity: ¿cómo renderizar un objeto a una textura, no lo que ve la cámara?

8

Estoy tratando de aprender la forma más eficaz de hacer un impostor en Unity manualmente, sin usar soluciones prefabricadas.

Mi primera suposición es que debería lograrse usando RenderTexture y una segunda cámara y luego tomando diferentes "instantáneas" de diferentes ángulos del objeto. Si hay mejores alternativas en términos de rendimiento (incluso si son más difíciles de implementar), me encantaría saberlo.

En caso de que sea el único camino, he aprendido cómo renderizar desde una cámara a una textura a través de un script, pero aún no podía entender cómo hacer lo siguiente, que es lo que primero tengo que hacer: cómo renderizar -para texturizar un objeto específico sin el fondo de la cámara (es decir, con el resto de la textura siendo transparente) de manera eficiente.

Punteros, sugerencias o al menos recomendación de enlaces serán geniales.

Gracias por adelantado.

AndraSol
fuente
Por favor, limite su publicación a una sola pregunta. Puede crear 2 publicaciones de preguntas diferentes para sus dos preguntas.
Vaillancourt
@AlexandreVaillancourt ¡No hay problema! Así lo hice. Avíseme si aún necesita más mejoras
AndraSol
Tampoco puede pedir 'enlaces' ya que las respuestas que proporcionan solo enlaces no se consideran una buena respuesta para este sitio, de lo contrario, su pregunta está bien :)
Vaillancourt
@AlexandreVaillancourt ¡Gracias! Pero supongo que buenas recomendaciones de enlaces podrían venir a través de comentarios, ¿estoy en lo cierto?
AndraSol
Algo así, sí. Una respuesta puede estar bien escrita y tener enlaces a más detalles. Se eliminará una respuesta que solo contenga enlaces. Los comentarios no están sujetos a estas reglas.
Vaillancourt

Respuestas:

3

Hay una variedad de diferentes técnicas impostoras.

El nivel de detalle es probablemente el más fácil de lograr, pero tiene dos inconvenientes principales. El notable efecto 'pop' cuando se cambia entre modelos de baja y alta resolución, resuelto mediante transiciones graduales entre LOD. El segundo problema es que es mucho más trabajo para el artista generar LOD para cada modelo. Hay una charla de GDC sobre una forma automatizada de generar LODS: "Nivel automatizado de generación de detalles para HALO: REACH"

Una técnica más simple sería la cartelera, donde se usa solo un polígono plano, en lugar de una malla de baja resolución. Este polígono mira hacia la cámara y se texturiza a partir de un render de su modelo. Este método requiere tener múltiples vistas diferentes de su objeto, al igual que la forma en que los enemigos están condenados. Podrías representar todas tus vistas en un atlas de texturas. Los juegos modernos utilizan este enfoque, como Far Cry 3 https://www.youtube.com/watch?v=9P3EI17kHaI

También podría tener varias carteleras estáticas diferentes y combinarlas como en este paquete de la unidad https://forum.unity3d.com/threads/abi-automatic-3d-billboard-imposters-released.204579/

Pero la mejor manera (que creo que quieres) es renderizar dinámicamente tus vallas publicitarias, como en este artículo de gamasutra. http://www.gamasutra.com/view/feature/130911/dynamic_2d_imposters_a_simple_.php Esto fue hecho por Jurrassic Park: Trespasser en 1998, por lo que no es una técnica nueva. Echa un vistazo a la revisión de código aquí http://fabiensanglard.net/trespasser/index.php Desplácese hacia abajo a la sección de wavelets para ver sus impostores.

Excepto el enfoque estándar de LOD, su primer paso probablemente sería encontrar un tutorial de textura de renderizado. La orientación de la cámara renderTexture debe ser la misma que la cámara principal, pero recortada alrededor del objeto del juego para mayor eficiencia. Tendrás que aislar los GameObject (s) que deseas renderizar con una máscara de eliminación. Y configure las banderas claras de la cámara para obtener un fondo transparente. Luego renderice una cartelera impostora en lugar del objeto original.

Reuben Crimp
fuente