Biblioteca de software de texturas procesales

Me gustaría escribir algún software que componga imágenes a partir de texturas procesales. Para obtener la máxima flexibilidad, me gustaría acceder/crear esas texturas a través de una API.

En el pasado, usé POV-Ray para texturas básicas, usé la versión gratuita de Genetica y ajusté sus ajustes preestablecidos, y también usé el complemento Relysis GIMP para generar texturas a partir de fotografías o para procesar texturas de otras fuentes. Todas estas herramientas son geniales, pero me encierran en un proceso de creación de una biblioteca de imágenes de texturas, cuando preferiría estar creando "recetas" de texturas usando parámetros. Ahora que aprendí lo que quiero hacer con esas herramientas, quiero dar un paso atrás y escribir código que genere los tipos de texturas que necesito y mantener una biblioteca de parámetros para ese código.

Requisitos:

  • API/biblioteca para C, C++ o Ruby (siéntete libre de agregar otros por interés general, especialmente si es de código abierto, pero no podré aceptar para mis propósitos).

  • Admite el formato PNG, incluido el canal alfa, o se puede vincular con una biblioteca que lo admita.

  • Control a nivel de primitivas de textura, varios tipos de ruido, mapas de color, mapas de relieve, etc.

  • Combinación de primitivas de textura en una forma basada en capas o nodos.

  • Ajustes preestablecidos o ejemplos de texturas naturalistas simples: roca, madera, agua, barro, hierba.

  • Las texturas resultantes no necesitan ser fotorrealistas, pero sí lo suficientemente parecidas para usarlas en un entorno de juego simple.

  • Es bueno tenerlo: se puede usar para crear texturas enlosables sin distorsiones.

  • Absolutamente mejor: podría rivalizar con Genetica (o una aplicación paga similar) en variedad y calidad, pero una biblioteca de código abierto, no una aplicación paga.

  • No importante: Velocidad. Generaré texturas como parte de un flujo de trabajo que no sea en tiempo real y no consideraré los cuadros por segundo o el costo de la CPU. Si tarda 30 segundos en generar una pantalla llena de la textura, probablemente esté bien. La calidad y la flexibilidad son mucho más importantes que la velocidad.

Actualización: me han preguntado sobre el flujo de trabajo. Veo el uso de una API de textura como parte de un proceso de dos pasos:

  1. Genere/explore texturas ya sea construyéndolas manualmente o probando variaciones. Con mucho gusto tomaría una GUI preexistente con una interfaz de administración, controles como controles deslizantes, etc. aquí. Igualmente, estoy bien para hacer mi propio explorador menos sofisticado directamente desde una API. Las texturas que me gustan, las almacenaré con una identificación y algunos metadatos.

  2. Para usar la biblioteca de texturas, tengo la intención de escribir un software para generar y renderizar automáticamente el contenido de la imagen (no es un trazador de rayos ni un motor de juego, pero funciona a un nivel similar de generación de valores de píxeles). Esto podría ser mapas para juegos, texturas mapeadas uv para objetos para renderizar en otros lugares, o simplemente arte abstracto. Este software seleccionará las texturas adecuadas de la biblioteca y deberá renderizarlas, idealmente con valores semilla aleatorios únicos (o vectores de compensación de ruido) antes de asignarlos al lugar correcto en una escena u objeto. El problema con una biblioteca de texturas renderizadas previamente aquí es que exactamente los mismos píxeles se reutilizarían una y otra vez.

Es posible que desee preguntar en las nuevas recomendaciones de código en Area51: "Sitio de preguntas y respuestas propuesto para programadores que buscan la mejor biblioteca para tareas específicas" area51.stackexchange.com/proposals/66606/code-recommendations

Respuestas (1)

Dado que no entiendo exactamente su flujo de trabajo, mi sugerencia puede ser completamente incorrecta, pero según los requisitos que ha establecido, Blender (aunque es un software 3D de código abierto) prácticamente lo logra con algunas excepciones.

Está escrito en C/C++ pero en lugar de Ruby tiene una API de Python .

Por otro lado, tiene un poderoso sistema de texturas/materiales basado en nodos con muchas texturas y operadores de procedimiento, compatibilidad con png y alfa, etc. No tiene texturas naturalistas incorporadas (aunque es fácil agregarlas).

¿Tiene la API suficiente flexibilidad para describir y representar una textura (supongo que en alguna escena de plantilla que necesitaría crear) sin cargar la GUI, para poder usarla como una biblioteca y no como una aplicación? En caso afirmativo, ¿podría vincular la documentación a la API, o incluso mejor si pudiera señalar un ejemplo/tutorial de cómo generar y renderizar una escena (cualquier escena, no tiene que ser para la biblioteca de texturas per se) a través de la API en este ¿camino? Eso me permitiría verificar la respuesta rápidamente.
Desafortunadamente, principalmente uso Blender, no desarrollo scripts, pero dado que tiene un motor de juego integrado completo, supongo que es posible. Aquí hay un enlace a la documentación de la API: [enlace] blender.org/api/blender_python_api_2_73a_release No dude en preguntar aquí, estoy seguro de que alguien podrá dar respuestas más específicas: [enlace] blenderartists.org/forum /forumdisplay.php?47-Codificación
Revisé la API y creo que esta respuesta en Blender Stack Exchange muestra cómo iniciar la aplicación directamente desde un script: blender.stackexchange.com/questions/1365/… y vinculado desde allí wiki.blender.org/index. php/User%3aIdeasman42/BlenderAsPyModule muestra que ejecutar Blender como una biblioteca desde un script de llamada (probablemente el escenario ideal para mí) es factible, pero no es compatible oficialmente
No creo que esta sea mi respuesta ideal (debido a la necesidad de Python y la naturaleza experimental de la API cuando se usa como una biblioteca y no como un motor de script para la GUI). Sin embargo, creo que es lo más cercano posible y podría ser útil para otras personas que buscan algo similar. Así que te concedo la recompensa, pero no se acepta la marca.