Материалы и Shader Graph
VisualShader, выходы поверхности и материалы постобработки.
Материал, шейдер и граф
Материал назначает поверхности её параметры. ShaderMaterial использует текстовый Shader или визуальный VisualShader. Shader Graph создаёт шейдер, а не игровую логику; для поведения объектов используйте SharpGraph или C#.
Выбирайте назначение до создания графа: поверхность 3D, Canvas или собственный эффект постобработки. У них разные выходы и доступные данные. Профили постобработки применяют эффекты к изображению камеры, а обычный материал — к объекту.
Назначьте граф поверхности
- Выберите
MeshInstance3Dс видимым мешем. - В нужном слоте материала создайте
ShaderMaterialи назначьте емуVisualShader. - Откройте ресурс шейдера. Для цвета поверхности используйте этап Fragment, а не Vertex.
- Подключите цветовую константу к
Albedoвыходного блока. Задайте шероховатость отдельным значением. - Убедитесь, что материал назначен той поверхности, которую показывает камера.
- Сохраните шейдер и материал в проекте, затем проверьте объект в игре.
Несоединённый блок не меняет итоговый материал. Ошибка типов порта или компиляции может остановить построение нужного варианта шейдера; начните с одного корректного выхода.
Какие параметры использовать
| Вход | Смысл |
|---|---|
| Albedo | Базовый цвет поверхности |
| Metallic | Металлическое поведение материала |
| Roughness | Ширина и характер блика |
| Normal | Направление нормали для освещения |
| Emission | Собственное излучение поверхности |
Текстура albedo содержит цвет. Карта нормалей — данные направлений, её нужно импортировать соответствующим образом. Маски roughness/metallic также нельзя автоматически трактовать как цветную фотографию. Учитывайте UV и масштаб модели, прежде чем исправлять растяжение текстуры самим шейдером.
Emission может давать яркий пиксель и свечение при включённом Bloom, но не гарантирует освещение соседних объектов: перенос света зависит от используемого GI.
Сравните с текстовым шейдером
Минимальный текстовый материал с теми же основными параметрами:
shader_type spatial;
void fragment() {
ALBEDO = vec3(0.18, 0.32, 0.40);
METALLIC = 0.2;
ROUGHNESS = 0.65;
}Сохраните его как .rshader и назначьте ShaderMaterial. Это альтернативный ресурс, а не обещание обратного преобразования произвольного текста в визуальный граф.
Пользовательская постобработка
Полноэкранному эффекту нужен контекст камеры и подходящая точка включения. До тонального преобразования данные могут быть HDR; после него диапазон и смысл цвета отличаются. Для эффектов с глубиной или данными поверхности выберите этап, где эти входы доступны.
В Canvas нельзя запрашивать нормали, скорость объектов и глубину 3D как будто они всегда существуют. Проверяйте предупреждения доступности. Для собственного многошагового эффекта используйте именованные промежуточные текстуры и явные зависимости; не читайте выход, который ещё не сформирован.
| Проблема | Первая проверка |
|---|---|
| Объект не изменился | Материал назначен нужной поверхности; активен правильный ресурс |
| Граф есть, результата нет | Этап Fragment, соединение с Output, ошибки компиляции |
| Неверные блики | Импорт normal/roughness, UV и освещение |
| Эффект отличается в игре | Камера, рендерер, профиль и точка включения |
API: VisualShader, ShaderMaterial.