2012-01-21 23 views
17

Estaba revisando esta aplicación genial llamada Morfo. Según su descripción del producto -iOS - imagen 2d convertido en un 3d

Uso Morfo a convertir rápidamente una foto de la cara de su amigo en una hablar, bailar, carácter 3D loco! Una vez capturado, puede hacer que su amigo diga lo que quiera con una voz tonta, rockeando, use maquillaje, use un par de enormes ojos de gato verde, de repente gane 300 lb, y más.

Así que si se toma una imagen en 2D normal de steve jobs & alimentar a esta aplicación se convierte en un modelo 3D de la imagen & el usuario puede interactuar con él.

enter image description here

Mis preguntas son las siguientes: -

  1. Cómo lo están haciendo esto?
  2. ¿Cómo es esto posible en iPad?
  3. ¿No es computacionalmente intenso renderizar y convertir imágenes 2D en 3D?

Cualquier apuntador, enlaces a sitios web o bibliotecas en objectiveC que hacen esto es muy apreciado.

ACTUALIZACIÓN: esta demostración de this product here muestra cómo morfo, utiliza un mecanismo de plantilla para hacer la conversión. es decir, después de que se alimenta una imagen en 2D, es necesario establecer los límites de la cara, donde se encuentran los ojos, tamaño & 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?

+0

por qué cerrar esta pregunta? ¿Qué pasa? –

+0

Demasiado amplio, en mi opinión. –

+5

@rob bien es amplio porque no tengo idea de dónde empezar. este solía ser un lugar donde esas discusiones solían suceder incluso hasta hace un año. Hoy en día la moderación celosa ha reducido la diversión. –

Respuesta

9

En mi opinión, existe cómo lo están haciendo. Solo mis pensamientos, no he visto la aplicación en la vida real.

Tienen un modelo 3D de cabeza humana. Cuando hace clic en ciertos puntos en la imagen 2D, están ajustando los puntos correspondientes en el modelo 3D, por lo que representa las características de una cara específica, 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 los puntos de control, por lo que tenemos un modelo 3D texturizado de cabeza humana. Dado el hecho de que nuestra percepción es capaz de reconstruir una forma 3D a partir de imágenes 2D (por ejemplo, mirando una foto en 2D e imaginando una persona en 3D), no hay necesidad de reconstruir la forma 3D con precisión, la textura hará el trabajo.

+2

Esto tiene que ser cómo lo están haciendo, _porque la técnica no es difícil en absoluto. De hecho, [mapeo de texturas] (http://www.gamedev.net/page/resources/_/technical/opengl/opengl-texture-mapping-an-introduction-r947) (haga clic en el enlace para ver el código) - mapeo desde una imagen plana 2D a un modelo 3D: es una de las técnicas gráficas 3D más básicas y está increíblemente optimizada en el hardware para que sea muy económica. Es tan básico, supongo que ellos lanzaron los suyos, por lo que no se obtiene una respuesta como "Use the FaceMapping lib". Es como pedir una biblioteca para hacer una suma entera. – Matt

+0

@Matt Esto muestra cómo funciona OpenGL no cómo funciona OpenGLES, tenga en cuenta que la respuesta a continuación es más definitiva para "cómo lo haría en iOS", que era la pregunta original. – Dev2rights

1

¿No es computacionalmente intenso renderizar y convertir imágenes 2D en 3D?

Apple está invirtiendo miles de millones de dólares en el desarrollo de chipsets 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).

14

