Comments 40
А где ответ на вопрос "Почему графику в видеоиграх по-прежнему так сложно создавать?" ?
Почти все в статье либо из прошлого десятилетия, либо характеризуется фразой "маркетологи".
Что ж, раз автор не смог, попробую я.
Рукотворная сложность. Графические библиотеки это в основном адъ. Хотя бы потому что оперируют графическими апи, которые тоже адъ. Графические апи адъ потому что у нас адские драйвера. Драйвера адские потому что из gpu сделали комбайн, поддерживающий 100500 функций, потому что разработчикам видеокарт плевать на драйвера, потому что в сами драйвера добавляют еще 100500 функций не нужных для конкретного устройства, в том числе легаси. Приправим все это легаси средствами разработки (C/С++ все же решил остаться легаси, альтернативы нет, rust это не альтернатива).
Закрытость. Исторически игры противятся опенсурсу. Частично из-за винды, которая подмяла под себя рынок грязными способами, частично из-за самой стратегии единичного продукта (сделал, продал). В такой среде никто не стремится обмениваться знаниями (конкурентным преимуществом, ха), стандартизировать решения (графические апи это скорее средство давления чем реальная стандартизация) или делать бескомпромиссные решения. Таким образом бразды правления переходят к разработчикам ОС (как мы знаем это винда) и к разработчикам видеокарт (как мы знаем это 2 монополиста). А им сложность и закрытость только на руку - это не пустит на рынок конкурентов. Каковы начинающего игрока стандартизироваться в майкрософт (если он конечно не интел)? Скорее всего он даже и не подумает и уйдет делать видеокарты для мобилок.
Рынок. Сделал, разрекламировал, продал. Чем быстрее, тем больше. Не нужно ничего оттачивать. Лучше вообще не думать, тебе не за это платят, а клепать ширпотреб. Фанаты скушают и сами пофиксят загрузку json'ов, отреверсив закрытый код на закрытой системе с закрытыми драйверами. А может быть и ничего не заметят. Ну и конечно нужно сделать быстрее и сильнее чем у конкурентов, даже если в итоге получится демка, а не игра.
Итого: монополии, криворукость, деньги, легаси. В итоге игры это и без того не самая тривиальная вещь (на самом деле линал и большинство технологий давным давно разобрали по косточкам во многих статьях и это не должно быть проблемой) превращается в настоящее превозмогание.
Есть отличные открытые игровые движки вроде Unreal Engine и прочее middleware, что прекрасно стандартизируют решения, да и текучка персонала среди игровых компаний вполне себе приличная - так что секреты не остаются секретами после выпуска проектов.
Проблема же с графикой скорее в том, что всем хочется высококачественной, фотореалистичной картинки - а это означает, что требуются мегатонны высококачественных текстур, моделей и анимаций. Пройдитесь по своей квартире, оцените число объектов, которые вам нужны для её моделирования - и сразу станет ясно, что сложность тут в том, чтобы уменьшить их количество до приемлемого - чтоб можно было отрендерить на средней видеокарте, и чтоб это не занимало месяц.
Рискну предположить, что звёздное комбо: сжатые сроки и кранчи + ставки ниже медианных + высокая вовлечённость на входе. В итоге человечки либо крутятся в геймедеве до конца, либо через пару марафонов перед релизом что-то для себя понимают. А на входе уже новая очередь вовлечённых.
Загрузка распределена неравномерно - в препродакшене достаточно небольшого костяка в десяток-другой человек, а в полном продакшене и несколько тысяч мало, плюс львиная доля расходов - как раз на з/п.
Соотстветственно, если вы не какой-нибудь Activision с десятками проектов одновременно, студии не могут содержать постоянный штат, а массово набирают и увольняют сотрудников на разных этапах разработки, или прибегают к услугам аутсорсеров.
Тому что кое-кому денег на графику жалко. Выгоднее нанять 1000 бангладешских моделлеров, которые будут клепать скинчики.
Вот как раз за графику в "Witcher 2" хочется плюнуть в глаза.
Посмотреть на торжество bloom'a
P.S. А заголовке скрин вообще из третьей части.
Ну, с последним, судя по всему так мало что изменилось - теперь вместо блума идёт копипаст какой-нибудь популярной кривой для тонмапа.
В основном проблема в том, что графика сейчас это набор хаков и хитрых решений. Критическая нехватка мощности видеокарт/памяти/ширины шины и прочего приводит к совершенно невероятным ухищрениям. Когда-то много лет назад, с появлением glMultiDrawElements, мы представляли себе будущее игр так - вся сцена загружается в видеопамять, отдельные Compute шейдеры выполняют отсечение и решают, какие LODы и инстансы рисовать, а трафик между CPU и GPU будет занят лишь подгрузкой параметров камеры, анимаций и прочего. Прошло 10 лет, от святого Грааля мы отодвинулись еще дальше, шина занята на 100%, отсечение перекидывается туда-обратно между CPU и GPU, а целиком на видеокарте считаются и рисуются в лучшем случае только системы частиц. И все это держится за счет хаков, ручных оптимизаций шейдеров и контента, изменения гейм и левел дизайна из-за технологических особенностей.
Чуть-чуть в нужном направлении продвинулся разве что UE5, где как бы пытаются отодвинуть художников и программистов от ручного создания LODов, оптимизации геометрии, теней и прочего. Но все-равно я уверен, что разработчики каждой игры выработают свой набор хаков для еще более сочной картинки.
Прошло 10 лет, от святого Грааля мы отодвинулись еще дальше, шина занята на 100%, отсечение перекидывается туда-обратно между CPU и GPU, а целиком на видеокарте считаются и рисуются в лучшем случае только системы частиц.
Это проблема ограничений вычислительных ресурсов? То есть можно ли реализовать игровой движок, который бы создавал подобие синглтона сцены, например, в памяти видеокарты (какой-нибудь 3060 с избыточным объемом), и все вычисления до растеризации выполнялись с загруженными данными? Может быть, есть какие-нибудь публикации на эту тему?
Это проблема разработчиков, пытающихся выжать еще больше, чем карта позволяет чтобы и на 980TI было красиво и работало, а если на новых, так с 8K и 120 FPS. Но такой подход уже только через хаки, ручное управление ресурсами и пр.
Реализовать можно, конечно. Вот как это делалось на OpenGL: https://www.gamasutra.com/blogs/SergeVanKeulen/20180801/323415/Efficient_instancing_in_a_streaming_scenario.php
Сейчас этот разработчик где-то в команде PUBG, а наработки свои и уникальный демо-проект Military Oprations совсем забросил. Я было хотел повторить его путь для своего проекта, но вовремя одумался, потому как времени скушает много, а сделать из этого полноценный движок с инструментарием для каждого - непосильная работа.
Критическая нехватка мощности видеокарт/памяти/ширины шины и прочего приводит к совершенно невероятным ухищрениям.Это было и 35 лет назад. Если это так сейчас, то будет всегда. По аналогии с проблемой «броня — снаряд», «вес сайта — скорость интернета», «размер файла — скорость чтения с
Но смотрите, ведь появились в итоге сайты уже не на 100% использующие все фичи и не загружающие процессор, не тянущие сотни мегабайт библиотек, чтобы затормозил и гигабитный канал. Таки была грань, после которой оно "стало работать" без колдовства и долгих загрузок? Может и с играми так произойдет - они будут выглядеть достойно и работать быстро и без жутких ухищрений? Например, 2д игры уже ж не оптимизируют так страшно, как приходилось когда-то, с ручным свопом страниц видеопамяти и собственными Blit методами на асме.
Просто техника - не единственный способ обойти конкурентов. После того, как мощность перестает быть сдерживающим фактором, акцент может уходить на большую проработку стиля, левел-дизайна и пр.
Потому что сейчас, чтобы сделать сложный левел-дизайн, зачастую приходится учитывать множество технических ограничений и, в том числе, чтобы сделать "110%", утыкаться в пределы технических возможностей оборудования. Если будет большой запас, утыкаться в него не будут - это не самоцель.
Например, тот же Hades имеет достаточно скромные требования - исходя из концепции игры "110%" не требовало вещей, которые утыкались бы в железо. Какой-нибудь Ведьмак или Cyberpunk с их концепцией с большим открытым миром и фотореалистичной графикой - другой вопрос.
Да, есть один максимально простой для разработчика и максимально естественный способ рендеринга... Если память не изменяет, то там что-то про трассировку и лучи.
Так что, для светлого графического будущего осталось всего ничего: выпустить действительно производительный аппаратный ускорятор рейтрейсинга и сделать его популярным (скажем, чтобы оно точно было хотя бы у 95% целевой аудитории). И чтобы единственная градация железа была лишь в том, сколько десятков километров дальности видимости, или сотен тысяч объектов частиц надо нарисовать.
За лучами будущее, и так считают многие в индустрии.
Вы так говорите, как будто RT это волшебная кнопка, а не набор шэйдеров, к которым внезапно нужно ещё всё остальное из чего состоит графика, а не только аппаратный ускоритель.
Проблема текущей реализации RT - в том, что она очень и очень медленно считается. Когда вырастет производительность аппаратных ускорителей не в десятки раз, а в сотни-тысячи десятков раз и мы сможем полноценно считать кадр одними лишь лучами за вменяемое время (все современные инженерные и кинематографические визуализаторы из разных CAD'ов и 3dsmax'ов так считают, например), то вот тогда мы сможем полностью отказаться от растеризации.
Все же, реальный мир "рендерится" исключительно лучами (ну, насколько я могу судить из той программы физики, что мне преподавали), так что для получения максимальной "реалистичности" картинки надо просто повторить то, что уже было создано далеко до первого изобретенного способа растеризации.
Лично мое мнение заключается в том, что для получения хорошей картинки с современным развитием технологий (ну, может лет через 2-5 развития видеоадаптеров) нам помогут нейросети (они же уже аппаратно плохую картинку с фото-матрицы телефона поднимают до уровня средне-бюджетных зеркалок).
Насколько я помню RTX/DXR это просто ускоряющая аппаратная структура, она не сделает сама правильную картинку, там отдельная морока с шумодавом (для той же кваки2ртх там их аж два), каустикой, дисперсией и т. п. Просто там только базовое.
Я не говорю именно про текущую реализацию RTX/DXR. Я говорю про сам способ рендеринга трассировкой лучей. А шумодавы нужны для подавления шума, который появляется из-за недостаточного количества лучей.
Основной же мой ответ можно увидеть в соседней ветке.
Ну на самом деле рейтрейсинг это совсем не панацея, там также очень много проблем, даже больше чем в растеризации. Шум в рейтрейсинге будет всегда, семпленг лайтов, даёт очень много шума, особенно если например закрытое помещение с окнами, а свет только уличный, каустика, обычные лайты, подповерхностное рассеивание, indirect specular (не смог адекватно перевести), волсы\шерсть это вообще ад. Само собой это если мы говорим о рендеринге сродни тому что используется для фильмов\мультиков. Даже с двухчасовым рендерингом с АА64 и с большой глубиной рекурсии, шум есть. Сейчас используется куча техник, монтекарло рендер с мис, nee и двунаправленные трейсеры и куча остальные, и всё это чтобы снизить количество шума, но шум всё равно остаётся. Так что рейтрейсинг вообще не панацея, даже если кадр несколько часов рендерить.
По "туману глубины" есть ещё одна (неустранимая?) особенность: дистанция до тумана обычно берется одинаковая... но только по трём осям. В результате в углу поля зрения обзор дальше, чем в центре. Как я понимаю, шар просчитывать сложнее, чем куб, никто обычно не заморачивается.
Так ли графика важна? Я вот запускаю старые игры и особых проблем с графикой не замечаю. Главная проблема - плохая адаптация под современные экраны(не поддерживает соотношение сторон или разрешение). Вот когда выпускают ремастер, тогда я замечаю очень много проблем в игре: меняется угол обзора(RE4), меняется динамика(Bioshock) и геймплэй(вот я знатно офигел, когда в Metro 2033 бэкпортировали смену дня и ночи, и вместо того чтобы воевать с отрядом фашистов ночью - пришлось это делать при солнечном свете). А сколько замечаний у фанатов было после ремастера Crysis при том, что оригинальная игра вполне себе нормально смотрится и на современном ПК.
Вы имеете в виду, так-ли важна фотореалистичная графика? Это каждый художник решает сам. Одному нужен ультра-реализм, другой наоборот делает нарочито мультяшную картинку. Лично я за разнообразие. Мне заходит и реализм с трассировкой лучей в стерильных интерьерах космической станции в Deliver us the moon, и Disco elysium с её пост-импрессионизмом. )
steamuserimages-a.akamaihd.net/ugc/98349535609814750/E89A3D6BE360384F418A92757D264D6076C37352/?imw=5000&imh=5000&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=false
Или вот Act of War. 2005 А ведь был неплохой графоний в свое время. А теперь ужас
steamuserimages-a.akamaihd.net/ugc/264976469343083646/47CF19605146E13703928C73FAE1D335DAE9F959/?imw=5000&imh=5000&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=false
А Вы старыми называете игры после 2010-го?
В 2008 кажется году я купил первые две части max pain(2001 и 2003 год). И остался вполне доволен. Вторая часть Silent Hill мне понравилась больше чем последующие. Недавно играл в Bioshock (все части), Crysis, Dishonored, Half-Life 2 (без модов), S.T.A.L.K.E.R, Dead Space, Mass Effect, RE4/5 Obscure1/2... Все до 2010 года.
Just Cause и прочие GTA ... не очень люблю открытый мир, от него сюжет портится.
биошок, кризис (ага, кризис был недостижимым как по графике, так и по ресурсо-потребление в свои годы). Масс-эффект первый уже старенький. Играть конечно можно, но уже есть ремастер
Не очень любите открытый мир, но есть Кризис и Сталкер. Выборочно не любите :)
Сан Адрес сейчас тоже смотрится… Только для мемов. вроде будет ремастер осенью
Обе скорее большой коридор. И с определенного момента тебя ведут по сюжету, не давая отклоняться. Dishonored туда же. И первый Rage. Открытый мир это скорее Skyrim, Fallout 3, GTA, Far cry 2+, Assasins Creed... Horizon zero dawn. Не то чтобы я их не любил, но мне не нравится когда разработчики искусственно затягивают игру посылая тебя в разные концы карты за еще одним однотипным заданием. Если уж отправляют, то пусть это будет хотя бы протяженная цепочка заданий объединенных своей мини-историей.
Имхо, то, что делали во второй половине нулевых — самое вырвиглазное, а всё что выходило до и после по-прежнему хорошо смотрится. Но это возможно в моей выборке так совпало, и на самом деле такой зависимости нет.
мне кажется «до» вообще никак не могла получится хорошая графика, просто потому, что компы не тянули
собственно нормальная графика появилась относительно недавно. И уже некритично сколько там полигонов и насколько достоверно отображается закат.
Для примера, Saints Row 3. Оригинал ( 2011) и сейчас нормально выглядит. Недавно римейк выпустили
"знаковые поля расстояний", но контент, продакшен...
В первом случае надо хотя бы в скобках оставлять оригинальное (signed distance field), потому что перевод не устоялся.
Хотя за перевод статьи конечно спасибо.
Последнее время как раз заинтересовался данной темой. И даже начал исследовать все эти ухищрения на шейдерах, которые симулируют красивые эффекты (все те же лучики света, aka volumetric light, красивые и быстрые динамические тени, отражения, свечение и тд).
Напоролся на факт что в лучшем случае по конкретной технике будет достаточно быстрый, сложный, местами обрезанный доклад на каком-нибудь GDC и бложик энтузиаста. И удачи с реализацией - без опыта и смекалки получается коряво, медленно и некрасиво.
До рейтрейсинга еще не дошел, но там, насколько я понимаю, основная проблема - ультра-высокополигональные модели - чем больше полигонов - тем точнее и реалистичнее будет выглядеть сцена. Ну разве что задача в мультяшной картинке, тогда скорей всего не столь важно количество полигонов.
Получается, чтобы создать красивую картинку нужно иметь очень качественные модели и/или отточенные спецэффекты. Но при этом, если хочется чтобы быстро работало (не одноразовый рендер) - приходится прибегать к инженерным решениям, которые плохо (если вообще) описаны.
Почему графику в видеоиграх по-прежнему так сложно создавать?