Я хочу спробувати додати тіні до 3D-ігри XNA. Я створив тестування з одним світлом і однією камерою. Однак зі своїм підходом я стикаюся з артефактами.
Я використовую шейдерний код від http://pastebin.com/zXi0hmsU, щоб вивести кінцевий результат, а http://pastebin.com/rY4Gcj9N створити тіньові карти. Код є досить прямим вперед і передбачає виготовлення карти поглиблення з точки зору світла, потім проектування його в простір камери і перевірка наявності оклюзій.
Однак з більшої точки зору я отримую досить потворні результати
Сцена складається з декількох простих кубиків (побудованих вручну, зверненими назовні, поверхня вибита), одним світлом (тіньова карта, показана у верхньому лівому куті - виглядає нормально) та однією камерою.
Моя RenderTarget для тіньових карт ініціалізується
int shadowMapSize = 512;
RenderTarget2D shadowMap = new RenderTarget2D(GraphicsDevice, shadowMapSize,
shadowMapSize, true, GraphicsDevice.PresentationParameters.BackBufferFormat,
DepthFormat.Depth24Stencil8);
GraphicsDevice.SetRenderTarget(shadowMap);
GraphicsDevice.Clear(Color.White);
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
Після цього застосовується CreateShadowMap
ефект, а потім ефект LambertWithShadows. Нарешті, карта тіней малюється за допомогою а SpriteBatch
.
Решта коду складається з простого надання правильних значень шейдерам. Якщо потрібно, я можу це забезпечити.