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=4772)
Отправлено KiQ 27-05-2016 в 19:44:
Написание рендерера
В общем писал я писал свой 2D движок, пока он не стал выдавать 60 fps на простейших сценах. Посмотрел на всякие 1500 fps у волатил и ксашей и что-то мне взгрустнулось. Собственно, хотелось бы в этой теме пообсуждать различные подходы к рендерингу, как в 2D, так и в 3D (так как параллельно сейчас практикую рендеринг smd с дальнейшим переходом на свой формат, компилируемый из smd. Хочу сделать движок для квестов в стиле Сиберии). Собственно, есть немало вопросов. В качестве системы освещения однозначно буду использовать deffered shading. В качестве способа рендеринга - glDrawArrays, скорее всего. Вроде как VBO не слишком сложный, но до этого не получалось его корректно вписать в архитектуру. Теперь несколько вопросов:
1. При использовании всего одного FBO с выводом его на экран fps просаживается на 15-20 пунктов, чем при непосредственном выводе, даже на небольшом разрешении. Нормально-ли это? И кто как борется с тем, что координаты в FBO не подчиняются заданной матрице проекции? В частности, если для контекста я инвертирую ось Y, то в созданных FBO она все равно будет направлена снизу вверх.
2. Прозрачность и deffered shading. Везде говорится о том, что выводить прозрачные объекты надо уже после рендеринга всей сцены. Но что тогда получается, что окна будут светиться в темноте, как в хл? Как этого избежать.
3. Обязательно-ли использовать MRT при deffered shading? Насколько это быстрее нескольких проходов с рендерингом в разные FBO (или один с несколькими attachment).
Пока что все вопросы, но их было немало, надо только вспомнить и сформулировать
__________________
-Brain is dead-
Отправлено XaeroX 28-05-2016 в 08:22:
Я не работаю с deferred shading, использую только forward rendering. Но выскажу некоторые соображения.
Цитата:
KiQ писал:
Посмотрел на всякие 1500 fps у волатил и ксашей и что-то мне взгрустнулось.
В волатиле фпс не может подняться выше 1000 by design - там миллисекундный (мультимедийный) таймер. В ксаше - микросекундный, как в первом Quake.
Цитата:
KiQ писал:
В качестве системы освещения однозначно буду использовать deffered shading.
Не совсем понятен выбор для квестового движка. Ты же понимаешь, что системные требования к видеокарте в таком разе будут очень велики, и на каком-нибудь стареньком ноуте уже запросто не запустишь? Не проще ли воспользоваться старыми добрыми лайтмапами, которые вообще бесплатны на этапе рендеринга?
Цитата:
KiQ писал:
В качестве способа рендеринга - glDrawArrays, скорее всего.
Ты, конечно же, хотел сказать - glDrawElements.
Цитата:
KiQ писал:
координаты в FBO не подчиняются заданной матрице проекции
Быть того не может. Координаты проекции определяются матрицей проекции, отсебятины в конвейере никакой нет.
Цитата:
KiQ писал:
Но что тогда получается, что окна будут светиться в темноте, как в хл? Как этого избежать.
Вычислять DS отдельно для каждого окна. 
Может быть, сработает какой-нибудь метод order independent transparency, но я не копался. Знаю только, что прозрачность в DS - тот ещё геморрой.
Цитата:
KiQ писал:
Насколько это быстрее нескольких проходов с рендерингом в разные FBO
Зависит от того, как именно выполняются проходы.
Подозреваю, что быстрее при любом раскладе, а вот насколько - надо смотреть.
Отправлено Government-Man 28-05-2016 в 18:28:
Цитата:
XaeroX писал:
Не совсем понятен выбор для квестового движка.
Аналогично. Имхо использование деффереда оправдано только для сцен с большим количеством перекрывающихся объектов и сложными шейдерами с кучей источников освещения. Если же у тебя графон будет "как в сайберии" то производительность только упадет - гы-буфер уж очень жруч до памяти. Добавь еще сюда проблемы с прозрачностью и необходимость встраивания шейдеров материалов в существующие проходы рендеринга.
Добавлено 28-05-2016 в 13:28:
А ну и мсаа не будет работать.
Отправлено Дядя Миша 28-05-2016 в 19:03:
Цитата:
KiQ писал:
В качестве системы освещения однозначно буду использовать deffered shading
Прогрессивное человечество уже перешло на Tiled Shading 
Цитата:
KiQ писал:
При использовании всего одного FBO с выводом его на экран fps просаживается на 15-20 пунктов, чем при непосредственном выводе, даже на небольшом разрешении.
Ну ты из FBO берёшь текстуру, а потом рисуешь её на весь экран. Это требует какого-то времени.
Цитата:
KiQ писал:
Но что тогда получается, что окна будут светиться в темноте, как в хл? Как этого избежать.
Ну например сделать как в параное-2.
Цитата:
XaeroX писал:
Не проще ли воспользоваться старыми добрыми лайтмапами, которые вообще бесплатны на этапе рендеринга?
Лайтмапы бесплатны при том лишь условии, что рендерер не предполагает динамических источников впринципе. Потому что когда мы начинаем совмещать лайтмапы и динамические источники, то сложность рендерера по совокупности выходит сложнее и тормознее, нежели чистая динамика к примеру. Но зато - радиосити, хоть и статичный.
ЗЫ. За дефферед такую тему скажу. Отложенное освещение - это попытка переложить с больной головы на здоровую. Левел-дизайнеру предоставляется возможность самому налепить сколько угодно лампочек, чтобы освещение уровня его устроило. Никакой физической корректностью там и не пахнет.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ncuxonaT 28-05-2016 в 19:13:
Цитата:
Дядя Миша писал:
Потому что когда мы начинаем совмещать лайтмапы и динамические источники, то сложность рендерера по совокупности выходит сложнее и тормознее, нежели чистая динамика к примеру.
Какие будут ваши доказательства?
Отправлено Дядя Миша 28-05-2016 в 19:18:
ncuxonaT клянусь небесным котэ! 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 28-05-2016 в 19:37:
Дядя Миша и всё-таки непонятно, откуда такой вывод. Поясни, пожалуйста.
Добавлено 29-05-2016 в 01:37:
Government-Man msaa работать будет, но через хак и потребует gl4/dx11. 
Отправлено Дядя Миша 28-05-2016 в 19:57:
XaeroX тебе непонятно почему освещение по двум технологиям сложнее чем по одной? Или непонятно что нарисовать лайтмапу + динамические источники тормознее чем просто динамические источники?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 28-05-2016 в 19:58:
Дядя Миша первое. Какие там технологии в наложении лайтмапы?
Отправлено Дядя Миша 28-05-2016 в 20:05:
XaeroX ну нам как минимум надо чтобы динамический источник визуально не отличался от статического и модели нормально осветить, по лайтпробам, кубемапам.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Government-Man 28-05-2016 в 21:42:
Цитата:
Дядя Миша писал:
Потому что когда мы начинаем совмещать лайтмапы и динамические источники, то сложность рендерера по совокупности выходит сложнее и тормознее, нежели чистая динамика к примеру.
Объясни пожалуйста, как 10 сложных вычислений могут выполняться быстрее, чем 2 сложных и 8 простых? Как вариант - 2 сложных и 1 простое. С тем, что смешанный рендер сложнее, я согласен, но эффективность-то при чем?
Цитата:
Дядя Миша писал:
Никакой физической корректностью там и не пахнет.
Как порядок отрисовки сцены влияет на физическую корректность?
Цитата:
XaeroX писал:
msaa работать будет, но через хак и потребует gl4/dx11
А... ну я тоже чота такое слышал. 
А с производительностью там как будет?
Отправлено Дядя Миша 28-05-2016 в 21:59:
Цитата:
Government-Man писал:
Объясни пожалуйста, как 10 сложных вычислений могут выполняться быстрее, чем 2 сложных и 8 простых?
Сперва ты мне объясни откуда взял цифры 10 сложных, 8 простых и 2 сложных. И что по твоему сложные вычисления, а что простые.
И как ты полагаешь что дороже - фетчинг в лайтмапу или расчёт затухания направленного источнега. А если у нас три лайтмапы, по типу как в хл2.
Цитата:
Government-Man писал:
Как порядок отрисовки сцены влияет на физическую корректность?
А где я говорил, что порядок отрисовки сцены влияет на физическую корректность? Это ты сам себе придумал и теперь пытаешься мне приписать.
Отложенное освещение даёт ровно один бонус нам - множество дешевых источников в кадре. Эти источники левел-дизайнер расставляет так, чтобы было похоже на освещение с переотражениями. О какой физической корректности подобного освещения может идти речь?__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Government-Man 28-05-2016 в 22:07:
Цитата:
Дядя Миша писал:
расчёт затухания направленного источнега
Так мы о тенях вроде нет? 
Как ты думаешь, что быстрее - чтение лайтмапы или отрисовка динамической тени?
Цитата:
Дядя Миша писал:
О какой физической корректности подобного освещения может идти речь?
А как растишка влияет на рост?
Отправлено Дядя Миша 28-05-2016 в 22:15:
Цитата:
Government-Man писал:
Так мы о тенях вроде нет?
Не. Мы про освещение.
Цитата:
Government-Man писал:
чтение лайтмапы или отрисовка динамической тени?
Отрисовка или создание? И отрисовка с каким фильтром? И каково разрешение шадовмапы? Или ты живёшь догмами "A быстрее B" ?
Цитата:
Government-Man писал:
А как растишка влияет на рост?
Не все ёгурты одинаково полезны__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 29-05-2016 в 05:38:
Цитата:
Дядя Миша писал:
ну нам как минимум надо чтобы динамический источник визуально не отличался от статического и модели нормально осветить, по лайтпробам, кубемапам.
Так бы и говорил, что высказался об архитектурных проблемах ксаша. А то прозвучало-то в общем.
Цитата:
Government-Man писал:
А с производительностью там как будет?
Полагаю, ощутимо медленнее. Говорю же - хак. 
Цитата:
Дядя Миша писал:
Или ты живёшь догмами "A быстрее B" ?
Цитата:
Дядя Миша писал:
когда мы начинаем совмещать лайтмапы и динамические источники, то сложность рендерера по совокупности выходит сложнее и тормознее, нежели чистая динамика
Вот зачем ты приписываешь собственное догматическое мышление другим?
Отправлено Дядя Миша 29-05-2016 в 14:15:
Цитата:
XaeroX писал:
Так бы и говорил, что высказался об архитектурных проблемах ксаша.
Лайтпробы на минуточку широко используются и в унити и в унреале и срузисе и вообще везде. А наложение лайтмап на модели не очень часто и обычно как один из альтернативных методов, для тех кто согласен долго ждать. Потому что наложение лайтмап на модели занимает больше времени, чем освещение полигонов уровня. Да даже в параное шадовкаст от моделей увеличивает время компиляции где-то на четверть.
В основном этим Эпики балуются, Крайтек с лайтмапами вообще не стал заморачиваться. К тому же с какого перепуга возможность наложения лайтмапы на модель стала частью архитектуры?
У тебя какие-то странные представления об архитектуре, я уже давно заметил.
Цитата:
XaeroX писал:
Вот зачем ты приписываешь собственное догматическое мышление другим?
Возьми Волатайлу и расставь на ней 20 динамических источников света.
Замерь фпс. Теперь добавь лайтмапу. Фпс вырос или просел?
Или вы полагаете, что раз есть лайтмапа, то кол-во динамических источников должно уменьшится? Ничего подобного. Лайтмапа у нас в этом случае симулирует переотраженный свет, а директ - динамическими источниками. Если конечно мы мыслим категориями первохалфы, где длайты вообще в лайтмапу вшивались, то там да. Но те длайты по сути считались на процессоре и никаких теней от них не было.
Это по сути спор ни о чём, т.к. у каждого свои представления о пропорциях смешвания статики с динамикой и каждый оппонент излагает свою точку зрения в полной уверенности, что и остальные придерживаются аналогичной. Отсюда и непонимание.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 29-05-2016 в 14:45:
Дядя Миша
Не нужны ни лайтпробы, ни лайтмапы на моделях. Там вертекслайт прекрасно справляется.
Цитата:
Дядя Миша писал:
К тому же с какого перепуга возможность наложения лайтмапы на модель стала частью архитектуры?
У тебя какие-то странные представления об архитектуре, я уже давно заметил.
Ты в очередной раз приписал мне свои мысли. Не надоело? 
Цитата:
Дядя Миша писал:
Возьми Волатайлу и расставь на ней 20 динамических источников света.
Замерь фпс. Теперь добавь лайтмапу. Фпс вырос или просел?
Не изменится.
Цитата:
Дядя Миша писал:
Или вы полагаете, что раз есть лайтмапа, то кол-во динамических источников должно уменьшится?
Ну конечно уменьшится, часть ведь можно будет сделать чисто статиками. В этом вся соль.
Цитата:
Дядя Миша писал:
у каждого свои представления о пропорциях смешвания статики с динамикой и каждый оппонент излагает свою точку зрения в полной уверенности, что и остальные придерживаются аналогичной.
Да какие тут могут быть разные представления? Стандартная практика - часть источников, от которых не важны динамические тени (или они мелкие) запекаем в лайтмапу, остальные динамикой.
Отправлено Дядя Миша 29-05-2016 в 15:07:
Цитата:
XaeroX писал:
Не нужны ни лайтпробы, ни лайтмапы на моделях. Там вертекслайт прекрасно справляется.
А от лайтпроб по твоему не вертекслайт?
Цитата:
XaeroX писал:
Ты в очередной раз приписал мне свои мысли. Не надоело?
Ну давай в этот раз так уж и быть допустим, что ты прав, а я ошибся. Посмотрим куда нас приведут эти рассуждения. В чём же тогда по твоему заключаются архитектурные проблемы ксаша? Если исходить из твоего предположения, что они там вообще имеются. Я напоминаю, что в самом ксаше, да и в ксаш-моде тоже те самые халфовские длайты, которые к слову работают быстрее, чем в самой халфе.
Цитата:
XaeroX писал:
Не изменится.
Долбаный микросекундный таймер.
Цитата:
XaeroX писал:
Ну конечно уменьшится, часть ведь можно будет сделать чисто статиками. В этом вся соль.
Ну вот уже принципиальное расхождение во взгляде на проблему. Так о чём мы спорим?
Цитата:
XaeroX писал:
Да какие тут могут быть разные представления?
А это и есть догма - считать что представление может быть только одно.
Цитата:
XaeroX писал:
Стандартная практика - часть источников, от которых не важны динамические тени (или они мелкие) запекаем в лайтмапу, остальные динамикой.
Стандартная - для кого? Между прочим подход "переотраженный свет в лайтмапе, прямой свет - от динамических источников" широкораспространенная вещь в наше время. Но и это лишь один из примеров сочетания.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 29-05-2016 в 15:12:
Цитата:
Дядя Миша писал:
В чём же тогда по твоему заключаются архитектурные проблемы ксаша?
В том, что у тебя, судя по твоим словам, сочетание лайтмап с длайтами оказывается медленнее, чем только длайты. Или ты это абстрактно рассуждал?
Цитата:
Дядя Миша писал:
Долбаный микросекундный таймер.
Не поэтому. Волатила всегда рисует с лайтмапой. Там нет возможности её отключить. Можно только сделать чёрной. Ну или белой.
Цитата:
Дядя Миша писал:
Между прочим подход "переотраженный свет в лайтмапе, прямой свет - от динамических источников" широкораспространенная вещь в наше время.
Ну и в волатиле так. А можно и целиком лайт в лайтмапу запечь, если динамические тени не нужны. Бамп-то и параллакс будут и так, и эдак.
Отправлено Дядя Миша 29-05-2016 в 15:19:
Цитата:
XaeroX писал:
В том, что у тебя, судя по твоим словам, сочетание лайтмап с длайтами оказывается медленнее, чем только длайты.
Это опять-таки зависит от способа отрисовки. Если мы сначала рендерим мир с лайтмапой со включенным z-буффером, а потом отключаем запись глубины и рендерим каждый лайт в отдельном проходе - то да, так медленнее. Но если сделать допущение, ну скажем не более четырёх лайтов на полигон (что в общем случае вполне допустимо), то мы можем нарисовать всё за один проход и это разумеется будет быстрее, за чёт снижения овердрава. ЧСХ - даже при форварде. Расплатой будет вот этот самый лимит. Сильно увеличивать кол-во юнитов тоже нельзя - на некоторых радионах доступно максимум 8 текстурных юнитов, я исхожу из этого соображения. Возможно на DX ситуация иная.
Цитата:
XaeroX писал:
Волатила всегда рисует с лайтмапой. Там нет возможности её отключить.
Так этож фундаментальная особенность архитектуры рендерера. То есть ты меня сейчас обманул и сам этого не заметил. Олунеть можно.
Цитата:
XaeroX писал:
Бамп-то и параллакс будут и так, и эдак.
У тебя трёхвекторная лайтмапа или делюкс классический?__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 29-05-2016 в 15:28:
Цитата:
Дядя Миша писал:
Так этож фундаментальная особенность архитектуры рендерера. То есть ты меня сейчас обманул и сам этого не заметил. Олунеть можно.
Да я тебе сто раз про архитектуру рендера волатилы рассказывал, но ты разве ж меня слушаешь?
Цитата:
Дядя Миша писал:
У тебя трёхвекторная лайтмапа или делюкс классический?
Делюкс классический.
Цитата:
Дядя Миша писал:
ендерим каждый лайт в отдельном проходе - то да, так медленнее. Но если сделать допущение, ну скажем не более четырёх лайтов на полигон (что в общем случае вполне допустимо), то мы можем нарисовать всё за один проход и это разумеется будет быстрее
А у меня не так и не эдак. 
Ну да ладно.
Отправлено Дядя Миша 29-05-2016 в 15:45:
Цитата:
XaeroX писал:
Да я тебе сто раз про архитектуру рендера волатилы рассказывал, но ты разве ж меня слушаешь?
Вот здесь я к слову охотно признаю, что судил по себе. Т.к. для меня не составляет большой проблемы полностью поменять всю архитектуру рендерера я предполагал что и ты способен на разные эксперименты, ну хотя бы на начальных этапах. От которых возможно остались результаты.
Цитата:
XaeroX писал:
А у меня не так и не эдак.
Ну пусть будет Z-препасс 
Добавлено 29-05-2016 в 18:44:
Цитата:
XaeroX писал:
Делюкс классический.
О! Ты суммируешь переотражения для делюкса или там всегда вектор для директа, как в q3map2?
Добавлено 29-05-2016 в 18:45:
PS. Предлагаю дать слово топикстартеру всё же 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 29-05-2016 в 17:08:
Цитата:
Дядя Миша писал:
я предполагал что и ты способен на разные эксперименты
Правильно предполагал. Я долго экспериментировал и выбрал то, что мне понравилось. В чём-то даже пришлось принести в жертву многолетние наработки - например, отказаться от волюмов. До сих пор жаба душит, сколько красивого кода удалить пришлось. 
Цитата:
Дядя Миша писал:
Ты суммируешь переотражения для делюкса или там всегда вектор для директа, как в q3map2?
Да, по-хитрому балансирую вклад директа и отражённого.
Отправлено Дядя Миша 29-05-2016 в 17:22:
Цитата:
XaeroX писал:
В чём-то даже пришлось принести в жертву многолетние наработки - например, отказаться от волюмов.
Как будто мне не пришлось.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'