Создание Lit Sphere материала в 3dsmax

lit sphere matball exampleВ этой статье я хочу вернуться к тренду прошлых лет — Lit Sphere материалам (которые также называют matcap/Spherical Environment Mapping (SEM) и т.д.). Суть этого материала в том что все параметры шейдера: цветность, отражения, и др.  находятся в картинке на которой изображена сфера. Для того, чтобы использовать такую картинку в качестве материала вам понадобится специальный шейдер, умеющий извлекать из нее необходимые параметры.
Такого рода материалы очень удобны при моделировании (особенно органики)  и позволяют выявлять погрешности топологии. Они хорошо зарекомендовали себя в таких программах как Mudbox и Zbrush. Наличие библиотеки с такими материалами и возможность быстро переключаться между ними по моему мнению в разы облегчает моделирование.
Именно созданием Lit Sphere материалов и библиотеки с ними в 3dsmax мы с Вами и займемся. В данной статье мы не будем рассматривать создание изображений со сферами а возьмем уже готовые. Наша задача создать материал, свойства которого будут одинаково видны как при работе с моделью во viewport, так и в случае, когда нам понадобится отрендерить нашу модель.

  • lit sphere material node tree directx shader
    DirectX material parameters

Lit Sphere 3dsmax  material

В 3ds max за визуализацию материала во viewport и за визуализацию во время рендера отвечают разные шейдеры, таким образом материал созданный только для рендера скорее всего будет некорректно отображаться во viewport и наоборот.
Перед началом, скачайте и распакуйте архивы с изображениями со сферой:

LitSphere images collections

pixelcg.com collection by pixelcg.com
— orgelf’s collection (1),(2),(3) by orgelf
— eat3d.com collection by eat3d.com

  1. Начнем мы с материала для работы во viewport. В комплекте 3dsmax нет готового шейдера,  который бы работал с такими изображениями, поэтому мы воспользуемся Matballz  шейдером написанным Charles Hollemeersch.
    — Для работы в режиме direct3d (directx 9) вы используете оригинальный matballz_directx9 (original) шейдер.
    — Для работы в режиме Nitrous (directx 11) вы используете модифицированный мной Matballz11.fx с поддержкой directx 11.
    Материал для viewport выглядит следующим образом:
    Materials -> Standard ->DirectX shader -> Matballz.fx -> Lit Sphere map -> изображение со сферой
    Назначив его на на свой объект вы увидите его работу во viewport, но если вы отрендерите сцену, то свойства вашего материала будут утеряны, так как DirectX shader не работает с визуализаторами.
  2. В качестве визуализатора мы рассмотрим Mental Ray. С Mental Ray в комплекте идет шейдер  Environment Probe/Gray Ball , его свойства схожи с Matballz.fx.
    Таким образом материал для Mental ray выглядит следующим образом:
    Materials-> Mental Ray -> mental ray -> Surface -> Environment Probe/Gray Ball -> Gray Ball Image ->  изображение со сферой
    Этот материал будет виден на визуализации сделанной Mental Ray но при работе во viewport его свойства будут утеряны.
  3. Соответственно наша задача — совместить два созданных ранее материала таким образом, чтобы один работал для viewport, а другой для визуализации. И в этом нам поможет 3dsmax Shell material.
    Наш финальный материал будет выглядеть следующим образом:
    Materials -> Standard -> Shell material -> Original Material ->DirectX Shader (созданный ранее); Baked Material -> mental ray (созданный ранее).
    Обязательно нужно указать в параметрах Shell Material:
    Original Material -> Viewport ; Baked Material -> Render

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

Lit Sphere materials library

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

Download

  • litsphere_lib_1.0.0
    Дата добавления: 19/06/2015 13:41 Размер файла: 1 KB Кол-во скачиваний: 732
  • matballz_directx11
    Дата добавления: 19/06/2015 13:46 Размер файла: 355 KB Кол-во скачиваний: 696
  • matballz_directx9 (original)
    Дата добавления: 02/04/2017 09:42 Размер файла: 355 KB Кол-во скачиваний: 157

Дополнительные материалы:

  • Polycount.com thread
  • Update for 3ds max 2017+
    Changsoo Eun недавно опубликовал новый подход к отображению LitSphere материала во viewport. Если вам интересно, скачайте для этого написаный им скрипт SuperClayMode.

 

Публикации по теме

3 комментария

  • Спасибо за урок. Столкнулся с тем, что в режиме Nitrous Direct3D11, материал shell не красит объект во вьюпорте модифицированным шейдером Matballz11.fx, а просто оставляет его черным. Без shell материала directx shader и mental ray(Environment Probe/Gray Ball) работают нормально по отдельности. Так же и с обычным шейдером Matballz.fx в режиме Nitrous Direct3D9. А вот в обычном Direct3D режиме, shell материал работает исправно.

    Так же интересует, что в шейдере matballz есть NormalMap. А вот каким способом можно добавить карту нормалей, чтобы она работала с Environment Probe/Gray Ball шейдером в mentalray, Вопрос?

    • Здравствуйте Кирилл!
      Спасибо за ваш комментарий.

      Я протестировал работу Shell material в разных версиях 3ds max (2014-2016) в связке с Directx shader и описанная вами проблема действительно существует при использовании 3ds max 2014. При этом в 2015-2016 Shell Material работает как и должен. Я прихожу к выводу, что это либо ограничение Nitrous в 2014 максе либо баг. Не уверен что можно как-то исправить работу для версии 2014 и для более ранних версий, так как их я не тестировал. 🙁

      Environment Probe/Gray Ball игнорирует Normal Bump map. Поэтому стандартными средствами мне пока не удалось добавить поддержку Normal Bump. Если будет какой то прогресс в этом направлении — я дам знать.

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