objective-c - animate - uiview animation swift 4
iOS-imagen 2d convertida en un 3d (4)
Estaba revisando esta aplicación genial llamada Morfo . Según la descripción de su producto:
¡Usa Morfo para convertir rápidamente una foto de la cara de tu amigo en un personaje 3D que habla, baila y se vuelve loco! Una vez capturado, puedes hacer que tu amigo diga lo que quieras con una voz tonta, rockear, usar maquillaje, lucir un par de enormes ojos de gato verdes, ganar de repente 300 libras y más.
Entonces, si toma una imagen 2D normal de los trabajos de steve y la alimenta a esta aplicación, la convierte en un modelo 3D de esa imagen y el usuario puede interactuar con ella.
Mis preguntas son las siguientes:
- ¿Cómo estan haciendo esto?
- ¿Cómo es esto posible en iPad?
- ¿No es computacionalmente intensivo renderizar y convertir una imagen 2D a 3D?
Cualquier puntero, enlaces a sitios web o bibliotecas en objectivo C que hacen esto es muy apreciado.
ACTUALIZACIÓN: esta demostración de este producto aquí muestra cómo morfo utiliza un mecanismo de plantilla para realizar la conversión. es decir, después de que se alimenta una imagen 2D, es necesario establecer los límites de la cara, donde se encuentran los ojos, el tamaño y la longitud de los labios. Luego se apaga para convertirlo en un modelo 3D. ¿Cómo se hace esta parte? ¿Qué marcos o bibliotecas podrían estar usando?
¿No es computacionalmente intensivo renderizar y convertir una imagen 2D a 3D?
Apple está invirtiendo miles de millones de dólares en el desarrollo de conjuntos de chips personalizados, y los modelos recientes tienen un rendimiento impresionante, considerando la duración de la batería y la baja temperatura de funcionamiento (sin ventiladores).
En mi opinión, hay cómo lo hacen. Solo mis pensamientos, no he visto la aplicación en la vida real.
Tienen un modelo 3D de cabeza humana. Al hacer clic en ciertos puntos de la imagen 2D, se ajustan los puntos correspondientes en el modelo 3D, por lo que representa las características específicas de una cara, como la distancia entre los ojos, el ancho de los labios, etc. A continuación, la textura de la imagen 2D se aplica al modelo 3D utilizando esos puntos de control, por lo que tenemos un modelo 3D texturado de cabeza humana. Dado el hecho de que nuestra percepción es capaz de reconstruir una forma 3D a partir de imágenes en 2D (por ejemplo, mirando una foto en 2D y aún imaginando a una persona en 3D), no hay necesidad de reconstruir la forma en 3D con precisión, la textura hará el trabajo.
Esta es una pregunta amplia, pero puedo indicarle la dirección correcta de cómo funciona la Representación 3D. Confíe en mí. Este es un tema enorme con décadas de trabajo detrás y mucho para poner aquí. No estoy seguro de cuán actualizado está en las técnicas de renderizado 3D, por lo que le daré una idea básica de la textura y le indicaré un buen conjunto de tutoriales.
¿Cómo estan haciendo esto?
La idea es que en la Representación 3D, los modelos 3D se pueden texturizar con una imagen 2D conocida como mapa de textura. Usas una imagen 2D y la envuelves alrededor de un modelo 3D, ya sea una simple primitiva como una esfera de un cubo o más avanzada, como la tetera clásica o el modelo de una cabeza humana, etc. Se puede tomar una textura desde cualquier lugar, tengo Usé la alimentación de la cámara en el pasado para texturizar las mallas con el video de la transmisión de la cámara. He usado fotos de la cámara, y así es como se hace. Así es como se representa la cara al modelo 3D.¿Es esto eficiente?
En iOS y en la mayoría de los dispositivos móviles, la representación 3D utiliza la aceleración de hardware utilizando OpenGLES. En lo que respecta a su pregunta, esto es realmente rápido dependiendo de cómo implemente su código de renderizado.
La forma en que utiliza el mapeo (escala de rotación de la plantilla en el video) como lo menciona anticyclope le permite hacer que la textura se ajuste a un modelo y también colocar los ojos que forman parte del código de renderizado.
Por lo tanto, si quieres aprender sobre esto, te recomiendo que leas el tutorial de Jeff Lamarche "desde cero" como una introducción:
http://iphonedevelopment.blogspot.com/2009/05/opengl-es-from-ground-up-table-of.html
En segundo lugar, he leído sobre 4 libros sobre OpenGLES, para diseño general y para plataformas específicas. Recomiendo este libro:
Hay un problema en la representación de imágenes en 3D, llamada mapeo UV , toma el modelo 3D y define un conjunto de bordes, y esto crea una imagen que se utiliza para generar diferentes texturas al modelo.
Ahora, si te fijas en Morfo, definirás el borde de la cabeza, los ojos, la boca y la nariz. Con esta información, el Morfo sabe cómo colocarle textura al modelo que se ha definido.
El proceso de cargar una textura en un modelo no es muy complejo y esto se puede realizar en cualquier dispositivo que tenga soporte de alguna tecnología como OpenGL.