WME поддерживает несколько типов теней для 3D-персонажей, которые различаются между собой по точности воспроизведения и аппаратным требованиям.
Это, конечно, простейший случай, когда тень попросту отсутствует. Отключение теней может Вам понадобиться при определённых обстоятельствах, например, когда персонаж лежит в кровати.
Это самый лёгкий тип теней. Он всегда доступен и никак не влияет на производительность. Вы можете менять изображение тени прямо в игре с помощью метода SetShadowImage().
Плоская тень является фиктивной проекцией персонажа на пол. Вы можете задать её форму и направление с помощью указания источника света, создающего её. Это осуществляется с помощью метода SetLightPosition(). Вы также можете изменить её цвет с помощью свойства ShadowColor.
Плоские тени недоступны на некоторых старых видеокартах. Если движок обнаруживает их недоступность, то он производит откат к простым теням.
Плоские тени создают небольшие потери в производительности, так как модель персонажа рендерится дважды: один раз для силуэта тени и один раз для отображения в сцене.
Это самый прогрессивный вид теней. Подобно плоским, шаблонные тени также создаются источником света, но с тем отличием, что они проецируются на скрытую геометрию сцены. Это означает, что они будут реалистично изгибаться на стенах, мебели и т. д.
Вы также можете изменять их форму и цвет с помощью метода SetLightPosition() и свойства ShadowColor.
Чтобы использовать шаблонные тени, сцена должна создаваться с учётом их поддержки. Геометрия сцены должна включать в себя относительно детализированную модель объектов сцены, на которые будет ложиться тень, которая не требуется для других типов теней. Подробнее см. эту главу.
Шаблонные тени наиболее требовательны к аппаратным ресурсам. Особенно при рендеринге высокополигональных моделей. По этой причине WME позволяет указать специальную низкополигональную модель персонажа для создания шаблонных теней. Эта упрощённая модель указывается в файле описания 3D-персонажа . Она должна использовать точно такую же структуру костей, что и главная модель, так как анимация является для них общей.
Временами бывает полезно ограничить поддержку типов теней до определённого уровня. Например, Вы можете позволить пользователю выбрать уровень детализации в зависимости от конфигурации его компьютера, либо Вам требуется разрешать только определённые типы теней в некоторых сценах (например, сцены без геометрии будут ограничены плоскими тенями, некоторые сцены вообще не нуждаются в тенях, и т. д.).
Чтобы задать уровень детализации теней для всей игры используйте атрибут Game.MaxShadowType. Он принимает следующие значения: 0 (нет теней), 1 (простые тени), 2 (плоские) или 3 (шаблонные). Если указанный тип теней не поддерживается аппаратными ресурсами, движок сделает откат к максимально возможному уровню детализации. Чтобы проверить, поддерживается ли конкретный тип теней, используйте метод Game.IsShadowTypeSupported().
Чтобы задать уровень детализации теней для конкретной сцены, используйте атрибут Scene.MaxShadowType. Его значение можно задать в программе SceneEdit во вкладке дополнительных 3D-опций.
Вдобавок к этому, Вы можете задавать тип тени индивидуально для каждого 3D-персонажа с помощью атрибута ShadowType.
Внимание: Вы не можете совмещать шаблонные тени с другими вариантами теней в одной сцене. Если шаблонные тени включены для всей сцены, все персонажи должны использовать их. Если Вы попытаетесь использовать плоские или простые тени вместе с шаблонными, в сцене возникнут графические артефакты.