Программная библиотека процедурных текстур

Я хотел бы написать какое-нибудь программное обеспечение, которое составляет изображения из процедурных текстур. Для максимальной гибкости я хотел бы получить доступ к этим текстурам/создать их через API.

В прошлом я использовал POV-Ray для базовых текстур, я использовал бесплатную версию Genetica и настраивал ее пресеты, а также использовал плагин Re Synthetic GIMP для создания текстур из фотографий или для обработки текстур из других источников. Все эти инструменты замечательны, но ограничивают меня процессом создания библиотеки текстурных изображений, в то время как я предпочитаю создавать «рецепты» текстур с использованием параметров. Теперь я понял, что я хочу делать с этими инструментами, я хочу сделать шаг назад и написать код, который генерирует текстуры, которые мне нужны, и поддерживать библиотеку параметров для этого кода.

Требования:

  • API/библиотека для C, C++ или Ruby (не стесняйтесь добавлять другие для общего интереса, особенно с открытым исходным кодом, но я не смогу принять их для своих целей).

  • Поддерживает формат PNG, включая альфа-канал, или может быть связан с библиотекой, которая поддерживает.

  • Контроль на уровне текстурных примитивов, различных типов шума, цветовых карт, рельефных карт и т. д.

  • Комбинация текстурных примитивов на основе слоев или узлов.

  • Предустановки или примеры простых натуралистичных текстур — камень, дерево, вода, грязь, трава.

  • Полученные текстуры не обязательно должны быть фотореалистичными, но достаточно близкими для использования в простой игровой среде.

  • Приятно иметь: можно использовать для создания неискаженных мозаичных текстур.

  • Абсолютно лучший: может конкурировать с Genetica (или аналогичным платным приложением) по разнообразию и качеству, но это библиотека с открытым исходным кодом, а не платное приложение.

  • Не важно: Скорость. Я буду генерировать текстуры как часть рабочего процесса не в реальном времени и не буду учитывать количество кадров в секунду или затраты на ЦП. Если для создания экрана, заполненного текстурой, требуется 30 секунд, это, вероятно, нормально. Качество и гибкость гораздо важнее скорости.

Обновление: меня спросили о рабочем процессе. Я рассматриваю использование API текстур как часть двухэтапного процесса:

  1. Создавайте/исследуйте текстуры, создавая их вручную или пробуя разные варианты. Я бы с радостью взял уже существующий графический интерфейс с интерфейсом управления, элементами управления, такими как ползунки и т. д. здесь. Точно так же я могу сделать свой собственный менее сложный проводник непосредственно из API. Текстуры, которые мне нравятся, я буду хранить с идентификатором и некоторыми метаданными.

  2. Чтобы использовать библиотеку текстур, я намерен написать программное обеспечение для автоматической генерации и рендеринга содержимого изображения (не трассировщик лучей или игровой движок, но работающее на аналогичном уровне генерации значений пикселей). Это могут быть карты для игр, UV-текстуры для объектов для рендеринга в другом месте или просто абстрактное искусство. Это программное обеспечение выберет подходящие текстуры из библиотеки и отобразит их, в идеале, с уникальными случайными начальными значениями (или векторами смещения шума) перед сопоставлением с правильным местом в сцене или объекте. Проблема с предварительно обработанной библиотекой текстур заключается в том, что одни и те же пиксели будут использоваться снова и снова.

Возможно, вы захотите задать вопрос в новых рекомендациях по коду на Area51 — «Предлагаемый сайт вопросов и ответов для программистов, ищущих лучшую библиотеку для конкретных задач» area51.stackexchange.com/proposals/66606/code-recommendations

Ответы (1)

Поскольку я не совсем понимаю ваш рабочий процесс, мое предложение может быть совершенно неверным, но, исходя из установленных вами требований, Blender (хотя и является 3D-программой с открытым исходным кодом) в значительной степени справляется с этим, за некоторыми исключениями.

Он написан на C/C++, но вместо Ruby имеет Python API .

С другой стороны, он имеет мощную систему текстурирования / материалов на основе узлов с множеством процедурных текстур и операторов, поддержкой png и альфа-канала и т. Д. У него нет встроенных натуралистичных текстур (хотя их легко добавить).

Обладает ли API достаточной гибкостью для описания и рендеринга текстуры (я полагаю, в какой-то шаблонной сцене, которую мне нужно создать) без загрузки графического интерфейса, чтобы я мог использовать его как библиотеку, а не как приложение? Если да, не могли бы вы связать документацию с API или, что еще лучше, указать пример/руководство по созданию и рендерингу сцены (любой сцены, не обязательно для библиотеки текстур как таковой) через API в этом путь? Это позволит мне быстро проверить ответ
К сожалению, я в основном использую Blender, я не разрабатываю скрипты, но поскольку он имеет полноценный встроенный игровой движок, я полагаю, что это возможно. Вот ссылка на документацию по API: [ссылка] blender.org/api/blender_python_api_2_73a_release Не стесняйтесь спрашивать здесь, я уверен, что кто-то сможет дать более конкретные ответы: [ссылка] blenderartists.org/forum /forumdisplay.php?47-Кодирование
Я просмотрел API, и я думаю, что этот ответ на Blender Stack Exchange показывает, как запустить приложение непосредственно из скрипта: blender.stackexchange.com/questions/1365/… и связанный оттуда wiki.blender.org/index. php/User%3aIdeasman42/BlenderAsPyModule показывает, что запуск Blender как библиотеки из вызывающего скрипта (вероятно, идеальный сценарий для меня) возможен, но официально не поддерживается
Я не думаю, что это мой идеальный ответ (из-за необходимости Python и экспериментального характера API при использовании в качестве библиотеки, а не механизма сценариев для графического интерфейса). Тем не менее, я думаю, что это наиболее близкое возможное и может быть полезно другим, ищущим нечто подобное. Таким образом, вы получаете награду, но не отмечаете, что она принята.