Решил я тут написать небольшую (огромную) статью, о том как я делаю игровые модели. В общем начал я делать это оружие, и пришла такая мысль, что можно попробовать описать весь процесс, вдруг кому-то пригодиться. Это не только моя первая статья, ещё и моя первая работа в качестве дизайнера. Небольшое отступление, я не буду рассказывать тут как правильно моделировать, или раскрашивать модель, объяснять те или иные решения по дизайну и сетке и т.п. Так же тут не будет информации по анимации, риггинге и т.п. Для этого есть специализированные статьи, и когда будет необходимо, я буду ссылаться на это. Эта статья рассчитана больше для начинающих, тех кто уже познал основы моделирования но не особо понимает как выглядят все ступени создания игровой модели. Тут будет много информации, иногда она будет не полной, но это будет толчком в нужном направлении, чтобы поискать более полную информацию и поглубже изучить определённые темы.  Здесь я расскажу о конкретно моём общем процессе создание модели. Я не претендую на истину в последней инстанции, это то как именно я делаю, то что я наработал за несколько лет работы. Есть десятки других способов делать всё что я тут описываю, и делать быстрее, но база у всех одна, отличаются лишь методы, программы и т.п. Это довольно долгий способ, но универсальный, подходит как для простых моделей, так и для сложных, с минимальными проблемами в процессе. После практики, по скорости будет конечно немного уступать другим, но не сильно, на эту модель ушло 1.5-2 недели, включая разработку дизайна. Тут в основном будет только техническая часть (или как это лучше назвать), проще говоря, что, как и где нажать чтобы получился определённый результат, и за что отвечают определённые кнопки, функции, определения и т.п. Буду стараться объяснять всё подробно. И да, я никогда не писал подобные статьи, это моя первая работа и думаю что последняя, просто был некий порыв написать это. Что-то вроде благодарности, за то что я в своё время учился на таких-же статьях, как на этом сайте, так и на десятке других. И так как учился я в основном на обрывках информации, тут я решил улучшить несколько старых техник и максимально всё собрать вместе. Из-за такого обучения терминология у меня может хромать, хоть и понятна. Так что заранее извиняюсь если будет некомфортно вместо "текстурирование" читать "раскрашивание" и т.п. вещи. И ещё, если с названием "Рис" есть знак "+", то его можно приблизить. Программы которые я использую - 3ds Max 2017, Substance Painter, Substance Designer, Adobe Photoshop, UVLayout, xNormal и Marmoset Toolbag, хотя последнюю я рассматривать не буду, там лишь будет просмотр (проверка) модели.  Я уже сделал Low Poly модель, прикинул дизайн, и пожалуй с этого момента и начнём. Вышло примерно так (Рис 1). Далее немного изменю, добавлю пару деталей. Далее, я сделал High Poly модель (она нужна для создания карт дополнительной детализации), хотя можно и наоборот, кому как удобнее, но я в начале делаю Low poly, чтобы потом не подгонять части друг к другу. Собственно получилось так (Рис 2).   Пояснения простых вещей иногда будут для совсем уж новичков. Я иногда буду всё подробно расписывать, а иногда некоторые вещи опускать, я не спец в объяснениях, но постараюсь сделать всё более менее понятно. Потом я начал готовить Low Poly модель для развёртки, настроил каждую деталь (их вышло около 60), сделал группы сглаживания с прицелом на будущую UV развёртку, чтобы швы на развёртке приходились как раз на границу между группами сглаживания, так швы будут практически незаметны. Если же делать так чтобы на границе не было шва, то при запекании карты нормалей, часто может возникнуть подобная проблема. (Рис 3). И это не самый худший вариант. Но тут ещё нужно думать о оптимизации. Дело в том, что на развёртке, в том месте где идёт шов, вершины дублируются на обе стороны, что будет давать дополнительную нагрузку на ПК. Попробую нарисовать как это примерно работает (Рис 4).   Так что если максимальная оптимизация в проекте не особо важна, да и модель не слишком сложная, то в принципе об этом можно особо и не думать. Я же всегда придерживаюсь некоторого баланса, где можно не делать шов при том что есть разные группы сглаживания, там не делаю. В самой развёртке ещё желательно делать более цельные островки (отдельные части на развёртке), это нужно для того, чтобы текстура была более качественная, то есть швы на поверхности где одна группа сглаживания видно практически всегда, их можно прятать, делать практически незаметными, но стык будет видно если присматриваться, и чем их будет меньше, тем качественнее получиться наложить текстуру. К сожалению без таких швов не обойтись, но если всё правильно сделать, то их будет не видно. Так что тут нужна практика. Прятать можно швы к примеру там где игрок не увидит эту часть модели, или на том месте будет текстура которая скроет его, или использовать трипланарное проецирование текстур и т.п. С опытом, вы на автомате будете видеть места где можно делать швы, а где могут быть проблемы. И ещё важно чтобы островки на развёртке были в одном масштабе. Иначе текстура где-то будет растянута, где-то сжата или искажена, для того чтобы следить за этим, используйте чекер развёртки. Чекер это такая текстура с шахматной доской, либо сетка с цифрами, в том приложении где будет производиться развёртка, должна быть функция с подобной проверкой. Если всё правильно, то квадраты чекера будут ровные. Если будут проблемы, то квадраты будут вытянуты или искажены, впоследствии с текстурой будет тоже самое. Вообще, некоторые искажения допускаются, небольшие, в тех местах где практически это будет незаметно, но лучше делать так чтобы всё было более менее ровно. Ещё островки которые похожи на квадрат или прямоугольник лучше делать ровными, если они немного изогнуты, чем ровнее островки, тем проще на них будет рисовать.  В этот раз я решил сделать развёртку с наложением, то есть у меня есть несколько шипов, но на развёртке он будет один, тоже сделаю и с другими повторяющимися деталями. Я старался раньше так не делать, но последнее время делаю именно так, чтобы сэкономить место на развёртке. После того как у модели появиться развёртка, повторяющиеся детали будут размножены, и у них будут одни текстурные координаты, это значит что если на одной детали нарисовать что-то, то и на всех скопированных деталях будет тоже самое. Это нужно учитывать, до того как вы начнёте красить модель. Не забывая, что после всех манипуляций, далее, скопированные части модели можно поворачивать в разные стороны и отражать, если этим правильно воспользоваться, то можно добиться уникальных текстур в одинаковых деталях.  Да и перед тем как делать развёртку, я на всякий случай делаю сброс параметров размера модели и нормалей. Я не программист, и записал свои действия в программе в скрипт, который сохранил, и любой в теории может его скопировать, вставить в программу и воссоздать его. Иногда, правда, он не срабатывает, потому что макс немного глючный (у меня 2017), тогда нужно сделать вручную. Постараюсь максимально просто описать что нужно сделать и как это работает. Выделяем все полигоны в модели, ищем кнопку «Flip», жмём на неё, полигоны вывернуться. На деталь накидываем модификатор «EditNormals», переходим в модификатор, выделяем всё «Ctrl+A», ищем кнопку «reset» тем самым закрепив нормали. Тут можно либо сделать конвертацию в Edit Poly, либо правой кнопкой по модификатору и нажать на Collapse to. Это можно и не делать сейчас, но я делаю на всякий случай. Далее переходим на вкладку «Utilites» (Рис 5) Ищем там кнопку "Reset XForm" Жмём «Reset Selection», далее жмём правой кнопкой мыши на модели, и жмём Convert to Editable poly. И всё это с момента выворачивания полигонов нужно проделать ещё раз, чтобы обратно вывернуть полигоны, и зафиксировать всё. Я долго искал способ справиться с проблемами макса, и это самый лучший способ который я смог придумать, на тот момент никто из тех с кем я общался не знал как решить эту проблему, точнее она решалась, но всегда по разному, то есть не было 100% рабочего способа, да и способы эти были мягко говоря извращёнными (хотя мои способы тоже так можно назвать). В целом это и есть описание скрипта. Сам скрипт чуть ниже. Чтобы добавить его себе, нужно на вкладке "Utilites" найти MAXSсript, нажать на New Sсript. Вставить весь скрипт в открывшееся окно, выделить весь текст, и просто перетащить его на Main Toolbar - это там где кнопки привязок, слоёв, выделения перемещения и т.п. Появиться кнопка, её можно немного настроить, через правую копку мыши «Edit Bottom Appearance». Всё, теперь при выделении детали, можно нажать на появившуюся кнопку, и скрипт по идее должен сработать, но как я и говорил, не всегда он работает. Ещё, если в модели больше 100000 полигонов, эту цифру в скрипте можно изменить, я добавил 100000 так как это максимальное количество полигонов которое я когда либо использовал для Low Poly. К слову, скрипт в основном был создан для борьбы с импортом моделей из формата .OBJ. После импорта, было невозможно изменить группы сглаживания, скрипт решает как эту проблему, так и множество других, связанных с багами макса.   Вот и сам скрипт: (subobjectLevel = 4actionMan.executeAction 0 "40021"$.EditablePoly.SetSelection #Face #{1..100000}$.EditablePoly.flipNormals 1modPanel.addModToSelection (Edit_Normals ()) ui:onactionMan.executeAction 0 "40021"$.modifiers[#Edit_Normals].EditNormalsMod.SetSelection #{1..100000}$.modifiers[#Edit_Normals].EditNormalsMod.Reset ()modPanel.addModToSelection (XForm ()) ui:onmacros.run "Modifier Stack" "Convert_to_Poly"subobjectLevel = 4actionMan.executeAction 0 "40021"$.EditablePoly.SetSelection #Face #{1..100000}$.EditablePoly.flipNormals 1modPanel.addModToSelection (Edit_Normals ()) ui:onactionMan.executeAction 0 "40021"$.modifiers[#Edit_Normals].EditNormalsMod.SetSelection #{1..100000}$.modifiers[#Edit_Normals].EditNormalsMod.Reset ()macros.run "Modifier Stack" "Convert_to_Poly"modPanel.addModToSelection (XForm ()) ui:onmacros.run "Modifier Stack" "Convert_to_Poly"clearSelection()) Развёртку я делаю в программе UVLayout. Для развёртки я удаляю те части которые повторяются (позже более подробно опишу это), после подготовки модели к покраске, я всё снова размножу. Чтобы импортировать туда модель, использую плагин UVPipe для 3Ds Max, так гораздо проще, без ручного экспорта/импорта модели. Помимо всего прочего, при создании развёртки обязательно нужно учитывать расстояние между островками на UV, так как в будущем мы будем делать Padding (отступ), чтобы текстуры слегка выходили за свои границы, впрочем позже поясню для чего это всё, но для развёртки размером в 4К, достаточно отступа примерно в 20 пикселей. Вот что вышло у меня. (Рис 6+).   Я всегда оставляю на развёртке немного свободного места (но без энтузиазма), чтобы потом, если понадобиться, добавить пару небольших деталей, и как позже выясниться, это место ещё пригодиться. Да, да, я знаю что развёртка слабовата, можно было на 15-20% сильнее всё ужать, но мне и этого хватает, а вообще по хорошему нужно максимально практично использовать место на UV. После автоматической сборки, лучше руками всё подкорректировать (если нужно). И масштабировать нужно не отдельными островками, а искать островки от какой либо детали, и уже их все вместе масштабировать, иначе будет неестественно смотреться. В общем на этом этапе, уже нужно знать хотя бы примерно, как будет выглядеть модель, где какие текстуры будут, хотя бы в общих чертах, чтобы на основе этого планировать развёртку.  После создания UV, нужно просто нажать на Send, и в максе на каждую часть модели наложится модификатор "UVLayout UV's" (Рис 7+), после этого нужно просто конвертировать модель в Edit Poly, или же нажать правой кнопкой на модификатор и выбрать Collapse To. После, чтобы проверить можно наложить на все части модели модификатор Unwrap UVW, открыть редактор и увидеть, что всё нормально (Рис 8+), после этого можно как удалить модификатор Unwrap UVW, так и сделать тоже что и с прошлым. Я конвертирую, на всякий случай, мало ли. А если нет плагина, то из 3Ds Max нужно экспортировать модель в формате OBJ. с настройками как на (Рис 14). Импортировать её в UVLayout, в настройках загрузки переключить UVs на New если стоит Edit. После работы сохранить модель можно в тот же OBJ. файл и импортировать обратно в 3Ds Max, после чего использовать на модели скрипт, который я описал выше, и по новой назначить группы сглаживания, так как они часто слетают, точнее они остаются такими же как и были, но если попробовать их поменять, то цифры изменяться, а результата не будет, если оставить всё как есть, не известно как это повлияет на дальнейшую работу.  Далее буду запекать карты Normal, Curvature и Ambient Oclusion. С одной фишкой, я много экспериментировал в своё время, и придумал один способ, как можно качественно запечь много объектов за минимальное время с хорошим результатом. Возможно сейчас есть способы и лучше, в других программах, с другим подходом, но я годами пользовался этим способом, и мне легче делать так. Если есть что-то проще, быстрее и качественнее, прошу поделиться в комментариях, надо будет изучить. В общем, вот что я придумал, ну точнее когда я обучался, было несколько техник в интернете, я их совместил и усовершенствовал. Для начала я делю модель на несколько групп, и объединяю каждую в единый объект. На всякий случай поясню. У меня есть 10 частей Low Poly модели, я их объединяю в 1, тоже делаю и с High Poly и Cage, о последнем расскажу далее. Обычно это большие, средние и мелкие части, но есть и те, с которыми есть проблемы, они пекутся отдельно, далее поясню почему, и те которые не нужно печь вообще, так как у них нет рельефа, это просто плоскость без углов. Вот как выглядит разделение (Рис 9). Помимо Low и High poly, ещё нужна Cage модель. Cage, как ясно из названия это клетка для печки. Вообще можно печь без клетки, так даже проще, иногда страдает качество, но редко, когда отдельных частей не много, этот способ наверное лучший, но для больших моделей лучше делать пачкой. В общем кому интересно, в сети есть несколько статей о том как запекать сразу все детали. Я пробовал так, но качество оставляло желать лучшего. Cage модель делается из Low Poly модели. Есть специальный модификатор, который может сделать клетку, называется "Projection", но его не особо удобно настраивать, и это было бы дольше. Так же лучше использовать контрастное разделение цветов, чтобы перекрытия были лучше видны, я обычно использую белый для Low Poly, зелёный для High poly, и синий для Cage. Сейчас быстро попробую объяснить как работает Cage.  Cage, работает как ограничитель проекции. Если печь без неё, то лучи проецирования будут идти со всех сторон, и всё что попадёт под эти лучи, запечётся на Low Ploly модели, то есть если несколько деталей поставить рядом, и одна будет хотя бы по одной из осей как-то заслонять обзор нужной детали, то она тоже запечётся. Когда есть клетка, лучи проекции идут уже от неё, и печь можно сразу много деталей, без предварительной настройки расстояния. Надеюсь понятно объяснил и не запутал ещё больше. По сути Cage это Low poly модель, но больше, она должна располагаться так, чтобы в неё входили Low и High poly модель, так, чтобы за её границы ничего не вылезало. Важно, Cage не должна отличаться от Low poly модели ни по полигонам, ни по вершинам, иначе в программе будет ошибка. Создаю я Cage при помощи модификатора Push. Клонирую Low poly (лучше это делать командой Clone через правую кнопку мыши) и накладываю модификатор Push, расширяю его так, чтобы хотя бы одна часть модели полностью была закрыта. Как правило и другие части будут практически закрыты, именно для этого я делю модель на примерно равные по габаритам части. Теперь нужно лишь через правую кнопку мыши по модификатору сделать «Collapse To», примерно так выглядит у меня 1 итерация модификатора (Рис 10).   Затем нужно перейти на уровень элементов, выделить те части которые нужно ещё расширить и снова наложить этот модификатор, усилить то что нужно, и так повторять пока все части не станут закрыты клеткой, обычно это 2-4 итерации. Вот другая часть модели которая полностью закрыта. (Рис 11)  Так вот, я разделил модель на разные по габаритам части, так как модификатор работает с размерами (с мм в моём случае), и если усилить большие части на 10 мм, то для мелких частей это будет в разы сильнее, учитывая что некоторые части сами могут быть по 10 мм.  И наконец проблемные части, проблемы возникают с частями, у которых есть вершина, у которой больше двух общих плоскостей (не знаю как точно это называется). Короче говоря, при попытке сделать клетку на такой детали, да даже если пытаться вручную корректировать, возникает такая проблема (Рис 12, 13), и даже если умудриться и закрыть клеткой всю часть, то выйдет очень криво, так как если двигать в одну из сторон, всегда будет открыта одна плоскость, единственный вариант, вытягивать вершину на пересечение всех принадлежащих плоскостей, но это как я и говорил будет криво, результат выйдет неприемлемый. Для таких деталей лучше не использовать Cage, а просто пропечь через автоматическую подгонку. Для следующего шага, нам понадобиться экспортировать все части модели. Совет для новичков, не ленитесь называть части модели своими именами, это конечно приходит с опытом, когда ты в десятый раз из кучи деталей пытаешься найти ту что нужно, а назвал ты их объект 1, или просто 01, или ещё хуже оставить название какое дала программа. Начинаешь понимать, что лучше потратить пару секунд, придумать адекватное название для каждой части, чем потом перебирать каждую часть ища нужную.  Я экспортирую обычно так, имя модели, затем Low, High или Cage, а потом цифра если нужно. Так никогда не запутаешься что к чему. Пример: Electric_Low_1 Electric_High_1 Electric_Cage_1 Назвали все части, и далее экспортируем их, я делаю это с такими настройками, (Рис 14). Пеку я в программе xNormal, я много где пробовал печь, и мой выбор пал на эту программу. Я не говорю что она лучшая, но меня она устраивает на все 100%. Для тех кто не пробовал печь тут, опишу как запекать карты в xNormal. В целом всё, просто, на вкладку High definition meshes перетаскиваем High poly модель, а в Low definition meshes - Low Poly модель что логично. Чтобы добавить Cage, нужно нажать правой кнопкой по Low poly модели, выбрать пункт Browse external cage file и выбрать нашу клетку. Далее на вкладке Baking options нужно выбрать папку, куда будет сохраняться рендер, выставить размер карт, выбрать сами карты, я запекаю только Normal, AO (Ambien Occlusion) и Curvature, (карты Normal и Curvature я пеку одновременно и отдельно от Ambien Occlusion), остальные пока не нужны. Эти карты лучше запекать в формате .TGA. Нужно это для того, чтобы сохранился альфа канал, а он нужен для того, чтобы можно было собрать полную карту в Substance Designer через вычитание альфа канала без лишних манипуляций. И при запекании нужно ставить хотя бы небольшой padding (отступ), Edge padding можно выставить на 2-4 для 4К текстур, в принципе это не обязательно, можно и на 20 ставить, но в дальнейшем может понадобиться альфа канал без отступа, и взять его можно будет отсюда. А вообще отступ подойдёт и минимальный, для дальнейшей работы в Substance Painter, нормальный отступ нужен для дальнейшей работы в самом движке игры для mip mapping (объяснять что это довольно долго, потому как будут затронуты ещё несколько тем, так что лучше почитайте тематические статьи), и его мы добавим при экспорте карт уже из Substance Painter. Antialising ставим на максимум (4х). В целом всё, с Cage моделью можно запекать нажав на — Generate Map. К слову, если вылезет ошибка связанная с Cage файлом, нужно проверить его и Low Poly модель на предмет двойных вершин, вывернутых полигонов, использовать скрипт от багов. И заново экспортировать, и Cage и Low Poly. Но если Cage не используется, то нужно ещё зайти на вкладку Tools, нажать на Ray distance calculator, нажимаем на Go, ждём секунд 10-15, жмём на Stop, потом на Copy results и после этого уже можно запускать Generate Map. Итак, карты Normal и Curvature запечены и готовы к работе, всё прошло без осложнений, к слову модель я проверяю в программе Marmoset Toolbag. Но, я решил показать что будет, если Cage пересечёт основную модель (Рис 15, 16).   А вот та проблемная деталь, запечённая без Cage, есть пара незаметных проблем, но в целом очень неплохой результат (Рис 17, 18).   И быстренько покажу как объединить карты в Substance Designer. Далее я разберу всё более подробно, когда буду экспортировать карты из Substance Painter, а сейчас просто покажу пример. И благодаря тому что я запекал текстуры в формате TGA. ничего в программе не нужно будет настраивать, просто закинуть текстуры, соединить и сохранить. Нам понадобиться создать новый проект File - New Substance. Тут можно ничего не трогать и нажать на OK. Если что-то создалось на сетке, то это можно удалить. Далее перетягиваем на сетку все текстуры одной карты, то есть, к примеру у меня вышло 2 карты по 4 текстуры на карту, вот как раз эти 4 текстуры одной карты и нужно перетащить на сетку. Далее создаём Node - Blend, Правой кнопкой мыши на сетке Add Node - Blend. Создаём столько, сколько нужно, и Node - output. Тянем в 2 верхних канала Blend две текстуры, получиться 1 смешанная текстура, так же делаем и с другими двумя. После, то что у нас получилось соединяем так же в следующей Node - Blend, а её уже тянем в Node - output и выделив её двойным щелчком мыши, сохраняем. В целом это всё, так же делаем с другими картами если нужно. На всякий случай вот схема, как это выглядит (Рис 19+). Пришло время запекать AO (Ambient occlusion), тут будет чуть сложнее чем с прошлыми картами. Я экспериментировал, и придумал один способ, но по любому это уже кто-то до меня придумал, а я просто решил не искать информацию и методом проб и ошибок вывел его. Вот что у меня вышло. В общем постараюсь описать подробно, но некоторые вещи возможно опущу. Если по простому, то карта печётся в целом так-же как и Normal. При запечке, создаётся источник света, освещает модель и на основе этого создаётся самозатенение, ну по крайней мере когда я изучал эту тему понял именно так. Карта так-же печётся с High poly на Low poly модель, если понять принцип, то будет гораздо проще. Запекаю я эту карту так-же в программе xNormal. С параметрами карты можно поиграть и посмотреть результат, у меня они стоят почти по стандарту, я лишь изменил рендер на OpenRL map renderer, с ним результат мягче и быстрее, количество лучей поставил больше и изменил немного угол, ещё убрал галку с Allow 100% occlusion, и выставил разрешение меньше итогового, чтобы тестовые результаты были быстрее (Рис 20+).   Важно перед этим шагом, уже знать как будет выглядеть итоговая модель, так как сейчас нужно будет размножить те детали что мы удаляли перед развёрткой, сейчас самое время хорошенько подумать что и где будет и расставить всё по местам, потом это будет сложнее. Я сделал 2 варианта файлов 3Ds max, в 1 я оставил модель без повторяющихся деталей, а во 2 файле я копировал всё что хотел, важно копировать Low и High poly части вместе, я их просто выделяю вместе и копирую сразу вместе, так будет меньше проблем в будущем. Из 1 файла, я беру Low poly модель, а из 2 файла High poly именно с неё я буду запекать, так не будет ненужных артефактов. Выглядит как-то так (Рис 21). Естественно High Poly должна быть в тех же координатах что и Low Poly, собственно как и при любой печке, а это просто как пример как они у меня выглядят, чтобы не запутаться. Важно, эту карту печь лучше в формате .PNG, далее распишу проблему связанную с этим, возможно эта проблема возникает у единиц, но всё же будет полезно почитать, если будет та-же проблема. Пояснение в конце этой части. Вышло вот так (Рис 22), да не особо хорошо, но, это будет основой, на которую я буду накладывать отдельные части. После я просто брал те части моделей, которые хотел лучше пропечь, и выпекал отдельно. Вообще после запечки основной модели есть 3 варианта. 1 - оставить как есть (многие так и делают), 2 - при определённом опыте, можно самому всё доработать в фотошопе, раньше я так и делал, но решил эту модель пропечь как нужно. И 3 вариант - запечь частями, потом соединить всё в фотошопе. Короче говоря, я запёк несколько деталей отдельно, не буду показывать какие и как, так как это только запутает. Главное помнить, что источник света освещает High poly модель, и тень от неё отпечатывается на Low Poly, примерно так эта карта и печётся, имея эту информацию, можно примерно рассчитать какие детали нужно пропечь лучше, а какие вообще лучше не пропекать. Как пример могу показать 1 часть модели (Рис 23). Я убрал из этой части то, что на мой взгляд не должно быть запечено, и получилось примерно так (Рис 24).   Уже лучше, но всё равно не то, однако, более менее нормальный результат получиться после обработки в фотошопе (да, чтобы получить нормальный результат без него не обойтись).  В конце главы расскажу как я собираю части текстур в одну в фотошопе. После того как карта готова и собрана, лучше сделать очень тёмные места посветлей, усреднить их, я делаю так чтобы в целом цвет был примерно одинаковый, но естественно там где была зона сильного затемнения, я делаю всё же темнее чем другие места. Далее, я удалил артефакты, иногда появляются проблемные места, тень от некоторых частей модели, которая не туда попала, или пересечение нескольких деталей может дать тоже плохой эффект, их я правил вручную. Потом сделал размытие по Гауссу, на 3-4 единицы, тут можно поиграть с параметрами, мне хватило 3 единиц. По итогу, вот какой получился конечный результат. Карта и то как это выглядит на модели (Рис 25 и 26). Слева с включённой картой, справа выключена. Да, сейчас это не сильно заметно, но карта важна для текстурирования, да и в сочетании с другими картами она усиливает реалистичность модели. Здесь я поделюсь парой проблем которые возникли при запечке карты AO. Дело в том, что после того как я всё подготовил и импортировал модель в Substance Painter, я увидел на границах швов такую вот проблему (Рис 27). Я потратил часов 5 чтобы решить проблему. И даже когда я перепёк все части со стандартным рендером, вместо OpenRL (да в первый раз я забыл сменить настройки с печки Normal карты и даже отступ я случайно убрал на 0 и не заметил), всё равно проблема оставалась. Тогда я решил найти, как можно сделать тот же отступ в фотошопе, но за час поисков в сети ничего не нашёл, и почти опустил руки, но вспомнил мотивирующие слова из одного мультфильма (есть проблема, реши её!), да я часто вспоминаю эту фразу, особенно когда хочу сдаться. В общем пришлось самому методом проб и ошибок решать проблему, и я её всё же решил. Я пока не особо уверен в этом способе, он сработал тут, но в другой ситуации возможно не сработает, всё нужно ещё тестировать. Но лучшего я пока не придумал. Если у вас есть решение этой проблемы, жду в комментариях. Чтобы сделать Padding в фотошопе, я сделал так, перешёл в альфа канал (Рис 28+).   Если по простому, альфа канал это по сути маска, по которой идёт наложение текстуры, там где белое, текстура проходит, чёрная — нет, в разных программах отличается пропуск текстур, в некоторых наоборот чёрный цвет пропускает, а белый - нет. Так вот, я выделил по цвету всю маску, то есть белый цвет (Рис 29+).   Далее я перешёл обратно в RGB канал (просто щёлкнуть левой кнопкой мыши по верхнему каналу RGB), и сделал границу на 20 пикселей (получается по 10 каждой стороны) (Рис 30+).  И наконец то, что я нашёл методом проб и ошибок (Рис 31+).   Там я ставлю значение радиуса также на 20 пикселей, и всё, отступ на 10 пикселей готов              (Рис 32+).   Однако проблема была не в этом, хотя это очень не плохое открытие для меня. Если случайно запечь текстуру без отступа, собрать карту по кусочкам и когда уже всё готово, заметить такую проблему, то возможно этот способ поможет, опять же, нужны тесты.  А моя проблема была как раз в альфа канале, так как раньше я пёк карту в .PNG формате, и почти не обрабатывал её, я не сразу заметил это. И дошёл я до этого, когда на той карте без отступа, сделал уже большой padding и всё равно ничего не работало, я решил просто залить часть границы чёрным цветом, очень сильно выйдя за границы основной текстуры, чтобы точно видеть сработает или нет. И нет, белые линии всё ещё были видны. Но когда я изменил формат изображения с TGA на PNG, всё стало нормально. Я несколько раз всё перепроверил и действительно всё было из-за альфа канала. Из этого можно вывести небольшой итог, что печь лучше хотя бы с небольшим отступом, если печь в .TGA формате, так альфа канал тоже будет с отступом, и проблем не будет.  Да, и вот ещё одна фишка, которая мне помогает. Это касается сбора текстуры в фотошопе. Если на основную текстуру нужно добавить множество небольших частей идеально ровно. Она не то чтобы очень уж полезна (хотя для огромного текстурного атласа вполне себе полезна), но если важна максимальная точность и скорость, проще делать так. Берём небольшую часть текстуры, которую нужно добавить в основную, и как раньше, выделяем альфа канал по белому цвету, переключаемся на RGB вырезаем всё, и уже можно было бы вставить это в основную текстуру, но скопируется это не точно, и нужно будет ставить вручную на нужное место. Чтобы скопировать всё точно и не подгонять в нужное место, я на альфа канале делаю по углам очень маленькие белые точки, перед выделением по цвету, с ними ставиться всё ровно (Рис 33+), а потом просто можно закрасить их фоновым цветом.  Да, скорее всего есть способ проще, возможно в самом фотошопе есть функция чтобы при копировании сохранялись координаты или что-то вроде того, но я о таком не знаю, и сделал как обычно по своему, вдруг кому пригодиться. Собственно это вроде всё что я хотел добавить.   Теперь последний шаг перед покраской. Тут всё довольно просто. Нужно разделить модель на части по Material ID, чтобы в (Substance Painter далее буду называть его SP) было проще работать. Некоторые говорят что лучше делать покраску без тех частей, которые нужно копировать, но чтобы видеть всю картину я буду делать покраску на полной модели. Для этого, в начале нужно объединить все части модели в 1, по другому я не пробовал, но думаю если и можно оставить как есть, то это будет не очень удобно, как минимум применять Material ID. Потом нужно решить, как и на сколько частей будет разделена модель. Это делается для того чтобы в SP работать над отдельными частями скрывая другие части модели, то есть чтобы ничего не мешало красить модель с разных сторон. Конечно можно красить и по UV без разделения на Material ID, и так даже лучше делать если модель небольшая, и не анимируется, но для относительно больших моделей и особенно тех что будут анимироваться лучше делить. Конечно выбирать вам, как удобнее, для меня разделение удобнее всего, хоть с разделением и приходит потом головная боль, которую я конечно решил, но если не знать способа объединения текстур, то головная боль будет обеспечена. Итак, чтобы присвоить определённой части модели свою Material ID, в 3Ds Max нужно у модели на уровне элементов или полигонов найти пункт - Polygons — Material IDs, выделить нужные части и назначить им группу, лучше делать это так, чтобы их было чётное число, далее в Substance Designer будет проще работать. Потом нужно создать мульти материал в Slate Material Editor. Создаём Multi/Sub-object, если через правую кнопку мыши не появляется список карт и материалов, то нужно нажать на стрелку вниз, программу слегка проглючит, и если список появился, то всё нормально, однако если списка нет, но при нажатии на стрелку вылезает окно с выбором элементов, то тоже всё нормально, по крайней мере работать уже можно, а чтобы список под стрелкой появился, то просто пощёлкайте по тем элементам, и вскоре всё появиться    (Рис 34+). Итак, в Multi/Sub-object выставляем по кнопке (set number) столько материалов сколько нужно, потом нужно создать стандартные материалы, где и как (Рис 35+). В стандартных материалах нужно поменять только цвет (не обязательно, это лишь для удобства), затем обозвать их. Лучше конечно если это будут осознанные названия, чтобы не путаться. Должно получиться что-то вроде того (Рис 36+). Не забываем применить материал на выделенную модель.  Вот в принципе и всё, теперь можно экспортировать модель с теми же настройками что были на (Рис 14). Итак, у нас есть модель, есть карты дополнительной детализации, а значит модель можно импортировать в SP. Конечно, карт может быть больше, но сейчас мне хватает и этих. Небольшое отступление, внешний вид программ Substance Painter и Substance Designer может сильно отличаться от обычного, так как я его настроил под себя, да и версии у меня мягко говоря не свежие. Ориентироваться можно по названиям окон. При создании нового проекта, для начала выбираем шейдер, расписывать какой для каких целей не буду, кому будет интересно, найдите для каких целей нужен тот или иной шейдер, и вообще что это и с чем едят. Единственное, для реалистичных моделей где больше металла можно взять PBR - Metallic Roughness, а там где больше пластика, стекла и т.п. - PBR - Specular Glossiness, разница у них небольшая, но есть. Следующим выбираем Mesh, тут нужна полная Low Poly модель которую мы подготовили. После выбираем Normal map format, у меня это OpenGL. Отличия конкретно в текстурах у него от DirectX, если по простому то лишь в том, что (Y) зелёный канал инвертирован. Если карта у вас отображается не так как должна, вероятно дело может быть в этом. Потом выбираем разрешение в котором будем работать. Даже если карты у вас в 4К, работать они будут и в 2К. У меня компьютер еле еле вытягивает 4К, поэтому я ставлю обычно разрешение 2048х2048, а в процессе изменяю его на выходное 4К чтобы посмотреть как в итоге будет выглядеть текстура. В любом случае можно вывести текстуры из SP в нужном разрешении, и в процессе менять его без каких либо потерь, будет меняться качество, но не сами текстуры. Ну и последнее, добавим наши карты. Жмём на кнопку Add, и добавляем все карты что мы пекли. Вот так это выглядит (Рис 37). Если всё нормально, то мы должны увидеть после создания проекта, что модель поделена на части (set далее сеты), по тем Material ID которые мы делали в 3Ds Max. Чтобы наши карты заработали, нужно их добавить в каждый сет модели на свои слоты. А если нужно изменить саму модель, или поменять формат карты нормалей, то на вкладке Edit, выбираем Project Configuration и меняем. Но тут нужно понимать, что если добавить к модели несколько частей, и внести изменения в развёртку это может повлиять на текстуры, даже если островки на развёртке не были изменены. Например я уже практически в конце работы добавил пару новых частей к модели и добавил одну новую Material ID. Я вставил островки добавленных частей между основными, заполнив некоторые пустоты на основной развёртке. После обновления модели в проекте, на новом сете текстуры немного съехали со своих координат, однако те текстуры что я запекал остались неизменны и отображались корректно, вероятно это был баг программы, но это тоже стоит учитывать. В общем вот как должно получиться если всё нормально (Рис 38+). Вот что вышло после покраски. Рендер из Marmoset Toolbag. (Рис 39) Далее я начинаю экспорт текстур. И вот как я настраиваю выходные карты. Так как я делаю модель для TurboSquid, я создаю карты сразу под несколько разных шейдеров, основные это PBR MetalRough и PBR SpecGloss, я сделал свой набор вывода карт, и туда входят карты - BaseColor, Diffuse, Roughness, Metallic, Normal_DirectX, Normal_OpenGL, Emissive, Glossiness, MetallicSmoothness, Opacity, Specular, Ambient occlusion. Всего 12 карт, для большинства движков этого достаточно, то есть кто-то с одними картами работает, кто-то с другими. И чтобы сделать охват клиентов больше, я делаю так. Вообще тут ещё есть повторяющиеся карты, Roughness и Glossiness это одинаковые карты, только одна из них инвертированная. И как раньше я уже писал Normal_DirectX и Normal_OpenGL тоже самое, но с инвертированным зелёным каналом (Y). Таким образом в принципе можно из одной карты сделать 2, сократив тем самым время, но я обычно так не делаю. Есть карта поинтересней, это MetallicSmoothness, она объединяет в себе 2 карты, Metallic и Glossiness, где Glossiness добавляется в альфа канал. Настройка карт экспорта у меня выглядит вот так (Рис 40+).   И вот настройки самого экспорта, сейчас поясню что и для чего я использовал (Рис 41+). 1. Формат я ставлю tagra, так как он сохраняет альфа канал, а он нужен для дальнейшего сведения текстур в Substance Designer без лишних манипуляций. 2. Тут выбирается как раз набор карт для экспорта, можно выбрать уже готовые, но как я писал ранее, под себя я сам настроил то что нужно.   3. Я выбираю тут (Dilation + transperenty), для того чтобы не было фона у разных карт. То есть, если поставить например Dilation infinite и при этом не ставить галочку в 5 пункте, то у вас получиться что-то вроде этого (Рис 42). Вместо этого (Рис 43).  Как видно, тут идёт бесконечный padding (отступ), границ почти не видно. Мне так не нравиться, поэтому я делаю так как делаю. Хотя и многие любят бесконечный отступ, так как в движке не будет белых линий на границах островков UV при Mip Mapping, и т.п. Но для этого существует управляемый padding, и тут мы плавно переходим к 4 шагу.   4. Тут указывается padding он нужен для Mip Mapping. Mip Mapping я тут не стану рассматривать, иначе придётся затронуть ещё кучу тем. Так что если интересно, поищите отдельные статьи на эту тему. В целом на 4К текстуры хватает 16-20 пикселей, можно и больше, если позволяет развёртка. Этот факт ещё нужно учитывать при её создании, ранее я об этом уже упоминал.   5. Тут в каждом текстурном сете нужно поставить галку Override padding (это даже больше относится к 3 шагу, это отрезает всё что выходит за пределы padding) и выставить параметры как были выставлены в 3 и 4 шаге. Если тут галку ставить в конце настроек, то все параметры что были на 3 и 4 шаге, автоматически будут и здесь. И ещё тут можно выбрать разрешение экспортируемых текстур. Даже если вы создали проект и работали с разрешением в 2К, то выбрав в экспорте 4К, все генераторы маски и т.п. вещи будут умножены и правильно распределены, в общем качество никак не пострадает, словно вы работали в 4К. Это что-то вроде процедурной генерации. Да и проверить, какой будет результат всегда можно в самой программе, через настройки сетов выбрав там нужное разрешение текстур. Итак, я экспортировал текстуры, и получился вот такой набор (Рис 44).   И теперь их нужно объединить. И тут обычно начинается самая нудная часть работы. Если конечно не использовать альфа канал, но как обычно путём проб и ошибок я довольно сильно упростил работу по сведению текстур для себя, в основном конечно благодаря формату файлов .TGA. И того, у нас есть 60 текстур, по 12 на каждый из 5 сетов. Photoshop даже рассматривать не буду, ибо объединять там подобные текстуры на мой взгляд - извращение. А вот Substance Designer идеально подойдёт. Итак, открываем программу, и создаём Node (далее нода) правой кнопкой мыши по пустому месту на сетке, выбираем Add Node. Там выбираем Blend, на 5 текстур нужно 4 ноды. Ещё можно создать сразу ноду output и сразу же назвать её, в целом я просто прописываю ей имя чтобы не запутаться, можно ещё настроить её для удобства, но мне это не нужно. Теперь можно добавлять текстуры, все из 1 карты. Сразу все 60 лучше не добавлять, так как будет сложно с ними работать, да и если компьютер не самый лучший, то программа будет долго всё это обрабатывать. Я добавляю 5 текстур, то есть одну карту, соединяю их с нодами Blend и создаю ещё одну ноду Uniform Color, и для каждой карты беру свои цвета. Это нужно чтобы сделать фон, я беру обычно серый цвет для большинства карт. Для карт Normal, лучше всего использовать базовый цвет нормалей, это R-128, G-128, B-255, в Emissive нужен чёрный цвет, и в Opasity нужен наоборот белый. И для этой карты делаю ещё одну ноду Blend. Как пример, полный вывод карты BaseCollor выглядит так (Рис 45+), и ноды не нужно настраивать, было бы сложнее, если бы не было альфа канала.   Ранее я писал что Glossiness это инвертированная карта Roughness, а это значит что для Glossiness нужно найти в библиотеке ноду Invert, сделать вывод из последнего смешивания и после нодой Blend и Uniform Color также задать цвет фону, вот как это выглядит (Рис 46+).  Я решил сделать родную карту Glossiness и показать сравнение (Рис 47+) Слева родная, справа инвертированная Roughness. Как видно, разницы нет.   Что касается 2 карт Metallic и MetallicSmoothness. Основа у них естественно одна - карта Metallic, единственное что поменять нужно будет, это в карту MetallicSmoothness добавить в альфа канал карту Glossiness, это я делал раньше в Photoshop, мне так проще было, однако я немного подумал, и сделал универсальный вариант в Substance Designer для всех типов карт, чуть позже покажу как. При добавлении фонового цвета в карту, удаляется альфа канал, даже в формате TGA. Что же делать если нужна альфа? Тут есть несколько решений, либо вообще не добавлять фоновый цвет, либо сохранить 1 карту с последней ноды смешивания, до того как будет добавлен цвет, и с неё взять альфа канал, а потом в Photoshop можно добавить всем картам альфу. Для этого на уровне каналов (там где RGB, R, G, B), просто создаём новый слой, он автоматом станет альфой, и туда вставляем любую альфу какую нужно, к слову таким же способом в карту MetallicSmoothness добавляется карта Glossiness. Или, есть вариант сделать альфу в Substance Designer. После смешивания с цветом, создаём ноду Level, настраиваем её так (Рис 48+, 49+.). В Level Histogram нужно настроить каналы Luminance Channel и Alfa Channel. И подключаем к ней ноду Blend, которая была до того как добавили цвет, тут у неё ещё есть альфа. Далее создаём ноду Grayscale Conversion и настраиваем вот так (Рис 50+).   Затем создаём ноду RGB-A Merge, подключаем ноду Blend где карта уже с фоновым цветом, в канал "RGB", а в канал "A", подключаем то что вышло в Grayscale Conversion, и потом в Output. Как видно тут не всё так просто, относительно конечно, лично мне было проще всё делать через Photoshop. Однако, решил всё же потратить немного времени, и сделать универсальный способ сбора разных карт, чтобы было быстрее и безопаснее. Собственно вот он (Рис 51+, 52+). Я постарался коротко но точно описать все ноды, если через правую кнопку мыши нет нужной ноды, то нужно поискать в библиотеке, как пример Invert нужно искать тут (Рис 53). Надеюсь с этим будет всё понятно, так как я не знаю как лучше расписать всё.  Вот и закончилась работа по настройке карт, единственное что осталось сделать, это в 3Ds Max сделать у модели один Material ID, назначить стандартный материал и экспортировать модель. Далее, я буду разбирать как из SP экспортировать карты для Vray/Corona и куда и что там нужно вставлять чтобы получилось более менее приемлемый результат. Это не всем нужно, особенно для игровой модели, но для общего понимания возможно подойдёт, ну и для тех кто хочет получить PRO сертификат на платформе TurboSquid, там обязательно нужно делать рендер модели в той программе, в которой создавалась модель. А из всех визуализаторов которые поддерживается этой платформой, я работал только с 2, это Vray и Corona.  Если интересно что вышло в итоге, то эту модельку в 3D можно посмотреть тут. Итак, бонусный уровень. Будем экспортировать карты из SP для Vray/Corona render, и визуализируем в максе. Для начала, нам нужны карты экспорта, есть уже готовые пресеты (предустановки) как для Corona так и для Vray, но я их ещё доработал, создал те же карты, но добавил всем альфа канал. Смотрим какие карты используются в уже готовых пресетах, и копируем их в наши карты, но в альфа канал ставим любую карту которая используется в проекте, я всегда ставлю BaseColor в альфу. У Corona и Vray карты в целом одинаковые, за исключением 2, это Normal (одна OpenGL, а другая DirectX) и Glossiness (одна чуть светлее другой). Для начала выбираем готовый пресет Corona и жмём Duplicate, сразу называем новый пресет. Далее я делаю последовательно и медленно, чтобы не ошибиться, это можно сделать гораздо быстрей, но так будет проще объяснить. Копируем имя первого канала, это будет $mesh_$textureSet_Diffuse, где $mesh - это имя модели, $textureSet - это название сета, ну и Diffuse - это название самой карты. При экспорте каждой части модели от карты модели будет присвоено уникальное имя, которое поможет не запутаться при сборке карт. Что-то я слишком уж разжёвываю. Ладно, далее, создаю карту вот тут (Рис 54+).   Вставляем имя для новой карты, смотрим какие карты использует этот канал и переносим Diffuse в RGB канал, а BaceColor в Alpha канал (Рис 55).   После переноса удаляем оригинальный канал и продолжаем заменять карты одну за одной. К слову, некоторые карты помещённые в RGB канал будут добавлены как Gray Channel, это нормально, так и должно быть. Да и ещё как в Vray, так и в Corona есть карта Height, я её никогда не использовал, и не думаю что она мне когда-нибудь пригодиться в работе, поэтому я её удаляю. Это карта высот, что-то вроде Normal карты, но работает на градиентах серого. И пожалуй добавлю карту Opacity, она нужна для стекла и в целом прозрачности, её нет в оригинальном пресете, также её можно взять из PBR текстур. В итоге у нас получиться вот такой набор (Рис 56+). Далее я делаю всё тоже что и для PBR текстур, смешиваю всё и вывожу в тот канал где создаётся текстура с фоном, но без альфа канала и в формате PNG. Теперь у нас есть текстуры. Сразу скажу, я не буду показывать подробные настройки Corona и Vray, будет слишком много текста, которого и так очень много выходит, да и я не настолько крут в визуализации чтобы рассказать о всех тонкостях работы. Я лишь покажу куда вставить текстуры которые мы получили и как настроить HDRI освещение. Я выложу конечно свои настройки рендера, но не могу сказать что так правильно, это то как сделал я, и как у меня это всё работает.  Ну что, начнём пожалуй с Corona render. Создаём для начала материал CoronaMtl, и перетаскиваем в граф (то пространство где отображаются карты и материалы) наши карты, по одной, сразу пачкой он не принимает. Соединяем их вот так (Рис 57+).   Для карты Normal нужно ещё создать карту CoronaNormal и уже её соединить с основным материалом. А нашу карту соединяем с ней через канал Normal map. Обычно, стандартных настроек карт хватает, и нужно настроить только рендер, но всегда можно подкрутить те или иные параметры чтобы добиться лучшей картинки. Я например карту Glossiness экспортирую с гаммой 1.0. Что это и с чем едят, расскажу в главе про настройку Vray, там это будет актуальнее. Осталось только назначить материал на модель, сделать освещение и сделать рендер. Раньше (года 3 назад) я работал только с Vray, несколько месяцев учил движок, и изучил лишь основы по сути, но Corona далась мне меньше чем за неделю. Оказалось что она в разы проще, и благодаря интерактивному рендеру теперь это мой выбор. Да в Vray тоже есть интерактивный рендер, но в Corona мне как-то больше понравилось, это проще, и так как я не занимаюсь профессиональной визуализацией, я выбрал Corona, только из-за простоты использования. Для освещения я так-же для простоты использую HDRI карту. Чтобы задействовать её, я скачал карту понравившуюся HDRI, найти подходящую можно на сайте "HDRI Haven", нужно создать CoronaBitmap, потом выбрать HDRI карту в формате HDR или EXR, при этом появиться окно с небольшими настройками карты, можно ничего не трогать, по желанию. Далее я создал 2 корректирующих слоя, это Color Correction и Corona Color Correction, также это делать вообще не обязательно, по желанию, я это сделал для более тонкой настройки освещения. Чтобы карта заработала её нужно подключить в настройки рендера в Scene Environment (Рис 58+). В общем вот мои настройки (Рис 59+). Тут я практически ничего не менял со стандартных настроек. И вот рендер который у меня получился (Рис 60). Фон я добавил в фотошопе, в целом для моих целей вполне себе не плохо.   Теперь Vray. Тут оказалось всё сложнее чем я помнил. Даже не хотел делать рендер тут, но всё же сделал, чтобы самому вспомнить, да и вообще сравнить с короной, спойлер, корона выигрывает по всем показателям. Итак, начало в целом похожее, создаём VrayMtl также импортируем текстуры и соединяем по каналам (Рис 61+).   Единственное что нужно тут ещё учесть, это то что некоторые текстуры нужно импортировать с гаммой 1.0. После того как закинули в граф текстуру, нужно выбрать её и нажать на путь к ней, и там выбрать Gamma - Override 1.0, по умолчанию обычно в максе все текстуры импортируются с гаммой 2.2. (Рис 62+). Это обязательно нужно сделал для карты Normal, но я это сделал ещё для карты Glossiness. С гаммой можно поиграть для лучшего результата у каждой карты. И тут начинается самое сложное, точнее нудное. Раньше мне нравилось экспериментировать с параметрами, смотреть результат и т.п. Сейчас мне больше важна скорость, именно поэтому я выбрал Corona render. Для начала, Vray плохо работает с HDRI освещением, точнее для освещения нужно создать VRayLight, настроил я его так (Рис 63). Затем в графе, создаём карту VrayHDRI, закидываем туда карту в формате HDR или EXR, в Mapping type нужно поставить Spherical. Можно ещё её настроить если нужно и добавим эту карту в VRayLight, в настройку Texture, это даст нам HDRI освещение.   Далее в настройках Environment (нажать на цифру 8) выставил так (64 рис).   Ещё HDRI карту я добавил в настройки рендера в раздел Environment в GI environment. Далее нужно создать камеру Phisical Camera, и у неё в настройках я поменял Exposure Gain - Target 12, и в Vray Light поменял силу света на Multiplier - 55. Чем выше экспозиция на камере, тем сильнее нужен свет, без хорошего света, карта Normal будет выглядеть плохо, у Vray с этим проблемы, да и в настройке материалов я выставил силу карты Normal на 300.       И вот сами настройки рендера (Рис 65+). И собственно сам рендер, слегка доработан в фотошопе, в основном немного изменил тон        (Рис 66). По итогу, вот сравнение всех 3 вариантов, слева - рендер из Marmoset Toolbag, по центру - рендер из Corona, и справа - рендер из Vray (Рис 67).  В Vray вышло гораздо хуже чем в Corona, и времени на это ушло в разы больше. Да, можно довести всё до ума, но я даже пытаться не буду, а данное руководство было как пример, не лучший конечно, но какой есть. Vray сделан в основном для профессиональной визуализации фотореалистичных проектов, архитектурной визуализации, и т.п. И там нужна тонкая настройка всех параметров, и света. И чтобы полностью его изучить, нужно потратить очень много времени. Поэтому не советую его использовать для подобных целей. Вот в целом и всё, дальше я подготовлю модель к продаже, и отправлю на сертификацию. Конкретно эту модель я делал для себя, а значит как и всё что я делаю для себя, она отправилась на сайт TurboSquid и уже получила сертификат CheckMate PRO.  Тут было много информации, усвоить всю сразу для новичков будет сложно, но я пытался донести всё самым простым языком. Надеюсь кому-то эта статья поможет, может даже не столько по ней работать, а возможно искать способы быстрее и эффективнее. Спасибо за внимание. Автор статьи — Егор Сурин Middle 3D Artist