Полезное
Мы Вконтакте
Discord канал
В Unreal Engine 4, Material Instance являются своего рода зависимыми копиями материала. Их используют чтобы изменять те или иные параметры материала, без перекомпиляции шейдеров. Чтобы использовать Material instance необходимо заранее создавать параметры в исходном материале. Так же Material instance можно использовать, чтобы изменять визуальный вид объекта, или эффекта, прямо во время игры.
Это позволяет создать очень гибкую визуальную составляющую вашего творчества.
Инстансы материалов редактируются в специальном редакторе, отличающийся от основного редактора материалов. Более подробно можно почитать на странице «Редактор инстанс материалов«.
Несмотря на то, что Material instance позволяет самостоятельно изменять внешний вид материала, необходимо знать, что вы не сможете редактировать каждую особенность материала, по умолчанию. Чтобы получить такую возможность, вы должны создать свойства исходного материала (Master Material) и назначить их в качестве параметров. Этот процесс называется параметризация материала.
Параметр материала, выглядит в виде узла данных в редакторе материалов. Технически, это значение которое имеет имя и служит в качестве канала для отправки значений в Material Instance. Эти параметры работают из материалов.
Скажем вы хотите создать материал, цвет которого вы сможете изменить в любой момент. Для этого вы должны всего лишь создать векторный параметр и дать ему имя. После того как вы создадите material instance этого материала. Вы увидите свой параметр под категорией Vector parametrs. Там вы можете его изменять, без необходимости перекомпиляции шейдеров или необходимости создавать отдельный материал.
Здесь вы можете увидеть параметры заложенные в материал.
А здесь мы их видим уже для редактирования в Material Instance
В Unreal Engine 4 доступны для использования 2 вида Material instance
Material Instance Constant – Заранее просчитывается до игрового процессса
Material Instance Dynamic – Изменения вступают в силу в процессе игры в реальном времени
Постоянный Material Instance вычисляется только один раз, заранее, до игрового процесса. Это означает что он не может быть изменен во время игры. Однако, хоть они и являются неизменными, они имеют существенное преимущество в производительности поскольку не требуют компиляции. Например, если у вас есть игра с различными автомобилями, и все экземпляры с разными цветами, но цвета которых не изменяются в процессе игры. То лучше создавать Master Material, представляющий вариации для разных типов автомобилей. Это может быть краска, насколько физический материал металический, глянец и т.п
Material Instance Constant создаются в Content Browser и редактируются с помощью Material Instance Editor.
Material instance dynamic может быть рассчитан непосредственно во время игры или симуляции сцены. Это означает, что вы можете использовать сценарии (Blueprint или скомпилированный C++ код) чтобы изменить те или иный параметры Material instance на протяжении всей игры. Возможные применения этого ограничены только вашей фантазией. Однако стоит учитывать, что такие материалы, менее производительны чем Material instance constant.
Material instance dynamic создаются в Блупринте из основного материала (Master). В Blueprint можно применять данный материал к объекту, который имеет параметризированные свойства, и постоянно иметь к нему доступ через узел Create Dynamic Material instance. После создания Dynamic Material Instance, можно изменять параметры Material instance в игре, через сценарий Blueprint.
Что бы создать статичный инстанс внутри редактора, вам нужно кликнуть правой клавишей мыши по материалу в Content Browser, для которого хотите создать инстанс. Затем выбрать опцию Create Material Instance.
Каждый параметр в материале, может быть организован для просмотра в Material Instance Editor. Связанные параметры могут быть добавлены к группе, что позволяет их быстро найти под выбранной категорией и изменить. Параметры, которые не добавлены в какую либо группу, будут отображаться в категориях по умолчанию (как правило это категории описывающие тип параметра скалярный, векторный и т.д)
Для того чтобы добавить параметр для материала, используйте предназначенные для этого блоки категории Parameters. Есть несколько типов параметров, которые могут быть использованы, в том числе Scalar Parameter, Vector Parameter, различные параметры текстур, и Static Parameter.
После создания вашего параметра, дайте ему уникальное имя, а так же присвойте его к необходимой для вас группе. Так же необходимо задать значение которое будет использоваться по умолчанию.
Scalar Parameter является параметром, который содержит одно значение с плавающей точкой. Оно может быть использовано для управления эффектами на основе отдельных значений, таких как сила отражения, альфа линейной интерполяции, прозрачность и т.п.
Vector parameter это параметр, содержащий в себе значения 4 канального вектора или 4 значения с плавающей точкой. Как правило они используются для настраивания какого либо цвета в материале. Но так же могут быть использованы для передачи данных о местоположении или для какого либо эффекта, который требует несколько значений.
Есть несколько доступных Texture Parameter. Каждый из них зависит от типа текстуры, что он принимает или способа, в котором он используется. Код шейдера, генерируется разный, в зависимости от типа текстуры.
TextureSampleParameter2D принимается основную Texture2D
TextureSampleParameterCube принимает TextureCube или cubemap
TextureSampleparameterFlipbook принимает FlipbookTexture
TextureSampleParameterMeshSubUV принимает Texture2D, которая используется для SubUV смешивания эффектов с сеткой эмитера
TextureSampleParameterMovie принимает MovieTexture (bink видео)
TextureSampleParameterNormal принимает Texture2D, которая используется в качестве Normal map
TextureSampleParameterSubUV принимает Texture2D, которая используется для SubUV эффектов с спрайтами
Статические параметры принименяются во время компиляции, поэтому части, которые замаскированны, имеют более оптимальный код и не выполняются во время выполнения основного материала. Однако, они могут быть изменены только из MaterialInstanceEditor, и не могут быть изменены в Blueprint