Vertex paint 3ds max
Перейти к содержимому

Vertex paint 3ds max

  • автор:

Глава 25. Цвета вершин

Как уже когда-то вскользь упоминалось, объекты Editable Mesh и Editable Poly имеют такие параметры, как цвета вершин. Кроме того, вершины других объектов тоже могут быть раскрашены при помощи специального модификатора Vertex Paint, который появился в 3ds MAX 3.

Цвета вершин как базовое свойство

В инструментах редактирования Editable Poly и Editable Mesh в режиме работы с вершинами есть группа параметров Vertex Properties, а в ней группка — Edit Vertex Color.

Здесь такие свойства как Color (цвет, который можно редактировать при помощи специального меню, оно открывается по клику на прямоугольник с цветом), Illumination (свечение, редактируется так же) и Alpha — в процентах. Все эти свойства можно менять инструментами на базовом уровне.

Так же есть группа параметров Select By и на выбор — Color или Illumination, и три поля R (red — красный) G (green — зелёный) и b (blue — синий) — здесь указывается величина допустимого разброса цветов, то есть на сколько градаций по каждой из трёх составляющих может отличаться цвет, чтобы вершины всё равно были выбраны по нажатии Select By.

Итак, как же можно задействовать вот эти вот цвета? Честно говоря, для меня остаётся очень большой и серьёзной загадкой, как задействовать Alpha и Illumination. Свойства эти существуют, а вот инструментов, их задействующих, чего-то найти не могу. Возможно, эти каналы нужны для игрового применения, и задействуются уже самими программистами, которые дальше вставляют приготовленные на 3ds MAX объекты в свои программы. Но не суть. Мы будем рассматривать только Vertex Color, кому понадобится вдруг Alpha и Illumination — думаю, без труда потом разберутся, они аналогичны Vertex Color.

Итак, как посмотреть, какого цвета у нас вершины? По умолчанию вершинам цвета не присвоены. Если при выделении тех или иных вершин у нас показывается белый квадратик с цветом, это ещё не значит, что вершины у нас белые. Если мы их не раскрашивали (то есть, не меняли цвета в квадратике при выделенной хотя бы одной вершине), то у нас просто ни одной из вершин цвета не присвоены.

В общем, если выделить вершину и начать крутить цвет в квадратике Vertex Color, то сразу всем вершинам присваиваются цвета. Выделенным — тот цвет, который мы выберем для них, а всем остаьлным — чёрный. Почему так? дело в том, что Vertex Color на самом деле это нулевой Map Channel. Исторически сложилось, что изначально вершины не раскрашивали, а потом, когда в одной из версий ПО вдруг придумали эту опцию, чтобы не нарушать совместимость старых проектов с новыми программами, нумерацию Map Channel менять было просто нельзя.

Например, если мы на старой версии программы приготовили развёртку в первом мап-канале, а потом купили более новую версию, с поддержкой Vertex Color, то мы хотим, чтобы при открытии старого проекта новой программой у нас развёртка всё равно была именно в первом канале. Поэтому для Vertex Color отвели нулевой канал, а под Illumination и Alpha — и того минус первый и минус второй. Вот такие дела.

На самом деле канал Vertex Color полностью аналогичен всем остальным каналам карт, и в него даже можно применить модификатор UVW Map или залезть при помощи редактора модификатора Unwrap UVW. В этих модифиакторах нельзя в поле Map Channel поставить цифру 0, но можно выбрать пунктик Vertex Color Channel, что и будет означать наше залезание в нулевой канал.

Возникает вопрос: а если всё так, если Vertex Color действительно канал карт, то при чём же здесь цвета? А цвета при том, что каждому цвету можно сопоставить координаты в пространстве UVW. Для Vertex Color можно даже сказать, что это пространство RGB. Интенсивность каждого цвета расчитывается исходя из значения координаты по каждой из осей. И цвета соответствуют кубу размером 1х1х1, и вычисляются так:

R = 256·x, G = 256·y, B = 256·z

(256 — число градаций цвета в стандартном RGB 24-битном формате).

