Lightmap и готовые модели

Материал из BestWay wiki
Перейти к: навигация, поиск

Создание lightmap для готовых и разрезанных на части моделей


Чтобы не переделывать имеющуюся модель заново, можно провести ряд операций, позволяющих внедрить лайтмап в готовый набор, например, нарезанного на части дома. Это непростая задача, поэтому лучше сразу предусмотреть лайтмап при подготовке модели с нуля. Однако, если возникла необходимость исправить старую модель, то лучше если все описанные ниже операции будет выполнять тот, кто саму модель делал – так будет проще сориентироваться в наборе имеющейся геометрии.

Итак, пусть нам требуется внедрить лайтмап в готовую модель дома. Последовательность подготовки такая:

  1. создаем копию сцены с нашей моделью
  2. все ЛИШНИЕ объекты, которые не экспортируются и служат вспомогательными (чаще всего они оказываются скрытыми в сцене) - удаляем
  3. выделяем ВСЕ служебные объекты (объемы, точки привязки эффектов и т.п.) и скрываем их – они будут только мешать
  4. выделяем все объекты, на которых лайтмапы НЕ будет (окна, двери, плакаты и т.п. геометрия) и скрываем их тоже
  5. Выделяем все объекты и делаем group->open. ВНИМАНИЕ! Должны остаться только те части модели, на которых нужно расчитать лайтмап + те объекты, на которых лайтмап не нужен, но они должны отбрасывать тень (например, водосточные трубы) – такие вспомогательные объекты выделяем, двигаем весь набор далеко в сторону, на целое и легко запоминающееся число единиц (например 100) и замораживаем, чтобы не выделить их при работе. Смещение нужно для удобства, чтобы в дальнейшем выполнить разборку модели на исходные части и чтобы эти самые исходные части не мешали нам при расчете освещения.
  6. ОБЯЗЯТЕЛЬНО «чистим» редактор материалов – заполняем его пустыми материалами (например с помощью скрипта BlurScript->ClearMedit или вручную), выделяем все оставшиеся в сцене объекты и в редактор материалов вытаскиваем материалы с выделенного набора – get from selected Lightmap 12.PNG (НЕ из всей сцены get from scene). Если модель выполнялась аккуратно, то количество материалов не создаст проблемы. Если же при изготовлении модели образовалось МНОГО мультиматериалов, придется очень тщательно поработать над их чисткой. Это один из самых длительных процессов при подготовке модели к нанесению лайтмапы, и как показывает практика, готовые модели часто страдают подобным хаотическим набором мультиматериалов.
    • Выносим в редактор материалов все (сколько поместится в максимальное кол-во ячеек, см.опции редактора материалов, cycle 3x2,.....) мультиматериалы с ОДИНАКОВОЙ структурой. Пример: material#7876 [mtl#1, mtl#5], material#9865 [mtl#1, mtl#5], material#0978 [mtl#1, mtl#5] и т.п. После этого выделяем первый из таких материалов в редакторе и нажимаем на кнопку select by material Lightmap 13.PNG . В появившемся списке будут выделены те объекты, на которых текущий материал. Закрываем это окно и выделяем в редакторе второй мультиматериал. Повторяем select by material, теперь выделяем предложенные объекты и назначаем им ПЕРВЫЙ мультиматериал из набора одинаковых. Потом выделяем третий мультиматериал, выделяем его объекты и назначаем им ПЕРВЫЙ мультиматериал. Повторяем операцию до тех пор, пока у нас не останется ОДНА копия мультиматериала с данной структурой.
    • Снова чистим редактор материалов. Те же вышеуказанные операции проделываем с остальными одинаковыми мультиматериалами, пока не останется набор из нескольких мультиматериалов с РАЗНОЙ структурой. Для удобства можно выбрать материалы у которых одинаковый набор дочерних материалов, но разный их порядок и, поменяв (ВНИМАТЕЛЬНО!) в модели идентификаторы материалов, привести такие наборы к одному мультиматериалу.
  7. Итак у нас в редакторе материалов имеется некоторый набор (в удачном случае не более 10) материалов, назначенных частям модели, над которыми нам предстоит работать. Если в имеющихся в редакторе мультиматериалах повторяется какой-либо дочерний материал (например material#1245 [mtl#1,mtl#5], material#1872 [mtl#1,mtl#3],......) то такой материал нужно вынести (drag-and-drop) в неиспользуемую ячейку редактора материалов, затем выделить мультиматериал, где этот материал (mtl#1) присутствует и из скопированной ячейки «втащить» в соответствующий слот мультиматериала (material#1245). На запрос instance or copy? ответить instance. Это нужно для того, чтобы у нас не было в сцене одинаковых материалов в нескольких независимых копиях (недоработка 3dsmax – в сцене могут быть одинаковые материалы с одинаковыми именами, но являющиеся разными сущностями)
  8. Выделяем ВСЕ обрабатываемые объекты и делаем с них копию (НЕ instance!). Двигаем весь набор на ту же дистанцию, куда ранее сместили вспомогательные объекты. После этого выделяем оригиналы и замораживаем их.
  9. По очереди выбираем каждый из обрабатываемых кусков и удаляем (detach) из них те полигоны, на которых лайтмапы НЕ будет (места разломов, решетки и т.п.) Отделенные части именуем так, чтобы легко было потом узнать, откуда они и скрываем их (hide).
  10. Если в оставшихся частях есть материалы, которые будут иметь лайтпам, но эти материалы также принадлежат объектам БЕЗ лайтмапы, то следует сделать копии таких материалов (копии будут содержать лайтмап, исходники – нет) и назвать такие копии по-другому.
  11. У нас остались только те части, на которых БУДЕТ расчитываться лайтмап. В редакторе материалов выделяем неиспользуемый слот, создаем в нем материал с клетчатой текстурой в канале #2 для контроля развертки текстурных координат лайтмапы. Назначаем этот материал всем оставшимся объектам.

Итак, мы завершили подготовку модели к созданию лайтмапы. Теперь непосредственно сам процесс:

  1. Для каждой части создаем раскладку второго канала текстурных координат так, чтобы масштаб наложения на разных кусках совпадал – это легко проконтролировать визуально по клетчатой текстуре временного материала. Следует помнить, что кластеры раскладки каждой части для удобства НУЖНО разносить подальше от места раскладки соседних частей – так удобнее будет впоследствии работать с объединенным в один mesh набором объектов.
  2. После обработки всех частей нужно приаттачить все части друг к другу, создав ОДИН объект БЕЗ сшивания вертексов и переназначения идентификаторов материалов. Желательно после этого сделать Reset XForm, сколлапсировать стек модификаторов и при выворачивании модели наизнанку инвертировать ее нормали.
  3. На получившемся объекте выполняем укладку кластеров текстурной развертки так, чтобы получить приемлемое и оптимальное их расположение.
  4. Далее выполняем операции, описанные в п.2, чтобы получить собственно лайтмап. Проверяем полученную текстуру и при необходимости вносим изменения в раскладку.
  5. Создаем копию (НЕ instance!) объекта, с которого была сделана лайтмапа и копию скрываем (она может нам позже пригодиться при перерасчете лайтмапы).
  6. Размораживаем все. Вспомогательные объекты (трубы и т.п.), которые были заморожены, двигаем назад к их исходному местоположению (на те самые 100 единиц). Теперь выделяем наш объект и начинаем разбирать его на части.
    • Отделяем фрагмент, соответствующий исходной модели и делаем detach.
    • После этого unhide тот набор полигонов, который был ранее оторван от данного фрагмента (например полоса разлома стены)
    • затем назначаем отделенному куску тот материал, который назначен исходной части
    • аттачим к полученному объекту вышеуказанный набор полигонов и двигаем весь объект обратно к исходному месту. При назначениях материала и присоединении геометрии НЕ должно появляться предупреждений об изменениее mtl id. Если это произошло – значит что-то сделали не так, нарушили последовательность действий.
    • ВНИМАНИЕ! Выделяем иходный фрагмент, превращаем его в editable mesh, выбираем под-объекты face и снимаем выделение со всех полигонов. После этого добавляем модификатор Delete Mesh, потом Edit Mesh и аттачим к получившемуся пустому месту наш заново собранный экземпляр данного фрагмента с лайтмапой, который уже установлен на нужное место.
    • Повторяем набор операций до тех пор, пока весь объект с лайтмапой не будет разобран на части и возвращен в исходные позиции.
  7. unhide all, unfreeze all. Выделяем все и делаем group->close. Скрываем копию объекта, на котором считалась лайтмапа и источник света – сейчас это должны быть единственные вспомогательные объекты в сцене.
  8. В редакторе материалов выбираем те материалы, на которых присутствует лайтмапа, настраиваем их в соответствии с п.4. ОЧЕНЬ желательно вынести текстуру лайтмапы в common/model, чтобы не пришлось потом это делать вручную.
  9. Экспортируем модель.