Sidebar

XashNT renderer: статика vs динамика

Staff member
VIP
Mar 28, 2010
15,566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
XashNT renderer: статика vs динамика

Поскольку XashNT - это мой последний проект, создаваемый на прежних условиях, да и то благодаря двум обстоятельствам (желанию освоить современные техники рендерера и дать пользователям связки Xash3D+XashXT более-менее современные возможности), то хотелось бы особенно отвеетственно подойти к выбору рендерера и его возможностям.
Темы про материалы все помнят, как долго я колебался и размышлял. Теперь предстоит решить еще один не менее важный вопрос, после чего можно приступать, непосредственно к написанию рендерера. Пока Элбер доделывал Параною, я тут тоже даром времени не терял и внимательно изучал возможности современных движков, на графику которых принято ориентироваться, как на эталонную на текущий момент. Разумеется, как и всегда, я не ставлю перед собой цель "сделать, чтобы было похоже на ХХХ". Если технологии и навыки позволяют, то вполне логично сделать лучше и быстрее, во всяком случае попытаться, учитывая чужие наработки и ошибки. И естественно лучше всего это делать, еще до написания рендерера, а не переписывать потом всё по 10 раз. Теперь я кратенько распишу про особенности рендеринга известных движков, те любопытные обстоятельства, которые мне удалось выяснить за всё это время. Если вы в своё время плотно работали с этими движками и вам есть что добавить, рассказать про ограничения и возможности - велкам в тред.
Итак:
CryEngine 2: Для меня было самым настоящим открытием тот факт, что в первом срузисе используется forward rendering. На тематических форумах можно встретить любопытное утверждение, что SubSurface Scattering для forward-рендеринга смотрится намного лучше post-реализации во втором срузисе. Это легко объяснимо тем фактом, что при прямом рендеринге мы располагаем куда большим объемом информации о геометрии. Но в целом ничего удивительного в этом нет - 90% игры происходит на открытом воздухе с одним-единственным источником освещения - солнцем\луной. А глобальную иллюминацию иммитирует SSAO в паре с SubSurface Scattering. Ну и есть еще дополнительная фишка, Dynamic AO Terrain, которая затеняет участки под ёлками-пальмами. Так или иначе, но многим картинка первого срузиса нравится больше, чем картинка второго.
СryEngine 3: А здесь я узнал, что после его выхода, Капланян покинул студию. Сам он ушел или его ушли, теперь уже не разберешь. Но для меня даннный факт по значимости примерно экивалентен уходу Ромеры из ID. Только во втором случае мы потеряли лишь в качестве контента для демонстрации новых движков, потому что после первой кваки ничего столь же атмосферного ID так и не смогла родить. А в случае с крайтеком, компания, которая вознамерилась продолжать славное дело ID, продавая движки, фактически потеряла главного генератора идей и разработчика новых технологий. Видимо этим отчасти и объясняется тот факт, что в CryEngine 4 никаких особых прорывов не наблюдается.
SSLR прорывом можно назвать лишь с натяжкой, к тому же технология была внедрена еще в CryEngine 3 более поздних версий. Ну да бог с ним.
Касательно технических подробностей, важнейшим нововведением в CryEngine 3 является LPV - Light Propagation Volume. Это одна из технологий для симуляции непрямого освещения, или как любит говорить ФиЭктро - реалтайм радиосити (хотя назвать эту аппроксимацию радиосити, лично у меня язык не поворачивается). Идея LPV заключается в следующем. Вокруг игрока имеется набор вложенных сеток. Самая маленькая - самая густая, самая большая - разреженная.
Сетки строятся налету, таким образом отпадает необходимость в предвычислениях. В эту сетку попадают виртуальные непрямые лайты, по классическим алгоритмам, которые использовались еще со времен оффлайн-рассчётов. hlrad, грубо говоря делает примерно тоже самое - рассчитывает места где свет должен отразиться от стен и лепит туда маленькие лампочки. Это альтернатива честному рейтрейсингу.
В CryEngine 3 подобные рассчёты доступны в реальном времени, естественно с массой оговорок - лампочки жестко привязаны к ячейкам сетки, отражения могут происходить только в шести аксиальных направлениях (стороны куба), сетка имеет конечную точность, рассчёт осущствляется только для параллельного источника (солнца). Но зато полная динамика без предвычислений.
Frosbite 2: Специально изучением его возможностей я не занимался, уяснил только ключевые моменты: лайтпробы считаются в оффлайне, они являют собой статичную сетку (иррегулярную?), но зато общее качество освещения выше, чем при использовании LPV, что вообщем-то неудивительно, поскольку предрасчёты всегда дают более качественный результат, в противном случае алгоритм просто хоронят. Но зато динамические объекты в Frostbite не вносят вклада в переотражения, что возможно имеет значение для больших динамических объектов.
Unreal 4: самый консервативный движок, насколько я понял, уже после того момента как эпики по каким-то соображениям отказались от технологии Enlighten. Теперь у них отраженный свет запекается в хитрую лайтмапу, а прямой считается налету. Насколько я понял, там полным-полно ограничений, от которых плюются наши более въедливые товарищи, но несмотря на частичную статику освещения, UE4 выдает наиболее приятную картинку из всех, что вообщем неудивительно, поскольку лайтмапы почти всегда выглядят лучше динамически посчитанного света. К слову сказать тот же Enlighten использует проекционные лайтмапы, с предрасчётов геометрии низкой детализации на геометрию высокой, но я особо не погружался в эту технологию.

