Gamedev LectureСтатьи

Лекция #15. Тени - tips & tricks. [Лектор - Семен] (3 стр)

Автор:

[19:08] <CEMEH> Так, и последнее.
[19:09] <CEMEH> Типсы про фазу content creation
[19:09] <CEMEH> Т.е. какие тулы и возможности можно и нужно дать дезайнерам для стенсилей.
[19:09] <CEMEH> Из очевидного и обязательного - включать shadow caster, иногда для разных источников отдельно.
[19:10] <CEMEH> Менее тривиально - включать receiver (это делается рендером ресиверов после теней и может не лечь в шейдинг)
[19:10] <CEMEH> Из дополнительного - можно управлять яркостью тени в ресиверах, особенно если накладывается текстурой.
[19:10] <CEMEH> Это очень мощный тул, позволяющий многое настраивать и добиваться правильной картинки.

[19:11] <CEMEH> [22:03] <Zeux> Есть ли способы бороться с потребностью в специального вида геометрии более автоматически, чем бить по рукам моделлеров?
[19:11] <CEMEH> Я не очень понял, о какой геометрии идет речь.
[19:11] <CEMEH> Можно уточнить?
[19:11] <CEMEH> [22:09] <Zeux> two-manifold, etc.
[19:11] <CEMEH> А, только бить и воспиывать.
[19:11] <CEMEH> Начинать как можно раньше.
[19:12] <CEMEH> При грамотном внедрении - это не особо проблемно.
[19:12] <CEMEH> Ладно, у меня про стенсили все.

[19:13] <cppguru> и сколько может таких проходов рендера получиться, в сумме?
[19:13] <CEMEH> Каких?
[19:13] <cppguru> ну предлагались многоэтапные всякие рендеры в текстуру
[19:14] <CEMEH> А, ну в зависимости от количества источников :)
[19:14] <cppguru> для сглаживания стенсиля вообще страшно представить
[19:14] <CEMEH> Для сглаживания - они дешевые.
[19:14] <CEMEH> Типично дешевле, чем постпроцессы.
[19:14] <CEMEH> Вообще, если заложиться на 4 источника, то получается прохода 3.
[19:15] <cppguru> что поместится в три прохода, на пальцах?
[19:15] <CEMEH> 1 проход - рисуешь 4 стенсиля в каналы.
[19:15] <CEMEH> 1 проход - постпроцессы размытия.
[19:15] <CEMEH> 1 проход - отрисовка сцены с этой текстурой.
[19:15] <CEMEH> На самом деле, там наверно еще earlyz где-то.
[19:16] <CEMEH> Но это жизненно все.

[19:16] <Zeux> CEMEH: запихивают ли все волюмы в один vb/ib?
[19:17] <CEMEH> Zeux, да, стараются.
[19:17] <CEMEH> ib точно, vb - так как стараются держать на стороне GPU и не трогать, то несколько

[19:20] <CEMEH> Ок, давайте про shadow maps
[19:20] <CEMEH> Первое - это краткий овервью перспективных техник.
[19:20] <CEMEH> Вообще, идея всех - это построить проективное преобразование, которое получше борется с алиасингом (основной проблемой).
[19:21] <CEMEH> Оригинальная статья http://www-sop.inria.fr/reves/publications/data/2002/SD02/Perspec… hadowMaps.pdf
[19:21] <CEMEH> Там предлагается строить shadow map не в обычном, а пост-проективном пространстве
[19:21] <CEMEH> Это то самое, которое получается после проективной матрицы.
[19:21] <CEMEH> Там ближние объекты стали большими, а дальние маленькими.
[19:22] <CEMEH> Но все лучи остались лучами.
[19:22] <CEMEH> По оси Z, кстати, произошли очень мощные шевеления, который все знают из-за неравномерности zbuffer
[19:22] <CEMEH> В таком пространстве directional-источники становятся точечными.
[19:22] <CEMEH> И из них все еще можно делать shadow map
[19:23] <CEMEH> В котором ближние объекты больше, а дальние дальше.
[19:23] <CEMEH> За что собственно и боролись.
[19:23] <CEMEH> После этой статьи начался разврат.
[19:24] <CEMEH> Там были особые случаи с объектами за камерой, с биасом, и том, что худший случай (когда источник светит в морду), остается худшим.
[19:24] <CEMEH> Значит, сейчас есть три основых способа побеждания всей этой ботвы.
[19:24] <CEMEH> Она всегда pain in the ass, и требует много твиков и тюнов.
[19:24] <CEMEH> 1) TSM
[19:24] <CEMEH> http://www.comp.nus.edu.sg/~tants/tsm/tsm.pdf
[19:25] <CEMEH> Идея подхода в том, чтобы строить перспективную матрицу как матрицу перевода в трапецию.
[19:25] <CEMEH> Эту трапецию мы рисуем где-то на ландшафте, и потом строим преобразование, которое "подгоняет" под нее фруструм.
[19:25] <CEMEH> Детали - в статье.
[19:25] <CEMEH> 2) LiSPSM - Light Space PSM
[19:26] <CEMEH> http://www.cg.tuwien.ac.at/research/vr/lispsm/shadows_egsr2004_revised.pdf
[19:26] <CEMEH> Идея в том, чтобы перейти в пространство источника перед построением shadow map, где уже нет проблем с кастерами за спиной.
[19:26] <CEMEH> Еще одно достижение в том, чтобы теоретически обосновать один из параметров твика PSM, о нем позже.
[19:27] <CEMEH> Ну и 3) - крео вашего покорного слуги в GPU Gems
[19:27] <CEMEH> http://download.nvidia.com/developer/GPU_Gems/Sample_Chapters/PSM… d_Feeding.pdf
[19:27] <CEMEH> Там с помощью хитрой матрицы обходятся проблемы с разрывом перспективного пространства, обсуждается выбор между распредлением текселей вблизи и вдали, и еще всякого.
[19:28] <CEMEH> Все три подхода примерно делают одно и то же.
[19:28] <CEMEH> Но про TSM я знаю хорошее, а именно то, что были случаи удачного копи-паста кода из примера ;)
[19:28] <CEMEH> Но были и случаи обычного pain in the ass.
[19:28] <CEMEH> Может, везение, не знаю.
[19:28] <CEMEH> PSM - сложная и капризная техника.
[19:29] <CEMEH> У всех этих трех вариантов есть специальный вариант ручки качества "вблизи-вдали"
[19:29] <CEMEH> [22:27] <ZFail> по TSM даже есть демка, но плохая :)
[19:29] <CEMEH> По всем есть демки. Есть общая у NV.
[19:30] <CEMEH> Обостряются проблемы биаса и т.д.

[19:30] <CEMEH> [22:28] <cppguru> что за глобальная демка от НВ?
[19:30] <CEMEH> Gary King написал демку со всеми тремя алго.
[19:30] <CEMEH> Можно найти на developer.nvidia.com

[19:31] <_VirT_> Идея в том, чтобы для ближних объектов выделить побольше места в текстуре?
[19:31] <CEMEH> Да.

[19:31] <_VirT_> Что за проблема с кастерами?
[19:31] <CEMEH> Если кастеры находятся за камерой, то в пост-проективном пространстве они в неожиданном месте.
[19:31] <CEMEH> А именно, за плоскостью, соотвествующей бесконечности в обычном.
[19:32] <CEMEH> В оригинальной статье эта проблема решена очень плохо.
[19:32] <CEMEH> Все три других предлагают решения.

[19:33] <_VirT_> а у тебя нет рускоязычного варианта твоей статьи? или какие нибудь записи? :)
[19:33] <CEMEH> Если найти архивы Graphicon за 2003-й год, то там есть.
[19:33] <CEMEH> А так - нет :)

[19:34] <CEMEH> Ладно, обзор закончен.
[19:34] <CEMEH> Вот, о клевом в мире shadow map...
[19:34] <CEMEH> Клевое - это smoothies
[19:34] <CEMEH> http://people.csail.mit.edu/ericchan/papers/smoothie/
[19:34] <CEMEH> Это возможность делать красивые мягкие тени для shadow map
[19:34] <CEMEH> Фейковые, но достаточно красивые.
[19:34] <CEMEH> Значит, в чем идея.
[19:35] <CEMEH> Кроме обычной геометрии, в shadow map рендеряются особые расширяющиеся полигоны по силуэту объекта.
[19:35] <CEMEH> Лучше посмотреть картинку в статье.
[19:35] <CEMEH> Т.е. в оригинале находятся силуэтные ребра (чисто как в стенсилях), рисуется в shadow map фактически shadow volume, только расширяющийся.
[19:36] <CEMEH> И в альфу - уменьшаяющаяся яркость.
[19:36] <CEMEH> Т.е. сами объекты черные, и от их ребер - градиент в белое.
[19:36] <CEMEH> Этот же градиент есть в z-значениях shadow map.
[19:36] <CEMEH> Представили?
[19:37] <CEMEH> Жду ответов :)
[19:37] <CEMEH> Эх...

[19:37] <CEMEH> [22:35] <Filippok> а как в альфу рисовать уменьш. яркость.?
[19:37] <CEMEH> Например, в этих силуэтных ребрах сделать градиент.

[19:38] <CEMEH> [22:35] <_VirT_> это где-то уже используется?
[19:38] <CEMEH> А вот не знаю. Но техника хорошая.

[19:39] <CEMEH> А вот не знаю. Но техника хорошая.
[19:39] <CEMEH> Так вот, во время наложения тени мы после сравнения с shadow map в случае факта затенения...
[19:39] <CEMEH> Пишем не 0, а значение из альфы.
[19:39] <CEMEH> Т.е. на границах теней - очень плавный градиент.
[19:30] <CEMEH> А факт затенения происходит чуть раньше, чем обычно, из-за расширяющихся силуэтов.
[19:30] <CEMEH> По линку есть скрины.
[19:40] <CEMEH> Далее.
[19:40] <CEMEH> На самом деле, искать силуэты, расширять их и рендерить - тоскливое занятие.
[19:40] <CEMEH> [22:38] <MiF> этот метод с гпу скелеткой дружит?
[19:41] <CEMEH> С силуэтами - как стенсили.
[19:41] <CEMEH> И вот предложение состоит в том, чтобы генерировать в shadow map эти smoothies с помощью постэффекта
[19:41] <CEMEH> Т.е. мы берем изначальную картинку в shadow map, и генерируем этакий плавный градиент z вокруг нее.
[19:41] <CEMEH> Есть такие пост-эффект фильтры.
[19:42] <CEMEH> Фактически, надо взять минимум из 4-х соседних текселей и записать в резултьтат его + delta.
[19:42] <CEMEH> И соотвественно подправить альфу.
[19:42] <CEMEH> Несколько раз прогнав такой фильтр мы получим градиент мягкости на такое же количество текселей.
[19:42] <CEMEH> Возникают проблемы в случае PSM, так как разрешение неравномерно.
[19:43] <CEMEH> Фиг знает, как их преодолевать, я все хочу попробовать.
[19:43] <CEMEH> В общем, лучше почитать статью и потом представить себе такой фильтр.

Страницы: 1 2 3 4 5 6 Следующая »

21 февраля 2006

Комментарии [2]