Gamedev
Денис Кузнецов
1081

Текстурирование, или что нужно знать, чтобы стать Художником по поверхностям. Часть 3. PBR и материалы

Продолжаем серию уроков о том, как стать художником по поверхностям.

В закладки
Слушать

Hello there! Моё имя Денис Кузнецов. Я - руководитель студии разработки игр QberCat Studio. Мы работаем над игрой "Cat Movies!" в движке Unreal Engine 4.

Серия уроков была написана год назад в пяти частях и выложена на «Хабр». Тогда я не дописал последнюю часть, оставив пятую часть без практики и подробных данных о том, как можно минимизировать потребление текстур и вывести текстуры на более высокий уровень.

Начиная выкладывать статьи на DTF, я постараюсь этот пробел закрыть, а так же ещё раз пробегусь по тексту и предоставлю вам более актуальную версию с отредактированным текстом (2-е издание, так сказать).

  • Часть 1. Пиксель. Здесь.
  • Часть 2. Маски и текстуры. Здесь.
  • Часть 3. PBR и материалы. Вы ее читаете.
  • Часть 4. Модели, нормали и развертка. Здесь.
  • Часть 5. Система материалов. Статья готовится.
  • Часть 6. Без названия. Статья пишется.

Итак, котятки, погнали! =)

PBR

Расшифровывается эта аббревиатура так: Physically Based Rendering. Что в переводе значит «Основанный на физике рендер». Это важно, так как очень многие переводят PBR как "Физически корректный" - но это не так. Очень много физических явлений света не учитывается при обработке текстур в PBR, поэтому это именно "основанный на физике", а не точный рендер.

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

В зависимости от поверхности, от ее состояния (отражает ли оно, как зеркало, или имеет шероховатость, есть ли капли грязи / воды / кофе на поверхности, кусок дерева) вам в глаз приходит уже видоизмененный луч (или волна?).

Суть одна — то, как мы видим мир, выстраивается из того, как свет отражается от поверхности объектов. И стандарт PBR описывает то, какие какие физические явления должны учитываться, чтобы свет выглядел максимально кинематографично.

Расписывать о том, по каким правилам конструируется свет, как он отражается и отражается ли вообще, я не стану. Про то, как работает на уровне физики свет есть куча статей:

  • Статья по основам от создателей Substance Painter / Designer здесь. И ее перевод от 2015 года здесь . Ссылка на вторую часть перевода есть на той же странице.
  • Статья от Google по их разработке PBR (те же яйки, только в профиль с другими формулами) здесь.
  • Статья от MrShoor, который рассмотрел PBR на низкоуровневом программировании шейдеров здесь.

Параметры. Или как настраивается PBR.

Мы рассмотрим PBR с точки зрения общей концепции и на уровне работы с каждым параметром отдельно через каналы пикселей.

Из прошлой части статьи мы помним, что PBR на самом деле создается с помощью комбинаций параметров, которые в свою очередь могут состоять из 1-го или нескольких каналов. То есть, PBR состоит из набора параметров:

  • Color (Base Color / Albedo). Использует комбинацию из 3 каналов.
  • Metallic. Использует 1 канал.
  • Specular. Использует 1 канал / 3 канала в зависимости от реализации рендера. об этом будет чуть ниже.
  • Roughness. Использует 1 канал.
  • Glossiness. Использует 1 канал.
  • Ambient Occlusion (далее AO). Использует 1 канал.
  • Height. Использует 1 канал.
  • Normal map. Использует комбинацию из 3 каналов.

Все параметры, кроме Color и Normal map, используют по 1 каналу, а Color и Normal map — по 3 канала каждый:

  • Color использует 3 канала — RGB, чтобы формировать цвет пикселя.
  • Normal map использует 3 канала, чтобы сымитировать наклон поверхности. Каждый канал отвечает за наклон по вертикали, горизонтали и глубину соответственно, а значения в этих каналах определяют силу наклона.