В данном случае — x, y, z — это координаты в пространстве RGB, внутри куба 1x1x1. В случае, если координаты выходят за этот самый куб (может же быть и такое!) то они пересчитываются — от значения координат отнимается вся целая часть (если координаты отрицательны — то напротив, добавляется такое целое число, чтобы координата попала в интервал между нулём и единицей), и далее пересчитывается в цвет по вышеуказанным формалам.

Или, можно трактовать это иначе. Можно представить себе, что в куб размером 1х1х1 в пространстве RGB залита трёхмерная текстура. Угол куба с координатами (0,0,0) чёрный, с координатами (1,0,0) — красный, (0,1,0) — зелёный, (0,0,1) — синий, (1,1,0) — жёлтый, (1,0,1) — сиреневый-пурпурный, (0,1,1) — бирюзовый-голубой, (1,1,1) — белый. А между этими углами цвета плавно переходят один в другой. Таким образом, координаты вершин в такой вот трёхмерной текстуре непосредственно определяют их цвет! И для удобства нам даны инструменты, позволяющие управлять не координатами через цифры, не пересчитывать ничего, а непосредственно задавать сам цвет вершины.

И естественно, трёхмерная текстура цвета вершин повторяется в этом пространстве периодически, поэтому если вершина и вылезет за границу основного куба, ей всё равно будет присвоен какой-то цвет. Вот только через диалог инструментов объектов Editable Poly или Editable Mesh мы не сможем присвоить вершенам координаты, значением больше единицы. Зато через модификаторы UVW Map или Unwrap UVW вполне можно это сделать.

Встаёт такой вопрос: а есть ли действительно такая процедурная карта, которую можно залить в куб 1x1x1, чтобы она там раскрашивала вершины в некоторые цвета, согласно их координатам? Да, такая процедурная карта есть, и она называется Vertex Color. Она как раз по умолчанию настроена таким образом, чтобы задействовать цвета вершин, которые можно присвоить при помощи инстурументов Editable Mesh и Editable Poly.

Но пока мы оставим катру Vertex Color напотом, поговорим ещё о таких вот вещах. Стало быть, присваивая цвета вершинам в инструментах редактирования базовых объектов Editable Mesh и Editable Poly, мы меняем их координаты в UVW (или, можно сказать, RGB) пространстве нулевого канала? А можно ли подобным образом менять координаты в другом мап-канале? Нет, подобным образом предусмотрено только для нулевого канала. Для всех остальных — только через модификаторы Unwrap UVW и UVW Map. Но карту Vertex Color применить можно не только для нулевого канала! Хотя нулевой стоит в ней по умолчанию, но его можно изменить на абсолютно любой номер! Кроме, правда, отрицательных номеров. Если бы можно было Map Channel для карты Vertex Color менять на отрицательное значение, то тогда было бы понятно, как задействовать такие свойства вершин, как Illumination и Alpha, расположенные в мап-каналах с отрицательными номерами.

Итак, получается, что карты можно применить и в нулевой мап-канал тоже. А карту Vertex Color — не только в нулевой. Но если мы хотим поместить раскраску не в нулевой канал? Допустим, нулевой канал у нас уже занят, под ту же самую раскраску, или под развёртку, а мы хотим создать ещё одну раскраску для других целей? Как мы видели, у материала много свойств, не только Diffuse. Есть ещё такое свойство, как Illumination — самосветимость, оно тоже может быть цветным (к слову сказать сразу — свойство вершин Illumination, которому соотверствует мап-канал с отрицательным номером никакого отношение к одноимённому свойству материала не имеет!). Или, цвета вершин можно использовать так же и в вспомогательных целях, но для разных вспомогательных целей нужна своя раскраска. Так что же? Вводить цвета вершин через пересчитывание координат? Нет! Есть специальный модификатор — Vertex Paint, который позволяет расскрасить объект в любом мап-канале, на выбор. Не обязательно в нулевом. При том, его инструменты для расскрашивания гораздо более разнообразны, чем нам предлагается в инструментах редактирования объектов Editable Mesh и Editable Poly.

Прежде, чем перейти и к карте Vertex Color, и к модификатору Vertex Paint, закончим сначала с основными вопросами.

