reckfellENGINE

Шейдеры: что менять на GPU

Выбрать материал или собственный shader, разделить стадии GPU и логику игры.

На этой странице

Выбрать инструмент

Шейдер задаёт, как GPU преобразует вершины и рассчитывает изображение поверхности. C# управляет игровыми объектами и передаёт параметры; shader-код обрабатывает данные рендеринга. Внутри fragment() нельзя вызывать Entity, читать файл сохранения или изменять CollisionShape3D.

ЗадачаИнструмент
Цвет, текстуры, металличность, прозрачность без собственной формулыStandardMaterial3D
Своя окраска, маска, растворение или деформация поверхностиShaderMaterial и Shader
Индивидуальный оттенок мешей с общим материаломinstance uniform
Инвентарь, урон, сохранение, физическая формаC# и соответствующие системы движка

Сначала проверьте, достаточно ли StandardMaterial3D. Свой shader нужен для собственной формулы, а не для включения уже существующей настройки.

Понять стадии

vertex() выполняется для вершин меша: VERTEX содержит позицию, NORMAL — нормаль. Если плоскость состоит только из двух треугольников, vertex shader не создаст между ними новые вершины. Для рельефа нужна сетка с достаточной плотностью.

fragment() рассчитывает свойства видимой поверхности. В spatial shader задавайте ALBEDO, ROUGHNESS, METALLIC и другие нужные значения; освещение затем использует их. ALBEDO не равен гарантированному экранному цвету: результат зависит от света, окружения и tone mapping.

varying передаёт данные от vertex() к fragment() с интерполяцией между вершинами. В примере высота и крутизна склонов вычисляются на вершинах и участвуют в окраске материала. Это не хранение состояния игры между кадрами.

Связать код и материал

Shader — программа; ShaderMaterial — ресурс с программой и значениями обычных uniform. Назначьте материал в нужный слот MeshInstance3D. В текущем движке текстовый файл shader-ресурса имеет расширение .reckfellshader. Классы управления остаются в .cs.

Shader-объявлениеЧто передавать из C#
floatfloat
vec2 / vec3Vector2 / Vector3
vec4 с source_colorColor
sampler2DTexture2D, например ImageTexture

Имена чувствительны к регистру. SetShaderParameter меняет материал, SetInstanceShaderParameter — параметр конкретной геометрии, объявленный как instance uniform. Не путайте эти два пути.

GetShaderParameter читает сохранённый override. Если shader использует default, но материал его явно не задавал, в проверенной сборке getter возвращает Nil. Кроме того, опечатанное имя может сохраниться в кеше, не влияя на GPU. Проверяйте объявление, список uniform и реальный результат.

Продолжить на работающем примере

Первый 3D shader создаёт рельеф из карты высот и корректирует нормали. Материал и параметры объясняет PBR-окраску, индивидуальные значения, копии ресурсов и сохранение.

Оба урока используют один готовый проект, проверенный в текущем Forward+/Vulkan. Это начало работы со spatial shader, а не полная проверка всех типов shader, backend и возможностей языка.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.