Ну и после того как вы переварите вышенаписанное, я вас плавно подвожу к основному вопросу этой темы: в какой пропорции нам разбавить статику динамикой, чтобы и картинка была приятной глазу и смену времени суток организовать. Это моя личная позиция, и как выяснилось, в вышеупомянутых движках она тоже разделена в той или иной степени. Т.е. солнце у нас так или иначе выдает почти честную динамику с непрямым освещением, а всё остальное - как придется.
Если вы девелопите под связку Xash3D+XashXT и имеете что сказать по поводу соотношения динамики и статики на уровне - велкам в тред.
Если вы не имеете отношения к ксашу, но при этом изучили массу современных движков и знаете все недостатки и достоинства их рендереров и вам хочется об этом написать - велкам в тред.
Если у вас есть какое-то свое собственное видение, пускай и нигде не реализованное, но вам отчего-то кажется, что оно вполне реализуемое - велкам в тред.
Я так полагаю, дискуссия будет достаточно объемной и информативной.
А по итогам уже сформируем модель будущего рендерера и я приступлю к его реализации.
 

Flash

VIP
VIP
Sep 21, 2004
16,980
41
  • Золотая медаль 111
  • Серебряная медаль 216
  • Золотая медаль 221
  • Серебряная медаль 311
  • Серебряная медаль 115
  • Золотая медаль 125
  • Золотая медаль 211
Расчлёнка то бишь? Там уже ничего не работает, будь-то какой-то сталкер, либо блохастый "кабыздох". Разве что на шашлыки пустить. :agy:
 

Пахом

Guest
П
А как работает рендер в Counter Strike: Global ofencive? Движок вроде бы тот же Сурс, а на карте не одной статичной тени, заранее отрендориной компилятором. Вот такую бы тему в Xash внедрить.
 
Staff member
VIP
Mar 28, 2010
15,566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
А как насчет частей сталкера, как там все это работает?
Там отложеное освещение и такие же каскадные тени, как и в первом срузисе.
Ну и SSAO. Да сталкера я бы вообще не стал рассматривать, там в плане технологий нет ничего интересного, там просто текстуры приятные.

Post automatically merged:

Вот такую бы тему в Xash внедрить.
ФПараное gl_sun_shadows пробовал включать?

Post automatically merged:

2 ncuxonaT: это понятно, я скорее склоняюсь к SSDO, он хотя бы не показывает погоду в караганде.
 
Last edited:

GNU/Hurt

Maïté
Mar 5, 2014
1,092
25
38
>gl_sun_shadows

тагад всё какое то стрёмное и тёмное становицца
 

FiEctro

Супер Модератор
Staff member
Супер Модератор
Jul 28, 2006
17,167
33
  • Золотая медаль 213
  • Neh
2 Пахом:
Есть там статичная тень, она просто размытая. Там тоже самое освещение что и в CSS. Только шадоумапы от солнышка есть.
 
Staff member
VIP
Mar 28, 2010
15,566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
2 GNU/Hurt: дык понятно - оно для теста, а не для использования. Это обкатка технологии.
 
