Deathloop, новая игра Arkane Studios

Автор Vorob, 10 июня 2019 12:45:26

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Force

Цитировать5 ГБ - видеопамяти? Если так, то, возможно, это следствие криворукости графических программистов Arkane
Позвольте мне не согласиться ;). Если у пользователя максимум 12 Гигов, и выбрал от максимальные настройки качества, то что "криворукого" в том, чтобы занять половину свободной видеопамяти нужными для игры данными? Там же одни только текстуры всю эту память и сжирают. Ставишь качество текстур ниже и занимаемое место в памяти сокращается в разы. С тенями - то же самое. Думаю, о криворукости можно было бы говорить, если бы все 12 гигов были бы забиты под завязку и ещё не хватало бы, а так - всё вполне резонно и по делу. Графон в Дезлупе очень достойный, так что странный укор. Да и, в конце-концов, Аркейн - не движкописатели, а игросоздатели. Типа тех же LGS. Не стоит сравнивать их с idSoftware.

MoroseTroll

Игра-то весит всего 26 ГБ на ПК, из них немалая часть - очень качественные пререндер-видео, которые прокручиваются на фоне меню. Положим, уровень большой и детальный, но сам он, за исключением текстур, нормалей и прочих карт отражений (и то не всех, а только нужных в данный момент), хранится в оперативной памяти. Так куда игре 5 ГБ видеопамяти?

Насчёт сравнений с id: когда речь идёт об упущенной прибыли в десятки миллионов долларов, я бы на месте Bethesda крепко задумался, почему игры на основе id Tech 5 и его потомков то тормозят безбожно (Dishonored 2 - первое время, Deathloop - почти год), то выглядят просто отвратительно (The Evil Within 1), то глючат не по-детски (Wolfenstein: The New Order - первое время). И я бы призвал к ответу разработчика движка (id) да попросил бы в жёсткой форме разобраться с происходящим. И пусть даже Void - это почти полностью переделанный id Tech 5, послать десант id на помощь Arkane - это первое, что пришло бы мне в голову, когда знаешь, какие деньги на кону. Если выпускаешь игру в ноябре (как Dishonored 2), наряду (+/-) с очередными Call of Duty и Battlefield, ты должен быть абсолютно уверен в том, что игра будет работать прекрасно на всех платформах.

Force

#32
Цитироватьно сам он, за исключением текстур, нормалей и прочих карт отражений (и то не всех, а только нужных в данный момент), хранится в оперативной памяти
Откуда такая информация? Почему, по-твоему, геометрия уровня должна храниться в оперативной памяти, если рисовать эту самую геометрию должна видеокарта? И почему карты отражений, особенно если они реалтаймовые, тоже хранятся в оперативке, если сгенерированы они были в видеопамяти? Скидывать их в оперативку из видеопамяти - дорого, долго и неэффективно, поэтому они всегда и лежат в видеопамяти до тех пор, пока действительно окажутся ненужными. А это довольно большой объем данных.

Для примера, можно провести довольно простой подсчёт, допустим, у нас на экране одномоментно отображается 100 разных текстур разрешением 2048, в несжатом виде это будет:
2048 * 2048 // общее число пикселей каждой текстуры
* 4 // RGBA - количество данных для каждого цветового канала в текстуре
* 4 // занимаемый размер цветовых каналов в байтах для каждой текстуры
* 100 // количество текстур
= 6 710 886 400 байт или грубо округлив, 6,5 Гигабайт (и это без мип-уровней).

Это только текстуры. Понятно, что видюхи умеют работать со сжатыми данными, можно брать только нужный мип-уровень, можно хранить в видеопамяти только те текстуры которые сейчас видны на экране, и тогда получится как раз id Tech 5, с его видимой подзагрузкой текстур на лету. Да вот только людям такое не нравится и разрабы всё это усердно переделывают на загрузку полноценных текстур заранее, поэтому и нужны такие объемы, и даже больше, поскольку, если игрок мотнёт головой, он может увидеть другие 100 текстур, а следовательно, другие 6,5 гигов, которые мгновенно загрузить с диска будет довольно сложно. Либо использовать меньше текстур. Либо использовать ругаемую тобой megatexture. Всё это требует нетривиального подхода к рендереру и под силу разрабам, которые именно что заточены на разработку движков. Команда, целью которой является создание игры, вряд ли будет тратить усилия на разработку таких низкоуровневых вещей.

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

MoroseTroll

Формат RGBA, сам знаешь, чрезвычайно расточительный и должен использоваться лишь в крайнем случае, когда без него совсем никак; во всех остальных случаях используются форматы BC1-BC7, обеспечивающие сжатие в 4-8 раз. Стало быть, 6,25 ГБ превращаются в 1,56 ГБ (в случае 4-кратного сжатия) или даже в 0,78 ГБ (в случае 8-кратного сжатия); добавим 33% для LoD-ов и получим 2,08 ГБ и 1,04 ГБ. Что та, что другая цифра - вполне подъёмные вещи даже для старых видеокарт. Да, разумеется, вряд ли Deathloop использует всего 100 текстур одновременно, но, надеюсь, какой-никакой менеджер текстур и их уровней детализации там есть.

Мегатекстура в id Tech 4/5/6 - это, насколько я знаю, средство не столько сжатия текстур, сколько средство их разнообразия. Нормальные движки эту возможность не используют (и правильно делают!), потому что толково реализовать её просто не получается. Да, задумка гениальная (как думал Джон Кармак), но по сути - пук в лужу.

Насчёт карт отражений: если они генерируются GPU, то - да, в видеопамяти им и место. Но все остальные текстуры и сопутствующие им нормали и пр., невидимые в данном сегменте уровня, в видеопамяти храниться не должны. Что хранить, а что - нет, должен решать движок, сам или с помощью сторонней библиотеки (вроде Umbra), ведь все современные движки сами портализируют/сегментируют уровни, чтобы не рисовать их целиком. Стало быть, толково написанный движок не будет перегружать видеопамять почём зря.

Прошу прощения за повторение: на моей GF 960/2 ГБ Doom 2016 работает прекрасно и показывает шикарную картинку на высочайших настройках качества. А та же Deathloop по уровню картинки Doom 2016, считаю, уступает, хотя дело, возможно, просто в стиле. Но Deathloop у меня притормаживал даже на средних настройках, не говоря уж про высокие и высочайшие. Да, Arkane - не про движки, а про дизайн и остальное. Но, если так, мы приходим к тому же выводу, что я озвучивал до этого: не могёшь пилить движок, чтоб картинка была не только красивой, но и шустро выводилась, бери/покупай другой у своих коллег по конторе (id), куда более оптимизированный. MachineGames для Wolfenstein II/Youngblood/Cyberpilot так и сделала (взяла id Tech 6), и правильно поступила. Почему так не сделали Arkane и Tango Games, предпочтя и дальше жестоко пытать давно устаревший id Tech 5? Это - вопрос на десятки миллионов долларов.

nemyax

Цитата: MoroseTroll от 29 августа 2022 14:40:47все остальные текстуры и сопутствующие им нормали и пр., невидимые в данном сегменте уровня, в видеопамяти храниться не должны. Что хранить, а что - нет, должен решать движок, сам или с помощью сторонней библиотеки (вроде Umbra), ведь все современные движки сами портализируют/сегментируют уровни, чтобы не рисовать их целиком
"Сопутствующие нормали и пр." хранятся на вершине или в текстуре кокрастоке в видеопамяти. А рисовать уровень целиком в определённых условиях может оказаться дешевле, чем сегментировать его.
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!

MoroseTroll

Цитата: nemyax от 29 августа 2022 15:23:42"Сопутствующие нормали и пр." хранятся на вершине или в текстуре кокрастоке в видеопамяти.
Видимые - да, но я говорил о невидимых.
Цитата: nemyax от 29 августа 2022 15:23:42А рисовать уровень целиком в определённых условиях может оказаться дешевле, чем сегментировать его.
Пример?

nemyax

А что такое видимые-невидимые нормали? Нормаль это вектор вещественных чисел.

Цитата: MoroseTroll от 29 августа 2022 16:29:50Пример?
Любой уровень оригинальных воров. На нынешнем железе проще по его скромной геометрии целиком прогнать один DIP и дать пирамиде самой отсечь лишнее, чем тратить ЦП на выкусывание.
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!

MoroseTroll

Цитата: nemyax от 29 августа 2022 17:13:50А что такое видимые-невидимые нормали? Нормаль это вектор вещественных чисел.
Я о другом: если грань не видно, т.е. она за пределами поля зрения или же перекрыта другой гранью, нет смысла держать в видеопамяти принадлежащие ей текстуры, нормали и иные карты. Можно держать связанное с ней добро в памяти оперативной (в случае достаточного объёма последней), если есть определённая вероятность, что эта грань станет видимой, или же вообще освободить занимаемое ею место, а в случае нужды - подгружать уже с накопителя.
Цитата: nemyax от 29 августа 2022 17:13:50Любой уровень оригинальных воров. На нынешнем железе проще по его скромной геометрии целиком прогнать один DIP и дать пирамиде самой отсечь лишнее, чем тратить ЦП на выкусывание.
Боюсь, этот поезд давно ушёл. Речь о современных 3D-играх, с приличной детализацией, а не о проекте, который затачивался под Voodoo 1.

nemyax

Цитата: MoroseTroll от 29 августа 2022 17:33:04если грань не видно, т.е. она за пределами поля зрения или же перекрыта другой гранью, нет смысла держать в видеопамяти принадлежащие ей текстуры, нормали и иные карты
Ну а в следующем кадре станет видно. Побежим толкать мегабайты в узкую щель шины памяти? =)
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!

Force

MoroseTroll
Нормали, как ты знаешь, хранятся в виде текстур и следовательно занимают столько же видеопамяти и вся работа с ними осуществляется аналогичным образом, плюс есть ещё не только карты нормалей, но и карты шероховатости, карты металличности, какие-нибудь ещё запеченные карты AO и ещё ряд других, в зависимости от движка/проекта, так что смело можешь умножать полученное тобой число гигабайт на три. Итого легко и непринужденно приходим к вышеобозначенным пяти гигам.

Кстати, я не в курсе, какая версия id Tech где используется, как-то не следил за этим. Поэтому, когда говорил:
ЦитироватьПонятно, что видюхи умеют работать со сжатыми данными, можно брать только нужный мип-уровень, можно хранить в видеопамяти только те текстуры которые сейчас видны на экране, и тогда получится как раз id Tech 5, с его видимой подзагрузкой текстур на лету.
Имел в виду как раз Doom 2016, потому что там как раз делается так, как написано в этой цитате. Разве только по поводу сжатия я не уверен. Ибо получится тогда двойное пережатие текстур, что несомненно пагубно скажется на качестве. Ну и плюс, сжимать текстурный буфер в риалтайме - это как-то дико, никакого бюджета кадра не хватит.

Цитироватьведь все современные движки сами портализируют/сегментируют уровни, чтобы не рисовать их целиком. Стало быть, толково написанный движок не будет перегружать видеопамять почём зря.
Всё верно. Так должно быть. Но вот по поводу Rage 2 - я бы не был так в этом уверен ;). Зато сегмент уровня, в котором находится игрок, вполне может содержать более сотни разных текстур со всеми вытекающими.

ЦитироватьЛюбой уровень оригинальных воров. На нынешнем железе проще по его скромной геометрии целиком прогнать один DIP и дать пирамиде самой отсечь лишнее, чем тратить ЦП на выкусывание.
Всё верно. Но если говорить о не совсем последнем графическом АПИ, dx10-ogl3 то мы опять упрёмся в текстуры, которые либо придется все заливать в видеопамять, либо делать для них текстурный буфер и стримить в него, либо придумывать ещё какой-нибудь изврат ради сокращения количества вызовов отрисовки. А это, как ты должно быть знаешь, как раз камень преткновения в компьютерной графике.

Вот просто голые цифры из моей практики: отрисовка целиком в hull hd первой миссии второго вора без освещения, с текстурированием, с разбиением геометрии по текстурам и вывод этой геометрии кусками с переключением текстур занимает ~20 мс. Если же выкинуть переключение текстур, все ресурсы запихать в видеопамять и выводить минимальным количеством вызовов отрисовки, получим 2.5 мс. Разница на порядок! Но чтобы добиться этого результата, нужно ОЧЕНЬ плотно работать с движком довольно длительное время. Поэтому никто в здравом уме не будет таким заниматься, если конечно они не делают непосредственно движок.

А что касается сложности геометрии - то, по большому счету, она практически не играет роли в бюджете кадра.

MoroseTroll

nemyax: Для этого и нужен толковый жнец отсекатель граней, который должен сам предполагать степень появления оных в кадре, в зависимости от действий игрока. Понятное дело, что сказать - куда легче, чем сделать, но, блин, оно того стоит! Я подозреваю, что всё это уже давно украдено до нас сделано, а дело, может, в кривой настройке Deathloop по умолчанию. Ведь для Dishonored 2 существуют кое-какие параметры командной строки, позволяющие худо-бедно управлять некоторыми аспектами поведения её движка. Возможно, кое-что из этого по-прежнему работает и в Deathloop, а значит, ей просто нужна тонкая настройка; а может, всё куда хуже и чудо-программист, который пилил поддержку D3D12 для Void, что-то не доглядел или же вообще выполнил свою работу спустя рукава.

Force

Что касается отсечения перекрываемой геометрии - это всё дорогие процессы и только ультрасовременное железо с поддержкой mesh-шейдеров имеет адекватный механизм для эффективного рендеринга этого добра. Достаточно посмотреть на революцию, о которой громко трубили в UE5. Более старое железо вынуждено либо ждать несколько кадров, чтобы принять окончательное решение, видна группа объектов или нет, либо использовать хитромудрые алгоритмы на ЦПУ, как писал nemyax, которые не блистают скоростью или точностью. Следовательно, иногда проще нарисовать, чем отсечь, и это уже довольно давно так, поскольку на геометрию бюджет просто огромен. Главное делать это меньшим вызовом отрисовок.

MoroseTroll

#42
Цитата: Force от 29 августа 2022 18:14:13Нормали, как ты знаешь, хранятся в виде текстур и следовательно занимают столько же видеопамяти и вся работа с ними осуществляется аналогичным образом, плюс есть ещё не только карты нормалей, но и карты шероховатости, карты металличности, какие-нибудь ещё запеченные карты AO и ещё ряд других, в зависимости от движка/проекта, так что смело можешь умножать полученное тобой число гигабайт на три. Итого легко и непринужденно приходим к вышеобозначенным пяти гигам.
Если грузить абсолютно все поверхности уровня, то да, даже 5 ГБ может показаться довольно скромной величиной.

Цитата: Force от 29 августа 2022 18:14:13Кстати, я не в курсе, какая версия id Tech где используется, как-то не следил за этим.
Void - основательно изуродованный переделанный id Tech 5, который из Rage 1; используется Void в Dishonored 2 + Death of the Outsider, а также в герое нашего обсуждения - в Deathloop. Чистый id Tech 5, т.е. без присадок, кроме Rage 1, используется в Wolfenstein: The New Order + The Old Blood, а также в The Evil Within 1. В The Evil Within 2 и в Ghostwire: Tokyo (поправка: в Ghostwire используется UE4) используется уже переделанный Tango Gameworks id Tech 5. В Wolfenstein II: The New Colossus + Youngblood + Cyberpilot используется id Tech 6. В Doom 2016 - id Tech 6, в Doom Eternal - id Tech 7.

Цитата: Force от 29 августа 2022 18:14:13Имел в виду как раз Doom 2016, потому что там как раз делается так, как написано в этой цитате. Разве только по поводу сжатия я не уверен. Ибо получится тогда двойное пережатие текстур, что несомненно пагубно скажется на качестве.
В Doom 2016 мегатекстура почти незаметна, а вот в Rage 1 и других играх на id Tech 5 - то самое двойное пережатие текстур. Кроме шуток: изначально текстурный атлас id Tech 5 сжат каким-то кодеком наподобие JPEG2000, а потом, по мере нужды, он на ходу декодируется в RGBA и тут же кодируется в DXT1/3/5 (они же BC1/2/3).

Цитата: Force от 29 августа 2022 18:14:13Ну и плюс, сжимать текстурный буфер в риалтайме - это как-то дико, никакого бюджета кадра не хватит.
Кодирование RGBA->DXT, на самом деле, осуществляется довольно быстро: один из программистов id забабахал очень быстрый кодировщик, который, кроме CPU, поддерживает ещё и CUDA.

Цитата: Force от 29 августа 2022 18:14:13Но вот по поводу Rage 2 - я бы не был так в этом уверен ;).
Не любишь ты Rage 2, ох не любишь ;D.

Цитата: Force от 29 августа 2022 18:14:13Зато сегмент уровня, в котором находится игрок, вполне может содержать более сотни разных текстур со всеми вытекающими.
С этим не спорю. Но ведь в движок уже должен быть встроен толковый менеджер текстур, который сам должен быстро определять более и менее важные грани (и, соответственно, их добро), вытесняя из видеопамяти последние и освобождая её для первых. Человеческое внимание практически всегда концентрируется на том, что занимает больше места в поле зрения - этим и нужно пользоваться. Понятное дело, что внимательный наблюдатель заметит понижение качества текстур у отдалённых объектов, но тут уж ничего не поделаешь: хочешь максимум качества - покупай себе видюху с приличным объёмом видеопамяти, ибо из двух зол...

MoroseTroll

Deathloop с 20-го сентября попадает в подписки PS Plus Extra и Premium и будет там единственной игрой только для PS5, потому что остальные - для PS4. Это "успех"!

SteamSpy расплывчато утверждает, что тираж игры в Steam находится в районе от 0,5 до 1 млн. копий. Прошёл почти год (без двух недель), так что это - весьма негусто. На VGChartz до сих пор нет сведений о продажах на PS5 - похоже, там тоже нечем хвастаться. Акелла Аркейн промахнулась :(...

Force

Ну, они зато честно попытались. Скрестить популярный жанр (шутер от первого лица) с непопулярным (иммерсим) и привнесли в него совершенно экспериментальные фичи - роуглайт с сетевым режимом внедрения другого игрока. Такого ещё никто не делал. Ящитаю что выделывать такие выкрутасы на уровне ААА это - мегапохвально. :applause: