Недавно я читала статью и увидела описание процесса создания интересной текстурной карты, о которой пойдет речь далее…
![](https://habrastorage.org/r/w1560/webt/vo/pq/3k/vopq3kc2ib7ykjgmet32g7nen2g.png)
Что же такое 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).
![](https://habrastorage.org/r/w1560/webt/u0/3a/qd/u03aqdy-ysq3hq57wgwvjvq2c2i.png)
Для рендеринга я использовала такие движки как Eevee, Cycles (CPU и GPU) и Octane Render (все настройки стандартные, sampling равен 128).
(Сразу хочу сказать, что в Octane я не профи, и, если вы заметите у меня неточности в настройке материалов, буду только рада, если вы на них укажите).
![](https://habrastorage.org/r/w1560/webt/mr/c3/-t/mrc3-tvctfnmu0zuiwzyzbw4biy.png)
Теперь выбор остается за вами. Как видно результаты рендера очень близкие. Хочу напомнить, что эта статья написана в первую очередь лишь для того, что бы показать, как работать с ORM, а не про оценку времени рендеринга на разных движках.
Первоначально создадим свою конфигурацию в Substance Painter и добавим в нее три ячейки для текстур, первую и вторую – RGB+A (три связанных канала и один несвязанный), а третью – R+G+B (три несвязанных канала). Теперь переносим в ячейки уже имеющиеся карты. В итоге должна получиться такая картина
![](https://habrastorage.org/r/w1560/webt/t7/hp/am/t7hpamuijqapppin6wov-lojobq.png)
При экспорте я использовала добавление альфа канала и Dilation + Transparent для того, чтобы текстура запекалась только на месте UV шеллов и нигде больше. На рисунке видно какие в итоге получились карты.
Теперь разберемся с настройкой текстур в Blender. Думаю, что таким же образом можно настраивать ноды и в других редакторах, таких как Maya или Cinema4D.
(Сейчас будет совсем туториал, поэтому я уберу его из основного текста дабы не нагружать статью большим числом картинок).
Посмотрим сразу на итоговый результат, и, если вас он устраивает, можете смело читать как его добиться.
![](https://habrastorage.org/r/w1560/webt/id/bc/ht/idbchtx7od2egdfornmqk-pfxyo.png)
Это попарное сравнение всех рендеров мечей. Как видно Octane несколько отличается, так как имеет другие стандартные настройки, и настройки освещения в том числе. Но повторю еще раз, я не профессионал. На настройку материалов в Eevee и Cycles я потратила меньше времени, чем обычно, в Octane наоборот больше, так что использовать ORM или нет решать вам, а у меня всё.
Спасибо за то, что уделили время этой небольшой статье, надеюсь она была для вас полезной.
Буду рада критике и пожеланиям!
![](https://habrastorage.org/webt/vo/pq/3k/vopq3kc2ib7ykjgmet32g7nen2g.png)
Вступление
Что же такое 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.
![](https://habrastorage.org/webt/wc/7a/3z/wc7a3zrvwv9otuoeowlz2icmwnq.png)
С теорией разобрались. Но перед тем как показывать настройку проектов в Substance Painter и Blender, я бы хотела привести немного измерений рендеринга одного и того же 3D объекта с использованием разных движков, попеременно подключая два разных материала (один с тремя отдельными картами, другой с использованием ORM).
![](https://habrastorage.org/webt/u0/3a/qd/u03aqdy-ysq3hq57wgwvjvq2c2i.png)
Для рендеринга я использовала такие движки как Eevee, Cycles (CPU и GPU) и Octane Render (все настройки стандартные, sampling равен 128).
(Сразу хочу сказать, что в Octane я не профи, и, если вы заметите у меня неточности в настройке материалов, буду только рада, если вы на них укажите).
![](https://habrastorage.org/webt/mr/c3/-t/mrc3-tvctfnmu0zuiwzyzbw4biy.png)
Теперь выбор остается за вами. Как видно результаты рендера очень близкие. Хочу напомнить, что эта статья написана в первую очередь лишь для того, что бы показать, как работать с ORM, а не про оценку времени рендеринга на разных движках.
Настройка текстур
Первоначально создадим свою конфигурацию в Substance Painter и добавим в нее три ячейки для текстур, первую и вторую – RGB+A (три связанных канала и один несвязанный), а третью – R+G+B (три несвязанных канала). Теперь переносим в ячейки уже имеющиеся карты. В итоге должна получиться такая картина
![](https://habrastorage.org/webt/t7/hp/am/t7hpamuijqapppin6wov-lojobq.png)
При экспорте я использовала добавление альфа канала и Dilation + Transparent для того, чтобы текстура запекалась только на месте UV шеллов и нигде больше. На рисунке видно какие в итоге получились карты.
Теперь разберемся с настройкой текстур в Blender. Думаю, что таким же образом можно настраивать ноды и в других редакторах, таких как Maya или Cinema4D.
(Сейчас будет совсем туториал, поэтому я уберу его из основного текста дабы не нагружать статью большим числом картинок).
Настройка
Итак начнем с обычной настройки материала в Blender.
![](https://habrastorage.org/r/w1560/webt/r9/s9/8y/r9s98ydlyc3c-ipdbloyx2fvmba.png)
В Eevee и Cycles ноды с картами подключаются к своим ячейкам на главной ноде (PrincipledBSDF), которая их комбинирует. Единственное, что может вызвать вопрос, это, что я делаю с Normal Map? Такими действиями я инвертирую зеленый канал, чтобы карта из типа DirectX стала OpenGL. Да, можно и сразу выгрузить в OpenGL, но мне нравится более универсальный вариант.
Во втором случае AO, Metallic и Roughness я заменяю на ORM и добавляю ноду Separate RGB, чтобы распаковать каналы и достать карты по отдельности. Далее по той же схеме подключаю их к главной ноде.
![](https://habrastorage.org/r/w1560/webt/_3/sw/gz/_3swgzc5_ig_ltntogsrugdwjj4.png)
Теперь разберемся с Octane. Ноды в этом движке отличаются, но имеют похожий смысл.
![](https://habrastorage.org/r/w1560/webt/ew/4z/dv/ew4zdvytxrilwaraeluhmycb_si.png)
Вроде ничего сложного, теперь с ORM.
![](https://habrastorage.org/r/w1560/webt/wy/bj/4w/wybj4w5u10edldozfox1ebipb2u.png)
В случае с ORM разделение каналов работает по другой схеме и не так просто, как в Eevee и Cycles. Добавляя RGB Spectrum Tex (красный, зеленый или синий) и ORM в Multiply Tex, я вытягиваю из ORM только один канал, в зависимости от цвета RGB Spectrum Tex. Cosine Mix Tex преобразует этот канал в оттенки серого и отправляет в главную ноду (Universal Material).
![](https://habrastorage.org/webt/r9/s9/8y/r9s98ydlyc3c-ipdbloyx2fvmba.png)
В Eevee и Cycles ноды с картами подключаются к своим ячейкам на главной ноде (PrincipledBSDF), которая их комбинирует. Единственное, что может вызвать вопрос, это, что я делаю с Normal Map? Такими действиями я инвертирую зеленый канал, чтобы карта из типа DirectX стала OpenGL. Да, можно и сразу выгрузить в OpenGL, но мне нравится более универсальный вариант.
Во втором случае AO, Metallic и Roughness я заменяю на ORM и добавляю ноду Separate RGB, чтобы распаковать каналы и достать карты по отдельности. Далее по той же схеме подключаю их к главной ноде.
![](https://habrastorage.org/webt/_3/sw/gz/_3swgzc5_ig_ltntogsrugdwjj4.png)
Теперь разберемся с Octane. Ноды в этом движке отличаются, но имеют похожий смысл.
![](https://habrastorage.org/webt/ew/4z/dv/ew4zdvytxrilwaraeluhmycb_si.png)
Вроде ничего сложного, теперь с ORM.
![](https://habrastorage.org/webt/wy/bj/4w/wybj4w5u10edldozfox1ebipb2u.png)
В случае с ORM разделение каналов работает по другой схеме и не так просто, как в Eevee и Cycles. Добавляя RGB Spectrum Tex (красный, зеленый или синий) и ORM в Multiply Tex, я вытягиваю из ORM только один канал, в зависимости от цвета RGB Spectrum Tex. Cosine Mix Tex преобразует этот канал в оттенки серого и отправляет в главную ноду (Universal Material).
Посмотрим сразу на итоговый результат, и, если вас он устраивает, можете смело читать как его добиться.
![](https://habrastorage.org/webt/id/bc/ht/idbchtx7od2egdfornmqk-pfxyo.png)
Это попарное сравнение всех рендеров мечей. Как видно Octane несколько отличается, так как имеет другие стандартные настройки, и настройки освещения в том числе. Но повторю еще раз, я не профессионал. На настройку материалов в Eevee и Cycles я потратила меньше времени, чем обычно, в Octane наоборот больше, так что использовать ORM или нет решать вам, а у меня всё.
Спасибо за то, что уделили время этой небольшой статье, надеюсь она была для вас полезной.
Буду рада критике и пожеланиям!