Смотрите. Вопрос был ровно следующий. На всякий случай цитирую.
Я спросил “возможно ли”. Раз это словосочетание нами понимается по-разному, то перейдем на термины. Вот три пункта:
q1 - это вероятность существования медиа-ресурса с таким сжатием, при котором фрагментов сжатых ровно 1.
q2 - это вероятность существования медиа-ресурса с таким сжатием, при котором фрагментов сжатых ровно 1, а несжатых N.
q3 - это вероятность существования медиа-ресурса с таким сжатием, при котором фрагментов сжатых ровно 1.
Оцените q1, q2 и q3 от 0 до 1, включая границы.
Меня устроит ответ без объяснений, просто 3 числа. Я переспрошу в случае чего. Ваше, конечно, дело, как отвечать, можете и объяснить в данном случае, если не лень.
Нет, по-разному не понимается. Но похоже, я впервые столкнулся с собеседником, незнакомым с понятием суперпозиции. Объясняю. Представим себе отрезок времени. В начале отрезка у нас есть младенец, в конце старик, и некий наблюдатель, находящийся вне времени, видит всю жизнь указанного человека, назовем его для удобства Джоном, одновременно. При вопросе, является ли Джон стариком или младенцем, мы не можем ответить утвердительно, как и в случае вопросов, учится ли Джон в школе, ходит ли на работу или достиг пенсионного возраста и воспитывает внуков. Мы можем ответить “и да и нет”, обозначая тем самым все его состояния, которые наблюдаем. Их общность и будет его суперпозицией. Если же Джон не дожил до старости, или вовсе погиб в детстве, то мы можем ответить более определенным образом.
В случае с игровыми движками я учитываю разные типы игровых медиа, разные способы их записи, сжимались они разработчиками или нет, и как там поживали другие данные в тех же контейнерах, и прочее. Исходя из этого я обозначаю комбинацию подходов, которая позволяет и сжимать до одного сжатого фрагмента данные одной структуры, и до произвольного их количества, а также не сжимать данные вовсе. Такую комбинацию можно увидеть в ряде как старых, так и современных игровых движков, так что в некотором роде данные игр, написанных на их основе наглядно иллюстрируют суперпозицию обозначенного тобой подхода. Потому-то и не может быть ни да ни нет по отдельности. Они могут быть только вместе.
Спасибо, я знаю что такое суперпозиция, да и не только в значении, которое вы привели. Например, вы либо не в курсе, что ваш ответ про суперпозицию не несет никакой новой информации, либо специально отвечаете именно так. Я поясню.
Вопрос “возможно ли” предполагает три ответа: возможно, не возможно, не знаю. Я вам тоже приведу один пример, которым покажу почему есть третий ответ “не знаю”. Если вы изучали квантовую криптографию (ну мало ли, вдруг хотя бы слышали о квантовой информатике, на основе которой будут дальнейшие выкладки), то наверняка знаете, что в случае если мы имеем кубит с конечным множеством вариантов измерения его значения {0, 1}, то суперпозиция - это естественное состояние кубита до измерения его значения и количество информации, которое получено до измерения (т.е. в состоянии суперпозиции) равно нулю, в отличии от количества информации, полученной при измерении состоянии кубита. Следовательно, ваш вариант с суперпозицией эквивалентен ответу “не знаю”, так как в суперпозиции кубит может находиться только не в момент измерения - т.е. не в момент ответа. Переводя это на нашу ситуацию: состояние “не знаю”/суперпозиция может быть только, пока не дан ни один другой ответ.
Потому, раз вы из области информатики, где хватает ответов “да” и “нет”, перешли на теорию квантовой информатики, где появляется суперпозиция, т.е. “не знаю”, я с удовольствием с вами соглашусь: отвечая “суперпозиция” вы подписались под тем, что не знаете ответ.
Вы согласитесь с этим или приведем мой комментарий вам в более научные термины без упрощений и без пропуска ряда смысловых выкладок, которые были мной допущены для того, чтобы упростить понимание написанного мной в случае, если вы не знакомы с теоретической частью квантовой криптографии? Или же вы измените свой ответ?
Ладно, подустал я потакать вашим капризам. Давайте я разом напишу все, что думаю насчет ваших выкладок. Кому надо из читателей – дочитают, решат для себя кто прав. Если вы, конечно, не сотрете тему и не исправите все написанное вами, не нарегаете ботов и не налайкаете себя (вы же не хотите санкций от близов за это, нет?)… Правда, есть тут такая штука, как история редактирования. Ну и запись никто не отменял, скрины. Ну, вы поняли.
Это не отменяет вышенаписанного про суперпозицию, вам стоит серьезно над этим подумать. Как и над следующим. Ответа не жду, а если будет - не смотрю. Имею ровно такое же право так сделать, как и вы, категорично отказав мне в обсуждении винды, без комментариев. Собственно, я мог и не заморачиваться, но по мне так лучше попробовать образумить человека.
Теперь почему я вообще задавал терпеливо столько вопросов.
Во-первых, у меня есть подтверждение тому факту, что в CASC, используемым в том числе игрой хотс, не просто можно хранить фрагмент медиа-ресурса в сжатом виде без разбития на подфрагменты и без наличия несжатых медиа-ресурсов, но и ряд игр хранит ряд моделек целым фрагментом игнорируя тот факт, что по определению производительность CASC раскрывается при разбитии на фрагменты. Само подтверждение можно проследить благодаря документации, исходному коду, отладке. Поэтому я задавал прямые вопросы с той целью, чтобы по тому. как вы отвечаете, понять следующее:
понимаете ли вы суть вопросов или просто зазнаетесь и много на себя берете, пытаясь отвечать.
знаете ли вы ответ.
как вы будете исправлять свой ошибочный или неточный ответ.
Пункты 1 и 2 я комментировать не буду. Но признавать ошибки вы не умеете. Более того, сознательно или нет, но все же вы включаете режим “обижусь на что-то”, “прицеплюсь к словам, хотя значение однозначно”, “сам буду употреблять обороты, трактуемые двояко и вообще ряд неверных”, хотя я говорю достаточно вежливо и этично, считая собеседника специалистом, исправляю слова на те, которые вы считаете правильными вне зависимости от того, считает ли ваш вариант верным большинство научного сообщества.
В конечном счете, у меня есть такое CASC хранилище, где медиа-ресурс сжат целиком без разбивки. Приводить его я не считаю нужным, так как мне не дадут нобелевку за публикацию таких “невероятных” сведений – это общеизвестный факт. Более того, кроме такого примера у меня есть и свой, который корректно читается и декодируется на тех же условиях. Хочется пруф - гуглите или сделайте сами, вы говорили, что вы - опытный разработчик, а такой пример может сделать даже студент начальных курсов.
Во-вторых. Рад, что вы нехотя, но согласились с тем фактом, что сжатие вообще есть. Но эта терада не нужна для того, чтобы просто взять, проверить и ответить. Ваше право, как говорится.
В-третьих. Так как у меня есть и доказательства того факта, что сжатие используется, и того факта, что медиа-ресурс может быть сжат без разбивки на куски даже в CASC, не говоря о том, что есть и другие системы и способы хранения (да и в любой момент можно реализовать кастомный), то ваши общие слова как в шапке, так и в соседней теме про то, что “для доступа к модельке архив разжимать не нужно” - оказываются либо заблуждением, либо ложью. Предполагаю, что вы просто себя переоценили и рассуждаете на тему, которую либо не в состоянии проверить, либо не знаете, потому, что, если бы вы были в состоянии проверить - вы бы проверили и убедились, а если бы знали - не спорили бы.
В-четвертых. Вы сами сказали, что движок игры - пользовательский уровень. В ветке дискуссии про тот факт, что функция чтения может быть определена в обход системному вызову чтения с диска (это мы еще до прерываний не дошли) разговор упирается в то, что для этого надо определить свой системный вызов и устанавливать его в систему вместе с игрой. Кроме того, что игра не обязана требовать привилегированный уровень исполнения и в общем случае исполняется от учетки самого пользователя, для установки и работы нужны не только права администратора, но и ring0 (а в некоторых случаях еще и более тяжелый арсенал). Кроме того, в таком случае сама игра переходит ниже пользовательского уровня, так как кастомный системный вызов чтения не работает на пользовательском уровне. Потому, вы противоречите себе, в одном ответе говорите о том, что игра – это пользовательский уровень, а в другом, что игра может включать в себя ряд кастомных системных вызовов, которые не работают на прикладном уровне, но претендуете на то, что пишете здесь все правильно и упрекаете меня в том, что что-то “категорически неприемлемо”.
Пять. В соседней теме вы не привели ни одного пруфа того, что хотс не держит в ОЗУ модельки/отрисованные модельки/текстуры/любые ресурсы из своей CASC, в то время как я показал косвенно, что занимаемый размер в ОЗУ аномально большой. Тем не менее, вы считаете, что, не зная кода игры, не зная о том, является ли текущий размер хотса в озу штатным или это следствие бага, вы говорите, что, разработчик на опыте и потому знаете, как обстоят дела. Лучше бы применили здесь свою суперпозицию и сказали, что все это там одновременно хранится и не хранится, так как наличие опыта не говорит ничего о стороннем проекте, который делали не вы, вне зависимости от того, есть ли исходники старого движка похожей игры или нет.
Шесть. Вы передергиваете и подменяете понятия.
Семь. Вы создали тему, где претендуете на роль просветителя, а на вопросы отвечаете нехотя или не отвечаете. Лучше бы вспомнили где вы создали эту тему, и кто основной посетитель данного форума, а потом представили, как бы выглядело, если бы вы себя так же вели с детьми.
Восемь. “Что будет, если мы все-таки станем разжимать архивы с игровыми данными прямо во время игры? Ничего хорошего для производительности, поскольку алгоритмы, применяемые для упаковки\распаковки могут оказаться крайне ресурсоемкими”. Из вышеизложенного факта того, что есть сжатие, получается, что если ресурсы хотса упакованы, а весит хранилище в запакованном виде 21 гб, плюсуя туда и музыку, и ролики, и все остальное, а держать все в памяти нельзя, то выходит, что хотс все-таки постоянно читает и распаковывает необходимые в текущий момент ресурсы… Возможно, он не читает хедеры и дескрипторы все время, так как в casc нет в этом смысла, но сжатые данные по дескрипторам для отрисовки надо-таки разжать… А диск для хранения разжатого не используется… Потому если хотсу нужны ресурсы при создании матча лиги героев, например, он обратится к сжатым ресурсам по дескриптору и разожмет их. А знаете почему вообще задались вопросом изменить старый формат хранения и перейти на CASC? Потому что именно использование CASC сокращает время, необходимое на постоянную распаковку и подгрузку ресурсов именно благодаря этой самой карте дескрипторов сжатых ресурсов, по которой он знает, что подгрузить. Снова вы неверно ответили.
Девять. “На самом примитивном уровне, компиляцию под ту или иную архитектуру означает банальную возможность запустить продукт под операционной системой, заточенной для использования с процессором такой-то архитектуры” - а что вы так упрощаете? Это же недопустимо. Я не буду говорить почему. Шучу, я же не вы, я сразу скажу, что мне не нравится упрек в мою сторону о недопустимости упрощения, а вы сами - упрощаете.
Десять. “Чем в процессе игры занимается центральный процессор?” “Но, в случае с несколькими потоками на него также ложится задача синхронизировать данные между ними”. А в случае временнОй многопоточности? Давайте вы не будете только говорить, что таких реализаций мало, что под них нет игр… Вы же решили поговорить о Mac OS когда я прямо указал, что мой вопрос касается строго Windows и после трех моих просьб после этого говорить о винде вы тоже не передумали, да еще и в грубой форме. Раз хотите обобщать - расскажите тогда и про то, как обстоят дела с многопоточностью, играми, и временнОй сложностью. А потом потрудитесь объяснить почему в пунктах настройки графики хотса имеется несколько таких, которые, как заявляет близзард, зависят именно от процессора. Только без самомнения пожалуйста, а то как в соседней теме ответите, мол, “на заборе тоже написано”.
Одиннадцать. Претендуете на то, что вы специалист, а не дилетант, ведите себя как ведут себя специалисты. А то пока прослеживается какая-то суперпозиция - затрудняюсь решить кто вы. Удачи вам.
Отказываясь от положительной вероятности сразу обоих значений ты очень далеко уходишь от понимания того, как же на самом деле функционируют игровые движки.
Нет, не эквивалентен. Я дал четкий ответ, подразумевающий, что система находится сразу в обоих состояниях и этот ответ справедлив для окружающей действительности, тогда как ты мыслишь слишком узко и однобоко, пытаясь выбрать что-то одно.
Если я изменю свой ответ, то он перестанет быть правдивым. Так что, не изменю.
А я твоим капризам потакать не подустал. И проявляются они в том, что ты методично съезжаешь с темы. Как видишь, сижу себе и с тобой общаюсь, отвечаю на вопросы, в которых ты частенько искажаешь смысл моих ответов и перескакиваешь с темы на тему.
Снова съезд с темы в угодную для тебя сторону. Обрати внимание, что я не говорил, что приведенное тобой утверждение ложно. Отвергая ответы вида “и да и нет”, и желая увидеть только “да” или “нет” ты сознательно подрываешь мое мнение о твоей персоне. И мнение читателей, к которому ты пытаешься воззвать - тоже.
У нас с тобой был момент, когда я допустил ошибку, поверив чужому мнению, и я эту ошибку признал. А вот ты явно спешишь с выводами и сильно ограничен крайне узкими представлениями о людях и логике. Более того - твое поведение с самого начала говорило не в твою пользу. Ни о твоей личности, ни о твоем уровне знаний. Отказ принимать ответы “и да и нет” говорит в пользу твоей зашоренности, неспособности смотреть на вещи шире, чем тебя к этому приучили. Таким образом, твой удел - узкая специализация, и в этом ты очень хорош. Не стану спорить, что ты можешь хорошо вникнуть в суть некоторых вещей, но только когда они идут в отрыве от других, если те им прямо противоречат.
Работающий игровой движок и его логика работы строится не по принципу логики, а по принципу необходимого функционала. Если надо, чтобы он прекрасно работал со сжатыми данными, разбитыми на много фрагментов - он получает такой функционал. Если надо, чтобы работал с однофрагментными сжатыми данными - получает и такой. И с несжатыми данными тоже умеет работать. Поэтому я и говорю о узости твоего мышления. Так нельзя, если хочешь постичь что-то новое для себя.
Не нехотя, а очень даже свободно. Нехотя - это когда человек не хочет чего-то признавать в силу каких-то причин. Так как я изучил документацию формата и увидел исходники пары программ, работающих с ним, я пришел ко вполне определенным выводам о его устройстве. Как минимум, у меня была заинтересованность в том, чтобы разобраться в вопросе и почерпнуть кое-что новое. Когда человек нехотя с чем-то соглашается, это обычно говорит о том, что он соглашается из-под палки.
На стене висит мочало - начинаем все сначала. Если вы, мой дорогой друг, по каким-то причинам успели забыть, то я уже, как минимум, десять раз рассказывал о том, как данные читаются. Приведу цитату, чтобы не писать одно и то же сто раз подряд, а заодно и в шапку занесу.
Но ты, очевидно, не хочешь воспринимать того, что фрагментное чтение файла в принципе возможно. Для тебя важнее утвердить свою правоту в том, что архив грузится в память целиком, а уже потом все его данные разжимаются, что не есть правильно. Согласно твоим представлениям, какая-нибудь игра весом в 50 гигабайт (реально ее контент может занимать в пару раз больше места), написанная для ПК с оперативной памятью в 1 гигабайт, должна все свои данные целиком грузить в оперативную память и там же распаковывать. Объясни мне, где она возьмет 50 гигабайт оперативной памяти для своих нужд. Может быть, она в swap-файл полезет, объем которого тоже может составлять 4 гигабайта от силы? Ерунду какую-то говорите, товарищ.
Данное утверждение со всей справедливостью применяю к тебе. Для меня, после моего многолетнего стажа, подобные заявления из разряда “ты ничего в своей жизни не видел” выглядят как-то, мягко говоря, несерьезно.
А вот такого я не утверждал. То, что я утверждал, относилось к абзацу повыше - то, что хотс не держит в памяти все свои ресурсы целиком. Они ему все единовременно не нужны, ведь на поле боя, где сражаются только десять героев (некоторые из которых еще и повторяются) не может внезапно появиться еще двадцать других. И выше я уже расписывал о том, что объект из медиа-контента игры может быть загружен в память не целиком.
Здесь такими вещами занимаешься только ты. В предыдущей теме занимался и здесь занимаешься. Системный вызов он функцией обозвал, молодец, какой. А собеседнику понимай его как хочешь.
Отвечаю, и вполне охотно. Рассказываю, как что обстоит, делюсь своими знаниями и опытом. Мне интересно получать твои или чьи-то еще вопросы, вникать в суть и давать на них ответы. Возможно, если тебе представляются мои ответы слишком сухими или же узкими, то суть не в ответе а в постановке вопроса? Подумай над этим.
Как на мой взгляд, это уже заблуждение. У нас с тобой тут достаточно интеллигентная дискуссия, затрагивающая интеллектуальную тему. Развивается она не без очевидных проблем, но развитие идет, и вроде говорим предельно понятным языком о сложных вещах, не вдаваясь в терминологию. Да и дети сегодня достаточно умные, умеют пользоваться поисковыми системами и обладают широким спектром интересов. Кому-то из них будет более, чем интересной такая тема на форуме любимой игры.
Похоже, ты начинаешь прозревать в вопросе чтения игровых данных. Могу только поздравить. Не прошло и нескольких дней. Молодец, хвалю!
Представим себе, что у нас стоит задача описать яблоко тому, кто его никогда в жизни не видел и не ел. Мы можем описывать его сколь угодно приближенно, но один опишет на одном уровне приближения, а второй на другом. При этом ни один не сможет передать в точности информацию о вкусе яблока, поскольку человеческий язык не предназначен для этого. Мы упрощенно скажем, что яблоко кислое или сладкое, что на языке оно может быть бархатистое и так далее. Но человеку это ничего не скажет, если он его никогда в жизни не ел. Сегодня многие дети в школе изучают информатику, а там могут преподавать программирование на каких-нибудь языках и там они могут увидеть и вкусить то самое яблоко и понять, какое оно на вкус. Соответственно, и наши приближения в попытках яблоко описать будут ими восприниматься совершенно различным образом.
Это уже тонкости реализации.
Не надо выдумывать того, чего не было. Любой человек может прочитать эту тему и убедиться в этом. То, что могло быть - речь о кроссплатформенности. Компьютерная игра в большинстве случаев пишется таким образом, чтобы абстрагироваться от конкретной платформы и запускаться везде, включая Mac OS X, Linux, Windows, под операционными системами консолей Nintendo, Sony, Microsoft или других компаний. Поэтому, разговоры о конкретных платформах, мягко говоря, некорректны. Больше скажу - хороший игровой движок абстрагирован не только от операционных систем, но и от железа, т.е. базовый функционал у него есть и так. Как пример, могу привести CryEngine с его заглушками под все и вся и ориентацией под кроссплатформу.
Начнем с того, что в числе таковых настроек находится обсчет физических взаимодействий (ввиду старости движка такое не исключено), частицы и некоторые другие вещи. Сегодня существуют физические движки для компьютерных игр, позволяющие перенести обсчет всего этого дела на графический процессор, такие как Bullet, PhysX, и Havok. Хотстим когда-то даже заявляли о своем намерении встроить поддержку движка Havok, но что-то не срослось. Также существуют другие варианты разгрузить центральный процессор, ускорив те же расчеты и в том числе без физического движка перенести их на GPU, поскольку уже достаточно давно существуют GPU-ориентированные языки программирования высокого уровня.
Вроде, справляюсь, затруднений никаких не испытываю.
Только после моего такого резкого ответа вы начали отвечать более-менее по делу, хотя бы в части вопросов. Это не отменяет того факта, что я не хочу продожать. вне зависимости от того, устали ли вы, так как устал я. Ведь:
Многие люди с отсутствием знаний и неприемлемым поведением тоже не испытывают затруднений. Потому не вам о себе же судить.
Вы не по делу. И вот почему:
Система, находящаяся сразу в двух состояниях либо подчиняется обычной алгебре логики, когда эти состояния вызваны сочетанием условий и операторов, либо квантовой информатике, когда это суперпозиция в полном смысле этого термина из квантовой информатики. Но дело в том, что я уже кидал ссылку и показывал как интерпретируется ваш ответ по законам алгебры логики. Вы же исправили его на неверный результат применения отрицания к ответу. Потому и получается, что и в алгебре логики вами ответ дан неверно, и а квантовой информатике он означает не то, что вы ожидаете. Предлагаю вам поискать ошибку и в крайнем случае подумать как ответить правильно о том, что вы имели в виду (догадаться не сложно). Я ваш ответ за вас перефразировать не буду, вы же претендуете на то, что вы - специалист.
Ваше право. На этом разговаривать дальше просто не о чем. Но вот тут возникает ощущение, что вы чувствуете, что ошиблись и потому юлите (на самом деле не только тут), начинаете говорить о том, что возможно все, вокруг может происходить вообще что угодно и специально или нет опускаете тот факт, что во многих случаях мой вопрос задается о конкретных условиях. Ваше право. Если вы пытаетесь таким образом юлить - с вами никто продолжать диалог не будет. Имейте уважение, а если уж вы считаете, что собеседник знает не просто меньше, но и гораздо меньше, то имейте снисхождение и принимайте условия собеседника, так как единственный способ показать неправоту - показать ее на условиях собеседника.
Легко заявить, что не подустал, когда хочется, чтобы твое сообщение было последним, особенно в теме, где приходится показывать, что что-то знаешь. Особенно не мне, а читателю. Но вы не убедили меня, что с темы не съезжаете.
Почему же? Дело в том, что я задавал вам конкретные вопросы, например о существовании разных вариантов сжатия с разным количеством сжатых фрагментов. Вы же на некоторые отвечали, а некоторые проигнорировали. Я же вам показал почему я спрашивал и сразу ответил на некоторые свои же вопросы, чтобы у читателя был эталон ответа. Вашим ответом про суперпозицию легко уйти от ответа на любой конкретный вопрос. Ушли от него - ваше дело, я лишь отмечаю, что вы ушли от него и показываю настоящий ответ: может, еще как, потому как ответ может исключает ответ не может.
Свободно - это когда не навязывают условия ответа и отвечают на то, что есть. В теме очень много вопросов, на которые вы отвечаете только с помощью вспомогательных, а также есть вопросы, на которые не отвечаете, а даете комментарий вопросу. Также, вы почему-то начинаете рассуждать почему я задал тот или иной вопрос (ошибочно рассуждаете во всех случаях) вместо ответа или совместно с ним, но если бы вы отвечали свободно, вам бы не требовалось рассуждать, требовался бы лаконичный ответ без ухода в сторону.
И все эти десять раз - разные варианты рассказа. Какие-то разные по степени детализации, какие-то разные противоположно. В шапке - один, он отличается от действительности и тех условий, о которых я говорил, говоря, что в шапке слова отличаются от действительности.
Вы же, почему-то, делаете этот вывод ошибочно, не только потому, что его нельзя сделать по моим уточнениям к вопросам, но и потому, что я в итоге написал вам, что в курсе того, зачем был придуман casc и в чем его преимущество. Не стоит подменять факты.
Вот не надо делать выводов из того, что я не утверждал. Я не утверждал, что она выгрузит все ресурсы в память. Более того, внизу вы заметили это, но я все же прокомментирую. Я утверждал о выгрузке всех необходимых данных. А это те данные, которые требуются движку в данный момент. И про требование я однозначно указал. Вы же либо не заметили этого, либо додумали неверно. К тому же, полагаю, вам известно, что если я не пишу однозначно о том или ином факте, то собеседник будет не прав, если он решит, что я имею его в виду, не так ли?
Странный вы. Я проверил и написал об этом.
Да, вы утверждали, что я утверждал, что игра грузит 21гб ресурсов в память целиком. А я утверждал, что игра грузит из них целиком те ресурсы (там я говорил модельки, потому как вы справедливо ниже заметили, упрощать для школьников все-таки нужно), которые ей необходимы.
Я опроверг это выше. Читатель рассудит сам.
Может быть я специально задаю вопрос именно так, так как на любой нормальный вопрос вы начинаете юлить, прекрасно понимая, о чем был вопрос, либо прекрасно понимая, что ведет он к противоречиям в сказанном вами же?
Не заблуждение. Большинство - дети и неосведомленные вообще ни о чем. Можете попытаться опровергнуть чем-то более весомым, чем фразой “на мой взгляд”. Статистикой, например. А дискуссия не до конца интеллигентная и тому есть конечный набор факторов, которые я не буду собирать в кучу и в которые носом тыкать не собираюсь.
Спасибо за похвалу, конечно же, но:
это я знал до создания соседней темы
написал именно таким образом, чтобы заслужить от вас похвалу только для того, чтобы показать, что ваши выпады в сторону моего незнания безосновательны.
написанное мной уличает вас ровно в том же, в чем вы пытались уличить меня тут и в соседней теме. Только вы и тут подменяете факты, говоря, что я мол прошарился и раньше не знал и всего-то за пару дней, когда на самом деле я много раз написал, что ваши выпады в соседней теме основаны на том, что я намеренно искажал действительность в силу упрощения понимания для школьников, что более чем допустимо ровно по тем же причинам, которыми вы руководствовались вот здесь:
Факт в том, что на прямой вопрос вы стали обобщать. Я предлагаю вам и тут обобщить, но вы не хотите, говоря, что здесь тонкости реализации.
Конечно могла быть речь о кросс-платформенности. Только ее завели вы, а не я, так как я четко указал о какой операционной системе мой вопрос, на который вы стали отвечать о кроссплатформенности. Зная о том, что вопрос о Windows вы решили ответить и прямо сейчас:
Причем, заметьте, что я не спорю с вашим доводом о том, что игры могут быть написаны с учетом кроссплатформенности. Правда,
неверно, так как в большинстве случаев пишется как раз для одной-двух конкретных платформ. Статистику вам в пруфы.
Вопрос не был о хорошем игровом движке, потому не стоит уводить его в сторону ваших рассуждений. Вопрос был конкретный и однозначный.
Я рад, что вы-таки ответили на этот вопрос.
Я привел ответы и комментарии не потому что хочу продолжать дискуссию. Я, как и вы, сделали свои выводы. Вы в праве считать, что я что-то утверждал, неверно толкуя мои слова. Я в праве считать, что вы не отвечаете на конкретные вопросы и юлите. Но дискуссия не жизнеспособна, так как вы не относитесь ко мне как к равному и считаете своим долгом уйти от сути некоторых заданных вопросом и обобщать, делать выводы о вопросах и комментировать их, в то время как дискуссия равных не предполагает такого неуважения. Почувствую, что вы действительно разбираете вопросы и ищете на них ответ - отвечу и прокомментирую. Нет - так нет. Потому вот вам право распорядиться моим присутствием здесь: отвечайте ровно так же, ведите себя ровно так же, читайте вопросы через строчку и меня тут не будет. Можете меня прогнать таким образом. Но если вы не исправитесь и не дадите исправленные ответы и комментарии на мои вопросы, то ожидать того, что я буду отвечать - нет смысла, так как играть с вами в игру “задай вопрос так, чтобы оппонент на него ответил, а не на что-то еще” я не собираюсь. Если вы не понимаете вопрос - хорошим тоном является его уточнение, а не ответ и оправдание “ну ты ведь так и спросил”.
Я этот детский сад по пунктам комментировать не буду. В конечном счете, внимательному читателю все виднее. Хочешь уйти - уходи, но не разводи драму на ровном месте. Уйдешь ты - придет кто-нибудь другой, а я продолжу рассказывать об устройстве компьютерных игр тем, кому по-настоящему интересно узнать, за что они отдают свои деньги.
Почитав форум, я думаю, что всем интересен только пункт 1. Как поддержка кода старой архитектуры может тормозить игру? Очень просто. Покажу на псевдокоде. Допустим, есть функция “Отрисовать_Валлу”. Реализована она следующим образом:
Отрисовать_Валлу
{
Если система x86: Отрисовать_Валлу_x86
Если система x64: Отрисовать_Валлу_x64
}
Никто так никогда не делает. Архитектура игрового движка не подразумевает того, чтобы отрисовать конкретного персонажа, и вот почему. Если компьютер будет рисовать каждого персонажа отдельно от других, то производительность банально упадет из-за большого количества однотипных операций. И тем более, сегодня уже много лет как никто не выводит картинку на экран средствами процессора. Вывод картинки на экран средствами процессора называется программным рендерингом, и он применялся в компьютерных играх, когда персональные компьютеры (IBM PC) не имели поддержки аппаратного ускорения графики. Адаптация вывода графики под ту или иную разрядность процессора происходит не так и зарыта в игровом движке гораздо глубже. Обычно ради этого даже существует компиляция в два каталога Binaries - x64 и x86 соответственно, и там под определенную разрядность собирается сразу весь игровой движок.
Многие из нас хотят, чтобы игра работала с FPS не менее 60 в секунду. Таким образом, из секунды времени будет потрачено 60 * 0.01=0.6 только на отрисовку Валлы. Теперь давайте посчитаем для 10 игроков: 10*0.6=6 секунд требуется для отрисовки всех игроков (забудем об отрисовках всего остального и распределении задач на видюху, я объясняю не это).
Итак, мы получили 6 секунд на команду, которая вообще не зависит от архитектуры и что вообще говоря сильно больше нашего лимита по времени! Что же делать? Правильно, оптимизировать! Но если код для каждой архитектуры написан оптимально, то что тогда оптимизировать? Правильно, нужно узнать насколько вообще необходимо тащить две архитектуры!
Действительно. А для кого придумали такие технологии, как разбиение пространства, как отсечение невидимых поверхностей, и прочее, если можно просто взять и перейти с x86 на x64? 6 секунд на рендер 10 героев - это лол, надо в цитатник добавить. Так-то даже какой-нибудь замшелый 3ds max 2 с его оффлайновым рендерером эти 10 героев отрисует в 1920х1080 намного быстрее 1 секунды.
В чем разница x86 и x64 с точки зрения архитектуры процессора? Основная разница в: наборы процессорных команд разные, x64 поддерживает бльше оперативки. К чему ведут разные наборы команд? Допустим, Вася со своей x86 винды скидывает на вашу x64 .exe. Вы его запускаете и скорее всего он работает. Почему? Потому что обратная совместимость. Это значит, что для этого x86 .exe винда создает “симуляцию” среды x86 и файл запускается с адресным пространством x86, в котором будут работать x86 инструкции процессора, которые доступны из-за обратной совместимости. Но у вас на x64 винде почти наверняка больше 4GB оперативки, почему же этот .exe не может схесть больше памяти? Все просто, процессорные инструкции x86 НЕ МОГУТ использовать более 4GB памяти, так как размер адреса в x86 архитектуре как раз 32 бит. Что это получается, что HOTS не может на x86 системе использовать более 4 GB памяти? Да, не может. А x86 HOTS на x64 винде? Тоже не может, так как запущен “в симуляции” обратной поддержки самой виндой. А x64 HOTS? Уже может.
x86-архитектура давным-давно поддерживает столько гигабайт, сколько необходимо для работы. Даже для старой х86 винды, включая какую-нибудь 98 сегодня есть патч. А без патча те же винды NT-серии и в 90-ых умели работать с современными объемами оперативной памяти (128 гигабайт и выше). Доказывается очень просто, если погуглить суперкомпьютеры и рендерфермы студий анимации и спецэффектов на то время, работавшие на виндах.
Зачем игре больше памяти со временем? Развитие, добавление героев, скинов, новые методы движка и механики, сетевой код - все это требует использование все бОльших количеств памяти.
Вот уж для скинов-то точно надо больше оперативной памяти. Насчет сетевого кода и новых методов\механик вообще что-то невразумительное написано. Так-то массивный онлайн не вчера зародился и существовал задолго до HotS и даже до 64-разрядных процессоров, но зачем же об этом знать обывателю? Проще носить розовые очки и верить каждому слову ушлых маркетологов, чья цель - продать товар.
В папке игры x86 есть сжатые модельки. Я подозреваю, что это файлы в папке data, размером от 1 гб. Таких файлов 22, в сумме где-то около 21 гб.
Имеем: 21 гб сжатых моделек на диске. Что должна сделать игра? Прочитать и разжать, выбрать нужную модельку и отрисовать.
Как я уже не раз писал выше, игра работает не так. Ни один игровой движок так не делает. Игровой движок читает только нужный фрагмент пака с данными, разжимает прочитанные данные и пускает их туда, куда надо. И потом, в игре далеко не все данные - модельки. Там есть видео, музыка, двумерная графика разных видов, анимации и много чего еще.
Допустим, разжатая метамоделька в памяти весит 150 мб (оооочень демократично).
В HotS одна игровая модель весит не больше мегабайта. Как минимум, там умещается вся информация о вершинах. Анимационных треков у каждой модели не так уж и много, если сравнивать с другими играми. Текстуры у каждой модели укладываются в чуть больше одного мегабайта, их там около 8 штук. Как-то не дотягивает до 150 мегабайт. Но вот что дотягивает: https://designm.ag/wp-content/uploads/2012/06/piratescome_thumb.jpg
Это модель из программы ZBrush, довольно точная копия одного известного киногероя. Ее вес составляет те самые демократичные 150 мегабайт. Сравните с графикой в игре, и увидите колоссальную разницу.
Имеем 10 моделек героев - 1500 мб. Имеем модельки крипов. Допустим еще 500 мб к этому - 2000 мб в сумме.
Да, конечно, ведь компьютерная игра только тем и занимается, что рисует модельки и больше в ней нет никакого контента.
Имеем модельку карты и тут возникает сложность
Именно, что возникает сложность, поскольку карты никто не делает из одной-единственной модели. Это невыгодно, неудобно и может быть тяжело обрабатывать еще на этапе создания такой модели. Не говоря уже о том, что с ней будет твориться в реалтайме, поскольку видеокарта может попросту не прожевать такую кашу из треугольников.
Дело в том, что оптимально на экране отрисовывать то, что видит игрок, но это не эффективно на слабых компьютерах, так как при передвижении экрана возникают ситуации, когда надо отрисовать намного больше, чем может бюджетный ПК. Тут приходится прийти к решению хранения в памяти гораздо больше всего, чем видит игрок. Вернемся к карте и разрешению экрана. Битмап размера 1920 * 1080 весит в среднем: 1920 * 1080 * 32 бит = 8 мб. Но это только экран. Давайте прикинем так, что нужно хранить 9 экранов вокруг для возможности безфризового передвижения экрана - это 72 мб только графической информации в виде картинок, что эквивалентно 4320 мб при 60 фпс (если храним 60 кадров). Допустим, мы в кэше держим 10 - тогда это 720 мб.
То есть, алгоритмы разбиения пространства и отсечения невидимой геометрии ты признаешь слишком медленными и вообще чем-то из разряда фантастики. А еще считаешь, что прямо-таки все в игре рисуется в битмап. Все с тобой понятно, товарищ, но это неправильно. Садись, два. Игра именно что рисует только то, что видит игрок, и больше на отрисовку ничего не дает, иначе компьютер просто захлебнется, пытаясь это все просчитать. Сразу многократно возрастут затраты железных ресурсов компьютера и поиграть в такое можно будет только на кластере где-нибудь так за миллион баксов. Умные люди уже много лет как придумали способы упростить все это дело.
Про кэш кадров. Игровой движок этим не занимается. Этим занимается только сама видеокарта, в зависимости от настроек драйвера.
В итоге отрисовка карты с 10 модельками без движения, эффектов и претензий на скорость у нас заняла где-то 2720 мб. А теперь давайте учтем, что Абатур копировать может модельки и на карте может появиться больше 10 моделек. А давайте учтем, что для корректного движения нужна система прогнозирования действий, а давайте учтем, что эффекты занимают в разы больше, чем модельки, а давайте учтем, что движок тоже не весит 0. Будем дальше считать? Предлагаю вам это сделать, это полезно для понимания, а после - сказать, что получилось.
А давайте учтем, что помимо графики в игре есть еще логические сущности. А давайте учтем, что в игре есть еще музыка и анимации. А давайте учтем, что в игре еще есть источники освещения, информация о тенях и отражениях. А давайте учтем, что в игре еще есть кривая система кэша, которая не чистит данные карты, на которой игрок уже поиграл. А давайте учтем, что игра грузит данные только по мере необходимости и не всегда сразу все во время загрузки уровня, но и после данного этапа. А давайте учтем, что игра еще может выгружать неактуальные в данный момент данные. А давайте учтем, что у игры есть свой менеджер памяти, который служит для того, чтобы она не засорялась всяким трэшем. А давайте учтем, что в игре есть еще куча данных, которые необходимы для расчетов того-то того-то и того-то в реальном времени, да еще чтобы на старых третьих пентиумах летало. А давайте учтем, что те же скрипты на картах тоже требуют памяти, и что к ним относятся те же трассы крипов и еще много чего.
Вся графика одного кадра игры умещается в 511 мегабайт, можно уместить и в меньший объем, потому что у видеокарт память далеко не резиновая. Это и в оперативной памяти такой объем графики содержится и в памяти видеокарты. А оставшееся пространство уходит на информацию о том, что игра в настоящий момент времени не рисует, и на все остальное, причем хранится все это отнюдь не в виде битмапов. Часть я описал выше, а часть даже и не затронул.
По этой же логике люди могут не только использовать PAE, но и реверснуть игру, переписать для совместимости и собрать как им захочется. Все же достаточно образованные для этого, правда?
Современные школьники занимаются реверс-инжинирингом старых и современных игр, переписывают их на новый лад, ради чего даже собственные движки сочиняют порой; настраивают PAE и делают еще много разных интересных штук. Но в чьем-то представлении школьники это просто дети, а настолько недооценивать молодые умы, как по мне, категорически неправильно. Все они умеют, все они могут, все они знают. У них разве что опыта жизненного не хватает, чтобы взрослыми называться, но это придет со временем. Подумаешь - творят временами глупости, кто же их не творил, будучи в молодом, юношеском, а тем более детском возрасте? Не надо судить все стадо по паре овец, и ты совершишь немало невероятных открытий. Жизнь их полна.
Ты просто нереальный балабол. Сначала задаёшь общие вопросы, а потом когда тебе отвечаю обобщённо, то приводишь один какой-то пример и говоришь - зачем эти обобщения вот тут всё четко сказано. Понятно, что ты тут в демагогии решил попрактиковаться, ведь ты не очень разбираешься в теме и потому пытаешься выехать на пустом трёпе, при этом обвиняя всех вокруг что это они трепятся попусту. Я тебе ещё в начале написал - давай по существу, хватит ходить во круг да около. Но ты так и продолжил трепаться ни о чём.