Staff member
VIP
Mar 28, 2010
15,566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Товарищи, если вы будете молчать, я вообще ничерта не буду делать. Охренеть можно :shock:
 

ncuxonaT

Well-known member
May 5, 2013
1,221
51
48
Даёшь хитро-запеченные лайтмапы. И 3 типа источников освещения: динамические без непрямого освещения, динамические с запеченным непрямым и статические с запеченными прямым и непрямым.
 

Raid

VIP
VIP
Jul 11, 2006
8,319
33
  • Rocket медаль
Вопросы хорошие, осталось только найти хоть кого-нибудь, кто был бы компетентен для развёрнутого ответа %)

Со своей колокольни предлагаю как в скуриме: на больших локациях солнце и динамические тени, на маленьких - лайтмапы. Там где есть статические лампы - печётся свет, всё остальное освещается либо чёрным (глобальная шадоумапа по дефолту с регулируемым разрешением), либо солнцем, если таковое есть на карте. Солнце, собсно, по-любому динамическое должно быть, с регулируемой интенсивностью света. Растущая насыщеность\непрозрачность глобальной шадоумапы при уменьшении яркости солнца. Если яркость солнца больше, чем у статических ламп, то лайтмапы от них перестают быть видны, например. Это выглядит логично. Наверное.
 
Last edited:

GNU/Hurt

Maïté
Mar 5, 2014
1,092
25
38
2 Дядя Миша:
сложно ответить без спецзнаний. есть вопросы такие:
1. сколько полностью динамичных источников света можно запихнуть в кадр без просадки производительности?
2. можно ли кэшировать shadowmap? насколько тормозит просто рисование готовой shadowmap тени?
3. что за ересь в xashxt/paranoia с затуханием конических источников, отчего свет настолько резко отрубается с расстоянием?
4. можно ли увеличить лимит 4х лайтстайлей-на-грань хотя бы до 8и?
5. можно ли сделать несколько статичных (выключаемых) light_enviroment?
6. что из себя этот самый nt будет представлять то? та же архитектура game+mod или по другому? будет он одно- или мульти-платформенный? свободный или огороженный? коммерческий или бесплатный?
 
Last edited:
Staff member
VIP
Mar 28, 2010
15,566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Даёшь хитро-запеченные лайтмапы.
И опять ждать по две недели пока рад соизволит отработать.
динамические без непрямого освещения, динамические с запеченным непрямым и статические с запеченными прямым и непрямым.
Если уж будут доступны динамические с непрямым освещением, то достаточно будет запретить им переотражения, нежели городить такой огорот.
предлагаю как в скуриме: на больших локациях солнце и динамические тени, на маленьких - лайтмапы
Ну вот как бы да, я об этом и думаю. Солнце - динамическое, а в остальных местах лайтмапы + динамика без индиректа.
сколько полностью динамичных источников света можно запихнуть в кадр без просадки производительности?
При отложенном рендеринге - несколько сотен, но что толку? Тень ведь по прежнему считается в отдельном проходе и все тормоза ложатся на нее.
можно ли кэшировать shadowmap? насколько тормозит просто рисование готовой shadowmap тени?
Шадовмапу можно спроецировать и сделать лайтмапой, но блин! Она ведь содержит в себе тень от игрока и от всяких там йолок. А их придется обновлять каждый кадр. Сомнительная оптимизация вообщем. По крайней мере при классической реализации. Можно вообще тень посчитать на GPU и запечь в лайтмапу, но только от солнца и статику. Но выглядеть будет лучше, чем если бы рад трудился. Но, повторюсь, только от солнца.
что за ересь в xashxt/paranoia с затуханием конических источников
Там три карты аттенюации, а в параное вообще одна.
можно ли увеличить лимит 4х лайтстайлей-на-грань хотя бы до 8и?
Можно, я 16 штук делал. Рад, соответственно начинает считать в несколько раз дольше и хочет памяти еще больше.
можно ли сделать несколько статичных (выключаемых) light_enviroment?
Можно, я делал солнце на 16-и лайтстилях (вроде у ФиЭктры даже гифка осталась). Одним словом - порнография.
что из себя этот самый nt будет представлять то?
Логическое развитие связки Xash3D+XashXT со вполне определенной идеей: дать мододелам под халфу возможности современной графики и современной физики, не отнимая любимый редактор. Непосредственно в Xash3D этому мешала бинарная совместимость с модами халфы, как мы помним.
та же архитектура game+mod или по другому?
Да, глобальные моменты я менять не собираюсь, что бы вы могли впоследствии мигрировать. А там видно будет.
будет он одно- или мульти-платформенный?
Я планирую просто прикрутить к нему SDL. А портируете уже сами. Вообщем привязываться к винде не буду.
свободный или огороженный?
Пока под вопросом. Возможно что сорцы будут открыты после достижения определенной стабильности, как это было с Xash3D.
коммерческий или бесплатный?
Бесплатный, да. Зарабатывать надо, создавая материалы к юнити и впаривая их начинающим игроделам. Это такое же приятное занятие, как отбор конфет у детей.
 
Last edited:

ncuxonaT

Well-known member
May 5, 2013
1,221
51
48
И опять ждать по две недели пока рад соизволит отработать.
Радиосити - неоптимальный метод. Даёшь монте-карло!
Ну вот как бы да, я об этом и думаю. Солнце - динамическое, а в остальных местах лайтмапы + динамика без индиректа.
Но ведь Солнце - главный поставщик индиректа.
 

FiEctro

Супер Модератор
Staff member
Супер Модератор
Jul 28, 2006
17,167
33
  • Золотая медаль 213
  • Neh
К слову тени можно делать не для всех источников, и запекать в кубамапу для статических. Что касается теней от игрока, а разве от лайтмапы они у него появятся?
 

Ku2zoff

Member
Aug 12, 2010
322
34
21
18
Дядя Миша said:
Рад, соответственно начинает считать в несколько раз дольше и хочет памяти еще больше.
Даёшь многопоточность! hlrad поди и спустя 17 лет на одном ядре работает.
По сабжу: чтобы было быстро (не менее 60 fps на современных и не очень картах), чтобы грузилось быстро, и чтоб картинка была красивая. По последнему пункту: я понимаю, что многое зависит от дизайнеров и мапперов, и то, что вместо красивой природы в СТАЛКЕРе можно сделать убогие коридоры из HL: Чернобыль. Но хочется, чтобы для этого нужно было как можно меньше извращений.

Post automatically merged:

Соответственно, моё мнение такое:
Не важно, чего больше, динамики или статики, лишь бы было красиво и правдоподобно. Чтоб маппер не был опозорен какой-то тупой фигнёй, типа остающихся на месте теней от подвижных энтить, или отсутствием этих самых теней. Ну и чтобы не надо было ломать моск, как правильно сделать освещение в месте ххх, чтобы было красиво и без косяков.
 
Last edited:
Staff member
VIP
Mar 28, 2010
15,566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Даёшь многопоточность! hlrad поди и спустя 17 лет на одном ядре работает.
hlrad работал на 64-х ядрах еще в те славные времена когда он назывался light.exe. Ты бы хоть не позорился таким глубоким незнанием матчасти.
 

Ku2zoff

Member
Aug 12, 2010
322
34
21
18
2 Дядя Миша: ну я ж не маппер. Откуда мне знать, как работают эти б-г мерзкие тулзы.
 

GNU/Hurt

Maïté
Mar 5, 2014
1,092
25
38
>При отложенном рендеринге - несколько сотен, но что толку? Тень ведь по прежнему считается в отдельном проходе и все тормоза ложатся на нее.
предполагается, что на карте всё таки преобладают неподвижные объекты. поэтмоу перерасчёт нужно делать для небольшого числа источников света, в чьи povы попадает игрок или монстры.
>Можно, я делал солнце на 16-и лайтстилях (вроде у ФиЭктры даже гифка осталась). Одним словом - порнография.
ну 16, допустим, ненужно. а вот штук 6 санлайтов с большим spread angle вполне себе должно быть красиво. да и не только солнце, один семафор, например, уже сжирает 3 лайтстайля.

Post automatically merged:

>hlrad работал на 64-х ядрах еще в те славные времена когда он назывался light.exe. Ты бы хоть не позорился таким глубоким незнанием матчасти.
тут подсказывают, что на numa-архитекстуре он серьёзно лажает.

Post automatically merged:

>Товарищи, если вы будете молчать, я вообще ничерта не буду делать. Охренеть можно

нормально написать смогу не раньше выходных -- продумать и изучить некоторые моменты надо.
 
Last edited: