Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Игры (http://forum.oszone.net/forumdisplay.php?f=27)
-   -   как работает винт и оператива в играх? (http://forum.oszone.net/showthread.php?t=274938)

bogmut 30-12-2013 12:36 2280660

как работает винт и оператива в играх?
 
У меня общий вопрос о работе оперативы и жёсткого диска в играх.Вот допустим миссия вначале загрузилась с жёсткого в оперативу.Она целиком загружается или в процессе игры все равно идут подгрузки с винчестера? Почему все сразу не грузится в оперативу чтобы не было необходимости обращаться к медленному винту в ходе игры? Или это игры так сделаны? Короче интересует-подгрузки текстур все равно с винта идут? А почему они сразу не записываются в быструю память? Тем более оперативы навалом...

AMDBulldozer 30-12-2013 16:03 2280771

Зависит от игры. В играх, разбитых на отдельные небольшие секторы, их загрузка может происходить целиком.
В играх, реализующих подобие "открытого мира", всегда изначально загружаются только близлежащие области, а в процесссе игры необходимые геометрия и текстуры подгружаются с диска. Почему не загружается всё сразу? По тысяче причин. Причина первая состоит в том, что никому это не нужно. Загрузка в любом случае происходит в фоновом режиме, так что никакого улучшения процесса игры от предзагрузки Вы не почувствуете. Для проверки я пробовал копировать игры целиком на RAMдиск и сравнивал впечатления - никакой разницы. К тому же, при наличии свободной памяти всегдпа можно считать файлы игры в дисковый кэш. Результат будет тот же, что и от записи на RAMдиск (даже, по моим измерениям, доступ будет осуществляться на несколько процентов быстрее).
А теперь подумайте вот о чём: сколько времени будет стартовать игра, заранее считывающая в ОЗУ все 10-15ГБ своих файлов?
Другая причина состоит в том, что большой объем ОЗУ на сегодняшний день скорее исключение, чем правило. Поэтому не слишком разумно для игры пытаться отожрать себе в несколько раз больше, чем ей реально необходимо. Подгрузку всё равно придется реализовывать для игроков со слабыми компьютерами, так какой смысл писать дополнительный код для тех, у кого ОЗУ много?
Третья причина состоит в том, что игры часто выпускаются в виде 32-хбитных исполняемых файлов. Соответственно, загрузить данные в память одного процесса в люблм случае не получится. Создавать дополнительные нити просто для хранения данных? А зачем, когда их можно прочитать непосредственно перед тем, как они понадобятся?
Причина четвертая: возможность доработки и расширения программ (например, путем выпуска дополнений). Если делать так, как Вы предлагаете, системные требования по объему памяти будут меняться после каждого нового DLC. И пользователь будет со счетами в руках прикидывать, на сколько DLC ему хватит памяти и какие лучше выбрать.
И так далее, до бесконечности...

LehaMechanic 06-01-2014 10:17 2283713

Цитата:

Цитата AMDBulldozer
Причина первая состоит в том, что никому это не нужно. Загрузка в любом случае происходит в фоновом режиме, так что никакого улучшения процесса игры от предзагрузки Вы не почувствуете »

В целом всё правильно, но вот здесь промашка вышла. Не всегда подзагрузка идёт в фоновом режиме. Зачастую это происходит на глазах у пользователя и прерывает игровой процесс на ощутимые десятки секунд, а то и минуты. Например TES IV Oblivion, где реализован псевдооткрытый мир, т.е. можно идти куда хочешь, и вся дикая местность, леса, поля и т.д. открыты сразу и целиком, но каждая пещера, каждый город, каждый домик - это изолированные незагруженные локации, которые необходимо "загружать", вручную активировав триггер. Если пытаться войти или выйти из города не через триггер на городских воротах, а читами через стену, то там будет пустота и она никогда не заполнится путем фоновой подзагрузки. Бывает, это раздражает, особенно если в компьютере 32 ГБ памяти, а кто-то видите ли поленился присоединить пару строчек кода, чтобы владелец этой памяти мог чувствовать себя комфортно.

Nordek 06-01-2014 13:47 2283773

Цитата:

Цитата bogmut
оперативы и жёсткого диска в играх. »

Ещё забываешь про файл подкачки и хочешь того или нет но он тоже так же используется в играх. Соответственно файл подкачки: он же виртуальная память; он же файл pagefile.sys расположенный на системном диске - таким образом обращение к жёсткому диску всё равно происходит.

Цитата:

Цитата Leha Ares
то там будет пустота и она никогда не заполнится путем фоновой подзагрузки. Бывает, это раздражает, особенно если в компьютере 32 ГБ памяти, а кто-то видите ли поленился присоединить пару строчек кода, чтобы владелец этой памяти мог чувствовать себя комфортно. »

На то и рассчитаны минимальные системные требования.

AMDBulldozer 06-01-2014 15:11 2283809

Цитата:

Цитата Leha Ares
Не всегда подзагрузка идёт в фоновом режиме. Зачастую это происходит на глазах у пользователя и прерывает игровой процесс на ощутимые десятки секунд, а то и минуты. Например TES IV Oblivion, где реализован псевдооткрытый мир »

Простите, не соглашусь. Я сразу упомянул о двух возможностях: загрузке небольшого сектора целиком при перемещении между небольшими секторами и постепенной подгрузке окружения при перемещении по открытому миру. Упомянул, именно потому, что хорошо помнил как про Oblivion, так и про World of Warcraft и другие подобные игры, когда писал своё сообщение. Эти игры представляют собой не полностью открытый мир, а комбинацию больших открытых миров с изолированными локациями. Никакие процессы (кроме самого игрока) не могут пересекать границы этих локаций. Поэтому, когда Вы заходите, к примеру в дом в Oblivion'е, подгрузка данных осуществляется при переходе. Если переходите через портал куда-нибудь в "Парадиз" Каморана или на Дрожащие острова, происходит то же самое. Если помните, в Oblivion Construction Set такие объекты как двери и порталы относятся к классу телепортеров.
Они перемещают игрока в некоторое произвольное место, окружение которого, понятно, отсутствует в памяти компьютера. Поэтому его приходится загружать в процессе перемещения. Это абсолютно тот же процесс, который имеет место при загрузке сохранения. Сильно сомневаюсь, чтобы его можно было решить "парой строчек кода".

LehaMechanic 06-01-2014 16:19 2283832

Цитата:

Цитата AMDBulldozer
Никакие процессы (кроме самого игрока) не могут пересекать границы этих локаций. »

Не понял, какие процессы? Если имелись ввиду NPC, то они спокойно это делают, как по команде игрока, так и по собственной инициативе.

Цитата:

Цитата AMDBulldozer
Поэтому его приходится загружать в процессе перемещения. Это абсолютно тот же процесс, который имеет место при загрузке сохранения. Сильно сомневаюсь, чтобы его можно было решить "парой строчек кода". »

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

AMDBulldozer 06-01-2014 17:27 2283875

Цитата:

Цитата Leha Ares
Не понял, какие процессы? »

Физические. Или магические. :wink: К примеру, взрыв рядом с порталом не нанесет ущерба объектам по ту сторону. А стрела не пролетит сквозь него. Причина очевидная - хоть объекты за дверью дома и находятся "рядом" в бытовом понимании этого слова, на деле они расположены в другой вселенной (понятно, что Вы не сможете, пройдя сквозь стену дома, оказаться на улице). Кстати, как мне кажется, судя по анализу сценариев Oblivion, механика игры такова, что NPC в Oblivion (да и в WoW) не могут самостоятельно проходить через порталы (алгоритм, прокладывающий им путь, работает только в "обычном" пространстве). Насколько я понял, они не перемещаются посредством порталов, а генерируются сценарием на другой его стороне в предусмотренных игрой случаях (по крайней мере те, которые я сам модифицировал).

В качестве иллюстрации приведу простейший пример: заходите в помещение с порталом, запирая за собой дверь (к примеру, консольной командой "lock"). Телепортируетесь. Спутник мгновенно появляется рядом, хотя воспользоваться телепортом он не мог (а на то, чтобы пройти к телепорту сквозь препятствие, как NPC делают если путь заблокирован, у него просто времени не было). Или пишете телепорт отправляющий проходящего в случайное место. Думаете спутника туда выбросит? Как бы не так! Он всегда окажется рядом. Кстати, заметьте, что NPC никогда не пользуются телепортами Frostcrag spire. Даже если послать их в город, стоя прямо рядом с его порталом. Алгоритм прокладывания маршрута, как уже было отмечено, принципиально игнорирует телепорты.

В чем разница, спросите Вы? Она принципиальна - если программист заранее не предусмотрел возможность, скажем, стражнику зайти в дом, а спутнику следовать за героем, то он этого сделать и не сможет. Множество раз видел такое в Oblivion. Про мобов, которые не могут выходить из инстансов WoW, полагаю можно даже не упоминать.
Цитата:

Цитата Leha Ares
Достаточно было как-то настроить количество заранее подгружаемых изолированных локаций в зоне досягаемости игрока »

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

LehaMechanic 06-01-2014 19:42 2283933

Цитата:

Цитата AMDBulldozer
механика игры такова, что NPC в Oblivion (да и в WoW) не могут самостоятельно проходить через порталы »

Кажется мне, это неверно. NPC, по крайней мере враждебные, крайне запросто способны преследовать игрока, переходя из локации в локацию. Например Умбра, представляющая высокую опасность для неподготовленного героя запросто способна гнаться за незадачливым приключенцем от своих руин аж до имперского города и вырезать там половину личного состава стражи и жителей, пока не будет наконец убита. Да и мирные жители запросто выходят из домов на улицы и т.д. Какая разница, как они это делают технически? Делают, и этого достаточно.
Ну а алгоритм спутников лучше вообще не трогать. Он представляет из себя злейшие костыли и крайне несовершенен.


Время: 01:59.

Время: 01:59.
© OSzone.net 2001-