А с основными вопросами у нас ещё вот что: оказывается, в режиме работы с полигонами (многоугольниками) (Editable Poly) или с гранями в Editable Mesh в группах параметров Polygon Properties / Surface Properties тоже есть такой параметр как Vertex Color, однако на сей раз он выглядит более скромно. Инструменты Select By. отсутствуют. Почему, хотя речь идёт о гранях, всё равно написано Vertex Color? Кстати, если выбрать грань или многоугольник и поменять его цвет, то изменится цвет грани, а вокруг будут резкие границы. В то время, как в режиме работы с вершинами, если выделить одну вершину и поменять её цвет, он будет плавно перетекать в цвета соседних вершин, никаких резких границ не будет. В чём же дело в данном конкретном случае? А дело в том, что присваивая Vertex Color грани, мы в пространсве UVW (RGB) отделяем эту грань от остальной развёртки как будто её выделили и применили команду Break в редакторе модификатора Unwrap UVW. На деле же, координаты наложения текстур хранятся именно в вершинах, грань лишь помнит, на какие из этих вершин она натянута. В разных пространствах одна и та же грань может быть натянута на совершенно разные вершины.

И второе из основного — это как можно посмотреть цвета вершин в окнах проекций? Дело в том, что если кто-нибудь зайдёт в навигатор материалов и применит какому-нибудь материалу карту Vertex Color, то у неё не будет кнопочки Show Map In Vievport .

Для таких целей существует специальная опция во вкладке меню Display (это та, что справа, значок , если кто забыл). Во вкладке Display в самом-самом низу предпоследняя группа параметров Display Properties. И там самый последний пункт — Vertex Color. Если его нажать, объект может стать либо ослепительно белым, либо чуть поярче, чем был изначально, либо цветным.

Белым он станет если все вершины белые, либо все не раскрашенные. Цветным — если вершины раскрашены в разные цвета. А чуть ярче — если на объекте находится материал с картой, для которой нажата кнопочка Show Map In Vievport . Чтобы увидеть сами цвета вершин, надо найти в редакторе материалов тот материал, который применён к данному объекту и все такие кнопочки для всех его карт повыключать. Будьте внимательны, такие кнопочки есть не только у карт, но и у самих материалов (позволяют отображать в окнах проекций сразу несколько текстур, применённых к материалу), их тоже надо выключить. Тогда мы увидем цвета вершин объекта.

Напротив флажка Vertex Color во вкладке Display есть небольшая кнопочка Shaded. Если её нажать, объект будет оттенённым, то есть не будет ярко светиться, как когда эта кнопка выключена. В общем, нужны и тот и другой режим. Когда Shaded выключено, мы видем непосредственно цвета вершин без искажения, какие они есть на самом деле, а если Shaded включен, то объект смотрится более естественно, и мы можем оценить, как он будет смотреться с тенями.

Если кликнуть на объект правой кнопкой мыши, и в появившемся меню выбрать пункт Properties, мы попадём в окно со свойствами объекта, где тоже есть подруппа параметров Display. И в конце этого списка есть пункт Vertex Channel Display. В общем, он дублирует то, что мы только что рассматривали во вкладке Display. Поставишь флажок — будут отображаться цвета вершин, уберёшь — не будут. И кнопка Shaded тут тоже есть. Но есть и кое что ещё. Разворачивающееся меню, в котором по умолчанию стоит Vertex Color, но можно выбрать и Alpha, и Illumination, и Map Channel Color, и Soft Selection Color. Таким образом, Alpha и Illumination можно посмотреть в цвете, но опять же — как использовать при конечной визуализации — не понятно. Визуализировать (срендерить) цвета вершин можно только через карту Vertex Color, а она не достаёт до Alpha и Illumination. Возможно, в каких-нибудь новых версиях 3ds MAX это сделают.

Если выбрать Map Channel Color, и в окошке снизу указать номер, то мы увидим цвета вершин для указанного мап-канала. Вот как будет выглядеть наш динозавр с созданной в первом мап-канале развёрткой (о чём писалось ранее, в главах о приготовлении развёртки) если включить для него этот режим для мап-канала 1.

