LINUX.ORG.RU
ФорумTalks

О графике в игорях

 ,


1

2

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

Этот теплый пятничный вечер с бокалом пива, навел меня на следующие мысли.

Если взять какую-нибудь трехмерную игрушку, то что в ней вызывает больше всего тормозов? Явно не кусочек вашего видимого оружия, занимающий 1% экрана. Вряд ли пяток инопланетян с драконьим луком гаусса. И уж точно не сундучок с эликсиром жизни где-то там, вдали.

Тормоза вызывает отрисовка окружающего мира. Убираешь отражения - тормозит меньше. Убираешь тени - тормозит еще меньше. Убираешь детализа... о, вот в этом направлении и повернула моя мысля.

С точки зрения отрисовки в вычислительной системе, дерево ничем не отличается от скажем так инопланетянина.

Но если инопланетянину нужно нарисовать красивый экзоскелет, вертикальные глаза и хвост, то деревья мы рисовали еще в 90хх пятком функций на пасцале. Да че далеко ходить, трехмерная демка «Марс» под ДОС занимала десяток килобайт, при этом генерила поверхность и небо, позволяя перемещаться в трех осях. На 386-м. Без текстур. Без шейдеров. https://www.youtube.com/watch?v=_zSjpIyMt0k - вот.

Собственно основная мысль в том, насколько уменьшатся тормоза на слабых системах (и соответственно потенциально улучшится качество на производительных), если часть объектов виртуального мира рисовать вне полигональных моделей, а функциями самого ЯП?

Ну вот мне кажется, что отрисовка какого-нибудь прямоугольника с кругом внутри, в парадигме полигонов будет требовать больше вычислительных ресурсов, нежели условный draw.rectangle(100,100,200,200);draw.circle(150,150,20);

Жаль что в сутках только 24 часа, с радостью бы поэкспериментировал.

Ну а вы что думаете, чушь награфоманил?)

★★★★★

Во многих играх, изменение уровня графики, влияет только на качество картинки, а не на фпс.

Рисовать кружочек ты можешь и без полигонов, разве что для его поверхности где ты будешь его отображать. А отсекать части как? Ты рейтрейсинг предлагаешь?

MOPKOBKA ★★★★
()
Ответ на: комментарий от MOPKOBKA

Да. Я думаю этой самой функции которая рисует объект, можно передать текущее значение хз как там оно реализовано, ну например текущее положение камеры, или угла обзора, а там уже функция может сама высчитывать какую часть отображать, и каким образом.

Я уже это все позабывал, но простенькие 3д-бродилки а-ля zero tolerance мы тоже делали в 90хх, высчитывая перспективу комбинацией из sin\cos.

windows10 ★★★★★
() автор топика

Собственно основная мысль в том, насколько уменьшатся тормоза на слабых системах

Почитай как Кармак дум(первый) писал. Это книжка Masters of Doom. Там разобран пример как сделан 3д-рендер Дума. Думаю на практическую реализацию, того чтобы все быстро работало будет полезней посмотреть, чем просто фантазировать. И ещё почитать Game Engine Black Book: DOOM

vbcnthfkmnth123 ★★★★★
()
Последнее исправление: vbcnthfkmnth123 (всего исправлений: 1)

Ты придумал процедурные текстуры. Как без этого жили…

DumLemming ★★★
()

Ты хочешь писать из CPU в GPU объект?
Или всё же использовать процедурную отрисовку в самом gpu?
На gpu круг можно нарисовать в пиксельном шейдере, но вычислительная нагрузка будет больше чем если его рисовать полигонами.
А cpu и так есть чем заняться помимо отрисовки кругов, так что слабым системам это нифига не поможет, а на сильных упрётся в синхронизацию.

mittorn ★★★★★
()

Идея не взлетит.

Производство игры это не только код. Очень много работы именно по дизайну уровней, их отрисовке, настройке и скриптованию. Твой подход упакует это все в код и добавит требование Уметь в графику программистам. Это увеличит стоимость графики и увеличит нехватку квалифицированных кадров (те раздует бюджет игры).

Разработчикам проще переложить затраты на рендеринг мощность на конечного пользователя, чем сделать условные +$10 к ценнику. Потому что тогда они проиграют соседу, который не сделал наценку.

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

Norgat ★★★★★
()
Ответ на: комментарий от MOPKOBKA

Во многих играх, изменение уровня графики, влияет только на качество картинки, а не на фпс.

Похоже, что в данном случае упор идёт в процессор, а не в видеокарту.

u5er ★★
()

Во-первых, процедурная генерация графики будет тормозить больше, чем отрисовка готовой модели или текстуры. Просто потому что работа процедуры займёт какое-то количество времени и памяти, а готовые ассеты уже готовы.

Во-вторых, демки — это буквально разработка на пределе мощностей железа и лимитируется, обычно, только размером исполняемого файла. То есть процедурно генерировать там нужно абсолютно всё. Отсюда бешеное потребление ресурсов в рантайме и постоянная подгонка картинки под минималистичные алгоритмы. То есть, если в демке «Марс» мы имеем соответствующий рельеф ландшафта, то это потому, что его таким выдал генератор случайных чисел. Если в демке kkrieger мы видим такие текстуры, монстров и локации, то это потому, что именно такими их удалось изобразить разработчикам максимально короткими алгоритмами, которые они смогли придумать.

Что же касается деревьев, то их процедурно генерируют в коммерческих играх уже довольно давно: деревьев в локации нужно много, они должны быть разными, их нужно уметь эффективно динамически детализировать. Собственно, генерация ветвей и листьев отлично алгоритмизируется, а уникальность обеспечивает ГСЧ. Но на выходе алгоритма всё равно будут полигоны, потому что именно их умеет рисовать видеокарта.

static_lab ★★★★★
()
Ответ на: комментарий от utanho

Я лучше поверю википедии, ну и своим глазам, советую загуглить как он выглядит. Может ты имеешь виду что он не использовал OpenGL, но тогда твой оригинальный комментарий плохо написан.

https://img-eshop.cdn.nintendo.net/i/6f83a4e7050ca8950794e541b37704b2baa5fac2...

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

Зачем мне скрины, я помню как он выглядит, я даже помню (не знаю зачем) что такое IDDQD и IDKFA

Там было псевдо3Д, чистый маркетинг. Картинка 2Д, с имитацией. Как крабовые палочки.

Реальное 3д появилось, емнип, в кваке.

utanho ★★★★★
()
Ответ на: комментарий от utanho

Картинка 2Д

У тебя даже в GTA V будет картинка 2D на экране, такова природа монитора, и больше никакова.

Там было псевдо3Д

Это про формат карты, и спрайтовых врагов, как видно по картинке, стены имеют X, Y, Z и отображаются так же хорошо как и в современных 3Д играх. Поэтому глупо говорить что «даже близко не было никакого 3Д».

MOPKOBKA ★★★★
()
Ответ на: комментарий от shell-script

Для него там тоже нету 3D, формат карты не позволял разместить пересекающиеся по X,Y сектора.

MOPKOBKA ★★★★
()
Ответ на: комментарий от shell-script

Я вот не уверен насчет Дьюка, не помню. Деревья и монстры были спрайтовые, но уже можно было смотреть вверх и стрелять.

utanho ★★★★★
()
Ответ на: комментарий от MOPKOBKA

Если так рассуждать, то в 3Д я еще на спектруме играл. А по факту, вверх не посмотришь,прыгнуть не получится.

стены имеют X, Y, Z и отображаются так же хорошо как и в современных 3Д играх

Даже близко не так.

utanho ★★★★★
()
Ответ на: комментарий от MOPKOBKA

Спорить не буду, плохо помню. Треть века прошло.

utanho ★★★★★
()

То есть, ты не только в программировании нихрена не понимаешь, но ещё и в играх. Потрясающе!

hateyoufeel ★★★★★
()

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

Я вообще не могу согласиться. Пока АААА тянутся за графеном, всё больше разработчиков ищет артстайл.

После определённой точки улучшения в graphic fidelity становятся просто нерентабельными для консистентного применения.

Если взять какую-нибудь трехмерную игрушку, то что в ней вызывает больше всего тормозов? Явно не кусочек вашего видимого оружия, занимающий 1% экрана. Вряд ли пяток инопланетян с драконьим луком гаусса. И уж точно не сундучок с эликсиром жизни где-то там, вдали.

Тормоза вызывает отрисовка окружающего мира. Убираешь отражения - тормозит меньше. Убираешь тени - тормозит еще меньше. Убираешь детализа… о, вот в этом направлении и повернула моя мысля.

Вообще я бы сказал, что тормозов в трёхмерной игрушке привнесёт отвратительный код высокой степени абстракции под капотом не меньше, чем завышенные настройки в графике.

Bfgeshka ★★★★★
()
Ответ на: комментарий от shell-script

Или в Descent?

В Descent в отличие от всех выпущенных к тому времени хитов id Software и впервые в истории компьютерных игр были применены настоящие полигональные 3D-объекты для визуализации части внутреннего мира — статической геометрии уровней и противников. В целом, взвешенным сочетанием спрайтов и полигональных объектов разработчикам удалось добиться хорошего соотношения производительности и качества графики. Дальнейшее развитие игр id Software в направлении отказа от спрайтов и перехода на полное представление внутреннего мира полигональным 3D пошло именно по стопам Descent.

dataman ★★★★★
()

Во-первых, примитивы и аффинные трансформации на видимокарте быстрее, во-вторых, кому есть дело до людей со слабыми компами. Даже если ты сможешь выдавать графоний на вдвое более дохлом железе, чем сейчас нужно для йоба-игр, то как ты это превратишь в деньги?

ya-betmen ★★★★★
()

Видеокарта намного лучше управляется со всеми этими задачами + любая операция передачи между ПК и видеокартой довольно дорогая. Поэтому софтварный круг будет в 1000 раз медленней.

Gary ★★★★★
()
Ответ на: комментарий от utanho

Если так рассуждать, то в 3Д я еще на спектруме играл

Я просто прочитал определение «3д графика» на википедии. Сам ничего не выдумывал. Если это под ZX Spectrum была Elite, то 3D графика там была.

MOPKOBKA ★★★★
()

Не получится на кривой козе объехать это, хочешь красивый графон - обсчитывай по полной программе и жри кучу ресурсов. Так-то полигональная графика сама по себе это уже нехилая такая оптимизация и читерство ради скорости, ведь можно было ради чуть бОльшей детализации вокселями упороться например. Во всяких впечатляющих интрах весь код писался практически на чистом асме и оптимизировался побайтно-потактно под конкретную сцену. Для игрового движка такой подход применить не удастся.

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

yu-boot ★★★★★
()
Последнее исправление: yu-boot (всего исправлений: 3)
Ответ на: комментарий от yu-boot

ведь можно было ради чуть бОльшей детализации вокселями упороться например.

В 90-х и даже в нулевых, кстати и упарывались, были игры на воксельных движках. Но полигоны всех забороли.

Сейчас, чтобы с чем-то таким радикально новым экспериментировать производителю надо не только видеокарту выпустить, но еще и конкурентный движок для разработки игр выпустить и проспонсировать разработку на нем минимум пары игр AAA-класса. Чтобы люди ради них покупали видюху. При этом эти игры должны будут уметь и на старых картах работать, пусть и с худшим качеством. По-хорошему, еще и дать доступ заклятым конкурентам к технологии.

Тут RTX-то со скрипом внедряется.

Но самое главное, что в современных играх упор в графоний, а вот с физикой намного хуже, даже может хуже, чем лет 20 назад. Очень редко, чтобы в игре можно было произвольно взаимодействовать с объектами. Собственно, насчет произвольно даже не вспомню, все взаимодействия, если есть, крайне ограниченны. Чуть ли не максимум возможного - это какую-нибудь хрень вроде банки или бутылки пнуть ногой, чтобы она полетела и может забренчала на лестнице. Или окна бить и то не все и не везде.

praseodim ★★★★★
()

Нормально оптимизируют только Diablo, а остальные йух клали на людёф. 4 часть подтвердила это. Всё можно только не хотят.

xwicked ★★☆
()

протестую против текущих системных требований игорей
все игры должны работать на встройке Интел и тем более АМД
отдельные видяхи только для нейронок и других профессиональных задач

Ros ★★★★
()
Ответ на: комментарий от utanho

s3 Trio поддерживала Direct3d, и некоторые игры даже пытались что-то там рендерить. Иногда даже было с трудом, но играбельно. Например, Grim Fandango. Но не DOOM. У дума был софтверный 3D рендеринг. И то, что он софтверный, не мешает называть его 3D.

lenin386 ★★★★
()
Ответ на: комментарий от lenin386

Играл именно в дум и именно на S3 с 1мб видеопамяти.

utanho ★★★★★
()
Ответ на: комментарий от utanho

3д-рендеринг != перемещение в 3д

в думе был «полноценный» 3д-рендеринг (с texture mapped окружением, притом даже абсолютно корректным в плане перспективы, а не ссаный ray casting как в вольфе, где и пол и потолок были просто монотонные, а стены всегда были повернуты к тебе «перпендикулярно», аж будто дощечками из забора сделаны)

самого перемещания в полном 3д не было, вот там была имитация.

n_play
()

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

Satou ★★★★
()

демка «Марс» под ДОС занимала десяток килобайт, при этом генерила поверхность и небо, позволяя перемещаться в трех осях

В двух. Прыгать там нельзя. Демка генерировала шумом Перлина облака для неба и карту высот. Задолго до неё была полноценная игра Comanche: Maximum Overkill, использовавшая такую же технологию.

Ну вот мне кажется, что отрисовка какого-нибудь прямоугольника с кругом внутри, в парадигме полигонов будет требовать больше вычислительных ресурсов, нежели условный draw.rectangle(100,100,200,200);draw.circle(150,150,20);

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

Тормоза современной отрисовки порождаются уже давно не растеризацией примитивной геометрии, а шейдерными вычислениями, расчётом того самого освещения, отражений и т.д.

если часть объектов виртуального мира рисовать вне полигональных моделей, а функциями самого ЯП?

Да оно так и делается с самого начала 3D. Как финальный этап упрощения, модель подменяется на плоскую картинку.

atrus ★★★★★
()
Ответ на: комментарий от shell-script

В Duke Nukem вроде бы раньше.

Нет. Дюк просто очень хорошо притворялся при помощи набора подпорок и костылей. :)

atrus ★★★★★
()

draw.circle(150,150,20);

нам же для этого придется вычислять квадратный корень из суммы квадратов для каждого пикселя составляющего окружность, правильно? Я думаю, даже сама по себе отрисовка будет алгоритмически сложнее, но настоящие проблемы начнутся когда мы афинные преобразования начнем применять к этому кругу

FishHook
()

Как же хорошо, что я ни в одну из упомянутых в топике игр никогда не играл

vaddd ★☆
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)