Me he codificado un visor OpenGL BSP para un formato de juego antiguo. Es muy similar al formato de archivo Quake 3. Debido a que mi interés es desarrollar motores gráficos, quiero desarrollar mientras veo el uso de la tecnología actual. Así que me dirijo a ustedes, los expertos en el tema, para obtener instrucciones sobre en qué enfocarse. Me gustaría que esto sea lo más rápido posible y considerando que los formatos de archivo antiguos son muy simples y tienen pocos polígonos, creo que debería ser factible. Aquí están mis preguntas:
Iluminación a. ¿Tiene sentido para mí aprender la iluminación de vértices o debería implementar la iluminación por píxel? b. Sé que OpenGL tiene un límite de 8 luces. ¿Realmente debería usar solo uno de esos para la luz ambiental y el resto de la computadora a través de sombreadores? Si no, ¿qué debo hacer?
Clasificación / selección a. ¿Cuál es el algoritmo utilizado más rápido y más común para ordenar superficies para renderizar? La complejidad no es realmente un problema. Quiero aprender lo que se está utilizando actualmente y las formas de representar realmente las cosas que puedo ver. He visto varios algoritmos descritos como el algoritmo del pintor y me pregunto qué tiene más sentido para la geometría basada en BSP. si. Si tengo texturas con máscaras alfa, me dijeron que la clasificación tiene algún tipo de participación en este proceso. ¿Cómo les permito renderizar correctamente en el espacio 3d?
Tubería de gráficos a. ¿Debo enviar mis datos de geometría a través de VBO? ¿Es este el estándar utilizado hoy? si. Si tengo varias "regiones", posiblemente 200-300, ¿debería encontrar una mejor manera de enviarlas a la GPU sin enviar 200-300 fragmentos. ¿Debo combinarlos en uno y mantener una referencia asociada a cada uno?
¿Algún otro consejo para el renderizado basado en BSP y cosas de esa naturaleza?
Además, si dije algo incorrecto, corrígeme. Soy esa persona que preferiría ser corregida y un poco avergonzada que ignorante e inconsciente.
Gracias por tu tiempo. Realmente lo aprecio.
Respuestas:
Si, como usted dice, está interesado en la tecnología actual :
1) Iluminación: iluminación por píxel, definitivamente. Si desea ver el renderizado de la generación actual, verá escribir vértices y sombreadores de píxeles. Simple como eso. Ofrecen una flexibilidad casi ilimitada y no son mucho más difíciles de usar que la tubería de funciones fijas, si comienzas a aprenderlas correctamente. El límite de 8 luces de OpenGL solo es aplicable para configuraciones de canalización de función fija anticuadas. No sigas esa ruta, aprende OpenGL Core y olvídate de todas las cosas anticuadas de glBegin / glEnd.
2) Clasificación / Selección: Para comenzar: solo clasifique si necesita transparencia. Solo elimine los objetos que están fuera de la vista-frustum.
3) Si está utilizando OpenGL, use VBO y VAO.
-
Sin preguntar: si está creando un visor para un formato BSP antiguo (¿sospecho que algo de un motor Valve / ID debería?), Debería poder dibujar todo el nivel sin ningún tipo de optimización (culling / bsp ) en absoluto y aún así obtener una velocidad de fotogramas completa en hardware moderno;)
Consejo OpenGL: Obtenga la 5ta edición de OpenGL Superbible. Esto te enseñará cómo hacer OpenGL moderno y no nublará tu mente con cosas que luego descubrirás que están desactualizadas.
fuente
1.a La iluminación por vértice es más fácil que la iluminación por píxel (la iluminación por vértice está integrada en OpenGL, la iluminación por píxel requiere un sombreador personalizado).
1.b Si tienes ocho luces, úsalas. Sin embargo, tendrás que calcular qué luces son visibles.
3.a Use VBOS. Nunca use glBegin / glEnd (a menos que use listas de visualización, pero en su situación los VBO son la mejor solución)
3.b No debe preocuparse por el rendimiento mientras el programa aún está en desarrollo. Especialmente con el hardware de hoy. Entonces, envíe sus 200-300 trozos.
No conozco los mapas BSP lo suficientemente bien como para ayudarte con tus otras preguntas.
fuente