Рис. 25.1. Отображение в режиме Vertex Color (Shaded) с параметрами Map Channel Color = 1

Швы видны потому, что мы в этих местах делали разрезы. И последний пункт в менюшке — Soft Selection Color работает если обект редактировался со включенной опцией Soft Selection, и цветами показывается мягкое выделение, тем же цветом, каким отображаются сами вершины в этом режиме при редактировании объекта.

И на последок скажем, что модификаторы Edit Mesh и Edit Poly, в отличие от инструментов редактирования базовых объектов этого типа, не дают возможности управлять цветами вершин.

Карта Vertex Color

Коль уж зашла речь об этой карте, давайте её досконально рассмотрим. Тем более, параметров у неё совсем-совсем немного.

Перво-наперво, хочется сказать, что хотя по сути своей это получается трёхмерная процедурная карта, тем не менее, в навигаторе карт и материалов в пункте 3d Maps (если его выбрать) этой карты не будет. Она будет находится в пункте Color Maps.

Второе — параметры. У этой карты нет такой группы параметров, как Coordinates, которые есть у остальных карт. Кстати, у трёхмерных процедурных текстур есть группа параметров Coordinates. Может быть, Vertex Color не входит в семейство 3d карт потому, что не имеет многих характерных для них групп параметров, и по набору этих самых параметров действительно более схожа с картами из семейства Colors.

Итак, параметры. Их очень мало.

Map Channel — тут уже всё обсудили.

Sub Channel — подканал. Здесь можно выбрать одну из трёх компонентов цвета. По умолчанию стоят все All. Зачем нужно разделять на компоненты — потом узнаем. В общем, можно и прямо сейчас сказать. Для нецветных свойств. Вместо того, чтобы под каждое нецветное свойство, если мы хотим обозначить их при помощи Vertex Color, отводить по своему мап-каналу, можно интенсивностью каждой из трёх компонент цвета для каждого из трёх свойств задать значения. Ещё эти компоненты можно использовать как карты-маски, которые обозначают участки, на которые следует наложить другие карты. Об этом речь пойдёт потом.

Channel Name — согласуется уже со свойствами самого объекта, к которому применён материал с картой Vertex Color. Чтобы этот пункт меню стал доступным, чтобы там стало что-нибудь написано, надо применить материал с этой картой к объекту, с которым работали на утилите Channel Info. Мы пока эту утилиту не рассматривали, и не будем рассматривать пока свойство Channel Name.

Модификатор Vertex Paint

Таким образом, вершины можно раскрасить либо на базовом уровне объектов Editable Mesh или Editable Poly (только нулевой мап-канал), либо при помощи модификатора Vertex Paint — любой канал для любого геометрического объекта, который может быть преобразован или сведён к Editable Mesh.

Модификатор имеет стандартную панель во вкладке Modyfy и переносную панель с инструментами, которая показана на рисунке 25.2

Рис. 25.2. Переносная панель инструментов Vertex Paint

Display Vertex Color Unshaded — по нажатию этой кнопки для объекта. включается режим отображения цвета вершин в неоттенённном режиме.

Display Vertex Color Shaded — то же самое, только в оттенённом режиме.

Disable Vertex Color Display — отключает отображение цветов вершин.

Toggle Texture Display On/Off — переключатель — отображать ли на объекте текстуру, если она есть.

Display Channel — под этой надписью можно выбрать режим, какой канал цветов вершин отображать. Чтобы опции стали доступны, надо отключить замок.

Переключатель Display Channel в активном режиме станет цветным, и вот что в нём можно найти:

Display Channel Vertex Color — отображает нулевой канал, отрезервированный под цвета вершин.

Display Channel Illumination — отображает свойство вершин Illumination

Display Channel Alpha — отображает свойство вершин Alpha

Display Channel # — отображает мап-канал, номер которого указан в графе напротив этого значка.

Далее идут инструменты рисования.

Paint All — эта кнопка присваивает цвет всем выделенным подобъектам. Для этого надо работать в режиме подобъектов, который можно активизировать или в стеке модификатора, или при помощи кнопочек с изображением вершин, граней или элементов. Эти кнопочки можно видеть как в переносной панели инструментов, так и в панели справа, во вкладке Modify.

Paint — эта кисточка позволяет раскрашивать объект, словно мы водим по нему кистью.

Erase All — аналогично Paint All, только это стирательная резинка. Она очищает все выделенные подобъекты, возвращая им первоначальные цвета, которые были до применения модификатора Vertex Paint. Только надо иметь в в иду, что если хотя бы одной вершине присвоен цвет, всем остальным тоже присваиваются цвета. В Vertex Paint остальным присваивается белый цвет, поэтому и стирание протирает до белого цвета. Или, если используется многослойный режим рисования — резинка протирает до цвета нижележащего слоя. Если объект уже был раскрашен в этом мап-канале (до применения Vertex Paint), возвращается исходный цвет вершин.

Erase — резинка, которой надо водить по объекту.

Pick Color — высосать цвет с объекта или ещё откуда-нибудь при помощи пипетки. Напротив пипетки есть большой прямоугольник, если по нему кликнуть, то цвет можно выбрать из меню выбора цветов, удобно и цивильно. Этот цвет и вливается или красится кисточкой в режимах Paint All или Paint.

Opacyty — заполнение. Здесь в процентах надо указать, насколько непрозрачной будет кисть. Если эта величина меньше ста процентов, под наносимыми нами мазками будут просвечивать старые цвета.

Size — размер кисточки или стирательной резинки.

Brush Options — настройки параметров кисти

Blur All — размыть всё выделенное

Layer — под этим словом можно настроить режим, как будет осуществляться закрашивание.

Mode — в строке напротив как раз можно выбрать режим применения слоя, Пользователям фотошоп эти режимы должны быть знакомы. К примеру normal — есть режим нормальный, когда кисточка как бы накладывает краску поверх всего, что ниже. Multiple — умножение. Цвета нормируются, так что максимальная яркость принимается за единицу, а все промежуточные градации — между нулём и единицей, и эти значения умножаются на аналогичные для ниже лежащего слоя. Если слой Multuply применён поверх белого фона, или сам белый но поверх пёстрого фона — мы ничего особенного не увидим.

Opacity — степень заполнения слоя. Не перекрашивая слоя, мы можем менять его прозрачность.

Add Layer — добавить слой. Фактически, добавляет в стек ещё один модификатор Vertex Paint. Следует быть внимательным, следить, в какое место стека этот модификатор добавится, если не туда, куда надо — перетащить в нужное место.

Delete Layer — удалить слой

Condense All Layers — объединить слои в один.

1) Сразу хочется предостеречь тех, кто сильно обрадовался, что текстуру можно рисовать прямо на объекте. На самом деле — не забывайте, Vertex Paint не рисует текстуры на гранях! Он изменяет цвета вершин. В общем, чем гуще сетка объекта, тем тоньше и чётче на нём можно рисовать линии, но не советую этим увлекаться. Во-первых, многие объекты с густой сеткой — это либо объекты с применённым MeshSmooth или TurboSmooth, либо патчи, а значит, придётся хранить Vertex Paint в стеке. Во-вторых, что немаловажно — модификатор с густой сеткой работает крайне медленно, а то и вовсе при применении различного вида кистей, которыми надо водить, программа зависает.

2) Чего в Vertex Paint ценно — так это разные режимы наложения раскрашенных за сеанс вершин. Вот например, в режимах слоя есть такой режим Add — добавить. Когда мы хотим с красным, зелёным и синим каналами работать независимо, без этого режима не обойтись. Если мы будем красить вершины на базовом уровне самого объекта, меняя один из цветов, надо постоянно помнить про все остальные. В режиме же работы с Vertex Paint можно красить только один компонент цвета в режиме Add, про остальные пока забыть. И тогда наш цвет присуммируется к уже имеющейся раскрасске. Так же ценна полупрозрачная работа кисти или слоя. Если мы хотим сохранить общий фон (допустим, он пёстрый) но немного добавить того или иного цвета, то это очень полезный режим. Например, если надо нанести румянца на щеках, это значит, их надо сделать немного более красными (или бардовыми) но при этом не заглушить намертво прошлой фактуры. Тут идеально подойдёт кисть с небольшим значением Opacyty, или возможность менять Opacity для слоя — сначала накрасить, а потом подкручивая движок, достичь нужного результата.

