Тени

WME поддерживает несколько типов теней для 3D-персонажей, которые различаются между собой по точности воспроизведения и аппаратным требованиям.

Типы теней

Нет тени

Это, конечно, простейший случай, когда тень попросту отсутствует. Отключение теней может Вам понадобиться при определённых обстоятельствах, например, когда персонаж лежит в кровати.

No shadow

Простая тень

Это самый лёгкий тип теней. Он всегда доступен и никак не влияет на производительность. Вы можете менять изображение тени прямо в игре с помощью метода SetShadowImage().

Simple shadow

Плоская тень

Плоская тень является фиктивной проекцией персонажа на пол. Вы можете задать её форму и направление с помощью указания источника света, создающего её. Это осуществляется с помощью метода SetLightPosition(). Вы также можете изменить её цвет с помощью свойства ShadowColor.

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

Плоские тени создают небольшие потери в производительности, так как модель персонажа рендерится дважды: один раз для силуэта тени и один раз для отображения в сцене.

Flat shadow

Шаблонная тень

Это самый прогрессивный вид теней. Подобно плоским, шаблонные тени также создаются источником света, но с тем отличием, что они проецируются на скрытую геометрию сцены. Это означает, что они будут реалистично изгибаться на стенах, мебели и т. д.

Вы также можете изменять их форму и цвет с помощью метода SetLightPosition() и свойства ShadowColor.

Чтобы использовать шаблонные тени, сцена должна создаваться с учётом их поддержки. Геометрия сцены должна включать в себя относительно детализированную модель объектов сцены, на которые будет ложиться тень, которая не требуется для других типов теней. Подробнее см. эту главу.

Шаблонные тени наиболее требовательны к аппаратным ресурсам. Особенно при рендеринге высокополигональных моделей. По этой причине WME позволяет указать специальную низкополигональную модель персонажа для создания шаблонных теней. Эта упрощённая модель указывается в файле описания 3D-персонажа . Она должна использовать точно такую же структуру костей, что и главная модель, так как анимация является для них общей.

Stencil shadow

Ограничение количества доступных типов теней

Временами бывает полезно ограничить поддержку типов теней до определённого уровня. Например, Вы можете позволить пользователю выбрать уровень детализации в зависимости от конфигурации его компьютера, либо Вам требуется разрешать только определённые типы теней в некоторых сценах (например, сцены без геометрии будут ограничены плоскими тенями, некоторые сцены вообще не нуждаются в тенях, и т. д.).

Чтобы задать уровень детализации теней для всей игры используйте атрибут Game.MaxShadowType. Он принимает следующие значения: 0 (нет теней), 1 (простые тени), 2 (плоские) или 3 (шаблонные). Если указанный тип теней не поддерживается аппаратными ресурсами, движок сделает откат к максимально возможному уровню детализации. Чтобы проверить, поддерживается ли конкретный тип теней, используйте метод Game.IsShadowTypeSupported().

Чтобы задать уровень детализации теней для конкретной сцены, используйте атрибут Scene.MaxShadowType. Его значение можно задать в программе SceneEdit во вкладке дополнительных 3D-опций.

Вдобавок к этому, Вы можете задавать тип тени индивидуально для каждого 3D-персонажа с помощью атрибута ShadowType.

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