Esta es una pregunta amplia pero puedo indicarle el camino correcto de cómo funciona el renderizado 3D, créame que este es un tema enorme con décadas de trabajo detrás y mucho para poner aquí. No estoy seguro de qué tan rápido estarás en las técnicas de representación en 3D, así que te daré una idea básica de texturizado y te indicaré un buen conjunto de tutoriales.

  1. ¿Cómo están ellos haciendo esto?
    La idea es que en la representación 3D, los modelos 3D se puedan texturizar con una imagen 2d conocida como un mapa de texturas. Usas una imagen 2D y la envuelves alrededor de un modelo 3D, ya sea una primitiva simple como una esfera de un cubo o más avanzada como la tetera clásica o el modelo de una cabeza humana e.t.c. Se puede tomar una textura de cualquier parte, he usado la alimentación de la cámara en el pasado para texturizar mallas con el video de la secuencia de la cámara, he usado fotos de la cámara, que es cómo hacerlo. Así que así es como se renderiza la cara en el Modelo 3D.

  2. ¿Es esto eficiente?
    En iOS y en la mayoría de los dispositivos móviles, la representación 3D usa aceleración de hardware utilizando OpenGLES. Con respecto a su pregunta, esto es realmente rápido dependiendo de cómo implemente su código de renderizado.

La forma en que se utiliza la (plantilla rotación escala en el video) mapeo como se ha mencionado por anticyclope le permite hacer la textura se ajusta un modelo y también dicen que los ojos que son parte de no rendir código.

Así que si usted quiere recoger esto recomiendo la lectura de Jeff Lamarche Tutorial "desde cero" como imprimación:

http://iphonedevelopment.blogspot.com/2009/05/opengl-es-from-ground-up-table-of.html

En segundo lugar a que he leído alrededor de 4 libros sobre OpenGLES, por diseño general y para detalles de plataformas. Recomiendo este libro:

http://www.amazon.co.uk/iPhone-Programming-Developing-Graphical-Applications/dp/0596804822/ref=sr_1_1?ie=UTF8&qid=1331114559&sr=8-1

+0

¿cómo crearía un modelo genérico en 3D de una cabeza humana? OpenGL ES? Hay muchos marcos encima de este derecho? cuál usar? –

+0

también creo que sé cómo se hizo esa aplicación. Primero construya un modelo genérico de cabeza humana 3D. Luego, cuando toma una foto 2D y la envuelve alrededor de este modelo 3D. Voila tienes la aplicación. Si este flujo es correcto, ¿puedes intentar responder mi consulta anterior? acerca de cómo crearía un modelo genérico en 3D de una cabeza humana? y ¿cómo se puede envolver una imagen 2D en el modelo 3D? gracias ... –

+1

Lea bien los tutoriales de Lamarche, al final se explica cómo hacer un modelo en Blender. Usamos Blender pero nuestro artista hace el modelado ya que tengo las habilidades de arte de 3 años con pinturas en polvo. Pero lea las cosas de Lamarche que le muestra cómo exportar un archivo .OBJ e importarlo. PERO NO *** intento correr antes de que puedas caminar con esto, me tomó mucho tiempo entenderlo y me di una patada por intentar apresurarlo. Entonces, ¿recibo la recompensa? – Dev2rights

4

Hay un problema en la representación de imágenes en 3D, llamado UV mapping, toma el modelo 3D y define un conjunto de aristas, y esto crea una imagen que se utiliza para generar diferentes texturas para el modelo.

Ahora, si observas en Morfo, defines el borde de la cabeza, los ojos, la boca y la nariz. con esta información el Morfo sabe cómo colocar su textura en el modelo que ha definido.

el proceso de carga de una textura en un modelo no es muy complejo y esto se puede hacer en cualquier dispositivo que cuenta con el apoyo de algunas tecnologías como OpenGL

+1

Si es posible en óperas puede por favor, proporcione las API en OpenGL para lograr esto? – 2vision2

+0

hacerlo directamente en OpenGL ES no es tan simple, y debe implementar varias cosas, pero puede comenzar por leer sobre esto, [aquí] (http://iphonedevelopment.blogspot.com/2009/05/opengl-es- from-ground-up-part-6_25.html) puedes encontrar un tutorial para iphone – rkmax

+0

Gracias ... del tutorial, llegué a saber qué y cómo hacer el mapeo de texturas ... Así que, en Morfo es el mapeo de texturas solo ¿suficiente? Si es posible, ¿me puede dar más información para comenzar? – 2vision2

Cuestiones relacionadas