reckfellENGINE

Материалы 3D: назначение, цвет и прозрачность

Выбрать правильный слот материала, отделить поверхность от освещения и избежать общих правок ресурсов.

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

Сначала проверить назначение

StandardMaterial3D описывает поверхность: базовый цвет, шероховатость, металличность, текстуры и прозрачность. Освещаемый материал не задаёт окончательный цвет пикселя: на него влияют свет, отражения и Environment.

У одного MeshInstance3D несколько мест назначения материала. При неожиданном цвете сначала выясните, какое из них активно.

НазначениеОбласть действияПриоритет
Материал поверхности ресурса MeshВсе экземпляры, разделяющие этот мешБазовый
SetSurfaceOverrideMaterial(surface, material)Одна поверхность одного экземпляраВыше материала Mesh
MaterialOverrideВсе поверхности экземпляраВыше surface override
MaterialOverlayДополнительный проход поверх основногоНе заменяет основной материал

GetActiveMaterial(0) возвращает выбранный основной материал первой поверхности, без MaterialOverlay. Для снятия override назначьте null. Индекс поверхности — не ID Entity и не номер блока GridMap.

В нативной проверке красный материал Mesh сменился синим surface override, затем зелёным MaterialOverride. Прозрачный синий overlay добавился поверх зелёного, но GetActiveMaterial продолжил возвращать зелёный. Проверка overlay относится к прозрачному Alpha-материалу.

Запустить освещаемую поверхность

Используйте LightingMaterials.cs ниже и LightingLab3D.cs из руководства освещения. Нужны C# SDK 1.0.0, net10.0 и уровень .rscene с Entity3D-корнем. Выполните dotnet build и назначьте LightingLab3D.cs корню. Появятся белый куб, синий шар и пол под направленным светом.

LightingMaterials.cs
C#
using Reckfell;

public static class LightingMaterials
{
    public static StandardMaterial3D Surface(Color color, float roughness = 0.65f, float metallic = 0) => new()
    {
        AlbedoColor = color,
        Roughness = roughness,
        Metallic = metallic
    };

    public static StandardMaterial3D Unshaded(Color color) => new()
    {
        AlbedoColor = color,
        ShadingMode = BaseMaterial3D.ShadingModeEnum.Unshaded
    };

    public static Reckfell.Environment Environment() => new()
    {
        BackgroundMode = Reckfell.Environment.BGMode.Color,
        BackgroundColor = new Color(0.025f, 0.03f, 0.045f),
        AmbientLightSource = Reckfell.Environment.AmbientSource.Color,
        AmbientLightColor = Colors.White,
        AmbientLightEnergy = 0.12f,
        AmbientLightSkyContribution = 0,
        ReflectedLightSource = Reckfell.Environment.ReflectionSource.Disabled,
        TonemapMode = Reckfell.Environment.ToneMapper.Linear
    };
}

Surface создаёт обычный освещаемый материал; Unshaded — материал без обычной реакции на источники света. Для диагностики чёрного объекта временный Unshaded помогает отделить проблему освещения от отсутствующего меша/неверного назначения. Он не отключает все эффекты окружения и не делает материал физически излучающим свет.

Настроить основные свойства

СвойствоЗначение и смысл
AlbedoColorБазовый цвет; при текстуре умножается на её цвет
RoughnessОбычно 0..1: от узкого блика к более рассеянному
MetallicОбычно 0 для неметалла, 1 для металла; влияет на отражённый свет
NormalEnabled и NormalTextureРельеф освещения без изменения силуэта или коллизии
EmissionEnabled, Emission, EmissionEnergyMultiplierСобственная яркость; не самостоятельный источник прямого света

В примере шероховатость куба 0.65, а у синего шара 0.2 и Metallic=0.8. Отражение неба намеренно выключено, поэтому это пример прямого освещения, а не полный PBR-стенд с отражениями. Тёмный металл без окружения не исправляется одним повышением albedo.

У текстур данных и цветных текстур разное назначение. Albedo несёт цвет; normal, roughness и metallic — данные поверхности. Проверьте режим импорта и каналы, а не подбирайте случайную гамму. Для normal map нужны корректные нормали/касательные меша; она не создаёт настоящие выступы.

ORMMaterial3D использует упакованную текстуру: R — occlusion, G — roughness, B — metallic. Это подтверждено генератором шейдера; практический импорт ORM, каналов normal map и UV в этом примере не проверяется. Неверная упаковка меняет свойства всей поверхности.

Включить нужную прозрачность

Одного AlbedoColor.A=0 недостаточно. При Transparency=Disabled поверхность остаётся непрозрачной — это проверено в кадре.

  • Alpha смешивает альфа-канал с фоном. Подходит для полупрозрачности; учитывайте сортировку пересекающихся прозрачных поверхностей.
  • AlphaScissor делает вырез по AlphaScissorThreshold. При пороге 0.5 альфа 0.2 исчезла, а 0.8 осталась. Это удобно для жёсткого контура, а не мягкого стекла.
  • Другие режимы, включая AlphaHash и AlphaDepthPrePass, решают отдельные задачи качества/глубины; проверяйте их в целевом renderer. Они не входят в текущий исполняемый пример.

Отключение culling ради двусторонней видимости не исправляет перепутанные нормали и не превращает плоскость в объёмное стекло.

Не изменить все экземпляры случайно

Материал — ресурс. Если два экземпляра используют один Mesh с одним материалом, изменение AlbedoColor этого материала затронет оба. MaterialOverride со ссылкой на тот же ресурс тоже не создаёт копию.

Для независимой правки продублируйте материал через Duplicate(), приведите к нужному типу и назначьте копию экземпляру. Нативная проверка подтвердила независимость цвета такой копии. Это не обещает глубокой независимости всех вложенных текстур и ресурсов: их владение проверяйте отдельно.

Диагностика

ПроблемаПервый шаг
Материал Mesh меняется, объект нетПроверить MaterialOverride и surface override через GetActiveMaterial
Объект чёрныйАктивная камера, свет/ambient, визуальные слои; затем временный Unshaded
Изменились все копии объектаПроверить общий ресурс материала и назначить отдельную копию
A=0 ничего не скрываетВыбрать Transparency вместо Disabled
Свечение не освещает полДобавить Light3D; glow — отдельный экранный эффект
Рельеф не меняет силуэтNormal map влияет на освещение, а не геометрию

BaseMaterial3D API · MeshInstance3D API

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

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

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

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