HLFX.Ru Forum
Показать все 15 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- OpenGL (https://hlfx.ru/forum/forumdisplay.php?forumid=7)
-- Эффективная линеаризация глубины для скошенных пирамид видимости (https://hlfx.ru/forum/showthread.php?threadid=4923)


Отправлено XaeroX 03-01-2017 в 09:25:

Thumbs up Эффективная линеаризация глубины для скошенных пирамид видимости

Наконец-то вышла моя первая статья по компьютерной графике, посвящённая одной из технологий движка Volatile, а именно - методу эффективного декодирования буфера глубины при нестандартных (скошенных) матрицах проекции. Статья опубликована в довольно известном рецензируемом журнале Journal of Computer Graphics Techniques. Формально она вышла в конце декабря, но по факту - только в январе, редакторы немного затянули процесс. Статья на английском языке, но я привожу перевод абстракта на русский. В любом случае, там много формул и есть необходимый код, что, как известно, в переводе не нуждается.

Абстракт

Многие современные техники 3D-рендеринга оперируют глубинами фрагментов и требуют обращения к текстурам глубины, содержащим нелинейные значения глубин в пространстве окна. В большинстве случаев такие значения требуется привести к линейной форме перед использованием, в частности, чтобы сравнивать глубины фрагментов, выполнять арифметику в видовом пространстве или сравнивать глубины сцен, отрисованных с разными проекциями. Преобразование глубины из пространства окна в видовое пространство может оказаться сложным и неинтуитивным в случае скошенных пирамид видимости с изменённой ближней плоскостью отсечения, не параллельной общепринятой ближней плоскости. Такие проекции могут использоваться для эффективного и высокопроизводительного отсечения геометрии пользовательской плоскостью. В статье обсуждается метод эффективной линеаризации значений глубины для произвольных матриц проекции, что может быть использовано в пост-процессинге, эффектах фонового затенения и других зависящих от глубины сцены спецэффектах.

Краткие пояснения

Скошенная матрица проекции (oblique frustum, Lengyel's frustum) - это подход, предложенный компанией NVIDIA (2003) и развитый программистами E. Lengyel (2005) и Pranckevicius (2007). Такое отсечение очень эффективно, особенно на современных мобильных устройствах, да и на десктопах тоже. Однако ранее не затрагивались вопросы декодирования значений глубины. У меня возникла проблема линеаризации, когда я делал эффект сглаживания береговой линии для водного шейдера в движке Volatile, да и быстро стало понятно, что это может понадобиться для других эффектов. Я обобщил задачу до линеаризации глубины при использовании матриц произвольных проекций - и скошенных, и смещённых (востребованных в современных VR-техниках), и даже ортографических. Результат изысканий - эта статья. Приведены необходимые тонкости как для OpenGL, так и для Direct3D. Надеюсь, кому-то это пригодится.

Читать статью

Читать статью онлайн можно на официальном сайте JCGT:
http://jcgt.org/published/0005/04/03/

Цитирование

Если вы заходите использовать идеи или код (а может, вообще впервые узнали о такой технике), просьба цитировать источник. Если проект опенсорсный - то можно прям в комментариях. Это, конечно, не обязательно и не даст мне никаких бонусов, но будет приятной мелочью.

Цитата:
Popov, A.V. An Efficient Depth Linearization Method for Oblique View Frustums // J. Comput. Graph. Techniques. - 2016. - V. 5. - N 4. - P. 36-43.




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

__________________

xaerox on Vivino


Отправлено FiEctro 03-01-2017 в 12:25:

XaeroX
Поздравляю с публикацией! Чувствуется научный подход .
Но можешь нам простым смертным объяснить в чем научная новизна и как конкретно оно тебе помогло сделать эффект сглаживания береговой линии?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 03-01-2017 в 12:31:

FiEctro
Спасибо!

Цитата:
FiEctro писал:
в чем научная новизна

Цитата:
XaeroX писал:
ранее не затрагивались вопросы декодирования значений глубины


Цитата:
FiEctro писал:
как конкретно оно тебе помогло сделать эффект сглаживания береговой линии

Цитата:
XaeroX писал:
В большинстве случаев такие значения требуется привести к линейной форме перед использованием, в частности, чтобы сравнивать глубины фрагментов, выполнять арифметику в видовом пространстве

Проблема не в сглаживании как таковом, а в том, что способы линеаризации глубины, основанные только на значениях znear/zfar, которые можно найти в большинстве шейдеров и туториалов в сети, не работают со произвольными проекциями - только с "классическими".

__________________

xaerox on Vivino


Отправлено PLut 03-01-2017 в 13:56:

XaeroX Поздравляю! Правда, сам я в компьютерной графике не силён.

__________________
Base Defense on Steam, ModDB


Отправлено GioHAUS0n 03-01-2017 в 15:51:

Можешь объяснить простыми словами, насколько эргономичная технология (без или вместе ним)? Стоит ли ее вообще использовать будущем или уже архаичная фича (как DirectX9-10)? Будет ли benchmark, чтобы люди вообще визуально понимали о чем идет речь?


Отправлено XaeroX 03-01-2017 в 16:45:

PLut
Спасибо!
GioHAUS0n
Ну раз эта фича в движке Volatile - то разумеется, она не архаичная, а самая передовая и востребованная.

__________________

xaerox on Vivino


Отправлено ~ X ~ 04-01-2017 в 07:38:

XaeroX ну, будет, что к выссеру приложить. Поздравляю с бубликацией.
Меня кинематографичность картинки в играх не особо интересует, так что, я в такие техники не лазил. Но, чувствую, сабж нужный и годный.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XF-Alien 04-01-2017 в 12:40:

Цитата:
XaeroX писал:
Статья опубликована в довольно известном рецензируемом журнале Journal of Computer Graphics Techniques.

К сожалению, единственное, что хоть как-то адекватно могу оценить в этом треде. Поздравляю!


Отправлено Дядя Миша 06-01-2017 в 19:46:

О, полезная штука, но у меня джва вопроса.
1. это будет работать при условии, что исходная глубина находится не в диапазоне 0-1, а скажем в диапазоне 0-0.7?
2. насколько хорошо этот механизм дружит с динамической системой zFar, когда дальность прорисовки меняется скачкоообразно, в зависимости от того, сколько лифов игроку видно из текущего лифа (стандартный механизм из той же ку3).

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 07-01-2017 в 06:52:

Цитата:
Дядя Миша писал:
это будет работать при условии, что исходная глубина находится не в диапазоне 0-1, а скажем в диапазоне 0-0.7?

В целом да, но потребуется модификация: изменить scale/bias для правильного перевода из window-space z в view-space z.
Цитата:
Дядя Миша писал:
насколько хорошо этот механизм дружит с динамической системой zFar

Декодирование будет правильным, но точность будет гулять вслед за zFar, причём для скошенных проекций - ещё сильнее, чем для обычных. Динамические zFar/zNear в принципе плохо дружат с линеаризацией. Зато метод вполне дружит с "бесконечным" zFar, ну как в дум3.

__________________

xaerox on Vivino


Отправлено Дядя Миша 07-01-2017 в 07:31:

Цитата:
XaeroX писал:
но точность будет гулять вслед за zFar, причём для скошенных проекций - ещё сильнее

Мдя. Так ты не стал у себя динамический zFar делать?
И вот еще что хотел спросить, на кой тебе скошеный фрустум понадобился вообще. Вон в доках по юнити какая-то хрень написана
Цитата:

Это делает перспективу на одном из краёв изображения кажущейся более плотной, передавая смотрящему ощущение, что он находится очень близко к видимому на этом крае объекту.

ну это явно не то, ради чего стоило бы так заморачиваться. Насчёт какого-то прироста производительности мне тоже сомнительно.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 07-01-2017 в 07:38:

Цитата:
Дядя Миша писал:
Так ты не стал у себя динамический zFar делать?

Ну отчего же, я сделал. Но артефакты имеются. Если будут раздражать - уберу, а пока забил.
Цитата:
Дядя Миша писал:
Насчёт какого-то прироста производительности мне тоже сомнительно.

Ты статью-то почитай, там не только в приросте дело. Но и в нём тоже.

Добавлено 07-01-2017 в 14:38:

Цитата:
Дядя Миша писал:
на кой тебе скошеный фрустум понадобился вообще

Я полагаю, за этим методом клиппинга - будущее, особенно в эпоху мобильных устройств.

__________________

xaerox on Vivino


Отправлено Дядя Миша 07-01-2017 в 07:44:

Цитата:
XaeroX писал:
Ты статью-то почитай, там не только в приросте дело. Но и в нём тоже.

На сайте нвидии говорится, что с таким фрустумом уже нельзя произвольно клипплейны включать и выключать. А в качестве преимущества указано то, что nearclip типа бесплатный получается - видимокарта режет. Да хрен его знает, не вижу я пока смысла.
Ну что, у тебя на зеркалах вырос фпс?

Добавлено 07-01-2017 в 10:44:

А, вон еще чо забыл спросить. У тебя локальный фрустум тоже скошеный или только тот, что в перспективной матрице?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 07-01-2017 в 07:47:

Цитата:
Дядя Миша писал:
На сайте нвидии говорится, что с таким фрустумом уже нельзя произвольно клипплейны включать и выключать.

Можно точную цитату?
Цитата:
Дядя Миша писал:
Ну что, у тебя на зеркалх вырос фпс?

В волатиле изначально в архитектуре не был заложен glClipPlane - поэтому и сравнить не получится. Но рендер упростился, разумеется - никаких GL_ClipPlane, никаких gl_ClipVertex, всё весьма просто и единообразно.

Добавлено 07-01-2017 в 14:47:

Цитата:
Дядя Миша писал:
У тебя локальный фрустум тоже скошеный или только тот, что в перспективной матрице?

Тоже скошенный, разумеется - зачем мне во фрустуме объекты, которые будут отрезаны плоскостью зеркала?

__________________

xaerox on Vivino


Отправлено Дядя Миша 07-01-2017 в 11:12:

Цитата:
XaeroX писал:
Можно точную цитату?

Немного напутал. Там сказано, что эффект похож на тот, что достигается при включении клипплейна, однако его уже нельзя включить\выключить, подобно тем же клипплейнам.

Цитата:
XaeroX писал:
Но рендер упростился, разумеется - никаких GL_ClipPlane, никаких gl_ClipVertex, всё весьма просто и единообразно.

Да я бы не сказал, что ClipPlane прям как-то уж чудовищно усложняет рендерер

Ну вообщем примерно понятно.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 23:57.
Показать все 15 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024