Explicación técnica del motor gráfico de Doom3

Shock

Éste tema está dirigido a aquellos que tengan un poco de curiosidad de las razones por las cuales el Doom3 utiliza tantos recursos computacionales para animar la escena a través de su motor gráfico, aparte de las meramente visuales, que saltan a la vista por si mismas.

Hay muchas razones por la cual el motor gráfico del Doom3 utiliza tantos cálculos, pero aquí expondré la principal y la verdaderamente revolucionaria, la técnica que los chicos de IdSoftware emplean en el modelo de iluminación del escenario y que nadie antes habia implementado en un juego en tiempo real.

La mayoría de los videojuegos actuales, tanto para PC como para Consola, utilizan un modelo de iluminación llamado GORAUD.

El GORAUD calcula las normales de cada vértice de cada polígono, en base a este cálculo recalcula la iluminación correspondiente a ese punto donde está el vértice, y hace otro cálculo más iluminando un cierto rango de distancia a partir de la normal en la textura.
Así, cuando ya ha iluminado todos los vértices, la sensación que queda en la textura es una sensación de suavizado entre todos los pixels iluminados y todos los rangos de distancia de la textura, produciendo el efecto de un sombreado de calidad media/alta en todo el objeto poligonal iluminado.
Esto se aplica tanto a personajes en el escenario, como en el escenario en si mismo.

Notese que esto no tiene nada que ver con el ver o no los pixels de una textura cuando se está cerca/lejos de ella, este método se denomina Interpolación Trilineal que evita el efecto Popping del Mipmapping.

Pues bien, los chicos de IdSoftware han implementado el modelo de iluminación en el motor gráfico del Doom3 llamado FONG, rompiendo con todos los esquemas de los desarrolladores de juegos ya que nadie se había atrevido a realizar tal hazaña ( siempre hablando de juegos en tiempo real 3D, en las peliculas de animación utilizan este método pero con un algoritmo mejorado ). A raíz de la progresión de potencia de las tarjetas gráficas aceleradoras 3D éste metodo ha podido ser implementado, lo cual era impensable hace 2 años, debido a los requisitos que necesitaba la gráfica en cuestion para calcular toda la escena y la impresionante complejidad de programación que conlleva programar este algoritmo de iluminación.

El algoritmo FONG interpola para cada pixel su normal, si, habeis leido bien, para CADA PIXEL DE LA PANTALLA, en base a este cálculo hace los calculos propios del GORAUD, es decir, calcula la iluminación en ese punto y recalcula el rango de distancia a partir de ese punto en el cual va a iluminar. Pero FONG no se para ahi y realiza el calculo definitivo, que básicamente es sacar la media de cada iluminacion/sombreado de cada pixel animado y de el rango de iluminación de todos los pixels que le afectan en su propio rango, creando asi una iluminacion/sombreado de calidad ALSTÍSIMA, pero muchísimo más costosa de calcular.

Teneis que comprender que esto lo hace para cada momento de la escena, o para entendernos todos para cada frame de la escena, así que os podeis imaginar el gigante cálculo que tanto la CPU del ordenador como la GPU (Graphic Process Unit) de la gráfica tienen que hacer.

He aquí las razones técnicas por las cuales el Doom3 pide tanta maquina y gráfica para funcionar =).

NOTA: Hay otro modelo de iluminación/sombreado aún mejor que el FONG, que los desarrolladores de juegos esperan tener implementado alrededor del 2010, que simula TOTALMENTE la iluminación/sombreado de la vida real. Si quereis saber como funciona este método y su nombre solo pedirlo que lo explicare gustosamente otro dia pero ahora estoy cansado de escribir =). Solo para que os hagais una idea, este método en la mejor tarjeta gráfica actual en el mercado, sacaria un rate de 1 fph, sí, un frame por hora.

CRoS

gracias x la explicacion, y estaria interesante q explicaras lo de la iluminacion en tiempo real y su nombre... :D

Spybreak

podrias haberlo resumido en:

La mayoria de los juegos actuales calculan la iluminacion por poligonos.

El Doom 3 lo hace por pixeles. Mucho mas detalle pero mas golpe en el rendimiento.

El tercer metodo al que te refieres es el Raytracing no? :)

Shock

#1 Ahora lo explico =)

#2 Hola nen ! =D, No crees que si lo resumo tanto no seria una explicación ya? =)

El metodo que da 1fph es el llamado RADIOSIDAD. No se si el nombre en inglés es como dice #2, por lo tanto no se si será el mismo.

La RADIOSIDAD consiste en, metiante la luz que incide sobre el escenario por medio de focos, spotlines etc calcular en todo el escenario las refracciones de luz sobre cada uno de los polígonos existentes.

Esto es, por ejemplo, un rayo de luz incide sobre una caja, esta caja causa una refraccion de luz sobre los demas objetos de la escena, a la vez que los demás objetos de la escena causan refracciones sobre todos los demas objetos que no sean el mismo.

Así, calculando las refracciones para cada pixel de cada objeto, se puede simular casi en su totalidad la iluminación/sombreado de la vida real sobre cada polígono de la escena.

Esto se podria resumir que el metodo RADIOSIDAD calcula el brillo que tiene cada objeto, el cual depende directamente del que tienen todos los demás. Es decir, calcula todas las refracciones posibles sobre los objetos del escenario.

Estos cálculos de luces en Física se llaman Luces Difusas y Luces Ambientales.

Pero los desarrolladores quieren ir más alla aún, porque si bien este método simularia casi al 100% la iluminación/sombreado de un escenario 3D comparandolo con la vida real, falta un detalle, la denominada Luz Especular.

Esta luz es la luz que incide sobre el ojo humano o punto de vista de la camara en un juego 3D. Dependiendo desde que punto de vista mires un objeto, éste puede ser mas brillante para tí o no, lo que depende a su vez del ángulo de entrada de la luz refractada desde el objeto hacia tu punto de vista.

Considerando que esto se debería hacer para cada frame, en todos los polígonos de los objetos de la escena, os podeis imaginar lo que costaría de rendimiento y programación =).

S

En efecto, raytracing.

CRoS

vale entonces asin, se podra tener iluminacion equivalente a la realidad... si solo falta que los juegos sean mas reales de lo q son para q se te vaya la olla xD

Cryoned

radiosidad.... tio deja de leer manuales en chicano que luego pasan factura XD

nanoSpawn

Muy bueno el post =)

Solo dos cosas, lo que tú llamas fong se escribe phong (o al menos siempre lo he visto así) y Goraud es Gouraud. Y radiosidad en inglés es radiosity, que bueno, no es raytracing, pero andan muy relacionados.

Raytracing es trazado de rayos, es desde cada pixel de la escena, tirar un rayo de luz a la cámara, previo calcular todas las luces de la escena. Radiosity viene a ser lo mismo, pero además la luz puede rebotar; y al hacerlo, como en la vida real, adquiere parte del color de la superficie en la que ha rebotado (si tenemos un coche rojo, la luz que rebote en él será rojiza). Vamos, lo que explica Shock en el segundo post es el Raytracing, no radiosity.

Radiosidad "per se" la hemos visto ya en juegos, pero en lightmaps, osea, iluminación estática para el mapa, naturalmente que su implementación en tiempo real es exageradamente costosa, y yo creo que antes de ver radiosidad, veremos raytracing en nuestros ordenadores, y luego a partir de ahí, solo será ir subiendo para arriba.

Para ver raytracing en todo su esplendor, recomiendo www.povray.org y que os miréis el Hall of Fame
http://www.povray.org/community/hof/boltstill3.php

Edit: w00t, también sacado del Hall of fame ese
http://www.povray.org/community/hof/accident_bleu_1200x1600.php

S

Raytracing es trazado de rayos, es desde cada pixel de la escena, tirar un rayo de luz a la cámara, previo calcular todas las luces de la escena. Radiosity viene a ser lo mismo, pero además la luz puede rebotar; y al hacerlo, como en la vida real, adquiere parte del color de la superficie en la que ha rebotado

Pues los fotones del POV-Ray rebotan, ¿eh? Vamos, raytracing no es nada sin reflexión de fotones.

PS: No te entendí bien, de todos modos POVRay tiene radiosidad.