3) Таким образом, в больщинстве случаев модификатор Vertex Paint лучше использовать для того же низкополигонального объекта, чтобы только задействовать дополнительные возможности управления вершинами.

Пример применения цветов вершин

Используя цвета вершин, можно создать плавную фоновую окраску, чего мы и сделаем. И не важно, как мы это будем делать — можно на базовом уровне красить вершины, можно при помощи Vertex Paint, который потом схлопнуть. Только сейчас мы будем красить низкополигональный объект, то есть ниже модификатора MeshSmooth. И ниже Symmetry, чтобы потом схлопнуть. Не будем описывать по шагам процесс расскраски, лучше всего красить выделяя вершины и вливая в них краску. Или на базовом уровне — просто меняя цвета. Имейте в виду, что на базовом уровне если выделить несколько вершин, цвета которых не совпадут — в окошке Vertex Color будет показан чёрный цвет.

Совет: если вам надо применить при редактировании на базовом уровне один и тот же цвет на несколько подобъектов, которые трудно выделить все сразу, выделите сначала хотя бы некоторые из них (хотя бы один), настройте для него цвет в квадратике Color, а потом кликните на квадратик правой кнопкой мыши, и в появившемся меню выберете Copy (копировать). Цвет скопируется в буфер обмена. Далее, выделяя нужные подобъекты, просто кликайте правой кнопкой в тот же квадратик Color и нажимайте Paste (вставить). Тогда цвет из буфера обмена будет попадать в этот квадратик, а из него — и на выделенные подобъекты.

Внимание: Если цвета выделенных подобъектов не совпадают, в квадратике Color отображается чёрный цвет, но это не значит, что подобъекты будут чёрными после такого выделения. Однако, если вы покрутите этот чёрный при помощи меню выбора цветов и измените хотя бы чуть-чуть, или просто покрутите и вернёте в прежнее состояние, подобъекты действительно почернеют. Или примут тот цвет, который вы накрутите в меню. Чтобы этого не произошло, в меню надо нажать кнопку Reset (обнулить).

Рис. 25.3. Вот так будет выглядеть объек, если раскрасить его вершины на базовом уровне (или схлопнуть Vertex Paint, применённый над базовым уровнем, на сам базовый уровень). Для объекта включён режим отображения Veertex Color, а в стеке выше есть модификаторы Symmetry и Turbo Smooth

Таким образом, если работать в режиме вершин, можно получить плавную окраску, а если в режиме граней — резкие переходы. Всё тело динозавра раскрашивалось в режиме работы с вершинами, а когти — в режиме работы с гранями, поэтому переходы между когтями и телом получились резкими.

А что, если надо добавить более мелкий рисунок? Мы уже как-то раз познакомились с картой Composite. Вот и вспомним её опять. Применим для окраски динозавра (Diffuse) карту Composite. В первый канал карты поместим карту Vertex Color, а во второй — Bitmap с картинкой, которую рисовали в прошлой главе. Не забудьте убедиться, что для вашей карты Vertex Color стоит тот самый Map Channel, в котором вы раскрашивали вершины. Помните, нельзя раксрашивать вершины в том канале, где находятся нужные нам развёртки!

Рис. 25.4. Комбинирование карт.

Таким образом, комбинирование различных карт помогает решить проблему со швами. Цвета вершин создают бесшовную фоновую окраску, а пятна и другие рисунки на коже уже удобно делать небольшими группами или каждый по одному, и настраивать для таких рисунков развёртки индивидуально.

Далее мы познакомимся с другими картами, освоим ещё некоторые приёмы их комбинирования. Ведь именно комбинирование карт позволяет достичь очень хороших результатов, и 3ds MAX имеет много инструментов для этих целей.

