Недавно я читала статью и увидела описание процесса создания интересной текстурной карты, о которой пойдет речь далее…

Что же такое ORM? Сокращенно — это «Occlusion, Roughness, Metallic» необычное сочетание трех разных PBR карт запакованных в одной текстуре.
Пример создания такой текстуры я буду показывать в Substance Painter, но также ее можно делать и в Photoshop (для меня это более затратный по времени способ тогда, как Substance Painter делает ее автоматически, главное только правильно настроить конфигурацию). Для рендера я буду использовать Blender 2.8.
Для настройки текстур на объекте, работая в Blender, как и в любом другом редакторе, очень часто приходится добавлять примерно пять основных текстурных карт (BaseColor, Normal, AO, Metallic, Roughness), а то и больше. Этот процесс занимает хоть и не большое, но все-таки драгоценное время художника. Поэтому в данной статье я и хочу разобрать такую тему, как объединение карт в ORM и выяснить, какое она дает преимущество перед традиционными текстурами и дает ли его вообще.
Ambient Occlusion, Roughness, Metallic — это три черно-белые (Grayscale) карты. Это значит, что их цвет лежит только в одном канале. Для справки, в текстурировании мы можем использовать текстуры, состоящие из 3-4 каналов (RGB, RGB+A).
Тогда зачем же хранить эти карты по отдельности, когда можно сделать небольшой архив-изображение, в трех каналах которого поместятся целых три черно-белые текстуры? В этом и есть преимущество ORM.
С теорией разобрались. Но перед тем как показывать настройку проектов в Substance Painter и Blender, я бы хотела привести немного измерений рендеринга одного и того же 3D объекта с использованием разных движков, попеременно подключая два разных материала (один с тремя отдельными картами, другой с использованием ORM).

Для рендеринга я использовала такие движки как Eevee, Cycles (CPU и GPU) и Octane Render (все настройки стандартные, sampling равен 128).
(Сразу хочу сказать, что в Octane я не профи, и, если вы заметите у меня неточности в настройке материалов, буду только рада, если вы на них укажите).

Теперь выбор остается за вами. Как видно результаты рендера очень близкие. Хочу напомнить, что эта статья написана в первую очередь лишь для того, что бы показать, как работать с ORM, а не про оценку времени рендеринга на разных движках.
Первоначально создадим свою конфигурацию в Substance Painter и добавим в нее три ячейки для текстур, первую и вторую – RGB+A (три связанных канала и один несвязанный), а третью – R+G+B (три несвязанных канала). Теперь переносим в ячейки уже имеющиеся карты. В итоге должна получиться такая картина

При экспорте я использовала добавление альфа канала и Dilation + Transparent для того, чтобы текстура запекалась только на месте UV шеллов и нигде больше. На рисунке видно какие в итоге получились карты.
Теперь разберемся с настройкой текстур в Blender. Думаю, что таким же образом можно настраивать ноды и в других редакторах, таких как Maya или Cinema4D.
(Сейчас будет совсем туториал, поэтому я уберу его из основного текста дабы не нагружать статью большим числом картинок).
Посмотрим сразу на итоговый результат, и, если вас он устраивает, можете смело читать как его добиться.

Это попарное сравнение всех рендеров мечей. Как видно Octane несколько отличается, так как имеет другие стандартные настройки, и настройки освещения в том числе. Но повторю еще раз, я не профессионал. На настройку материалов в Eevee и Cycles я потратила меньше времени, чем обычно, в Octane наоборот больше, так что использовать ORM или нет решать вам, а у меня всё.
Спасибо за то, что уделили время этой небольшой статье, надеюсь она была для вас полезной.
Буду рада критике и пожеланиям!

Вступление
Что же такое ORM? Сокращенно — это «Occlusion, Roughness, Metallic» необычное сочетание трех разных PBR карт запакованных в одной текстуре.
Пример создания такой текстуры я буду показывать в Substance Painter, но также ее можно делать и в Photoshop (для меня это более затратный по времени способ тогда, как Substance Painter делает ее автоматически, главное только правильно настроить конфигурацию). Для рендера я буду использовать Blender 2.8.
Проблема
Для настройки текстур на объекте, работая в Blender, как и в любом другом редакторе, очень часто приходится добавлять примерно пять основных текстурных карт (BaseColor, Normal, AO, Metallic, Roughness), а то и больше. Этот процесс занимает хоть и не большое, но все-таки драгоценное время художника. Поэтому в данной статье я и хочу разобрать такую тему, как объединение карт в ORM и выяснить, какое она дает преимущество перед традиционными текстурами и дает ли его вообще.
Разбор
Ambient Occlusion, Roughness, Metallic — это три черно-белые (Grayscale) карты. Это значит, что их цвет лежит только в одном канале. Для справки, в текстурировании мы можем использовать текстуры, состоящие из 3-4 каналов (RGB, RGB+A).
Тогда зачем же хранить эти карты по отдельности, когда можно сделать небольшой архив-изображение, в трех каналах которого поместятся целых три черно-белые текстуры? В этом и есть преимущество ORM.

С теорией разобрались. Но перед тем как показывать настройку проектов в Substance Painter и Blender, я бы хотела привести немного измерений рендеринга одного и того же 3D объекта с использованием разных движков, попеременно подключая два разных материала (один с тремя отдельными картами, другой с использованием ORM).

Для рендеринга я использовала такие движки как Eevee, Cycles (CPU и GPU) и Octane Render (все настройки стандартные, sampling равен 128).
(Сразу хочу сказать, что в Octane я не профи, и, если вы заметите у меня неточности в настройке материалов, буду только рада, если вы на них укажите).

Теперь выбор остается за вами. Как видно результаты рендера очень близкие. Хочу напомнить, что эта статья написана в первую очередь лишь для того, что бы показать, как работать с ORM, а не про оценку времени рендеринга на разных движках.
Настройка текстур
Первоначально создадим свою конфигурацию в Substance Painter и добавим в нее три ячейки для текстур, первую и вторую – RGB+A (три связанных канала и один несвязанный), а третью – R+G+B (три несвязанных канала). Теперь переносим в ячейки уже имеющиеся карты. В итоге должна получиться такая картина

При экспорте я использовала добавление альфа канала и Dilation + Transparent для того, чтобы текстура запекалась только на месте UV шеллов и нигде больше. На рисунке видно какие в итоге получились карты.
Теперь разберемся с настройкой текстур в Blender. Думаю, что таким же образом можно настраивать ноды и в других редакторах, таких как Maya или Cinema4D.
(Сейчас будет совсем туториал, поэтому я уберу его из основного текста дабы не нагружать статью большим числом картинок).
Настройка
Итак начнем с обычной настройки материала в Blender.

В Eevee и Cycles ноды с картами подключаются к своим ячейкам на главной ноде (PrincipledBSDF), которая их комбинирует. Единственное, что может вызвать вопрос, это, что я делаю с Normal Map? Такими действиями я инвертирую зеленый канал, чтобы карта из типа DirectX стала OpenGL. Да, можно и сразу выгрузить в OpenGL, но мне нравится более универсальный вариант.
Во втором случае AO, Metallic и Roughness я заменяю на ORM и добавляю ноду Separate RGB, чтобы распаковать каналы и достать карты по отдельности. Далее по той же схеме подключаю их к главной ноде.

Теперь разберемся с Octane. Ноды в этом движке отличаются, но имеют похожий смысл.

Вроде ничего сложного, теперь с ORM.

В случае с ORM разделение каналов работает по другой схеме и не так просто, как в Eevee и Cycles. Добавляя RGB Spectrum Tex (красный, зеленый или синий) и ORM в Multiply Tex, я вытягиваю из ORM только один канал, в зависимости от цвета RGB Spectrum Tex. Cosine Mix Tex преобразует этот канал в оттенки серого и отправляет в главную ноду (Universal Material).

В Eevee и Cycles ноды с картами подключаются к своим ячейкам на главной ноде (PrincipledBSDF), которая их комбинирует. Единственное, что может вызвать вопрос, это, что я делаю с Normal Map? Такими действиями я инвертирую зеленый канал, чтобы карта из типа DirectX стала OpenGL. Да, можно и сразу выгрузить в OpenGL, но мне нравится более универсальный вариант.
Во втором случае AO, Metallic и Roughness я заменяю на ORM и добавляю ноду Separate RGB, чтобы распаковать каналы и достать карты по отдельности. Далее по той же схеме подключаю их к главной ноде.

Теперь разберемся с Octane. Ноды в этом движке отличаются, но имеют похожий смысл.

Вроде ничего сложного, теперь с ORM.

В случае с ORM разделение каналов работает по другой схеме и не так просто, как в Eevee и Cycles. Добавляя RGB Spectrum Tex (красный, зеленый или синий) и ORM в Multiply Tex, я вытягиваю из ORM только один канал, в зависимости от цвета RGB Spectrum Tex. Cosine Mix Tex преобразует этот канал в оттенки серого и отправляет в главную ноду (Universal Material).
Посмотрим сразу на итоговый результат, и, если вас он устраивает, можете смело читать как его добиться.

Это попарное сравнение всех рендеров мечей. Как видно Octane несколько отличается, так как имеет другие стандартные настройки, и настройки освещения в том числе. Но повторю еще раз, я не профессионал. На настройку материалов в Eevee и Cycles я потратила меньше времени, чем обычно, в Octane наоборот больше, так что использовать ORM или нет решать вам, а у меня всё.
Спасибо за то, что уделили время этой небольшой статье, надеюсь она была для вас полезной.
Буду рада критике и пожеланиям!
DimPal
А куда смотреть чтобы увидеть разницу? По моему они одинаковые… Особенно первые 4 меча.
julia_lankina Автор
Разницы и не должно быть, материалы то одинаковые используются)
Если бы они все таки отличались, то значит, что ORM искажает текстуры, а следовательно применять его не целесообразно