El universo 3D entero no es
completamente observable en una pantalla 2D. Sino que solo una parte del mismo
será visible, en un determinado momento, bajo una determinada posición y
orientación de cámara.
La cámara mencionada anteriormente
representa el ojo desde el cual se está observando el universo 3D en un
determinado momento, y se la denomina Frustum. El Frustum es una figura geométrica
de aspecto piramidal, que delimita la región de espacio del universo 3D que
terminará siendo visible en pantalla.
Consiste en una pirámide rectangular
compuesto por seis planos: near plane, far plane, left plane, right plane, top
plane y bottom plane. El volumen encerrado entre estos planos dependerá de los valores
configurados de la cámara: Position: lugar en el espacio en donde se encuentra
la cámara, en un momento determinado
Look at: dirección hacia donde
apunta la cámara en un momento determinado, partiendo desde la posición
especificada anteriormente.
Near distance: distancia que existe
entre la posición de la cámara y el near plane del Frustum. Indica la distancia
a partir de lo cual todo empieza a ser visible. Aquello que se encuentre entre
la cámara y el near plane, es decir, demasiado cerca al ojo de la cámara, no
será visible.
Far distance: distancia máxima a la
que un objeto será visible. Determina la posición del far plane del Frustum. Es
análogo a la visibilidad máxima que puede ver el ojo.
Aspect Ratio: es relación entre el
ancho y el alto de la pantalla 2D sobre la que se va a proyectar el mundo 3D.
Se calcula dividiendo el ancho de la pantalla por el alto de la misma. Ratio =
width / height
FOV: indica el ángulo de visión
respecto del eje Y. Es lo que determina el ensanchamiento de la pirámide del
Frustum, desde el near plane al far plane. Normalmente toma un valor entre 40°
y 60°.
Todos los triángulos de todos los
modelos del universo 3D que se encuentren dentro del volumen del Frustum serán
visibles en pantalla (exceptuando aquellos que se interponen ante otros).
Aquellos triángulos que se encuentran parte dentro del Frustum y parte afuera,
serán recortados hasta dejar solo la parte de los mismos que es visible (triangle
splitting). A este proceso de determinar que triángulos caen dentro del volumen
de visión se lo denomina Frustum Culling, y puede ser realizado en distintas etapas:
a nivel de la aplicación o directamente por el adaptador de video.
Una vez que se ha calculado los
triángulos que se encuentran dentro del Frustum, habrá que tener en cuenta que
algunos estarán tapando a otros, en lo que respecta a al ojo de la cámara. Por
lo tanto no todos los triángulos dentro del Frustum terminarán convirtiéndose
realmente en pixels de pantalla. A este proceso se lo denomina Occlusion
Culling.
Por lo tanto el concepto de
Rendering consiste en calcular, para una cámara determinada, dentro de un
universo 3D determinado, que pixels deberán ser dibujados en pantalla. El
proceso de Rendering es bastante complejo e involucra varias etapas.
Gracias a la existencia de APIs
gráficas como OpenGL y DirectX, junto con el apoyo de los adaptadores de video,
el programador normalmente no debe ocuparse de todo este proceso de
transformación. Sino que se limita a especificar la geometría del mundo que quiere
representar en el modelo lógico de 3D dimensiones, y luego la API gráfica en cuestión
será la encargada de transformar ese mundo 3D en una matriz bidimensional de pixels.
No hay comentarios.:
Publicar un comentario