Archive for the ‘NoiseTextureGenerator’ Category

Завершена работа над новой версией генератора процедурных текстур. Это промежуточная версия, с некоторым nice-to-have функционалом, не вносящая ничего принципиально нового (0.1.5). Основной задачей, которая ставилась на эту версию была стабилизация работы на различных OpenCL платформах. Новая версия умеет работать как на Nvidia (основная платформа разработки) так и на AMD(и видеокарты и цпу) и Intel(цпу). Более того, удалось успешно запустить на достаточно разных платформах:

Ubuntu 12.10 x64 — проверено Nvidia OpenCL и Intel OpenCL SDK. (GTX570, i7-3820)

Mageia2 x64 — проверялось в KVM. Работает с Intel OpenCL SDK

Wine-1.5.24 — работает послу установки AMD APP SDK

Win7 x64 — Nvidia OpenCL (GTX 260), AMD APP SDK (Radeon 7950)

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

Список изменений libclnoise.

— 0000003: [Feature] Работа с внешним OpenCL контекстом
— 0000013: [Feature] Поддержка gcc-4.6 (Messenger)
— 0000014: [Bug] Ошибка компиляции OpenCL на AMD картах (Messenger)
— 0000017: [Bug] Unable to build with intel-ocl-sdk

Список изменений NoiseTextureGenerator.

— 0000005: [Feature] Интерфейс для указания OpenCL параметров
— 0000006: [Bug] Не запускается на Mageia linux
— 0000010: [Feature] Экспорт в JPG

Ссылки.

В git по старому адресу (tag 0.1.5)

Win32

Ubuntu 12.10 (x64)

А еще любопытные могут скачать исходник, с которого была получена картинка, расположенная в начале этой статьи.

libclnoise-0.1.0

Генератор процедурных текстур, а вместе с ним и библиотека по генерации процедурного шума получила первую версию — «0.1.0». За время работы над этой версией произошли разные события, как приятные так и не очень. Например из приятных — я обзавелся 27-ми дюймовым монитором DELL 2711 и теперь картинки отображаются намного лучше и в большем разрешении, а из приятных — версия задержалась из-за скоропостижной кончины материнки (gigabyte GA-X79-UD5). Но все позади и теперь можно продолжать работать над новыми версиями. Кстати картинка слева — это RidgedMulti полученный в новой версии.

Что же такого нового в этой версии, что  она удостоилась номера версии?

Список изменений libclnoise.

Добавлены новые модули для генерации шума: Billow, Checkerboard, Const, Cylinders, Perlin, RidgedMulti, Voronoi.

Добавлены модули для обработки шума: abs, abs_diff, add_sat, clamp, max, min, mix, smoothstep, sub_sat.

Реализован боле-менее человеческий кодогенератор, который позволяет динамически менять параметры всех модулей без пересборки карты шумов, что значительно ускоряет работу при постоянном изменении аттрибутов.

Список изменений NoiseTextureGenerator.

Переделан интерфейс пользователя — надеюсь он стал понятней. Для добавления модуля надо сделать даблклик на его имени в списке справа.

После перехода на новую версию libclnoise удалось достич гораздо большей скорости работы. Все модули спокойно отрабатывают за 30мс при размере текстуры 4096*4096 (ПЕЧ570). RidgedMulti при разрешении 1024*1024 занимает 9мс на ПЕЧ260.

Известные баги

Ну а куда без известных багов?

Если удалить модуль, к которому присоединена хотя бы одна стрелка — приложение упадет. Надо сперва удалить все стрелки и только потом удалять модуль.

add_sat и sub_sat могут не работать. Непонятные ошибки от OpenCL компилятора вылетают.

А что будет дальше?

А дальше будет вот что. В ближайшее время я планирую сделать интерфейс для модулей расцветки и реализовать таки многострадальный градиент, чтобы картинки стали еще красивее, далее надо реализовать возможность играться с координатами, а то сейчас нельзя сделать различные инетерсные модификаторы, к примеру turbulence. А после всего этого планируется дать возможность создавать кастомные модули на OpenCL.

А где взять такую замечательную тулзу?

А тулза такая живет в git по старому адресу (см. прошлый пост), а бинарные сборки можно взять тут:

А еще любопытные могут скачать исходник, с которого была получена картинка, расположенная в начале этой статьи.

Выложил обновление для генератора процедурных текстур. Посмотрев на скорость работы libnoise решился таки начать портирование данной библиотеки на OpenCL. В данной версии используется библиотека libclnoise. Конечно портирование еще только в процессе и много функционала отсуствует (на самом деле есть только один вид шума — Perlin и один вид вывод — PlaneMap, такчто это скорее можно рассматривать как proof of concept)

Сама тулза переписана почти на 90%, как из-за новой билиотеки так и из-за кривизны предыдущей реализации.

Реализованный функционал

NoiseTextureGenerator

  • Построение схемы генерации.
  • Сохранение и загрузка схемы.
  • Экспорт схемы.
  • Соединение по контактам (перетаскиваем источник на получатель — получаем связь).
  • Автообновление предпросмотра текстуры.
  • Сохранение текстуры в файл.
  • Редактирование свойств модулей.

libclnoise

  • Построение схемы.
  • Установка параметров модулей
  • Инициализация OpenCL контекста.
  • Построение кода OpenCL ядра для выполнения.
  • Выполнение OpenCL ядра и получение результата.

Планируемый функционал

NoiseTextureGenerator

  • Автоматический предпросмотр.
  • Предпросмотр текстуры в OpenGL режиме, с различными примитивами.
  • User-defined модули.

libclnoise

  • Портирование всех модулей из libnoise в libclnoise.
  • Улучшенный генератор кода.
  • Поддерка user-defined модулей.
  • Поддержка типов выходов/входов модуля.
  • Дополнительные модули: colorer, source from image, scale

Сборка из исходных кодов

Для сборки NoiseTextureGenerator из исходных кодов теперь необходимо немного шаманства. Для начала надо получить исходные коды как генератора так и библиотеки libclnoise:

git clone git://developer.nsws.ru/NoiseTextureGenerator.git
cd NoiseTextureGenerator/NoiseTextureGenerator
git clone git://developer.nsws.ru/libclnoise.git

Далее необходимо сгенерировать код модулей для билиотеки:

cd libclnoise/src/modules/
./cl2h.sh

Теперь можно использовать qmake или qtcreator. Сборка проверялась на gcc-4.7. Гарантированно собрать срествами VS2010 не получится т.к. используется for по коллекции, который не реализован в VS2010

Бинарные версии

32-х битная версия под Ubuntu не была обновлена, надо разобраться с кросс компиляцией.

Для работы любой версии потребуется установленный OpenCL runtime (поидее должен быть установлен если у вас достаточно свежие драйвера)

Ожидаемая обратная связь

Очень хочется узнать, запустилось ли у вас без бубна, удалось ли сгенерировать текстуру? Это мой первый опыт в использовании OpenCL поэтому могут быть разные баги.