Mostrando resultados del 1 al 4 de 4

Tema: Proyección geométrica lineal de una cámara (3D -> 2D)

  1. #1
    Fecha de Ingreso
    nov 2006
    Ubicación
    Madrid (a ratos Alicante)
    Mensajes
    6.262

    Predeterminado Proyección geométrica lineal de una cámara (3D -> 2D)



    Los que hayáis estudiado dibujo técnico seguramente os acordaréis del Cristo que es dibujar a mano perspectivas cónicas (con uno, dos o tres puntos de fuga). Curiosamente realizar este tipo de dibujo en un ordenador, asumido como la forma más realista en que se puede plasmar una escena 3D sobre un plano 2D (hoja de papel, pantalla de ordenador, sensor de una cámara de fotos), responde a una ecuación tan sumamente tonta e intuitiva como es una semejanza de triángulos, puro Teorema de Thales:

    http://guillermoluijk.com/misc/3dequations800.png

    Asumiendo que nuestro punto de observación es el origen de coordenadas y miramos en la dirección del eje Z, un punto P definido por sus coordenadas (x,y,z) en el espacio 3D se proyecta sobre el plano de distancia focal f como el punto P' de coordenadas (x',y',f). La obtención de los valores x' e y' es tan inmediata como expresa la fórmula:

    x' = x * f/z
    y' = y * f/z

    Ambos quedan reducidos por el factor f/z que es la relación entre la distancia f del plano de proyección (distancia focal del objetivo) y la distancia z que hay entre el observador (cámara) y el punto (sujeto).

    Esta relación f/z es sumamente interesante para entender el efecto de la distancia focal (f) y la distancia al sujeto (z) en fotografía:
    • Alterar f, es decir desplazar el plano de proyección, solo modifica el escalado o ángulo de visión de la escena porque afecta por igual a todos los puntos de la misma. Es equivalente a hacer un escalado o zoom de la imagen pero no modifica las relaciones de tamaño entre objetos, es decir no modifica la perspectiva.
    • En cambio al ser z un valor diferente en función de la distancia entre la cámara y cada elemento de la escena, sí determinará la perspectiva de la imagen obtenida. Cuando z tiende a infinito (sujetos muy lejanos), el factor f/z será aproximadamente el mismo para todos los puntos de la escena obteniendo el equivalente a una perspectiva axonométrica (lo que los fotógrafos llaman "compresión de planos").

    Es una demostración gráfica y matemática de que la focal no altera la perspectiva, y es la distancia a la cámara la que sí lo hace.

    Otra lectura que se obtiene intuitivamente del esquema, es que cualquier objeto que tenga forma de línea recta en el mundo real se proyectará también como una recta en el plano (distorsiones de barril/cojín de una óptica al margen). De hecho ni siquiera tiene que ser un objeto realmente rectilíneo, basta que se presente como tal desde el punto de vista del observador (por ejemplo la Vía Láctea pese a ser una espiral de estrellas, desde nuestro planeta se ve como una alineación lineal de estrellas al estar la Tierra contenida en ella y por eso la capturamos como una recta de estrellas, mal que le pese a muchos fotógrafos de nocturnas que la prefieren representar como un arco).

    Con esas simples ecuaciones he construido una animación con esferas (cuyo radio se escala por el mismo factor f/z que la localización de su centro). He escogido un ejemplo con esferas porque tienen una propiedad que me apetecía explotar. Si proyectar objetos 3D sobre un plano es tan sencillo como he explicado, detectar qué objetos tapan o intersecan a otros es en cambio sumamente complicado. A día de hoy los algoritmos ya están trilladísimos y muy bien implementados, incluso por hardware, en cualquier programa de animación 3D, arquitectura o videojuego. Pero con las esferas tengo un algoritmo de eliminación de partes ocultas tan sencillo como es dibujarlas por orden, de mayor a menor distancia al observador. Así las que estén más cerca ocultarán a las que están más lejos y el resultado es equivalente a un algoritmo real mucho más complejo:

    http://guillermoluijk.com/misc/cube1.gif

    Aquí una versión coloreando las esferas con un tono de gris proporcional a la distancia al observador para crear un efecto de profundidad aérea:

    http://guillermoluijk.com/misc/cube3.gif

    Salu2!
    Última edición por Guillermo Luijk; 23/01/23 a las 17:25:32

  2. #2
    Fecha de Ingreso
    nov 2006
    Ubicación
    Madrid (a ratos Alicante)
    Mensajes
    6.262

    Predeterminado

    He pasado "a limpio" el ejercicio, creo que ha quedado bastante agradable de leer y con comentarios específicos aplicados a fotografía:

    Proyección lineal de escenas 3D sobre el plano con R

    Salu2!

  3. #3
    Fecha de Ingreso
    ago 2007
    Ubicación
    Madrid
    Mensajes
    10.836

    Predeterminado

    Muchas gracias, Guillermo, como siempre.
    Canon EOS 5D y 350D | Canon EF 50 1.8 MkI, EF 70-300 IS USM | Tamron SP AF 90 (172E), SP AF 24-135 (190D) | CZ Flektogon 2.4/35 MC, Planar 1.7/50 T* | Porst MC 2.8/35, 2.8/135 | Fuji X100S


  4. #4
    Fecha de Ingreso
    nov 2006
    Ubicación
    Madrid (a ratos Alicante)
    Mensajes
    6.262

    Predeterminado

    Añadiendo sonido a la animación de las bolas (mejor con cascos o un equipo de sonido con graves decentes):

    http://guillermoluijk.com/datosimage...danimation.mp4

    (los gráficos tienen más aliasing que una Canon 5DS R; es lo que tiene hacerlo todo "a mano")

    Salu2!

Marcadores

Normas de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •