Войти
КешаСтатьи

КРИ 2006: Обзор лекций от ATI и NVIDIA.

Автор:

Наташа Татарчук: “Кажется, дождь начинается!..” или Изображение дождя в реальном времени в городской обстановке.
Геннадий Ригер: High Dynamic Range.
Юрий Уральский: Введение в DX 10 – новые возможности и вопросы производительности.
Саймон Грин – Расчет физики на GPU.
Рауль Агавива и Филлип Герасимов, NVIDIA – Инструменты для разработчиков игр.

Наташа Татарчук: “Кажется, дождь начинается!..” или Изображение дождя в реальном времени в городской обстановке.

Демки у ATI очень красивые, и демка с этой лекции с дождиком не исключение, просто красотища. NVidia, к сожалению, ничего такого не показывала. Если конечно не учитывать 10-15k падающих камней :)

Цель лекции:
- Получить опыт программирования сверхреалистичных сред для игр следующего поколения.
- Получить опыт изображения дождя в городской среде.

Для этого была сделана такая демка TOYSHOP, в которой было очень много эффектов, и все два дня конференции ATI показывала свои эффекты именно в ней.

Вся демка TOYSHOP состояла из набора различных эффектов:

1. Начиная от такой технологии как Parallax Occlusion Mapping (лекций №3 9 апреля, но об этом позже), который поместили на стенки домов и тротуары и заканчивая High Dynamic Range, который применяли при вспышках молнии.

2. Различные постобработочные эффекты для изображения свечения, размытых отражений объектов и дождя: Для этого изображаем дополнительный слой падающего дождя как полноэкранный четырехугольник (моделируется 8 битной текстурой). Размываем слой дождя для создания ощущения туманности капель.

Художники задают направление и скорость дождя в world-space, что бы моделировать дождь разной интенсивности. Моделирование нескольких дождевых слоев с различными скоростями сделали через Parallax Mapping, при этом задавая всякие разные значения ветра и т.д.

Для падающих капель используют карту нормалей, что позволяет моделировать освещение отдельных капель в разных слоях. Для капли применяются простые законы преломления/отражения. А все капли рисовались как биллборды. Скажем, в зависимости от скорости капли удлинялись.

Кроме того, в демке есть такой классный эффект, где по стеклу стекают капли. Для этого стекло разбивают на ячейки, где каждая ячейка содержит такие данные: масса воды в ячейке, скорость движения воды по горизонтали и вертикале, значение передвижения капли по ячейке. С помощью этих данных можно легко теперь “двигать” капли с учетом силы тяжести и динамической силы трения.

Брызги капель создаются при ударе о поверхности объектов и освещаются с помощью overhead lightmap.

Естественно не забыли и про лужи :) Поверхность воды моделируется как решетка ячеек, где каждая ячейка содержит высоту и позицию при предыдущем кадре. Все это дело симулируется на GPU. За подробностями отправили в Game Programming Gems, статья “Interactive Simulation of Water Surfaces”.

Вот, пожалуй и все ключевые моменты. По сути презентация, которая была представлена на этой лекции есть русский вариант этой pdf’ки: http://www.ati.com/developer/gdc/2006/GDC06-Advanced_D3D_Tutorial… chuk-Rain.pdf. Поэтому, если не хочется ждать материалов с КРИ, вперед.

Геннадий Ригер: High Dynamic Range.

Лекция о том что такое High Dynamic Range, и как его эффективно сделать на Radeon 1x00.

Отношение самого яркого и самого темного значения называется динамическим диапазоном. Под High Dynamic Range подразумевается динамический диапазон больше чем 255:1 использующийся при “нормальной” отрисовке. В реальном мире может быть огромен (например 10000000000:1)  и глаза могут адаптироваться к нему (динамический диапазон человеческого глаза около 30000:1 после адаптации).

Для реализации High Dynamic Range использование FP16 не обязательно, но это один из хороших вариантов. Также не обязательно делать слишком большой диапазон, можно сделать красивое оформление.

Далее, о возможностях Radeon 1x00:
I10 форматы: фильтрация, блендинг, MSAA
I16 форматы: фильтрация
FP16: блендинг, MSAA

Затем обсуждались реализации High Dynamic Range для low-end видеокарт: использование I10 для отрисовки, при MSAA копируется в I10 буфер для постобработки и high-end видеокарт: использование FP16 для отрисовки с MSAA.

Вторая половина лекции была посвящена решениям, основанных на целочисленных форматах (обзор преимуществ/недостатков): Fixed Scaling, RGBS, Compressed RGBE, RGBE EEE, PPP, RGBS + PPP.

Юрий Уральский: Введение в DX 10 – новые возможности и вопросы производительности.

Тут просто огромное количество нововведений. Аудитория была забита полностью, кому не хватило места – лежал или сидел на полу у ног [выбери ник]. %)

Лекция началась с обзора графического пайплаина DX9 и сравнение с новым,  “обновленным” пайплайном.
В общую схему добавили Input Assembler Stage, GS, Stream Out и output Merger.
GS – Geometry Shader, шейдер который управляет топологией объекта.
Output Merger – это такой отдельный модуль, который обозначает работу с depth, frame, stencil.
Stream Out – возможность записи результатов работы GS в вершинной буфер.
Наверное уже все читали презентации от ATI и NVIDIA, поэтому просто лозунгами:

  Компактный API:
    Меньше HRESULT, больше void.
    Стейт – объекты.

  Новая модель драйвера:
    Позволяет значительно сократить CPU overhead.

  Виртуализация ресурсов. Теперь нету неприятностей по alt+tab :) т.е. lost devices.

  Унифицированные шейдеры SM 4.0

  Отсутствие caps. Теперь все проверяется всего лишь одной функцией.

  Текстуры:
    Произвольный доступ
    Состоят из суб - ресурсов.

  Буферы:
    Последовательный доступ.
    Элементы могут быть разного типа/размера.

  No Fixed Function!
    Нет тумана – эмулируем в vs/ps
    Нет point – спрайтов – эмулируем через gs
    Нет плоскостей отсечения – через семантику SV_ClipDistance[n] в VS/GS
    Нет альфа – теста – clip() в ps.

  Предикативный рендеринг
    Условное выполнение вызовов Draw.
    Условное выполнение по результату occlusion query.
    Условное выполнение при переполнении буфера stream out.

Ссылки:
NVIDIA:
ftp://download.nvidia.com/developer/presentations/2006/gdc/2006-GDC-DX10-Prepping-Your-Engine.ppt
ATI:
http://www.ati.com/developer/gdc/2006/GDC06-Advanced_D3D_Tutorial… 0_and_DX9.pdf

Саймон Грин – Расчет физики на GPU.

Хоть в докладе и не указано, но в основном Саймону помогал Юрий Уральский.

Саймон сразу предупредил, что эти наработки является просто дополнением к Havok и предназначены только для создания дополнительных эффектов, таких как взрывы, дым, ну и т.д. Одновременно, с этим обещал стабильность физики твердого тела и качественный stacking. Но как показали демки, разработчики просто врут. %) Ну, или покрайней мере это из-за того что в разработке.

Презентацию начали немного с обзора DX’а 10, без которого вся эта затея в принципе не возможна.
Так вот основные моменты:
Broadphase (т.е. та фаза, в которой определяются потенциально сталкивающиеся тела) делается полностью на CPU. А вот Narrow phase (т.е. нахождение точек контакта между парой тел) на GPU, после чего чтение обратно на CPU, пересортировка, загрузка точек контакта на GPU, попарный collision response, интегратор (расчет новой скорости, положения и т.д.) передается обратно на CPU через stream out ( передается как vertex buffer ) и применение новых положений к объектам. Т.е. некая такая либа на CPU с привлечением GPU.

На данный момент в HavokFX нету джоинтов. Следовательно и “тряпичных кукол” не получим.

Определение столкновений для arbitrary мешей, stacking впринципе высокий, но тела всеравно почему – то через какое-то время начинали падать. Из-за чего посыпалось кучу вопросов, дескать как так нету трения, высокий stacking, а тела чего – то съезжают. Саймон объяснил это тем что данная версия Havok FX в разработке. На вопрос используют ли они LCP или какие-нить итеративные солверы, ответ прост: NDA, вместе с тем, признался что response попарный.
Еще очень хороший вопрос прозвучал:

Действительно ли применяется особый режим SLI, позволяющий не просто дублировать память одной GPU на вторую, а синхронизировать только часть памяти? Будет ли это доступно для других программ?
Ответ: Да, так и есть, выйдет расширение OpenGL, когда-нить этак через полгода.

Мое имхо, обычная impulse – based физика с очень хитрым stacking. Почему хитрым? Потому что вообще не понятно как его делать на GPU.

Демки были следующие:
  Классическая проверка stacking – пирамида из 10k – 15k тел.
  Tower – как у Novodex.
  Шахматная доска – пример arbitary shapes.

Все это дело тестировалось на Geforce6800.

И вообще, вы смотрели демку PhysX? :)

Рауль Агавива и Филлип Герасимов, NVIDIA – Инструменты для разработчиков игр.



Рассказывали в основном про инструменты, которые меряют производительность всей графической системы в целом. Совсем немного о нахождении боттленеков.  Рассматривали следующие тулзы:

NVPerfKit 2.0 – статистика gpu  и драйвера для OpenGL и DirectX приложений.
http://developer.nvidia.com/object/nvperfkit_home.html

NVPerfHud 4.0 – таже статистика в реал тайме. Для Direct3d9.
http://developer.nvidia.com/object/nvperfhud_home.html

gDEBugger – real-time отладка и профайлинг OpenGL приложений.
http://developer.nvidia.com/object/gdebugger.html

Вообщем, подробнее:
ftp://download.nvidia.com/developer/presentations/2006/gdc/2006-GDC-Handheld-Performance-Tools.ppt

5 мая 2006