MyTetra Share
Делитесь знаниями!
Как в Linux работать с osci-render в Blender
Время создания: 31.07.2023 00:24
Автор: xintrea
Текстовые метки: linux, osci-render, oscirender, blender, demo, demoscene, осциллограф, oscilloscope
Раздел: Компьютер - DemoScene
Запись: xintrea/mytetra_syncro/master/base/16907522560h9mkpr82m/text.html на raw.github.com

Для создания музыки на осциллографе, существует проект osci-render:



https://github.com/jameshball/osci-render



Чтобы им воспользоваться на Debian Linux Stable 11, нужно установить Blender версии не менее 3.1.x (где x - какое-то число, не успел записать). Все дальнейшие действия производились в Blender 3.6.1.


Так же должен быть установлен пакет jackd и интерфейс управления QJackCtl.


Так же необходима Java от Oracle не менее 19-й версии.


Последовательность действий следующая:



1. Установить osci-render из deb-пакета. При установке пакета может возникнуть ошибка:



dpkg-deb: error: archive 'osci-render_1.33.2_amd64.deb' uses unknown compression for member 'control.tar.zst', giving up


или


dpkg-deb: ошибка: в архиве «osci-render_1.33.2_amd64.deb» используется неизвестное метод сжатия для «control.tar.zst», прекращаем



Тогда нужно установить архиватор:



apt-get install zstd



И затем deb-пакет надо перепаковать скриптом:



repack_deb_package.sh


#!/bin/bash


DEBPACKAGE="${1%.deb}"


[[ -z "$1" ]] && echo "Usage: $0 <package.deb>" && exit 1


set -e

ar x $DEBPACKAGE.deb

zstd -d < control.tar.zst | xz > control.tar.xz

zstd -d < data.tar.zst | xz > data.tar.xz

ar -m -c -a sdsd "$DEBPACKAGE"_repacked.deb debian-binary control.tar.xz data.tar.xz

rm debian-binary control.tar.xz data.tar.xz control.tar.zst data.tar.zst



Запуск перепаковки происходит следующей командой (имя перепаковываемого файла указывается без .deb):



./repack_deb_package.sh ./osci-render_1.33.2_amd64



В результате будет создан файл osci-render_1.33.2_amd64_repacked.deb. Его и нужно установить.



2. Запустить QJackCtl, но не запускать jackd.



3. Запустить osci-render путем запуска бинарника:



/opt/osci-render/bin/osci-render



Или же, можно скачать Jar-файл для Unix, и запустить его в среде Java следующей командой:



/usr/lib/jvm/jdk-20/bin/java "-Dfile.encoding=UTF8" "-Djdk.gtk.version=2" -jar ./osci-render-unix-1.33.2.jar



4. После запуска osci-render, в его интерфейсе надо нажать кнопку Start new proj... . Программа подвиснет, и чтобы она продолжила работать, надо переключиться в QJackCtl и запустить jackd. Osci-render перейдет в свой рабочий интерфейс.


Если перехода в рабочий интерфейс не случилось, нужно попробовать сделать наоборот: запустить jackd в QJackCtl, запустить oscii-render, остановить jackd в QJackCtl, oscii-render покажет рабочий интерфейс, после чего снова можно включить jackd.


Иногда osci-render, установленный из deb-файла не работает или зависает наглухо при переходе в рабочий интерфейс. Тогда нужно попробовать запустить jar-файл через Java. Следует учитывать, что нужна именно Java от Oracle, версии не менее 19. В OpenJDK программа нормально не работает.


Рабочий интерфейс osci-render выглядит так:





Внимание! Чтобы программный осциллограф работал, обязательно надо проследить чтобы в начальном экране галка Start muted, которая находится под кнопкой Start new proj... была отключена.



5. Запустить Blender. Установить в нем плагин osci-render-blender-addon.zip. Для этого надо выбрать разадел Preferences:





В нем надо выбрать раздел Add-ons, и нажать сверху кнопку Install... . Нужно будет выбрать zip-файл с плагином и нажать Ок. Плагин будет установлен. Нужно не забыть нажать на галку, чтобы плагин активировался:





6. Далее, таким же способом, что выбиралась область Preferences, надо выбрать область Properties. В ней надо выбрать раздел Render (Render Propertis), который открывается путем нажатия на значек фотоаппарата.


В этом разделе надо развернуть osci-render settings, и в развернутой области будет одна-единственная кнопка Connect to osci-render. Ее нужно нажать для соединения Blender и osci-render.


Признаком того, что соединение произошло успешно, будет две вещи:


  • В Blender кнопка изменится на Close osci-render connection.
  • В osci-render возле кнопки Choose File появится надпись Rendering from external Input.



7. В Blender, таким же образом, что и выбиралась область Properties, надо выбрать область 3D Viewport.



8. В osci-render необходимо вызвать пункт меню: Window - Open software oscilloscope. В результате в системном браузере, например в Firefox, откроется окно с виртуальным осциллографом:





Для того, чтобы этот виртуальный осциллограф открылся, необходимо наличие сети Интернет, потому что, по-сути, в браузере открывается ссылка:



https://james.ball.sh/oscilloscope



9. Все инструменты запущены, и вроде как работают.


Вроде как. Потому что по-умолчанию osci-render должен отправлять на программный осциллограф куб. В интерфейсе возле кнопки Choose File написано cube.obj. И в документации сказано, что это специальный тестовый файл. Однако, осциллограф показывает точку.



Пришлось разбираться, как работает связка osci-render и программного осциллографа. Оказывается, при удачном старте, osci-render становится сервером и создает локальный порт 42988. Порт находится в режиме LISTEN, то есть ждет подключения программного осциллографа. Программный осциллограф, в свою очередь, отрывае WebSocket-соединение по адресу ws://127.0.0.1:42988. И между этими двумя сущностями начинает двигаться какой-то сетевой траффик. По идее, программный осциллограф получает данные от osci-render. Но почему он не показывает тестовый куб - полная загадка.


Был открыт баг-репорт, и нужно ждать когда автор проекта что-нибудь ответит.


https://github.com/jameshball/osci-render/issues/165



10. Далее надо попытаться создать отображаемый объект в Блендере. Для этого надо удалить стандартный куб, выделя его и нажав кнопку Del на клавиатуре. Затем надо нажать Shift+A, и выбрать Grease Pencil, и в подменю кликнуть на какой-нибудь объект, например Monkey или Scene Line Art. В центре координат появится новый объект.



11. Надо выделить созданный объект (он должен стать оранжевым), и в правой части экрана в свойствах выбрать Modifier Properties:





В этой области, в выпадающем меню Add Modifier, надо выбрать Line Art:





Далее, в разделе Bake надо нажать кнопку Bake Line Art, чтобы "запечь" выбранный объект:





12. Согласно документации, при нажатии кнопки Bake Line Art, виртуальный осциллограф должен начать показывать данный объект. Однако на практике, Blender в этот момент сегфолтится.



Writing: /tmp/blender.crash.txt

Ошибка сегментирования


# Blender 3.6.1, Commit date: 2023-07-17 12:50, Hash 8bda729ef4dc

bpy.context.area.ui_type = 'PREFERENCES' # Property

bpy.data.window_managers["WinMan"].addon_search = "os" # Property

bpy.context.area.ui_type = 'PROPERTIES' # Property

bpy.context.space_data.context = 'RENDER' # Property

bpy.context.area.ui_type = 'VIEW_3D' # Property

bpy.ops.object.gpencil_add(align='WORLD', location=(0, 0, 0), scale=(1, 1, 1), type='STROKE') # Operator

bpy.ops.object.delete(use_global=False, confirm=False) # Operator

Deleted 1 object(s) # Info

bpy.context.space_data.context = 'TOOL' # Property

bpy.context.space_data.context = 'RENDER' # Property

bpy.context.space_data.context = 'MODIFIER' # Property

bpy.ops.object.gpencil_modifier_add(type='GP_LINEART') # Operator

# backtrace

# Python backtrace



Что нужно сделать чтобы без ошибки увидеть объект, транслируемый из Blender, пока непонятно, нужно разбираться дальше.


Был открыт баг-репорт, разработчики подтвердили наличие проблемы. Надо ждать новой версии Blender, в которой эта проблема будет исправлена:


https://projects.blender.org/blender/blender/issues/110751


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования