¿Existe una especificación estándar para la representación gráfica en 3D?

12

Estoy leyendo un libro sobre gráficos de computadora y, en algún momento, muestra un modelo 3D, creado a partir de un archivo .dat.

Aquí hay algunas reglas para la creación del archivo .dat:

  • Hecho de una lista de posiciones / caras de vértices
  • Escrito en sentido antihorario
  • Las caras terminan con un punto (.)
  • Las fracciones también son aceptables.

Quiero saber si este es el estándar, y si no, cuál es la forma estándar de definir un objeto 3D.

Además, si hay una especificación, ¿quién la definió y dónde encontrarla?

Daniel
fuente

Respuestas:

8

Cuando hablamos de formatos de archivo, estamos hablando de la persistencia de algunos datos relacionados con un modelo / geometría 3D. No existe un estándar universal en formatos de archivo para la geometría 3D persistente. Solo hay unos pocos formatos más dominantes que otros.

Tal como sucede con los formatos de archivo de imagen, los PNG y JPEG son los formatos más comunes que existen en la actualidad, pero no existe un acuerdo universal entre las aplicaciones sobre el uso de uno u otro. Cada aplicación utiliza el mejor ajuste para sus propósitos.

Lo mismo sucede con los formatos de archivo que almacenan datos en 3D. Cada software de modelado 3D generalmente tendrá uno o un conjunto de formatos preferidos. La mayoría define formatos personalizados que solo funcionan con la versión específica de la herramienta. Esto puede suceder por muchas razones, desde simplificar el funcionamiento interno de la aplicación o acelerar la carga de archivos hasta vincular el usuario a una herramienta determinada a propósito.

Este .datformato que describe es un formato personalizado creado por los autores del libro, que probablemente fue diseñado teniendo en cuenta la simplicidad. Parece ser un archivo de texto similar al formato Wavefront OBJ , que a su vez es un formato muy popular para almacenar geometría estática, aunque un poco desactualizado por ahora. Se podría decir que el .OBJformato es el .BMPde los formatos de modelos 3D.

Otros formatos populares de modelos 3D incluyen:

Y muchos otros. Una explicación más general aquí .

También tenga en cuenta que dije al principio que estos son formatos para almacenar / conservar un modelo 3D o geometría en un almacenamiento fuera de línea. No significa (y generalmente no es el caso) que las aplicaciones que los usan almacenarán los datos internamente en la memoria usando el mismo diseño que el archivo. Normalmente, este tipo de datos se procesará mucho después de cargarse desde un archivo hasta que, por ejemplo, se muestre en la pantalla.

glampert
fuente
1
"Normalmente, este tipo de datos se procesará mucho después de cargarse desde un archivo hasta que, por ejemplo, se muestre en la pantalla". como si una imagen se transformara en una matriz de píxeles antes de aparecer en la pantalla, independientemente del formato original. (a pesar de la compresión de hardware)
trinquete monstruo
@ratchetfreak pero no todos los usos de los formatos 3D terminan en la pantalla.
joojaa
BMP, al ser un formato binario, no es una buena contraparte de OBJ. Una mejor coincidencia sería XPM , que es textual.
Ruslan
5

No existe un formato estándar para los modelos 3D. Algunos de los más comunes figuran en la respuesta de glampert, se puede encontrar más en esta respuesta SE .

Si está diseñando su propio formato para sus propios fines, (una cosa bastante común, en realidad) es un buen primer paso para ver cómo está utilizando los datos de su modelo. Por ejemplo, si está enfocado en el renderizado, puede usar el formato que la biblioteca de gráficos espera. Si desea reducir el tiempo de carga de su software tanto como sea posible, puede ser útil reducir la cantidad de análisis y procesamiento que tiene que hacer. Una utilidad simple que puede generar un archivo en el formato que su motor espera significará que simplemente puede asignar el archivo a la memoria y luego pasar un puntero a la biblioteca de gráficos.

