HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > OpenGL > Эффективная линеаризация глубины для скошенных пирамид видимости
Моя первая статья по технологиям движка Volatile в журнале JCGT
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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; зеркала и порталы используют подход скошенной матрицы проекции для отсечения геометрии по их плоскости.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 163478

Старое сообщение 03-01-2017 09:25
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12882
Возраст: 32

Рейтинг



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

Сообщить модератору | | IP: Записан
Сообщение: 163481

Старое сообщение 03-01-2017 12:25
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


FiEctro
Спасибо!

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

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


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

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

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

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 163482

Старое сообщение 03-01-2017 12:31
-
PLut
Creator

Дата регистрации: Jun 2009
Проживает: Санкт-Петербург
Сообщений: 1220
Возраст: 29

Рейтинг



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

__________________
Base Defense on Steam, ModDB

Сообщить модератору | | IP: Записан
Сообщение: 163483

Старое сообщение 03-01-2017 13:56
- За что?
GioHAUS0n
Житель форума
Девойс

Дата регистрации: Feb 2013
Проживает: N/A
Сообщений: 660

Рейтинг



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

Отредактировано GioHAUS0n 03-01-2017 в 16:01

Сообщить модератору | | IP: Записан
Сообщение: 163485

Старое сообщение 03-01-2017 15:51
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 163486

Старое сообщение 03-01-2017 16:45
-
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



Награды
 
[1 награда]


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

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

Сообщить модератору | | IP: Записан
Сообщение: 163502

Старое сообщение 04-01-2017 07:38
- За что?
XF-Alien
Хи-хи! ^_^

Дата регистрации: Dec 2009
Проживает: Пермь
Сообщений: 681
Возраст: 22

Рейтинг



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

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

Сообщить модератору | | IP: Записан
Сообщение: 163521

Старое сообщение 04-01-2017 12:40
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



О, полезная штука, но у меня джва вопроса.
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'

Сообщить модератору | | IP: Записан
Сообщение: 163630

Старое сообщение 06-01-2017 19:46
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

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

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

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 163637

Старое сообщение 07-01-2017 06:52
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
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'

Сообщить модератору | | IP: Записан
Сообщение: 163641

Старое сообщение 07-01-2017 07:31
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

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

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

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

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

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

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 163642

Старое сообщение 07-01-2017 07:38
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
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'

Сообщить модератору | | IP: Записан
Сообщение: 163644

Старое сообщение 07-01-2017 07:44
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

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

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

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

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

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

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 163645

Старое сообщение 07-01-2017 07:47
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
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'

Сообщить модератору | | IP: Записан
Сообщение: 163654

Старое сообщение 07-01-2017 11:12
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 12:56. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > OpenGL > Эффективная линеаризация глубины для скошенных пирамид видимости
Моя первая статья по технологиям движка Volatile в журнале JCGT
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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