Показать полную графическую версию : как работает винт и оператива в играх?
У меня общий вопрос о работе оперативы и жёсткого диска в играх.Вот допустим миссия вначале загрузилась с жёсткого в оперативу.Она целиком загружается или в процессе игры все равно идут подгрузки с винчестера? Почему все сразу не грузится в оперативу чтобы не было необходимости обращаться к медленному винту в ходе игры? Или это игры так сделаны? Короче интересует-подгрузки текстур все равно с винта идут? А почему они сразу не записываются в быструю память? Тем более оперативы навалом...
AMDBulldozer
30-12-2013, 16:03
Зависит от игры. В играх, разбитых на отдельные небольшие секторы, их загрузка может происходить целиком.
В играх, реализующих подобие "открытого мира", всегда изначально загружаются только близлежащие области, а в процесссе игры необходимые геометрия и текстуры подгружаются с диска. Почему не загружается всё сразу? По тысяче причин. Причина первая состоит в том, что никому это не нужно. Загрузка в любом случае происходит в фоновом режиме, так что никакого улучшения процесса игры от предзагрузки Вы не почувствуете. Для проверки я пробовал копировать игры целиком на RAMдиск и сравнивал впечатления - никакой разницы. К тому же, при наличии свободной памяти всегдпа можно считать файлы игры в дисковый кэш. Результат будет тот же, что и от записи на RAMдиск (даже, по моим измерениям, доступ будет осуществляться на несколько процентов быстрее).
А теперь подумайте вот о чём: сколько времени будет стартовать игра, заранее считывающая в ОЗУ все 10-15ГБ своих файлов?
Другая причина состоит в том, что большой объем ОЗУ на сегодняшний день скорее исключение, чем правило. Поэтому не слишком разумно для игры пытаться отожрать себе в несколько раз больше, чем ей реально необходимо. Подгрузку всё равно придется реализовывать для игроков со слабыми компьютерами, так какой смысл писать дополнительный код для тех, у кого ОЗУ много?
Третья причина состоит в том, что игры часто выпускаются в виде 32-хбитных исполняемых файлов. Соответственно, загрузить данные в память одного процесса в люблм случае не получится. Создавать дополнительные нити просто для хранения данных? А зачем, когда их можно прочитать непосредственно перед тем, как они понадобятся?
Причина четвертая: возможность доработки и расширения программ (например, путем выпуска дополнений). Если делать так, как Вы предлагаете, системные требования по объему памяти будут меняться после каждого нового DLC. И пользователь будет со счетами в руках прикидывать, на сколько DLC ему хватит памяти и какие лучше выбрать.
И так далее, до бесконечности...
LehaMechanic
06-01-2014, 10:17
Причина первая состоит в том, что никому это не нужно. Загрузка в любом случае происходит в фоновом режиме, так что никакого улучшения процесса игры от предзагрузки Вы не почувствуете »
В целом всё правильно, но вот здесь промашка вышла. Не всегда подзагрузка идёт в фоновом режиме. Зачастую это происходит на глазах у пользователя и прерывает игровой процесс на ощутимые десятки секунд, а то и минуты. Например TES IV Oblivion, где реализован псевдооткрытый мир, т.е. можно идти куда хочешь, и вся дикая местность, леса, поля и т.д. открыты сразу и целиком, но каждая пещера, каждый город, каждый домик - это изолированные незагруженные локации, которые необходимо "загружать", вручную активировав триггер. Если пытаться войти или выйти из города не через триггер на городских воротах, а читами через стену, то там будет пустота и она никогда не заполнится путем фоновой подзагрузки. Бывает, это раздражает, особенно если в компьютере 32 ГБ памяти, а кто-то видите ли поленился присоединить пару строчек кода, чтобы владелец этой памяти мог чувствовать себя комфортно.
оперативы и жёсткого диска в играх. »Ещё забываешь про файл подкачки и хочешь того или нет но он тоже так же используется в играх. Соответственно файл подкачки: он же виртуальная память; он же файл pagefile.sys расположенный на системном диске - таким образом обращение к жёсткому диску всё равно происходит.
то там будет пустота и она никогда не заполнится путем фоновой подзагрузки. Бывает, это раздражает, особенно если в компьютере 32 ГБ памяти, а кто-то видите ли поленился присоединить пару строчек кода, чтобы владелец этой памяти мог чувствовать себя комфортно. »На то и рассчитаны минимальные системные требования.
AMDBulldozer
06-01-2014, 15:11
Не всегда подзагрузка идёт в фоновом режиме. Зачастую это происходит на глазах у пользователя и прерывает игровой процесс на ощутимые десятки секунд, а то и минуты. Например TES IV Oblivion, где реализован псевдооткрытый мир »
Простите, не соглашусь. Я сразу упомянул о двух возможностях: загрузке небольшого сектора целиком при перемещении между небольшими секторами и постепенной подгрузке окружения при перемещении по открытому миру. Упомянул, именно потому, что хорошо помнил как про Oblivion, так и про World of Warcraft и другие подобные игры, когда писал своё сообщение. Эти игры представляют собой не полностью открытый мир, а комбинацию больших открытых миров с изолированными локациями. Никакие процессы (кроме самого игрока) не могут пересекать границы этих локаций. Поэтому, когда Вы заходите, к примеру в дом в Oblivion'е, подгрузка данных осуществляется при переходе. Если переходите через портал куда-нибудь в "Парадиз" Каморана или на Дрожащие острова, происходит то же самое. Если помните, в Oblivion Construction Set такие объекты как двери и порталы относятся к классу телепортеров.
Они перемещают игрока в некоторое произвольное место, окружение которого, понятно, отсутствует в памяти компьютера. Поэтому его приходится загружать в процессе перемещения. Это абсолютно тот же процесс, который имеет место при загрузке сохранения. Сильно сомневаюсь, чтобы его можно было решить "парой строчек кода".
LehaMechanic
06-01-2014, 16:19
Никакие процессы (кроме самого игрока) не могут пересекать границы этих локаций. »
Не понял, какие процессы? Если имелись ввиду NPC, то они спокойно это делают, как по команде игрока, так и по собственной инициативе.
Поэтому его приходится загружать в процессе перемещения. Это абсолютно тот же процесс, который имеет место при загрузке сохранения. Сильно сомневаюсь, чтобы его можно было решить "парой строчек кода". »
Достаточно было как-то настроить количество заранее подгружаемых изолированных локаций в зоне досягаемости игрока в зависимости от имеющейся в наличии памяти, вот и всё. Чтобы можно было моментально войти и выйти в любую из них без дозагрузок, а не так как они сделали.
AMDBulldozer
06-01-2014, 17:27
Не понял, какие процессы? »
Физические. Или магические. :wink: К примеру, взрыв рядом с порталом не нанесет ущерба объектам по ту сторону. А стрела не пролетит сквозь него. Причина очевидная - хоть объекты за дверью дома и находятся "рядом" в бытовом понимании этого слова, на деле они расположены в другой вселенной (понятно, что Вы не сможете, пройдя сквозь стену дома, оказаться на улице). Кстати, как мне кажется, судя по анализу сценариев Oblivion, механика игры такова, что NPC в Oblivion (да и в WoW) не могут самостоятельно проходить через порталы (алгоритм, прокладывающий им путь, работает только в "обычном" пространстве). Насколько я понял, они не перемещаются посредством порталов, а генерируются сценарием на другой его стороне в предусмотренных игрой случаях (по крайней мере те, которые я сам модифицировал).
В качестве иллюстрации приведу простейший пример: заходите в помещение с порталом, запирая за собой дверь (к примеру, консольной командой "lock"). Телепортируетесь. Спутник мгновенно появляется рядом, хотя воспользоваться телепортом он не мог (а на то, чтобы пройти к телепорту сквозь препятствие, как NPC делают если путь заблокирован, у него просто времени не было). Или пишете телепорт отправляющий проходящего в случайное место. Думаете спутника туда выбросит? Как бы не так! Он всегда окажется рядом. Кстати, заметьте, что NPC никогда не пользуются телепортами Frostcrag spire. Даже если послать их в город, стоя прямо рядом с его порталом. Алгоритм прокладывания маршрута, как уже было отмечено, принципиально игнорирует телепорты.
В чем разница, спросите Вы? Она принципиальна - если программист заранее не предусмотрел возможность, скажем, стражнику зайти в дом, а спутнику следовать за героем, то он этого сделать и не сможет. Множество раз видел такое в Oblivion. Про мобов, которые не могут выходить из инстансов WoW, полагаю можно даже не упоминать.
Достаточно было как-то настроить количество заранее подгружаемых изолированных локаций в зоне досягаемости игрока »
Да, полагаю так можно было бы сделать, хотя тут и имеется некоторое количество проблем. Правда, на мой взгляд, не слишком принципиальных - в конце концов, переход с клетки на клетку в "открытом мире" Oblivion тоже осуществляется неявными телепортерами. Это же не мешает эти самые клетки заранее подгружать.
LehaMechanic
06-01-2014, 19:42
механика игры такова, что NPC в Oblivion (да и в WoW) не могут самостоятельно проходить через порталы »
Кажется мне, это неверно. NPC, по крайней мере враждебные, крайне запросто способны преследовать игрока, переходя из локации в локацию. Например Умбра, представляющая высокую опасность для неподготовленного героя запросто способна гнаться за незадачливым приключенцем от своих руин аж до имперского города и вырезать там половину личного состава стражи и жителей, пока не будет наконец убита. Да и мирные жители запросто выходят из домов на улицы и т.д. Какая разница, как они это делают технически? Делают, и этого достаточно.
Ну а алгоритм спутников лучше вообще не трогать. Он представляет из себя злейшие костыли и крайне несовершенен.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC