Уголок tool-программСтатьи

Советы по архитектуре плагина экспорта геометрии, или как оно должно быть

Автор:

  Введение
  Обработка ошибок
  "Правильные" сообщения об ошибках
  Масштабирование
  Что экспортить
  Запоминание параметров экспорта
  Build number
  Installer
  Лог
  Проверка на соответствие спецификации
  Поворот сцены
  Заключение
  Ссылки

Введение

Если вы являетесь tool-программистом, вам неизбежно придется работать с художниками. Этот набор советов поможет сэкономить время, используя правильный подход к решению проблем. На практике, эти советы помогают сэкономить времени не меньше, чем знание всех секретов 3DS MAX.

Да - эта статья не обсуждает программную архитектуру плагина.

Обработка ошибок

Если вы думаете, что сэкономили время, опустив обработку ошибок и исключительных ситуаций - то сильно ошибаетесь. Всякий раз, когда плагин "вылетает" у  художника  - будут звать вас. Помножьте это на количество пользователей плагина и количество раз, когда они вызывают экспорт - и вы получите full-time job по поддержке пользователей.

Плагин никогда не должен "вылетать", независимо от того, соблюдены требования к сцене 3DS MAX, или нет.

Также имейте в виду, что ошибка в плагине ведет к "вылету" 3DS MAX, а художник мог и не сохраниться до экспорта....

"Правильные" сообщения об ошибках

Сообщение об ошибке "Failed !", мало чем поможет для решения проблемы, описанной выше. "Правильное" сообщение об ошибке должно содержать:

1. Описание ошибочной ситуации.
2. Причины, включая возможные, которые привели к возникновению этой ситуации.
3. Способ разрешить ошибочную ситуацию.

Многие программисты ограничиваются пунктом 1, считая, что все остальное - само собой разумеется. На самом деле, пункт 3 является наиболее важным. Не бойтесь давать длинные описания. Как известно, у художников другое мышление, и вещи, очевидные для программиста, не являются таковыми для художника.

Сообщение "Ошибка: Нод PORT_GUN не имеет родителя" - непонятно художнику, и в результате он придет к вам с претензией "У меня там плагин какую-то ошибку выдает". Открытым текстом напишите, что объект PORT_GUN должен быть прилинкован к ладони персонажа. Если это возможно, укажите  главу в руководстве, в которой описано, что такое PORT_GUN, и какие к нему требования. И еще: пишите сообщения на русском языке!

Масштабирование

Сколько бы вы не говорили, кто-нибудь обязательно сделает модель в других единицах (units), чем требуется. По этой причине в параметрах экспорта обязательно нужно сделать возможность масштабировать модель при экспорте. Это поможет сэкономить время на переделке сцены, т.к. отскейлить привязанный Biped в 3DS MAX очень сложно.

Что экспортить

Сделайте возможность экспортить только часть сцены. Например, мы используем опции: "Export selected only" и "Export hidden". Кроме этого объекты, название которых начинается с "NOEXPORT_" - не экспортятся никогда. Аниматоры будут добавлять в сцену различные вспомогательные объекты, например - скамейки, столы. Заставлять их удалять эти объекты перед каждым экспортом - неразумно.

Запоминание параметров экспорта


plugarch_hax_1 | Советы по архитектуре плагина экспорта геометрии, или как оно должно быть
Рисунок 1. Параметры экспорта автоматически выставляются в последние использованные значения.

Если при экспорте модели нужно указывать какие-либо параметры, запоминайте последние использованные значения в user-defined свойствах max-файла (Interface->FindProperty()). При следующем экспорте все элементы управления в диалоге параметров должны содержать значения, использованные в прошлый раз. Например, через неделю вы уже можете и не вспомнить, с каким параметром Scale была отэкспорчена модель.

В идеале, нужно также выставлять и имя файла в диалоге экспорта в последнее использованное. К сожалению, 3DS MAX не предоставляет для этого стандартной функциональности, но, как обычно, желаемого можно добиться, применив знание WinAPI.

Build number

Где-нибудь в диалоге экспорта отображайте build number, или build date/time. Это поможет сэкономить время на проверки в ситуациях, когда у художника на самом деле просто старая версия плагина.

Installer


plugarch_hax_2 | Советы по архитектуре плагина экспорта геометрии, или как оно должно быть
Рисунок 2. Инсталлятор сам находит каталоги 3DS MAX и выставляет чекбоксы.

Может показаться, что взять плагин из репозитория и скопировать в каталог "C:\3dsmax\plugins" - это просто.  На самом деле оказывается, что художники не всегда являются грамотными пользователями.
Желательно, чтобы плагин лежал в репозитории в виде инсталлятора, который сам находит каталог 3DS MAX и устанавливает плагин. Сделать его можно, например, с помощью InnoSetup [1], с помощью встроенных паскаль-скриптов.

Лог

После экспорта выводите диалог с логом, или хотя бы используйте OutputDebugString() во время экспорта. В лог нужно выводить сообщения о принятых решениях, например "Кость Bip 01 Finger1 пропущена - нет привязанных вершин", "Объект gun01 пропущен - нет UV координат" и т.д. Другими словами, максимизируйте свои шансы "не отходя от кассы" указать причину, почему что-то происходит не так, как задумано. Иначе вам придется просить художника переписать вам max-файл, запускать у себя под отладчиком - что займет на порядок больше времени.

Строки, выводимые OutputDebugString(), можно смотреть с помощью утилиты DbWin32 [3].

Проверка на соответствие спецификации

  Если ваш движек налагает определенные требования к моделям, введите возможность проверять их еще на стадии экспорта. Например, если персонаж обязательно должен содержать объекты PORT_FIRE и TAG_FRAMECENTER - это и есть спецификация для данного типа модели. Тип модели выбирается в диалоге параметров экспорта. Без этой системы неправильная модель попадает к программисту AI, который потратит время на ее проверку и возврат назад к моделеру.

  Спецификация также может автоматически выставлять правильные параметры экспорта.

Поворот сцены

  Кроме единиц измерения, моделеры иногда путают ориентацию модели. Когда персонаж уже сделан, отекстурирован, привязан и анимирован, вдруг оказывается, что он должен быть направлен лицом вдоль оси Z, а не X. С большой долей вероятности вас попросят доделать поворот сцены при экспорте, потому что повернуть сцену в 3DS MAX не получается. Сопротивляйтесь! Ладно - мастшабирование, но усложнять интерфейс плагина до бесконечности - тоже плохо, так как чем больше параметров - тем больше вероятность, что они будут выставлены неправильно.

Я лучше расскажу, как поворачивать сцену в 3DS MAX. Я сам некоторое время считал, что повернуть отанимированного Biped'а невозможно. На самом деле, для этого нужно создать dummy в центре координат, прилинковать к нему все объекты, являющиеся корнями иерархий (включая Biped), и повернуть этот dummy. После поворота его можно удалить. Важным моментом является то, что к этому dummy нельзя привязывать объекты с модификатором Physique, объекты с контроллером Link Constraint, сплайны и т.д.- другими словами объекты, которые двигаются косвенно, в результате сдвига контролирующих объектов (кости, target контроллера, контрольные точки сплайна). Мой плагин SceneMainTool [2] создает такой dummy одним кликом.

Заключение

  Этот список не претендует на полноту - я бы хотел услышать подобные советы в обсуждении статьи.


Роман Лут

http://www.deep-shadows.com/hax/

Ссылки


1.InnoSetup


2. SceneMainTool plugin


3. DbWin32

22 апреля 2006 (Обновление: 23 апр 2006)

Комментарии [9]