nanoSpawn

Soy_heaton, precisamente, pero en el raytracing standard rebotan una vez, y si lo hacen más, no tienen en cuenta nada más que el ángulo. Con radiosity las propiedades de la superficie en la que se acaban de reflectar son importantes.

El proceso sería, cogemos el píxel 0,0 y miramos si da al infinito, si es así, pinta el cacho de cielo que esté definido o sea default, si no, mira qué luces en la escena podrían afectar y como, saca los cálculos correspondientes y tira un rayo a la cámara resultado de todas esas operaciones.

Uhm, me he hecho la picha un lío, realmente, sería más bien al revés, de la cámara, tirar un rayo a cada píxel y de ahí calcular su color a partir de las luces...

/me se autorectifica y pide disculpas

Aún así, la diferencia entre raytracing y radiosity no cambia.

Edit: "PS: No te entendí bien, de todos modos POVRay tiene radiosidad."
Claro que sí, no dije que no la tuviese, y 3DS con plugin tb =). Solo dije que raytracing y radiosity son conceptos diferentes, aunque estrechamente relacionados.

WaaghMan

Y eso lo hacen por software? Porque el OpenGL, que yo sepa sólo tiene soporte para sombreado Gouraud y sombreado plano cutre...

S

#10 Que yo sepa rebotan hasta el infinito o al menos varios miles de veces, y en cada choque el fotón va tomando propiedades de la superficie con la que choca.

nanoSpawn

#12 Eso en radiosity, y no son varios miles de veces, normalmente pones de 2 a 10 rebotes, más es pasarse tres pueblos ya. En Raytracing convencional solo rebota una, por eso el radiosity consigue resultados tan espectaculares comparado al raytracing convencional

Waaghman: por desgracia no existe soporte hardware para eso ahora mismo =/, es uno de los retos de la industria gráfica, tho...

SupremSobiet

Vamos que dentro de medio lustro, los graficos y los ambientes en los juegos seran espectaculares no?

nanoSpawn

Si, pero para eso no importa poner las parrafadas que hemos metido =)

Uhm, que hace un lustro que salió el Quake 3... no ha cambiado ni nada el asunto...

McAgoen

#15 ya ve q no... xD cualkier juego d hoy dia es comparable al Fade to back, al rise of the triad, etc.

Shock

#7 No leo manuales en "chicano", lo que sé lo sé por las clases de programación en OPENGL que estoy asistiendo, cuyo profesor es uno de los del equipo de informáticos que desarrolló el escenario virtual de la sección de meteorología en las noticias de Antena3.

Shock

#11 Que yo sepa la forma que tienen para meter toda la programacion de iluminación nueva en la GPU es mediante los Vertex Shaders. Con esta tecnología puedes crear tu propio algoritmo de iluminación y de alguna manera indexarlo a la tarjeta gráfica, pero cómo lo hacen se me escapa totalmente a mis breves conocimientos sobre esto...

Shock

#8 Tus links a povray.com son sencillamente espectaculares... que pasada... imaginaros esa calidad en un juego en tiempo real, AFF!

Esto podria ser un escenario del Doom IV en tiempo real, y no estoy de coña, como consigan implementar la RADIOSIDAD/RADIOSITY:

http://www.povray.org/community/hof/DistantShores.php

radagast

pues aunque sea mucho mejor las sombras del Doom 3 no me gustan nada. no se "apoyan" sobre el objeto que esta detras, sino que aparece un objeto negro por detras de cada cosa que tiene sombra. eso se ve muy bien cuando le das luz d linterna a una valla x ejemplo.
x ejemplo el hl2 va por Goraud? xq las sombras del CS:S me parecen muy buenas, mejores que las del Doom 3, que parecen "solidas".
me gustaria que me dieseis una buena razon xq este pequeño detalle es el que hace que el Doom 3 no me parezca el juegazo que esperaba.

nanoSpawn

Uhm, es complicado de explicar bien... pero se intentará...

Half Life 2 hace lo mismo que Far Cry, básicamente, la iluminación en los mapas es estática (lightmap), y las entidades proyectan una soft stencil shadow (sombra suave), mientras que ellas mismas están sombreadas con gouraud.

Lo de la soft stencil shadow es una de las cosas que parece que se han introducido con DX9 (o al menos es en juegos que emplean esta tecnología donde se está viendo más), y es muy muy parecido a lo que hace el doom 3, calculas la geometría de la entidad, y proyectas en 2D su sombra sobre la superfície adyacente, con la salvedad de que luego se le aplica un filtro para suavizar los contornos y que queden mejor, y se le aplica un parámetro de color para igualarlo al de la luz ambiente dominante en el mapa.

A mí personalmente me gusta mucho esta forma de hacer las sombras, quedaba cojonudo en Far Cry, queda bien en Painkiller, y quedará la mar de bien, también, en Half Life 2. Consume pocos recursos, relativamente, y consigues resultados efectistas y realistas. Como única contra, falta homogeneidad entre el modelo con gouraud y su entorno, pero cada vez se nota menos, eso.

En Doom 3 a Carmack se le fue la olla del todo, pero también me gusta mucho como queda, ya sé que a tí no, pero eso me parece subjetivo =P.

Lo que pasa en Doom 3 es que Carmack se apoya completamente en stencil shadows para casi todo, todos los objetos proyectan stencil shadows por todo, que se van sumando entre ellas, y por tanto oscureciendo el entorno, las soft shadows de HL2 no se suman entre ellas, simplemente se juntan como si fuesen una, pero sin afectar a la intensidad de la sombra, en cambio, en doom 3 cada nueva sombra oscurecerá algo más los pixeles que ocupa.

Además, al ser tan abusivo el uso de estas sombras, no puede suavizar los contornos, porque entonces los recursos requeridos serían totalmente exagerados, incluso más que ahora, por eso quedan líneas rectas en estas sombras. Y si encima la sombra proyectada no queda cerca del radio de acción de otra luz, quedará casi totalmente negra.

Aún así, aunque hay gente que no le gusta, a mí me parece que el engine de iluminación de Doom 3 es un gran paso adelante, solo hace falta que empiecen a salir juegos que usen esta tecnología con algo más de buen gusto que el que mostró id software... En general, el efecto de volumen y solidez que se consigue, no tienen -a mi parecer- parangón con ningún otro engine, y los pocos exteriores que se pueden ver quitan el hipo, pero claro, los tienen infrausados...

EuRyNomE

#20 lo de las sombras del CS:Source mejores ke las del Doom 3, te pido ke lo pienses bien, ya ke TECNICAMENTE hablando Doom3 es superior al Source, y en cuestion de sombras e iluminacion esta claro ke no hay color..

m3tr0

http://www.povray.org/community/hof/accident_bleu_1200x1600.php
es una imagen creada digitalmente? :O
parece una foto real, con videojuegos así flipas!!!

radagast

#22 no digo q sea mejor sino q m gusta mas. se q el Doom 3 esta curadisimo e ir con la linterna x ai iluminando y aciendo sombras es cojonudo pero solo digo q ai algunas q parecen solidos y q no s apoyan en las paredes dnd se ven, solo eso.

Cyph3r

El Source tiene iluminacion en tiempo real y tb sombras en tiempo real pero no lo pusieron en Half-life 2 por el consumo excesivo de cpu y memoria.

Source tiene terreno deformable pero tampoco lo utiliza pero Team Fortress 2 si lo utilizara.

Por cierto a mi me gusta mas las sombras de Source que no del doom 3 es que tan negras parecen falsas nose es que no me gustaron.

D10X

Aunque el Doom 3 sea tecnologicamente superior al Source, el hecho de situarse en entornos cerrados con poca luz hace que las sombras sean muy oscuras(como dice Cypher), o que no se aprecio demasiado la calidad de estas, sin embargo en el Source, al estar en un entorno mas abierto, con mas "sol", se nota mas ke las sombras son claritas, crean la forma del jugador, por eso a efectos visuales, las sombras del CS:Source son mucho mas llmativas.

Usuarios habituales

  • Cyph3r
  • radagast
  • m3tr0
  • nanoSpawn
  • Shock
  • Soy_HeatoN
  • CRoS