Por otro lado, si la representación no es su principal preocupación y la edición es más importante para usted, puede considerar un formato más adecuado para la edición, como el borde alado . El uso de un formato de modelo de propósito general puede adaptarse a sus propósitos al comienzo de un proyecto, pero finalmente hay muchas cosas que puede hacer con los modelos 3D y cada formato tiene sus propios beneficios e inconvenientes, por lo que puede elegir el que mejor se adapte a sus necesidades. .

Jorge Rodriguez
fuente
4

No existe un único estándar que defina el almacenamiento de modelos 3D. La API de gráficos solo se preocupa por los triángulos, que están definidos por vértices e índices que indican qué vértices forman un triángulo.

Muchas compañías han creado sus propios formatos de modelo con diferentes características y objetivos. Uno de los más simples es el formato .obj (Wavefront Object). Que contiene listas de posiciones de vértices, normales y coordenadas de textura y una lista de índices que forman los triángulos. También contiene materiales, con algunas propiedades básicas como texturas, colores difusos y especulares.

Los formatos de modelos más avanzados, como .fbx (FilmBox) utilizados por Autodesk contienen información adicional requerida por el software de modelado. Estos pueden incluir huesos, jerarquías e incluso más propiedades de vértices utilizadas para el skinning, etc. Por lo tanto, existen "estándares", pero no están realmente unificados, ya que cada programa puede requerir información diferente. Pero wavefront es una muy buena opción, porque muchas aplicaciones de modelado pueden exportar a él y es fácil escribir (encontrar) un importador para.

Maurice Laveaux
fuente
3

Como han mencionado otras respuestas, existen múltiples formatos competitivos para almacenar datos 3D.

Sin embargo, ha aparecido un formato específico desde que se hizo esta pregunta, que tiene muchas características que esperaría de un "estándar": el formato glTF .


glTF es un estándar 3D publicado por Khronos Group (la organización detrás de OpenGL y Vulkan), que tiene como objetivo compensar las fallas en Collada.

Sus principales ventajas son:

  • Está basado en JSON, lo que hace que sea muy fácil analizar, serializar, leer y enviar a través de la red.

  • Hay muy poca ambigüedad o redundancia en el estándar (aunque hay algunos *). Las unidades, la mano, los signos de coordenadas de textura, etc., están estandarizados; todo siempre está basado en índices, lo que significa que no hay redundancia de datos. Esto hace que sea realmente fácil escribir un importador.

  • La documentación es muy limpia y exhaustiva.

  • El diseño de los datos se basa en los flujos de trabajo de OpenGL / WebGL, lo que significa que los modelos importados se pueden usar como datos en el motor con poca fontanería.

  • El estándar es de código abierto, y la especificación está alojada en Github. Eso significa que el estándar siempre estará disponible, se podrá usar de forma gratuita y el proceso de desarrollo es visible para todos. Por oposición, el futuro de los estándares de código cerrado es decidido por intereses privados, lo cual es inherentemente peligroso.

  • glTF es compatible con muchos gigantes de la industria a través de Khronos (Adobe, Google, Microsoft, Mozilla, Unity); Blender puede exportarlo (exportar desde Maya todavía no está oficialmente admitido) e importarlo por Unreal, Unity y Godot.

Ver también:

* Estoy bastante seguro de que las tangentes de mano variable no tienen sentido.

Narrateur du chaos
fuente
2

Para agregar a otras respuestas, en realidad hay dos tipos de formatos, intermedio y de tiempo de ejecución. Los formatos intermedios (por ejemplo: COLLADA) son más detallados / lentos y, en última instancia, se convierten entre herramientas al formato de tiempo de ejecución personalizado que está optimizado para una aplicación / hardware específico. Las aplicaciones simples que no se preocupan mucho por el rendimiento pueden usar directamente formatos intermedios.

SupervivenciaMáquina
fuente