Примечание: При использовании в сочетании модификаторов Symmetry и Turbo Smooth может возникнуть проблема с обработкой развёрток. При рендеринге может появиться сообщение:

«Texture has invalid vertex indices. Can not render.»

Это возникает когда при склейке симметричных половинок случатся какие-то глюки в развёртках.

Тогда используйте вместо TurboSmooth модификатор MeshSmooth.

whoa there, pardner!

Your request has been blocked due to a network policy.

Try logging in or creating an account here to get back to browsing.

If you’re running a script or application, please register or sign in with your developer credentials here. Additionally make sure your User-Agent is not empty and is something unique and descriptive and try again. if you’re supplying an alternate User-Agent string, try changing back to default as that can sometimes result in a block.

You can read Reddit’s Terms of Service here.

if you think that we’ve incorrectly blocked you or you would like to discuss easier ways to get the data you want, please file a ticket here.

when contacting us, please include your ip address which is: 95.214.216.211 and reddit account

3DS Max — Display vertex paint textures in viewport

Newbie question for a newbie newb. I’ve searched around for a good while now and I currently don’t know what else to click.

From Autodesk docs:

1-Right-click the object with painted vertices, and choose Properties from the quad menu.
2-In the Display Properties group, turn on the toggle for Vertex Color.
Vertex Color is one item on a drop-down list. The other items are Vertex Illumination, Vertex Alpha, Map Channel Color (which uses the spinner immediately below the list), and Soft Selection Color. Viewports can display only one of these vertex channels at a time.
3-Click OK.

While that does show the painted colors, it does not display the textures that I actually want. There’s plenty of info about how to display them on renders though. I also read something about needing Channels for this, though I’ve failed to find how.

Wot I think is(was) the correct way:

-Create your mesh, say, a plane; and then let’s face map it for some tileable textures.
-Apply VertexPaint modifier, default settings are ok. Paint your vertices with grayscale values.
-«In the Display Properties group, turn on the toggle for Vertex Color.
Vertex Color is one item on a drop-down list.»
-Lastly, in the material editor choose your material, say, a standard material, and under diffuse map go for Mix. Choose your two textures under Color1&2. Under MixAmount, choose VertexColor, default settings should be ok.

Aaaand still nothing. Any ideas?

Vertex paint 3ds max

Written by Jesper Tingvall, Product Expert, Simplygon

Disclaimer: The code in this post is written using version 10.2.10100.0 of Simplygon and 3ds Max 2021. If you encounter this post at a later stage, some of the API calls might have changed. However, the core concepts should still remain valid.

Introduction

In this blog post we are going to optimize a game character in 3ds Max. We are going to use two sets of vertex colors; one which the game utilized and one which control the reduction.

Male human game character.

Prerequisites

This example will use the Simplygon integration in 3ds Max, but the same concepts can be applied to all other integrations of the Simplygon API. However you will probably not encounter the same 3ds Max specific problems.

Problem to solve

We have a game character which we want to optimize. In our game we use vertex colors to differentiate clothes from the character’s skin. The optimized mesh must keep these colors.

Male human game character where skin is black and colors are white.

If we do a 25% reduction via the user interface in 3ds Max we get this LOD. It is quite a heavy reduction so not intended to be viewed up this close. However, just to be safe we want to allocate some more vertices to the face.

Original mesh and bad looking LOD.

Solution

The solution is to add a secondary vertex color set to control the reduction.

Vertex paint face

Humans pay close attention to faces, so we want to keep more vertices in that area. To achieve this we are going to use map channel three to weight paint the face. First every vertex is colored grey, then we paint a white T-shape on the face. This is the area where humans are looking most at.

Grey game character with a white T painted on his face.

After painting these are all map channels in our mesh. Zero is first vertex color set which we use to differentiate between skin and clothes. Three is vertex color set we will use to control reduction.

Map channel info dialog in 3ds Max.

Preserve more then one vertex color set in 3ds Max

If we process the character with a standard 25% reduction pipeline in UI after painting we get the following output. Something is definitely wrong.

Yellow game character.

What has happened is that in 3ds Max every channel >0 is counted as an UV channel. Our color has thus lost its blue value since only first 2 values are kept; U and V coordinates, corresponding to red and green values.

We need to use sgsdk_SetIsVertexColorChannel to indicate that map channel 3 should be used as vertex color channel and not another UV channel. To use this function we need to perform the optimization via scripting. sgsdk_SetIsVertexColorChannel should be called before exporting from 3ds Max into Simplygon.

def main(): # Initialize Simplygon sg = simplygon_loader.init_simplygon() # Set map channel 3 to vertex color type rt.sgsdk_SetIsVertexColorChannel(3, True) # Export scene to file bResult = rt.sgsdk_ExportToFile(export_path, False) # Reduce exported file run_pipeline(sg) # Importing bResult = rt.sgsdk_ImportFromFile(processed_path, True, True, True) print('Import result: ', bResult) # De-initialize Simplygon sg = None gc.collect() print('Finished') 

With sgsdk_SetIsVertexColorChannel in place we can see that the third vertex color set is preserved.

LOD of game character with preserved grey and white vertex colors.

Use vertex color to control reduction

To tell Simplygon to use our newly preserved vertex color set to guide optimization we need to access the reduction pipeline’s VertexWeightSettings . First we are going to enable using vertex colors to guide optimization by setting SetUserVertexWeightsInReducer to True . We also need to specify what vertex color set we are going to use. In 3ds Max we do not have names for color sets like in Maya. Instead we refer to them via their mapping channel ID. In our case we use map channel three as our vertex color set, thus we set SetWeightsFromColorName to 3.

def run_pipeline(sg): pipeline = sg.CreateReductionPipeline() # Set reduction ratio reduction_settings = pipeline.GetReductionSettings() reduction_settings.SetReductionTargetTriangleRatio(0.25) # Use vertex color 3 to control optimization weight_settings = pipeline.GetVertexWeightSettings() weight_settings.SetUseVertexWeightsInReducer(True) weight_settings.SetWeightsFromColorName("3") pipeline.RunSceneFromFile(export_path, processed_path, Simplygon.EPipelineRunMode_RunInThisProcess) 

After using vertex color set three as weights to prioritize the face we get a much more nice looking LOD.

Male human game character with OK looking LOD.

The observant documentation reader might notice that WeightsFromColorComponent ‘s default value is red, and think that we should be able to use vertex color set 3 to guide optimization without specifying it is a color channel. This is however not the case as in Simplygon UVs and vertex color sets are stored separately. We can not use an UV set to control reduction.

Result

After weight painting the face, marking that map channel as a vertex color channel and using it to control reduction we get a much more nice looking LOD for 25% reduction.

Male human game character LOD.

If we look at our original vertex color set we can see that it is kept as well.

Male human game character LOD with black skin and white clothes.

Complete script

# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. from pymxs import runtime as rt from simplygon10 import simplygon_loader from simplygon10 import Simplygon import gc export_path = 'C:/Temp/ExportedScene.sb' processed_path = 'C:/Temp/ProcessedScene.sb' def run_pipeline(sg): pipeline = sg.CreateReductionPipeline() # Set reduction ratio reduction_settings = pipeline.GetReductionSettings() reduction_settings.SetReductionTargetTriangleRatio(0.25) # Use vertex color 3 to control optimization weight_settings = pipeline.GetVertexWeightSettings() weight_settings.SetUseVertexWeightsInReducer(True) weight_settings.SetWeightsFromColorName("3") pipeline.RunSceneFromFile(export_path, processed_path, Simplygon.EPipelineRunMode_RunInThisProcess) def main(): # Initialize Simplygon sg = simplygon_loader.init_simplygon() # Set map channel 3 to vertex color type rt.sgsdk_SetIsVertexColorChannel(3, True) # Export scene to file bResult = rt.sgsdk_ExportToFile(export_path, False) # Reduce exported file run_pipeline(sg) # Importing bResult = rt.sgsdk_ImportFromFile(processed_path, True, True, True) print('Import result: ', bResult) # De-initialize Simplygon sg = None gc.collect() print('Finished') if __name__== "__main__": main() 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *