Реалистичный металлический шейдер

13

Как создать хороший металлический шейдер?

Для разных металлов и, скажем так, более или менее размытых / ржавых и тд.

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

Любая помощь приветствуется!

Valmond
источник
1
Ваш вопрос звучит так, будто это что-то простое и конкретное, но на самом деле это не так. Вы не можете воспроизвести металлический вид только с помощью шейдера. Для этого требуются надлежащие текстуры, поэтому вам нужна зеркальная текстура блеска, вероятно, карта выпуклости, если металл вообще нерегулярный, и т. Д. Если металл полируется до какой-либо степени, вам необходимо отразить окружающую среду (или ее карикатуру) как Что ж. Это не простая проблема «вот какой-то металлический шейдерный код».
Николь Болас
Посмотрите также на предмет анизотропных отражений, феномен, обычно наблюдаемый в матовых металлах.
Дэвид Гувея
@ Дэвид: Это выглядит действительно круто, может быть, это немного излишне для меня на данный момент, но я определенно проверю это и использую, если смогу :-)
Valmond
@Nicol Спасибо за комментарий, я полностью согласен с использованием текстур, мой «нормальный» шейдер состоит из 3: Diffuse, Glow и контрольной карты, включающей Specular, Spec-power и отражение (от карты куба)
Valmond
Быстрый поиск выявляет множество различных металлических шейдеров и прямо изо рта лошади: developer.download.nvidia.com/shaderlibrary/webpages/…
Патрик Хьюз,

Ответы:

4

Я недавно создал шейдеры для чистых и чистых металлов для своей игры, и я очень доволен результатами.

Чистый металл: наиболее важной особенностью в моих экспериментах было отражение окружения с помощью кубических карт. Я реализовал их в средах рендеринга в текстуру в реальном времени, но статические изображения часто дают хорошие результаты, и их легче размыть. Второй наиболее важной особенностью был эффект Френеля, который делает силуэты объектов лучше. Это, например, дает округлый взгляд на шары. Зеркальное освещение необязательно, так как карта куба может предоставить основные моменты напрямую. Рендеринг HDR также важен для того, чтобы отражения на кубической карте выглядели хорошо.

Матовый металл: для матовых металлов вы легко получаете хорошие результаты, используя текстуру кисти, что-то вроде этоговместе с анизотропным освещением. Для анизотропного освещения вы можете найти учебные материалы в Интернете, но я реализовал свой собственный, используя blinn-phong в качестве основы, но из полу-вектора я исключил 80% направления касательной. Это означает, что вам нужны тангенс или битангенс в дополнение к нормали в ваших моделях. Отражение окружающей среды сложно для матового металла. Вы можете выполнять выборку из нескольких направлений на карте куба на основе касательных / битангентных направлений, но для получения хороших результатов может потребоваться множество выборок. Это, однако, не обязательно, так как текстура и анизотропное освещение с несколькими источниками света уже выглядят довольно красиво. Конечный результат в моем случае выглядит так:

Матовый металлический материал

msell
источник
6

Как сказал Николь в своем комментарии, есть много вещей, которые входят в высококачественный металлический шейдер. Для достижения наилучших результатов ваш рендерер должен быть гамма-корректным и использовать физически основанные модели шейдинга (см., В частности, две статьи Нати Хоффмана по этой ссылке).

Учитывая все это, типичный способ изготовления металлического материала состоит в том, чтобы иметь очень низкий или несуществующий диффузный цвет и высокую зеркальную отражательную способность в диапазоне от 50% до 100% (в линейном цветовом пространстве). Как вы заметили, для некоторых металлов зеркальное отражение будет цветным.

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

Натан Рид
источник
Спасибо, это именно то, что я искал! Когда я делаю отражения с кубической картой, может быть, мне следует использовать своего рода освещение окружающей среды в качестве очень высокого зеркального освещения?
Вэлмонд
@Valmond Я не совсем понимаю, что вы имеете в виду под «использовать своего рода освещение окружающей среды как очень яркое зеркальное освещение». Все, что я имел в виду, это то, что зеркальное отражение должно включать в себя как источники света, так и все остальное в среде (добавленной вместе), где часть «все остальное» может быть реализована в виде кубической карты. Типичный способ - создать несколько размытых кубических карт для разных неровностей, как показано здесь .
Натан Рид