Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Теневые карты
#2
Делается так: создаем родительский dummycube для всех объектов, которые должны отбрасывать тень (shadowCasters). Создаем камеру для рендеринга теневой карты, потом саму карту:

Код:
[== Неизвестный ==]
shadowCasters = DummycubeCreate(global.scene);

shadowCamera = CameraCreate(global.scene);
CameraSetViewDepth(shadowCamera, 500);
    
shadowResolution = 1024;
shadowMap = ShadowMapCreate(shadowResolution, view, shadowCasters);
ShadowMapSetCamera(shadowMap, shadowCamera);
ShadowMapSetProjectionSize(shadowMap, 5);
ShadowMapSetZClippingPlanes(shadowMap, -10.0, 200.0);

Применяем к шейдеру:

Код:
[== Неизвестный ==]
BumpShaderSetShadowMap(bumpShader, shadowMap);
BumpShaderSetShadowBlurRadius(bumpShader, 2);

Рендерим теневую карту после Update, но перед ViewerRender (рекомендую при этом скрыть фронтальные объекты, если они есть):

Код:
[== Неизвестный ==]
Update(1.0 / room_speed);

ObjectHide(global.front);
ShadowMapRender(sm);
ObjectShow(global.front);

ViewerRender(view);

Но вообще в BumpShader самая простейшая реализация shadow mapping, для уличных сцен я бы ее не рекомендовал - у одной проекции слишком ограниченная площадь покрытия. Поищи пример cascade-shadows.gmk с каскадными тенями в SDK 3.9.0 (который еще для GM8) - там показано, как использовать три проекции (и, соответственно, три карты) разной площади для разных расстояний.
Могу этот пример отдельно собрать и выложить.
Ответ


Сообщения в этой теме

Перейти к форуму:


Пользователи, просматривающие эту тему: 15 Гость(ей)