game-engine - los - game maker studio manual pdf
¿Cómo puede un juego en 3D renderizar un objeto sin tener un sprite para cada ángulo? (2)
Múltiples metodos
Hay varios métodos para representar y almacenar gráficos y modelos 3D. ¡Incluso hay diferentes métodos para renderizar gráficos 2D! Además de los mapas de bits 2D, también tiene SVG . SVG usa números para definir puntos en una imagen. Estos puntos hacen formas. Los puntos también pueden definir curvas. Esto le permite hacer imágenes sin la necesidad de píxeles. El resultado puede ser tamaños de archivo más pequeños, además de la capacidad de transformar la imagen (escalar y rotar) sin causar distorsión. La mayoría de los gráficos 3D utilizan una técnica similar, excepto en 3D. Sin embargo, lo que estos métodos tienen en común es que, en última instancia, representan los datos en una cuadrícula 2D de píxeles.
Proyección
El método más común para renderizar modelos 3D es la projection . Todas las formas a renderizar se dividen en triangles antes de renderizar. ¿Por qué triángulos? Porque los triángulos están garantizados para ser coplanares. Eso ahorra mucho trabajo para el renderizador, ya que no tiene que preocuparse por "colorear fuera de las líneas". Una desventaja de esto es que la mayoría de las tecnologías de proyección de gráficos 3D no son compatibles con esferas perfectas u otras superficies redondas. Tienes que usar aproximaciones y otros trucos para hacer superficies redondas (aunque hay algunos renderizadores que soportan superficies redondas). El siguiente paso es convertir o proyectar todos los puntos 3D en puntos 2D en la pantalla (como se ve a continuación).
A partir de ahí, esencialmente "coloreas" los triángulos para que todo se vea sólido. Si bien esto es bastante rápido, otro inconveniente es que realmente no puedes tener cosas como reflejos y refracciones. Cada vez que ves una superficie refractiva o reflectiva en un juego, solo están utilizando trucos para que se vea como un material reflectante o refractivo. Lo mismo ocurre con la iluminación y el sombreado.
Aquí hay un ejemplo de coloración especial que se usa para hacer que una aproximación de esfera se vea suave. Observe que todavía puede ver líneas rectas alrededor de la versión suavizada:
trazado de rayos
También puedes hacer polígonos usando el trazado de rayos . Con este método, básicamente trazas los caminos que toma la luz para llegar a la cámara. Esto te permite hacer reflexiones y refracciones realistas. Sin embargo, no voy a entrar en detalles ya que es demasiado lento para usar de manera realista en los juegos actualmente. Se utiliza principalmente para animaciones 3D (como lo que hace Pixar). Las escenas simples con ajustes de baja calidad se pueden rastrear con bastante rapidez. Pero con escenas complicadas y realistas, el renderizado puede tomar varias horas para un solo fotograma (como es el caso de las películas de Pixar). Sin embargo, sí produce imágenes ultra realistas:
Ray casting
El fundido de rayos no debe confundirse con el trazado de rayos mencionado anteriormente. Ray casting no traza los caminos de luz. Eso significa que solo tienes superficies planas; no reflexivo Tampoco produce luz realista. Sin embargo, esto se puede hacer con relativa rapidez, ya que en la mayoría de los casos ni siquiera es necesario lanzar un rayo por cada píxel. Este es el método que se utilizó para los primeros juegos como Doom y Wolfenstein 3D. En los primeros juegos, se usaba el casting de rayos para los mapas, y los personajes y otros elementos se procesaban usando sprites 2D que siempre estaban frente a la cámara. Los sprites fueron dibujados desde diferentes ángulos para hacerlos lucir en 3D. Aquí hay una imagen de Wolfenstein 3D:
Castle Wolfenstein con JavaScript y HTML5 Canvas: imagen de Martin Kliehm
Almacenando los datos
Los datos 3D se pueden almacenar utilizando múltiples métodos. No es necesariamente dependiente del método de representación que se utiliza. Los datos almacenados no significan nada por sí mismos, por lo que debe procesarlos utilizando uno de los métodos que ya se han mencionado.
Poligonos
Esto es similar a SVG. También es el método más común para almacenar datos del modelo. Se define la geometría utilizando puntos 3D. Estos puntos pueden tener otras propiedades, como datos de textura (en forma de mapeo UV), datos de color y cualquier otra cosa que desee.
Los datos se pueden almacenar utilizando varios formatos de archivo. Un formato de archivo común que se usa es COLLADA , que es un archivo XML que almacena los datos 3D. Aunque hay muchos otros formatos. Fundamentalmente, sin embargo, todos los formatos de archivo aún almacenan los datos 3D.
Aquí hay un ejemplo de un modelo de polígono:
Voxels
Este método es bastante simple. Puede pensar en los modelos de voxel como mapas de bits, excepto que son un grupo de mapas de bits en capas para hacer mapas de bits en 3D. Así que tienes una cuadrícula 3D de píxeles. Una forma de representar voxels es convertir los puntos de voxel en cubos 3D. Tenga en cuenta que los voxels no tienen que ser renderizados como cubos, sin embargo. Al igual que los píxeles, solo son puntos que pueden tener datos de color que pueden interpretarse de diferentes maneras. No voy a entrar en mucho detalle ya que esto no es muy común y generalmente renderizas los voxels con métodos de polígonos (como cuando los representas en cubos. Este es un ejemplo de un modelo de voxel:
Al aprender a programar juegos 2D simples, cada objeto tendría una hoja de sprites con pequeñas imágenes de cómo se vería un jugador en cada cuadro / animación. ¡Los modelos 3D no parecen funcionar de esta manera o necesitaríamos una imagen para cada vista posible del objeto!
Por ejemplo, un cubo giratorio necesitaría muchas imágenes que describan cómo se vería en cada lado. Entonces, mi pregunta es, ¿cómo se representan y representan las "imágenes" de modelos 3D por el motor cuando se ven desde perspectivas arbitrarias?
En el mundo 2D con hojas de sprites, dibuja uno de los sprites en función del estado del actor (representación visual de su objeto). En el mundo 3D, está representando un modelo para su actor que es una serie de polígonos con una textura asignada a él. Hay archivos de modelos estandarizados (estoy familiarizado con Autodesk 3DS Max), en los que el modelo y las texturas asignadas se pueden empaquetar juntas (un archivo .3DS o .MAX), proporcionando todo lo que su biblioteca de gráficos necesita para representar el objeto y su texturas
En pocas palabras, no usa imágenes para cada vista de un objeto 3D, tiene un modelo con una textura representada en ella, creando una vista dinámica a medida que la biblioteca de gráficos la representa.