воскресенье, 22 ноября 2009 г.

Переход с Direct3D9 на Direct3D9Ex

Была необходимость воспользоваться Shared ресурсами в D3D9 под Vist'ой/Win 7, для этого решили переписать приложение чтобы оно вместо интерфейса IDirect3DDevice9 стало использовать IDirect3DDevice9Ex. Казалось бы что может быть проще, у IDirect3DDevice9Ex родительский интерфейс IDirect3DDevice9.

Но как всегда всплыли некоторые подводные камни:

Под D3D9Ex не поддерживаются Pool Managed для ресурсов, поэтому пришлось их все перевести в Pool Default. Так как ресурсы в Pool Default можно лочить только установить Usage Dynamic, пришлось его установить у соответствующих ресурсов.

  • Так как для Managed ресурсов LockRect всегда возвращал Pitch равный ширине поверхности в байтах, т.е. строки не выравниваются, а строки в динамических ресурсах в Pool Default наоборот всегда выравниваются до следующего значения кратно степени двойки. Поэтому пришлось переписать места где текстуры заливались одним memcpy без учета Pitch, так чтобы они корректно работали с выравненными строками.
  • Выяснилось ещё для Volume текстур в Pool Default в LockBox есть баг в Direct3D9 и Direct3D9Ex, он напрочь игнорирует параметры Front, Back и всегда лочит весь объем полностью. Для Volume текстур в Pool Managed все работает правильно в Direct3D9. Переписали код чтоб обновляли содержимое объема всегда полностью.


Может кому будет интересен или даже полезен этот опыт.

пятница, 20 ноября 2009 г.

пятница, 21 августа 2009 г.

Упрощение отладки в Visual Studio - autoexp.dat



Собрал/написал самые полезные для меня визуализаторы: Boost (для самых популярных классов) и TinyXML. А также там добавлены коды ошибок Direct3D.

Для установки, следует заменить файл в "%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\" файлом из архива.

Ссылки по теме:
 

Update: для Visual Studio 2012 теперь можно установить extension со всеми визуализаторами перечисленными выше и даже больше http://bit.ly/Mn73hE

пятница, 26 июня 2009 г.

iZ3D монитор в России

Вот и приехали мониторы. Можно приобрести у нас в офисе или прямо на сайте http://shop.neurok.ru/ (сайт пока к сожалению в плане дизайна ещё не доделан). В комплекте 3-ое очков, если надо можно докупить в офисе еще какое то количество.

Цена: 555$.
Гарантия: 1 год.

пятница, 29 мая 2009 г.

iZ3D драйвер версии 1.10RC1

Вот наконец и выпустили 1.10 версию (скачать можно тут http://www.iz3d.com/t-dcdriver.aspx). С этой версией в ходе дебаггинга много поработали над артефактами играми, поняли причину многих проблем с играми в стерео и много из них исправили.

Чаще всего встречаются следующие проблемы (NVidia тоже упоминала об этом в своей презентация):

  1. Реконструкция координат в пиксельном шейдер по карте глубины. Обычно по этой причине в большинстве игр некорректно рисуются тени (например, Crysis, STALKER, UT3, GTA4 и т.п.). Пока нет идей как универсально исправить эту проблему для таких игр, но мы работаем над данной проблемой. Если в PS напрямую передается обратная матрица проецирования (Dead Space, пример NVidia Deffered Shading), то пока мы можем вручную решить данную проблему с помощью профайлов. Crysis к примеру вообще напрямую не использует в шейдере обратную матрицу проецирования, а делает более хитрые операции с константами. Возможно когда-нибудь наступит счастье и большинство разработчиков игр будут используемый предлогаемый NVidia способ, сохраняя Clip space X координату в RT и восстанавливая World space координату используя этот RT, тогда все эффекты будут нормально работать.
  2. Эффекты, надписи над объектами и т.п. рисуются без использования матрицы перспективной проекции. Например данный эффект можно пронаблюдать с источниками света в Mirror's Edge или в Dead Space которые рисуются в моно, а также к примеру в WoW надписи над объектами рисуются также в моно. Данную проблему мы не можем исправить, т.к. не знаем на какую глубину объект следует поместить.
  3. Моно объекты рисуются с использованием перспективной матрицы проецирования. Это обратная ситуация когда к примеру 2D интерфейс рисуется с использованием той же матрицы проецирования что и вся сцена. Чтобы сделать в таких случаях интерфейс моно мы указываем драйверу что используемый вертексный шейдер рисует всегда 2D интерфейс и драйвер использует эту информацию при рисование сцены. Бывает более сложная ситуация когда один и тот же шейдер используется и для 2D и для 3D объектов (UT3, GoW) но мы в большинстве случаев можем решить подобную проблему.
  4. Игра располагает объекты на неправильной глубине. В некоторых играх небо располагают слишком близко к сцене, что дает неправильный стереоэффект. А также, очень часто оружие персонажа располагают на большом расстояние от самой сцены и из за этого визуально нельзя добиться хорошей глубины сцены.


Вот пожалуй самые основные встречающиеся нам проблемы.

четверг, 2 апреля 2009 г.

Авиабилеты

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

Вот сейчас на лето:
Москва - Иркутск, туда-обратно 22т.р.
Москва - Улан-Удэ, туда-обратно 23т.р. (а на конец сентября ещё есть Web тарифы 12 т.р. туда-обратно)

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

суббота, 28 марта 2009 г.

GDC 2009

Ура GDC закончился! Мы более-менее успели продемонстрировать альфа версию драйвера с поддержкой DX10. Теперь можно отоспаться :-) .