Softwarebibliothek für prozedurale Texturen

Ich würde gerne eine Software schreiben, die Bilder aus prozeduralen Texturen zusammensetzt. Für ultimative Flexibilität möchte ich auf diese Texturen über eine API zugreifen/erstellen.

In der Vergangenheit habe ich POV-Ray für grundlegende Texturen verwendet, ich habe die kostenlose Version von Genetica verwendet und seine Voreinstellungen optimiert, und ich habe auch das Resynthesis GIMP-Plugin verwendet , um Texturen aus Fotos zu generieren oder Texturen aus anderen Quellen zu verarbeiten. Diese Tools sind alle großartig, aber ich bin an einen Prozess zum Erstellen einer Texturbildbibliothek gebunden, wenn ich lieber Textur-„Rezepte“ mithilfe von Parametern erstellen möchte. Jetzt habe ich gelernt, was ich mit diesen Tools machen möchte, ich möchte einen Schritt zurücktreten und Code schreiben, der die Arten von Texturen generiert, die ich brauche, und eine Bibliothek mit Parametern für diesen Code pflegen.

Anforderungen:

  • API/Bibliothek für C, C++ oder Ruby (fühlen Sie sich frei, andere für allgemeines Interesse hinzuzufügen, insbesondere wenn Open-Source, aber ich werde nicht in der Lage sein, sie für meine Zwecke zu akzeptieren).

  • Unterstützt das PNG-Format, einschließlich Alphakanal, oder kann mit einer Bibliothek verknüpft werden, die dies tut.

  • Kontrolle auf der Ebene von Texturprimitiven, verschiedenen Arten von Rauschen, Farbkarten, Bump-Maps usw.

  • Kombination von Texturprimitiven auf Layer- oder Knotenbasis.

  • Voreinstellungen oder Beispiele für einfache naturalistische Texturen - Stein, Holz, Wasser, Schlamm, Gras.

  • Die resultierenden Texturen müssen nicht fotorealistisch sein, aber nah genug für die Verwendung in einer einfachen Spielumgebung.

  • Schön zu haben: Kann verwendet werden, um unverzerrte kachelbare Texturen zu erstellen.

  • Absolut am besten: Könnte in Vielfalt und Qualität mit Genetica (oder einer ähnlichen kostenpflichtigen App) mithalten, aber eine Open-Source-Bibliothek, keine kostenpflichtige Anwendung.

  • Nicht wichtig: Geschwindigkeit. Ich werde Texturen als Teil eines Nicht-Echtzeit-Workflows generieren und berücksichtige weder Frames pro Sekunde noch CPU-Kosten. Wenn es 30 Sekunden dauert, um einen Bildschirm voller Textur zu erzeugen, ist das wahrscheinlich in Ordnung. Qualität und Flexibilität sind viel wichtiger als Schnelligkeit.

Update: Ich wurde nach dem Workflow gefragt. Ich betrachte die Verwendung einer Textur-API als Teil eines zweistufigen Prozesses:

  1. Generieren/untersuchen Sie Texturen, indem Sie sie entweder manuell erstellen oder Variationen ausprobieren. Ich würde gerne eine bereits vorhandene GUI mit einer Verwaltungsoberfläche, Steuerelementen wie Schiebereglern usw. hier nehmen. Ebenso kann ich meinen eigenen weniger anspruchsvollen Explorer direkt aus einer API erstellen. Texturen, die mir gefallen, werde ich mit einer ID und einigen Metadaten speichern.

  2. Um die Texturbibliothek zu verwenden, beabsichtige ich, Software zum automatischen Generieren und Rendern von Bildinhalten zu schreiben (kein Raytracer oder Game-Engine, aber auf einer ähnlichen Ebene zum Generieren von Pixelwerten). Dies können Karten für Spiele, UV-gemappte Texturen für Objekte zum Rendern an anderer Stelle oder einfach nur abstrakte Kunst sein. Diese Software wählt geeignete Texturen aus der Bibliothek aus und muss sie rendern, idealerweise mit eindeutigen zufälligen Seed-Werten (oder Rausch-Offset-Vektoren), bevor sie auf die richtige Stelle in einer Szene oder einem Objekt abgebildet wird. Das Problem mit einer vorgerenderten Texturbibliothek besteht hier darin, dass genau die gleichen Pixel immer wieder verwendet werden würden.

Vielleicht möchten Sie bei den neuen Code-Empfehlungen auf Area51 nachfragen – „Vorgeschlagene Q&A-Site für Programmierer, die die beste Bibliothek für bestimmte Aufgaben suchen“ area51.stackexchange.com/proposals/66606/code-recommendations

Antworten (1)

Da ich Ihren Workflow nicht genau verstehe, kann mein Vorschlag völlig falsch sein, aber basierend auf den von Ihnen gestellten Anforderungen schafft es Blender (obwohl es sich um eine Open-Source-3D-Software handelt) mit einigen Ausnahmen ziemlich gut.

Es ist in C/C++ geschrieben, hat aber statt Ruby eine Python-API .

Andererseits hat es ein leistungsfähiges knotenbasiertes Texturierungs-/Materialsystem mit vielen prozeduralen Texturen und Operatoren, PNG- und Alpha-Unterstützung usw. Es hat keine eingebauten naturalistischen Texturen (es ist jedoch einfach, diese hinzuzufügen).

Hat die API genügend Flexibilität, um eine Textur zu beschreiben und zu rendern (ich nehme an, in einer Vorlagenszene, die ich erstellen müsste), ohne die GUI zu laden, sodass ich sie als Bibliothek und nicht als Anwendung verwenden könnte? Wenn ja, könnten Sie die Dokumentation mit der API verlinken oder noch besser, wenn Sie auf ein Beispiel/Tutorial zum Generieren und Rendern einer Szene (jede Szene muss nicht per se für die Texturbibliothek sein) über die API verweisen könnten Weg? Das würde mir erlauben, die Antwort schnell zu überprüfen
Leider verwende ich hauptsächlich Blender, ich entwickle keine Skripte, aber da es eine komplett eingebaute Spiel-Engine hat, nehme ich an, dass es möglich ist. Hier ist ein Link zum API-Dokument: [link] blender.org/api/blender_python_api_2_73a_release Fühlen Sie sich frei, hier zu fragen, ich bin sicher, dass jemand spezifischere Antworten geben kann: [link] blenderartists.org/forum /forumdisplay.php?47-Codierung
Ich habe die API überflogen, und ich denke, diese Antwort auf Blender Stack Exchange zeigt, wie man die App direkt von einem Skript aus startet: blender.stackexchange.com/questions/1365/… und von dort verlinkt wiki.blender.org/index. php/User%3aIdeasman42/BlenderAsPyModule zeigt, dass das Ausführen von Blender als Bibliothek aus einem aufrufenden Skript (wahrscheinlich das ideale Szenario für mich) machbar ist, aber nicht offiziell unterstützt wird
Ich denke nicht, dass dies meine ideale Antwort ist (aufgrund der Notwendigkeit von Python und der experimentellen Natur der API, wenn sie als Bibliothek und nicht als Skript-Engine für die GUI verwendet wird). Ich denke jedoch, dass es am ehesten möglich ist und für andere nützlich sein könnte, die nach ähnlichen Dingen suchen. Sie gewähren Ihnen also das Kopfgeld, aber die Markierung wird nicht akzeptiert.