Чаще всего встречаются следующие проблемы (NVidia тоже упоминала об этом в своей презентация):
- Реконструкция координат в пиксельном шейдер по карте глубины. Обычно по этой причине в большинстве игр некорректно рисуются тени (например, Crysis, STALKER, UT3, GTA4 и т.п.). Пока нет идей как универсально исправить эту проблему для таких игр, но мы работаем над данной проблемой. Если в PS напрямую передается обратная матрица проецирования (Dead Space, пример NVidia Deffered Shading), то пока мы можем вручную решить данную проблему с помощью профайлов. Crysis к примеру вообще напрямую не использует в шейдере обратную матрицу проецирования, а делает более хитрые операции с константами. Возможно когда-нибудь наступит счастье и большинство разработчиков игр будут используемый предлогаемый NVidia способ, сохраняя Clip space X координату в RT и восстанавливая World space координату используя этот RT, тогда все эффекты будут нормально работать.
- Эффекты, надписи над объектами и т.п. рисуются без использования матрицы перспективной проекции. Например данный эффект можно пронаблюдать с источниками света в Mirror's Edge или в Dead Space которые рисуются в моно, а также к примеру в WoW надписи над объектами рисуются также в моно. Данную проблему мы не можем исправить, т.к. не знаем на какую глубину объект следует поместить.
- Моно объекты рисуются с использованием перспективной матрицы проецирования. Это обратная ситуация когда к примеру 2D интерфейс рисуется с использованием той же матрицы проецирования что и вся сцена. Чтобы сделать в таких случаях интерфейс моно мы указываем драйверу что используемый вертексный шейдер рисует всегда 2D интерфейс и драйвер использует эту информацию при рисование сцены. Бывает более сложная ситуация когда один и тот же шейдер используется и для 2D и для 3D объектов (UT3, GoW) но мы в большинстве случаев можем решить подобную проблему.
- Игра располагает объекты на неправильной глубине. В некоторых играх небо располагают слишком близко к сцене, что дает неправильный стереоэффект. А также, очень часто оружие персонажа располагают на большом расстояние от самой сцены и из за этого визуально нельзя добиться хорошей глубины сцены.
Вот пожалуй самые основные встречающиеся нам проблемы.
9 комментариев:
Правильно ли я понимаю что драйвер перехватывает вызовы Direct3D (BeginScene, DrawPrimitive etc.), рисует картинку в 2 текстуры с разных ракурсов, рисует квад на экран с текстурами, а потом используется пиксельный шейдер?
Я просто пытаюсь сделать программку которая делает что то подобное, и есть ряд вопросов :)
Да, вкратце, драйвер перехватывает все функции D3D и дублирует все вызовы Draw в левый и правый ракурсы (текстуры), а в Present показывает левый и правый ракурсы так как надо для соответствующего устройства.
спасибо за ответ :)
интересный блог, много полезной специфической информации, я в сети на эту тему очень мало нашел, а тут даже на русском языке! )
я реализовал вариант с одной текстурой (хочу попробовать делать blur или что нить вроде того). на простых примерах из dx sdk сработало, сейчас пытаюсь тестировать на реальных играх.
Отлично, что блог кому-то полезен.
дракоша,братишка,родственник!!!!!
короче у меня не пашет нечерта!!!!
В сети пишут что с помощью этого драйвера можно играть в 3D режиме на любом мониторе. Правда-ли?
Да, с анаглиф очками и нашим драйвером вы можете играть в стерео на любом мониторе
А что-бы обычные фильмы в 3D смотреть. Есть такой драйвер?
Есть различные конверторы 2D видео в стерео, к примеру http://3dfier.blogspot.com/ .
Если интересно узнать поподробней, рекомендую ресурс www.really.ru
Отправить комментарий