В играх материалы часто влияют только на внешний вид предметов. На внешний вид влияют шейдеры. Итак, что касается терминологии, есть ли разница между материалами и шейдерами? Должны ли вы написать один шейдер для одного материала?
shaders
terminology
materials
Данияр
источник
источник
Ответы:
Материал - это комбинация атрибутов, которые описывают, как должна выглядеть поверхность данного материала.
Некоторые движки используют разные шейдеры для разных материалов, и в этом случае определение материала может выглядеть следующим образом:
Другие движки используют один шейдер для всех объектов (точнее, движки решают, какой шейдер использовать, в зависимости от параметров, возможностей графического процессора и других факторов, таких как расстояние), и в этом случае материал будет выглядеть примерно так:
источник
A Материал определяет , как объект реагирует на свет.
Есть пара общих параметров:
Теперь скажите, что у вас есть треугольник с материалом
M
.M
имеет Kd = (1,0,0) (красный диффузный отклик), Ks = (1,1,1) (белый зеркальный отклик), Ns = 25 (зеркальное выделение будет довольно резким и не размытым) и не отображает map_Kd ( нет текстуры).Работа шейдера состоит в том, чтобы использовать математику для определения положения вершин треугольника , положения источника света, значений цвета материала и выяснения, какой цвет должен иметь треугольник. Вершинный шейдер выполняет это «вычисление затенения» один раз в каждой вершине и интерполирует цвет по всему треугольнику.
Обычная операция в шейдере для вычисления диффузного отклика в вершине:
источник
Материал - это то, что вы применяете к геометрии, чтобы придать ей цвет и рисунок. Текстура является компонентом материала.
Шейдер - это небольшая программа, которая позволяет отображать этот материал во время выполнения. Хорошая особенность шейдеров заключается в том, что вы можете делать все, от простого рендеринга материала, до добавления динамических эффектов, таких как зеркальные блики и отражения, вплоть до чрезвычайно умных вещей, таких как рендеринг искусственных отверстий в стенах, где попала пуля.
так что в ответ на ваш вопрос - да, есть разница, есть и небольшое совпадение - вы можете либо создать красный материал, либо написать шейдер, чтобы сделать вещи красным, но оба они также позволяют вам многое не мог с другой.
и нет, вам не нужен один шейдер на материал. хотя материал требует рендеринга шейдера, вы можете иметь его для всех материалов, если хотите. они делают определенные вещи, поэтому, если вы хотите, чтобы все было блестящим, например, вы могли бы просто написать один.
Хороший пример шейдеров в военном снаряжении. есть один набор материалов для сцены, но когда вы нажимаете кнопку, чтобы переключиться в тактическое представление, шейдеры, которые визуализируют эти материалы, изменяются, поэтому вещи выглядят намеченными и, как правило, отличаются. То же самое происходит с Бэтменом: «детективный режим» Аркхема.
источник
Хотя и поздно, есть «чит», который поможет вам лучше понять.
Материал - это все, что связано с определенным шейдером для этого вызова.
Например, в приведенном выше ответе у вас есть этот материал: [Material] Shader = NormalMappedSpecular.glsl Texture1 = Rock.png Texture2 = RockNormal.png Texture3 = RockSpecular.png
что означает, что вы будете рендерить с помощью шейдера, который выполняет карту нормалей и зеркальные вычисления, и он будет использовать 3 текстуры внутри этого шейдера.
Позже вы можете повторно использовать один и тот же шейдер с другими 3-мя текстурами (например, car, carNormal и carSpecular), вы будете выполнять другой вызов отрисовки с другим материалом только потому, что изменили параметры шейдера.
В общем, материал - это все, что уникально создает вызов отрисовки, используя один и тот же шейдер с одинаковыми параметрами (текстуры, униформа, атрибуты).
Я надеюсь, что это помогает лучше визуализировать это
источник