Что касается Normal Map, то ее техническая реализация (какие каналы за какой наклон отвечают) разнится от настроек рендера. Так, например, в Unreal Engine 4 канал G отвечает за отрицательное значение наклона по вертикали, а в Unity - за положительное.

Более подробную информацию можно прочитать здесь.

Еще есть огромная всеобъемлющая статья о том, как запекать Normal Map и как с ней вообще работать, на сайте render.ru здесь. Крайне рекомендую прочитывать ее раз в неделю, чтобы усвоить весь материал.

Ссылка на форум обсуждения карт нормалей и высот (параметр Height) здесь.

И википедийное описание рельефного текстурирования здесь.

Теперь стоит отметить, что PBR имеет несколько различных реализаций. Все они схожи между собой и пользуются все теми же каналами пикселей для корректировки конечного результата. Разница лишь в формулах и в конечном результате. Обычно разделяют 2 типа реализации:

В первом типе учитываются параметры Color-Metal-Roughness, во втором — Diffuse-Specular-Glossiness. Именно во втором случае параметр Specular имеет 3 канала.

Оба типа реализации используют одинаково 3 параметра — АО, Normal map, Height.

Мы будем использовать первый вариант, так как в дальнейшем перенесем наше обучение на Unreal Engine 4, а этот движок использует первый вариант комбинаций + имеет дополнительно параметр Specular из одного канала.

Обратите внимание, что UE4 использует первый вариант рендера, но так же использует параметр Specular. Однако, если во втором случае Specular имеет 3 канала, то в UE4 используется Specular с одним каналом, что лишний раз показывает, что PBR — это условность, а параметры - это абстрактные входы для текстурных карт с каналами, чтобы можно было получить определенный результат. Спасибо Constantine Ponomarev за уточку =)

Мяу-Мяу.

Котик
Император котиковской планеты

Хотя при создании текстур в Substance Painter параметр Height и вынесен отдельно, при запекании текстур он вшивается в карту нормали. Но его все еще можно его выделить в отдельный канал.

Итого, конечный результат картинки состоит из наложения параметров в одном пикселе:

Давайте рассмотрим теперь то, как это работает в Substance Painter. Для этого мы снова создаем новый проект с обычным плейном и стандартными настройками (о них я рассказывал во второй части статьи). И создадим новый слой заливки:

Теперь рассмотрим стандартную текстуру нормалей из набора Substance Painter «Niche Rectangle Top Wide», которая располагается под тегом Hard Surface:

Далее мы перенесем эту карту нормалей в параметр слоя Base Color (из предыдущего урока мы должны помнить, как это делать). Так выглядит карта нормалей, если воспринимать ее, как изображение (изображение выше). Но теперь удалим ее из параметра BaseColor (мы это сделали для общего ознакомления), нажав на крестик в параметре:

И перенесем ее в параметр Normal:

Ваш конечный результат сразу обновился?

Теперь, если зажать Alt и ЛКМ во viewport'е— можно крутить камерой и смотреть на плейн под разными углами. Свет, отраженный от пикселей, начнет переливаться, создавая иллюзию глубины. Как будто на плейне действительно есть какие-то впадины и выпуклости. Все это заметно под углом от 90 до 140-150 градусов. И чем больше угол наклона, тем больше становится понятно, что это расчет видеокарты, который определяет, как должен отражать свет каждый пиксель, чтобы создавать эту иллюзию. В качестве исходных значений мы передаем в видеокарту 3 параметра в виде каналов пикселя (иначе говоря, текстуру Normal map):

Теперь давайте извращаться. Удалим из параметра Normal эту карту и укажем ее в Metallic.

Но для параметра Metallic используется только один канал, а карта нормалей имеет 3 канала, соответственно, вставляя карту нормалей в этот параметр, Substance Painter обрежет 2 лишних канала (GB - второй и третий по очередности) и оставит только один для расчетов:

И результат:

Как будто какая-то плата или микросхема, правда?

В конечном результате видно теперь, что больше нет никаких выпуклостей и впадин, но сама поверхность стала походить на какую-то металлическую плату. Вы так же можете посмотреть, как будет выглядеть параметр Metallic в градациях серого без остальных параметров (BaseColor и прочих), переключив режим отображения на 1 канал Metallic (если вы ничего не меняли, то во вьюпорте справа сверху есть возможность переключения отображения):

Выбираем металлик и получаем следующий результат:

Как видим, это один канал в градациях серого, который определяет, какие пиксели должны выглядеть как металл, какие — как нечто среднее, а какие — не металл. 0 — не металлический. 1 — металлический.

Аналогично и с параметром Roughness (1 канал) — любая текстура подойдет для работы с ним. В зависит от того, какой конечный результат вам потребуется. Можете попробовать самостоятельно воткнуть в параметр Roughness любую доступную вам текстуру и посмотреть на результат.

Помните, если выставляете текстуру с 2 и более каналами в параметры с одним каналом, то будет использоваться только самый первый канал текстуры.

Так как считается стандартом наименование последовательности каналов RGBA, то первым каналом будет всегда R.

В дальнейшем, при использовании других ПО можно будет указывать, из какого именно канала брать данные. И мы это обязательно рассмотрим в следующих статьях.

Сложные материалы

Под словом «материал», обычно подразумевается коллекция готовых параметров, совокупность которых дает кинематографичный результат — материал (иначе говоря, фактуру, поверхность). Возьмем, к примеру, вот это кожаное кресло:

Визуально, кресло состоит из 3 материалов:

  • Кожа.
  • Металлические клепки.
  • Пластиковые (возможно, деревянные) ножки.

Каждый материал имеет свои параметры:

  • Color. (например, кожа — это близкий к черному цвет с крапинками трещин, а клепки — это золотистый цвет с какими-то пятнами грязи ).
  • Metallic (в коже практически равен 0, а в клепках близок к 1).
  • Roughness (в коже он ближе к 1, а в клепках ближе к 0).
  • Normal Map (В коже карта нормалей отображает трещинки и их глубину, а в клепках — технические углубления/выступления).
  • AO (в коже будет отображать корректность затенения трещин, а в клепках — углублений).

И вот так параметры кожи выглядят визуально:

Подведем промежуточный итог:

Сейчас мы знаем:

  • Принцип работы PBR - все параметры настраиваются через каналы.
  • Каналы - набор параметров пикселей в текстурах.
  • Как работают все параметры PBR, и как мы можем на них влиять через текстуры.
  • Принцип построения сложных материалов.
  • Как смешивать материалы с помощью масок (Маски мы проходили еще во второй части).

Исходя из всего этого, мы можем теперь представить, как можно создать мокрый грязный асфальт со следами шин. Можем ведь? Да, конечно, можем. Иначе мы не котятки =)

Практика

Перед тем, как начать, нам нужно определиться с количеством материалов, которые будут использоваться в нашем практическом туторе:

  • Асфальт.
  • Грязь.
  • Следы шин (проще говоря, резина).

Их нужно где-то найти, а потом добавить в проект Substance Painter =)

Встал вопрос — где брать эти материалы?

Можно немного помучиться и создать коллекцию параметров для каждого материала вручную. Например, найти изображение асфальта. Обрезать его до квадрата и сделать его в качестве BaseColor. Потом, через специальные программы (например, xNormal) по этому изображению создать карту нормали. Через карту нормали отрегулировать Metallic и Roughness (можно и по BaseColor). В итоге, потратить несколько часов на создание идеального материала асфальта, выверяя корректные параметры для металла и шероховатости.

А можно сделать все проще.

Как я уже сказал выше, большинство материалов уже заготовлены давно за вас. Не думаете же вы, что вы первые, кто создает свой материал? =) Ваша задача лишь найти готовые решения, которые отвечают вашим требованиям, скачать их и установить. Если вы пользуетесь Substance Painter, то у компании allegorithmic (теперь уже у Adobe) есть специализированное хранилище готовых материалов, которые можно скачать. Доступ к ним есть как платный, так и бесплатный.

Если вы пользуетесь Quixel Mixer, то в этой программе уже заложены сотни различных материалов, которые были отсканированы с реальных объектов со всего мира и представляют собой огромную базу реалистичных материалов. А вам достаточно лишь указать их и начать работать.

Вот здесь (Ссылка) я подготовил текстуры для материалов, которые мы будем использовать в нашей практике. Скачивайте, не стесняйтесь.

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

Всегда изучайте правила и условия игры. Когда вы знаете правила игры от и до - у вас появляется понимание сути игры и то, как можно нарушать правила без последствий, а как их можно модернизировать, чтобы быть максимально эффективным. Мяу-мяу.
А если вы будете играть в игру, не понимая правил - вы так и будете получать штрафные баллы "ни за что", а судья кикнет вас с поля спустя 3 предупреждения. Задумайтесь, мяу-мяу.

Котик
Глава семейства

Если вы уже посмотрели файлы, то, наверное, обратили внимание на маску для шин. Она подготовлена отдельно, так как я не смогу ее сгенерировать на ходу в Substance Painter, поэтому я воспользовался рисунком шин, найденным в интернете и подготовил его через Photoshop для работы в Substance Painter:

Машина

Теперь создадим новый проект и добавим все наши файлы в него. Для этого мы выбираем стандартные настройки, но теперь нам нужно при создании проекта еще указать наши текстурные карты:

В проекте создадим 3 папки под каждый материал и проименуем их, чтобы не путаться:

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

В нашем случае очень важна иерархия папок (да и не только в нашем - она всегда важна). Иерархия определяет уровень материала, иначе говоря — что на чем лежит. Асфальт в нашем примере — это дно, самый низкий объект. На нем остаются следы от шин. А вот грязь может быть и на следах шин, и на асфальте. Поэтому грязь будет выше всех.Теперь давайте сразу спрячем все, что должно быть спрятано, и оставим только асфальт. То есть, создадим черные маски на папках Rubber и Dirt:

Теперь создадим в каждой папке по 1-ому слою. А точнее, создадим слои и распределим их в папки. Не забываем о нейминге, чтобы потом не путаться (не смотря на то, что визуально не совсем понятно, что слои находятся в папках — поверьте, они в папках):

Говорю вам, слои в папках

Все новые слои имеют базовые средние параметры. Поэтому Base Color серый, нормаль не отображает выпуклостей (все ее каналы по-умолчанию), а Metallic и Roughness не создают впечатления какого-либо материала.

И сейчас нам нужно это исправить, указав в каждый параметр соответствующую текстуру (на примере асфальта):

Ваша задача сейчас распределить все текстуры материалов в нужные параметры слоев.

После того, как вы все это проделаете, назначим маску для резины и создадим эффект следов. Так как у нас уже есть черная маска у папки, то нам нужно просто подключить файл со следами колесиков к этой маске. Для этого кликаем ПКМ по маске и выбираем Add Fill:

И в параметрах GrayScale указываем маску:

В результате на асфальте появятся следы резины, но их будет достаточно сложно разглядеть, так как это все таки PBR и кинематографичность (!!!). Чтобы их увидеть, нужно Plane повернуть под определенным углом:

Сейчас эти два слоя (асфальт и резина) находятся на одном уровне. Но мы-то знаем, что резина находится НА асфальте, а значит, слой с резиной должен быть физически выше. И вот теперь мы воспользуемся тем самым параметром Height.

Найдите его в параметрах слоя Rubber и выкрутите его на максимум, чтобы прочувствовать, как он работает. Покрутите камерой, чтобы увидеть, как свет начал обрабатывать пиксели, которые вы настроили своими руками. Прочувствуйте свою мощь! =)

Ну а теперь выровняйте параметр на 0.1, чтобы это было не так явно и более правдоподобно:

Мы могли бы выкрутить в -0.1, чтобы у нас проявились ямки, как после машин на грязи, но это асфальт, и он не проваливается так легко.

Теперь настроим грязь. Исходя из реальности, можно предположить, что грязь должна забиваться в трещины асфальта в первую очередь. Но у нас нет маски, чтобы мы могли проявить слой грязи в трещинах. Однако решение есть — мы можем взять BaseColor асфальта и на его основе сделать маску для грязи.

Как это работает? Если посмотреть на BaseColor асфальта, то можно обратить внимание, что чем темнее пиксель, тем больше он похож на трещину. То есть, в этом изображении все темное — это трещины, а все светлое — это поверхность. И если мы хотим воспользоваться изображением, как маской, то нам достаточно было бы инвертировать цвета (темное сделать светлым и наоборот) пикселей, и у нас получилась маска для грязи.

Для этого отключим отображение слоя с асфальтом (нажав на глазик у папки с асфальтом), чтобы было проще воспринимать то, что мы делаем.

Далее, укажем, что в маске грязи должен быть файл и присоединим к ней файл Asphalt_BaseColor:

Как я и писал выше — светлым был асфальт, а темным — трещины. Соответственно, на больших поверхностях начала проявляться грязь, а в трещинах доминирует базовый серый цвет (базовые параметры / фон).

Теперь наша задача заставить эту текстуру восприниматься иначе — инвертировать цвета и усилить их, чтобы маска проявила грязь в трещинах. Проще всего это сделать с помощью дополнительного эффекта «Уровни» (Levels). Добавляем к маске дополнительный фильтр «Levels» так же, как мы добавляли Fill (ПКМ — Add Levels). И выкручиваем параметры примерно, как на картинке ниже:

И нажимаем на кнопку ниже «Invert» для инвертирования уровней интенсивности канала:

Теперь грязь располагается именно там, где нам нужно — в трещинах асфальта:

Включаем асфальт и присматриваемся к нашим трудам:

Ты видишь грязь? И я - нет. А она есть.

Заметьте, как мы ловко смогли немного оптимизировать работу генерации текстуры - мы не стали загружать в проект еще 100500 текстур, а воспользовались той же текстурой, что и использовалась для окраски асфальта. Мы стали на шаг ближе, чтобы быть художником по поверхностям. Мяу-мяу.

Котик
Центральный вратарь

Но это слишком просто. Поэтому, давайте теперь добавим на наш асфальт оранжевую разметку. Для этого нам необходимо будет:

  • Создать новую папку и назвать ее Road_Line.
  • Добавить черную маску папке.
  • Добавить в папку новый слой и назвать его Layer_RoadLine.
  • У слоя в параметрах BaseColor указать оранжевый цвет напрямую:

Вы так же можете отрегулировать параметры Metallic и Roughness на свой вкус, чтобы создать реалистичную краску. Я не стал этого делать, чтобы сократить размеры тутора.

Теперь, вспоминая правила иерархии слоев, расположим папку с дорожной линией между асфальтом и резиной.

Перед тем, как что-то красить и определять иерархию слоев, художники порекомендуют вам подумать над тем, какая была история у объекта. Сначала покрасили асфальт, а потом он стал грязным, и по нему проехала машина, или краску наложили после, просто не мыли асфальт (прям, как в жизни). История объекта всегда определяет его внешний вид, мяу-мяу.

Котик
Глава государства.

Настало время ручного рисования. Выделите маску папки RoadLine и начертите на плейне (прям на асфальте) полосу разметки. У меня получился примерно такой результат:

Теперь стоит добавить еще одну маску на сам слой с краской, чтобы создать ощущение отвалившейся краски. Для этого мы не будем создавать папку, а создадим маску прямо на слое и добавим любую стандартную маску Substance Painter. Чтобы сделать это — добавьте маску, а потом добавьте заливку (ПКМ по маске и Add Fill). В заливке укажите Текстуру Dirt 4, которая находится под тегом Procedural:

И смотрим результат:

Не забываем, что у слоя с краской нужно так же указать высоту. Предлагаю указать 0.05 — среднее между резиной и асфальтом.

Будьте внимательны, так как для этого нужно выделить именно слой, а не маску. Указать вручную значение можно, кликнув по цифре справа сверху от ползунка.

Ну и какой асфальт без воды?

Для этого создайте самостоятельно папку вместе со слоем. Пока НЕ добавляйте никаких масок.

Установите папку в иерархии на самый верх. Ведь вода же сверху, правильно? У слоя выкрутите на максимум Metallic, а Roughness на минимум. Далее укажите высоту воды, равную 0.15.

И теперь отключите канал Color, нажав на кнопку, выделенную синей рамочкой. Ведь у воды нет цвета:

Настройки слоя с водой.

Что произошло? Произошло смешение все нижних слоев согласно маскам и слоя с водой. Но у воды теперь нет канала цвета, а значит, она не может красить в нужные ей цвета пиксели. За то все другие параметры верхнего слоя воды влияют на параметры нижних слов, и асфальт стал максимально мокрым и неприятным, как будто и вовсе не асфальт.

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

Теперь домашнее задание:

  • наложите маски так, чтобы асфальт был не полностью мокрым, а с небольшими лужами. Помните, что лужи не имеют неровностей на поверхности — подумайте, как нужно смешать слои так, чтобы лужи были гладкими. И что для этого нужно еще сделать? Я уверен, вы справитесь =)
  • Так же попробуйте найти, где в параметрах слоев указываются правила смешения. Попробуйте их изменить. Поиграйтесь с ними, прочувствуйте то, как они работают. Все это нам пригодится в будущем, когда мы станем Художниками по поверхностям.

Итог

  • В этой статье мы разобрали, как создавать классические текстуры. В целом, правильно применяя параметры, вы уже можете начинать текстурировать и даже смело можете назвать себя джуниор-художником по текстурам.
  • Мы узнали, как работает PBR.
  • Параметры в PBR необязательно должны быть уникальны. Это все еще обычные параметры, которые мы можем указывать через каналы пикселей.
  • Одни и те же текстуры мы можем использовать по разному. Это дает нам преимущество — нам не нужно загружать память лишними файлами с большим количеством пикселей, а достаточно загрузить один файл и подсказать программе, как его рассчитать.
  • Мы познакомились с материалами и тем, как они собираются. Теперь вы знаете, что не обязательно быть супер-крутым фотошоп-мастером, а достаточно найти готовые параметры, чтобы программа смогла из них представить корректно материал.

В следующих частях мы затронем такие темы, как развертка, плотность текселя (и что такое тексель), и подойдем, наконец, к самому интересному — созданию собственных шейдеров в UE4.

Программы Quixel и Substance Painter

В предыдущей версии статьи я рекомендовал работать новичкам с Quixel Suite. Однако данная программа более не существует, и на ее место встала вторая версия программы текстурирования от Quixel (а теперь и от Epic Games) Mixer 2020. В целом, новое ПО сохранило традицию простоты и работы с готовыми прессетами. Что можно рассудить, как очень быстро осваиваемую программу для создания текстур и материалов.

Что касается Substance Painter, то его сила начинает проявляться, когда в работу подключается третья программа Substance Designer. Designer позволяет создавать свои материалы путем генерации нужных нам поверхностей. Designer крут тем, что вы можете создать «умные материалы», которые будут иметь настройки внутренних масок, которые будут контролировать количество и качество внутренних материалов. То есть, «умные материалы» в данном случае — это контейнер, который содержит в себе несколько материалов и предустановленные маски, которые регулируются формулами и алгоритмами, которые художник прописывает в Designer.

Потом этот контейнер экспортируется в Painter, где происходит его тонкая настройка. Например, наш мокрый асфальт мы создали в Painter. Но могли бы собрать в Designer и подключить кучу дополнительных настроек, которые бы позволили нам изменять результат налету, в одном месте, а не переключаться среди кучи масок, как в Painter.

Substance Designer так же нужен и важен для работы над созданием сложных бесшовных материалов, которые в дальнейшем можно использовать в качестве текстур для объектов. Пример_1, Пример_2, Пример_3.

Именно это ПО является первым ПО, которое необходимо знать любому художнику по поверхностям. Но, как всегда - об этом позже =) Мяу-Мяу.

Котик
Генерал генералов

Ну а пока вы ждете продолжения - вы можете начать наблюдать за нашей игрой в нашей группе VK и в Твиттере.

Ссылка на предыдущую часть здесь.

Следующая часть здесь.

CEO Qbercat Studio. Подписывайтесь =)
{ "author_name": "Денис Кузнецов", "author_type": "self", "tags": ["\u043e\u043f\u044b\u0442","unrealengine","tutorial"], "comments": 16, "likes": 49, "favorites": 194, "is_advertisement": false, "subsite_label": "gamedev", "id": 210838, "is_wide": false, "is_ugc": true, "date": "Tue, 15 Sep 2020 17:39:13 +0300", "is_special": false }
0
16 комментариев
Популярные
По порядку
Написать комментарий...
1

Мммм, вроде и класс, и вроде бы чувак умер.

Ответить

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

1

Specular. Использует 1 канал.

Вообще-то карта Specular трёхканальная.

Ответить
1

Поэтому я и говорю, что гаммы серости, цвета - это все условности. Это за рамками сути. А суть простая - работа с каналами. Она очень тяжело дается, особенно тем, кто привык уже работать, не вникая в суть. Особенно тебе, так как ты до сих пор не способен выйти за рамки своих деталей и взглянуть на текст абстрактно, не подмешивая параметры, которые никакой сути не играют в становлении обработки данных.
Specular - это условный параметр, который в каждом движке используется и понимается по своему - тут нет четких правил. Но правила подачи данных через текстуры всегда одни - это удобно загонять большой массив чисел в виде текстур - художники не просекают фишку, а программисты радуются простоте решения.

Ответить
0

На юнити - возможно. UE4 использует один канал.
https://docs.unrealengine.com/en-US/Resources/ContentExamples/MaterialNodes/1_3/index.html

input a scalar value between 0 (non-reflective) and 1 (fully reflective)

Ответить
1

Ну так может не стоило смешивать карты с разных подходов в одном параграфе?
Опциональная карта Specular для UE4 (который использует подход Metallic/Roughness) свсем не тоже самое что основная карта Specular в подходе Specular/Glossiness.

Ответить
0

Я понял. Ты настроен негативно, что бы я не написал. Я больше не буду с тобой дискутировать. Это тупая трата времени. Если тебе не нравится то, что сделал я - просто напиши свое. А в статье я четко написал - это условности. И если ты не способен это понять, то д сути ты не дойдешь никогда.

Ответить
2

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

Ответить
0

Продолжай в том же духе =) У тебя все получится =)

Ответить
2

Вместо подобных снисходительных ответиков лучше бы внёс правки в статью. Толку было бы намного больше.

Ответить
1

Константин. Это условности - линейные данные между 0 и 1, или не линейные - это уже все относится к теории цвета. Я не разбираю ее, не рассматриваю и даже не собираюсь это делать. В исключительном для тебя порядке - я вставлю ремарку о типах передачи цвета, если найду для этого подходящее место. Но сейчас - это лишняя информация, которая будет забивать голову, потому что дальше все пойдет куда сложнее. И там некогда будет понимать типы цвета. Но будь спокоен, я тебя услышал. И если я не вставлю инфу про это, я с удовольствием поддержу твою статью об этом и вставлю ссылку на нее с ремаркой, что это важно для всех и каждого. Договорились?

Ответить
1

Блин... пропустил все части, даже не забукмаркав. 

Вот, прокрастинация говорит, мол, давай, читай, а потом, наконец, проапгрейдишь свой Дизайнер до актуалки... но надо же работать :(

Ответить
1

Успеешь, еще 3 части на подходе =)

Ответить
1

"Традицию простаты" фикс плиз

Ответить
1

Может, так оставить?)

Ответить

Комментарии

{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }