вторник, 12 апреля 2011 г.

Заснеженные деревья в 3D


Заснеженные деревья в 3D



Снег для 3D графики часто является непростой задачей. Не существует универсального способа его создания.
В ходе работы над одним проектом мне пришлось «чесать репу» над созданием заснеженных деревьев. Хочу поделиться своим решением этой задачи.
Этот снег подойдет для широкого спектра погодных условий и объектов.


Вот пример того, для чего способ подойдет отлично:
А вот пример того, для чего этот способ не подойдет: 
Также способ не годится для хвойных деревьев.
Выделим особенности снега, лежащего на деревьях, которые мы будем имитировать:
  1. Снег на ветках и стволах лежит с той стороны, с которой, собственно, снег и падает. В безветреную погоду снег налипает на ветки сверху, а на ствол — местами — там, где выступает кора. Наличие ветра меняет направление падения снега и, соответственно, картину налипания. Появляется много снега на стволах с подветреной стороны.
  2. Граница между заснеженным и незаснеженным участком обычно нерезкая — по градиенту, и, при этом, неровная. Но эта граница может быть и довольно резкой — например, когда немного пригреет Солнце.
Первым делом создаем дерево. Хорошее дерево — залог успеха. Для большинства задач подойдут деревья, сгенерированные, в Onyx. Деревья можно делать и в других программах, в том числе и в самом 3DS Max. К модели дерева есть следующие требования:
  1. Модель обязательно должна содержать лофтовый мэппинг.
  2. Количество сегментов окружности ствола и крупных веток — желательно не меньше 8. В ониксе этот параметр называется Transversal.
  3. Неверные нормали объекта могут сильно исказить внешний вид снега. Модель из Оникса имеет много открытых ребер вдоль веток и стволов — соответственно, нормали там неверные. Их быть не должно — сшейте точки обязательно.
Допустим, дерево у нас готово. В моей модели 230К треугольников.
Теперь самое важное — создание маски для снега. Хотя эта маска довольно проста, получить ее мне удалось далеко не сразу.
Бросьте на дерево стандартный материал и поставьте Self-illumination на 100 — так мы сможем лучше видеть создаваемую маску.
Создайте саму маску, состоящую их двух процедурных карт: вначале Gradient Ramp с типом градиента Mapped, и в слот Map поместим Falloff с отмеченными параметрами.
Карта Falloff при этих настройках возвращает цвет в зависимости от направленности нормали относительно направления вверх. Обратите внимание, что я немного порулил кривую этой зависимости. Кривая в нашем случае влияет на ширину границы снега, а также на его общее количество. Карта Gradient Map используется для получения шума на этой границе (параметромNoise). Настройки этого шума позволяют имитировать снег в диапазоне от свежевыпавшего в холодную погоду до начинающего таять. Мэппинг сказывается на том, как выглядит этот шум. На данном этапе его (мэппинг) можно отредактировать (Вам может понадобиться другой текстурный слой), но мы опустим это.
Не тратьте много времени на получение идеальной маски. Позже я поясню, почему.
Создадим новый материал для дерева и будем использовать полученную маску снега (в примере она называется Map #48) для смешивания в различных каналах.
В диффузном канале я использовал карту Mix, в канале Bump — композитную текстуру. Я также использовал маску снега в канале Self-Illumination — фейковое подповерхстное рассеивание.
В качестве текстуры снега я использовал фрактальный шум.

(в сцене только дефолтный источник света)
Небольшое пояснение: изначально я использовал одну и ту же карту (композитную) для диффуза и бампа, но композитная карта в диффузе вызвала овербрайты при рендере Виреем в большой сцене с множеством деревьев. В итоге я заменил ее на карту Mix. Вы можете создавать материал по своему вкусу, используя такую маску для снега. 
Включение/выключение бампа радикально меняет вид снега. Карта Bump при рендере искусственно меняет нормали, а на это в свою очередь реагирует карта Falloff — вот почему я просил вас не тратить много времени на отдельную маску снега. Настраивать детально эту маску нужно, когда материал уже собран.
Если в карте Falloff запихнуть в верхний слот процедурный Noise (вместо белого цвета), в качестве текстурных координат выбрать World XYZ, то все деревья будут иметь уникальный рисунок покрытия снегом:
А если в Falloff в качестве направления использовать объект, то можно сымитировать деревья облепленные снегом в ветренную погоду:
Именно так я и поступил при создании этой работы. Здесь на всём, включая собаку, лежит снег, полученный описанным способом.
Надеюсь, урок вам понравился!

Блог автора: http://superka-01.livejournal.com 
Источник: http://www.render.ru

Комментариев нет: