Метаданные в файле Alembic

alembic

За время своей практики использования Alembic файлов я не раз встречался с ситуациями когда требовалось записать вместо с файлом дополнительные данные. Обычно я справлялся дополнительным файлом JSON рядом с abc, но решил всё же разобраться как записать мата данные в сам файл кеша. Оказалось не так сложно если использовать стандартный модуль cask.

Код выложен в виде gist на Github. Там так мало кода что я не решился делать отдельный репозиторий и модуль. Поэтому данный пример лишь быстрое и простое решение конкретной задачи а не какой-то готовый способ сделать что-то полноценное.

Метод имеет недостатки. Дело в том что alembic не позволяет что-либо писать в файл который открыт на чтение, поэтому мы можем лишь открыть файл и записать новый, добавив некоторые данные. После чего удалить старый файл. Именно это и делает функция По неизвестным мне причинам cask не справился с полноценной перезаписью данных и выводит в консоль сообщения о потере некоторых типов данных. В моём случае использовались файлы, созданные с помощью Exocortex Crate, может в этом и причина. Мне требовалось записать только PointCache, то есть без каких-либо данных о полигонах или еще чём-то, одни лишь точки. Вместе с кешом я записал путь к файлу Maya, на который рассчитан кеш, и неймспейс для референсирования, чтобы совпали пути в сцене и в кеше. Плюс еще некоторые данные. Всё подается в виде словаря, который можно сериализовать в json. Функция чтения так же вернет готовый словарь.

Я понимаю что метод весьма не элегантен, но он тоже имеет право быть. Используйте осторожно! В будущем под один из своих проектов я планирую написать полноценный экспорт в alembic с множеством возможностей, включая запись метаданных из любых источников. На этот раз планирую прилагать удобные hda ассеты для распаковки этих данных в Houdini.

Leave a Reply

Your email address will not be published. Required fields are marked *