Singularity - История бага с размытыми текстурами (#2695)
Singularity - История бага с размытыми текстурами
Содержание
Начало расследования
Информация с VE3D
Встреча с таинственным PyroMax
Правим баг вручную
Ещё немного инфы
Сделаем выводы
P.S.
Начало расследования
Как вы уже заметили, интерес геймеров к шутеру Singularity угасает, поэтому я подготовил парочку статей по разработкам местного технического отдела (хе-хе), чтобы подвести итоги. Ну и как всегда написал всё это в Word, провёл форматирование текста, вёрстку, и вдруг Премодератор Файлов (трепещите!) говорит, что, мол, не положено пихать вордовские документы, когда у нас есть такая супер-пупер фича - DOX. Уговоры и взятки не помогли - Великий и Ужасный (не тот, о котором вы подумали) был непреклонен. Так уж и быть, перенесу всё это в DOX, убив полдня (а то и весь день), но в конце всё равно оставлю ссылку на оригинальный документ. Внимание: данная статья не будет редактироваться и в неё не будет вноситься новая инфа!
Дальнейший текст является моими бредовыми мыслями в цифровой форме :) Это не является статьей или рецензией, больше похоже на отчёт, подведение итогов (так как моих слов здесь от силы 10%, остальное – перевод с английского, который выделен курсивом, строки кода и картинки).
«Дело было вечером, делать было нечего…», вот так и был создан этот документ, цель которого – не только рассказать о способе устранения злополучного текстурного бага, но и описать его историю, показать, сколько людей участвовало в его исправлении, как всё это происходило и чем закончилось. И мне посрать на ваше мнение. Ах да, плашки я спёр с Луркоморья (картинок и так много, обойдёмся без них).
Начнём-с! В последнее время на форуме PG по игре Singularity остро встала проблема так называемых "размытых текстур". К сожалению, отсутствие достоверной информации и молчание самих разработчиков отрицательно сказалось на оперативности нашего исследования в этом направлении (нихрена ж себе фраза, такое можно придумать только по пьяни). Геймеры по всему миру начали замечать этот баг уже 25-26 июня, и многие из них сразу же пытались его исправить, ковыряясь в файлах игры (метод тыка никто не отменял).
Информация с VE3D
ТП (техподдержка) на VE3D достигла наибольшего успеха в решении этой проблемы.Источник: ve3d.ign.com/articles/news/55774/Singularity-PC-Plagued-By-Texture-Streaming-Problems-Fix-Found
Статья: Singularity PC Plagued By Texture Streaming Problems; Fix Found - Jun 26, 2010 at 8:40 AM - Andrew Burnes (перевод с английского мой, поэтому он очень дословный и кривой, приношу свои извинения):
О боже, несмотря на огромное число задержек c выходом игры и время, потраченное игроками в её ожидании, в Singularity осталась проблема с потоковой загрузкой текстур. Например, при прохождении игроком последней части любого уровня картинка сначала выглядит так (рис.1), а через несколько минут становится нормальной (рис.2). Используя Unreal Engine, игра имеет малое количество загрузочных экранов на протяжении 10-часовой одиночной кампании, как раз благодаря впечатляющим возможностям движка подгружать и обрабатывать текстуры. К несчастью, иногда такая "фоновая" загрузка идёт дольше, чем при использовании обычного "загрузочного экрана". К тому же, большинство игроков в начале уровня сразу бегут и стреляют, и не ждут, пока всё подгрузится, что приводит к такому недорисованному окружению... Хватит теории, а то заснуть можно, если кому реально интересен сам движок UE – на оф. сайт unrealtechnology.com и задрачиваем изучаем его до посинения.
Предприимчивые геймеры нашли несколько способов, обходящих эту траблу, но не исправляющих её. Для этого юзерам необходимо покопаться в реестре - это было вернее, чем простое изменение ini-файла (перевёл проще, а то "мрачный мир редактирования реестра" страшно звучит). При открытии ключа реестра HKEY_CURRENT_USER»Software»Activision»Singularity в редакторе (хотя бы regedit’ом) выводился список переменных, многие из которых можно изменить для повышения качества теней, улучшения фильтрации...
Для ускорения загрузки текстур юзерам необходимо было добавить переменную (в DWORD) bUseBackgroundLevelStreaming со значением 1. Во-вторых, также можно было добавить и EnableHighPolyChars для надёжной прорисовки ГГ и большинства врагов в высоком разрешении всё время, таким образом защищая некоторые текстуры (от выгрузки). Баг оставался, но теперь он был менее заметен и исправлялся быстрее...
Нах это надо, если сам баг оставался? Меня это не устраивает, с таким же успехом можно было выпить цианистый калий вместе с ношпой – авось эффект будет менее заметен и быстрее пройдёт. Идите вы в одно место с такими советами (вместе с анти-матом PG).
Из-за отсутствия официального форума и комьюнити-менеджера, мы дошли до самих Raven и Activision и попросили их прокомментировать сложившуюся ситуацию... Об этом расскажу в конце.
Update: товарищ pyroMax сообщил нам, что он нашёл расположение настроек размера пула текстур в файлах игры, их изменение помогало решить похожие проблемы с другими играми на UE3 (рис.3). Однако в нашей ситуации эта настройка спрятана в .bin-файле и требуется редактировать как и bin, так и exeшник! Raven к тому же спрятали все настройки...
К сожалению, фикс pyroMax'а работает только на европейской версии игры и конечно не работает, если Singularity пропатчена. Всем остальным юзерам необходимо ВРУЧНУЮ редактировать в hex-редакторе свои файлы.
Update #2: pyroMax считает, что его фикс должен работать на всех версиях.
Update #3: Raven занимаются ‘исследованиями’.
Итак, мы выяснили, что такая трабла присуща всем играм на Unreal Engine, но в старых играх это особо не проявлялось из-за малого количества обрабатываемых ресурсов, тем более разрабы Singularity явно пытались выжать из данной версии движка максимум… всё равно непонятно, кто виноват.
Появилась зацепка – некий pyroMax, который якобы решил проблему тысячелетия (да, типа рис.4 :))
Правим баг вручную
Наша инструкция для крякнутой русской версии (на примере WinHex v15.6) – для нубов чайников. Часть 1
1. Откройте в hex-редакторе файл Coalesced_RUS.bin из папки … »Singularity» RvGame»CookedPC» (в WinHex v15.6 File->Open)
2. Найдите строку текста TextureStreaming в Юникоде ( если вы по какой-то причине не хотите просматривать 1056896 строчек кода, воспользуйтесь утилитой поиска Search->Find Text… (рис.6), вбейте в строку поиска TextureStreaming, включите поиск в Юникоде (Match case – Unicode), отметьте Whole words only – Только целые слова, Search - All и жмите ОК (рис.7)).
3. Находим в выданном участке кода справа строку TextureStreaming и чуть ниже от неё – PoolSize и цифры 130 (у меня это строки 65100-65140 (рис.8)).
Warning: юзерам с кривыми руками дальнейшее чтение инструкции ЗАПРЕЩЕНО!!!
4. По инструкции необходимо исправить 130 на 400. Для этого глубоко вдохните, нажмите синим курсором на 1, поменяйте цифру на 4; вместо цифры 3 пишете 0, выдохните.
Для тех, кто не читал матчасть, объясню попроще: данные слева (в шестнадцатеричном формате) и данные справа (текст/символы в ASCII/Unicode) редактируются одновременно, так как ЭТО ОДНО И ТО ЖЕ, но просто записано по-разному.
Не трогайте код слева, с вашими знаниями в hex-редактировании это может привести к непредсказуемым последствиям!!! Нужно исправить всего две цифры, больше ничего не делайте, не ищите себе приключений на одно место, а то потом пойдёте в аптеку за вазелином.
5. Должно получиться что-то типа этого (рис.9).
6. Сохраняем: File->Save (на вопрос об апдейте – Yes).
7. Не закрывайте файл, получите хэш SHA-1 (160-bit) для всего файла.
Tools->Compute Hash (рис.10) -- SHA-1 (рис.11)—ОК.
Рис.12 – хэш получен для всего файла (всё ок)
Рис.13 – хэш получен только для части файла – есть в названии Block (что нихрена не верно!) – необходимо отменить выделение (можно просто закрыть и снова открыть этот файл).
8. Получаете ряд чисел/букв, запоминаете или записываете, мне всё равно, он пригодится позже (в части 2).
9. Закрываете окно.
Радуйтесь – часть 1 завершена, перекурите, расслабьтесь, но ни в коем случае не запускайте игру!!!
P.S. но я пошёл до конца, запустил игру и получил Runtime Error, это было действительно неожиданно (рис.14)!!!
//конец части 1
Часть 2
1. Открываем в hex-редакторе файл Singularity.exe из папки … »Singularity» Binaries»
2. Находим строку текста coalesced_rus.bin в ASCII (Search->Find Text…, вбивайте в поиск coalesced_rus.bin, ставите Match case – ASCII/Code page, и опять же Whole words only и Search –All (рис.15)).
3. Ищете этот участок кода (рис.16).
Warning: сейчас будет самая сложная часть – переписывать код СЛЕВА!!! (*паника*) А если серьёзно, то ничего страшного нет, код не кусается :)
4. Мы (то есть вы) должны вставить тот самый хэш SHA-1 сюда (надеюсь, вы его записали). Главное – понять, куда его вставить. Объясню так: находите строку текста coalesced_rus.bin, смотрите дальше вправо – ищете следующий символ после этого текста (не считая точек и пробелов) - у меня это ‘<’, тыкаете курсорм в него и слева тоже появляется курсор, и вы начинаете оттуда слева вручную вбивать значение хэша (помните теорию – меняется одновременно!).
Мда, фигово я объяснил, лучше выложу скрины (рис.17).
У меня хэш SHA-1 равен A95609A1E40371CDAEAC46DE6496677063806A46, его я и пишу (рис.18).
Всё проще некуда, в части 1 мы меняли данные справа – слева менялись сами; сейчас меняем данные слева – справа меняется само, так как ЭТО ОДНО И ТО ЖЕ.
Warning: не трогайте ничего справа, меняем только данные слева!!!
Обратите внимание, что если смотреть справа, то вы должны закончить вбивать хэш прямо перед строкой coalesced_pol.bin, она не должна измениться. Если, вбивая значение SHA-1, вы заметили нехватку символов, то возможно, вы пишете не с того места.
Инфа к сведению: значение хэша SHA-1 (160-bit) – 40 символов!
5. Сохраняем файл, закрываем.
6. Теперь наступает момент истины – запускаем игру. Если у вас выдаёт ошибку (рис.14), то вы неудачник, делайте всё заново, остальным же можно открывать шампанское – сейчас вы круты, как никогда, наслаждайтесь!
Примечания:
1. Инструкция написана мной таким образом, что просто не должно возникнуть никаких вопросов (типа “что это за херня?”), здесь даже нет никаких напрягающих терминов.
2. Всё работает!!
3. Да, кстати:
//загрузить и вставить огромное количество скринов - рис.6-18, так надело принтскринить из Ворда (спасибо Великому Премодератору, чтоб ему сейчас икнулось)
//complete
Ещё немного инфы
Вернёмся к нашему ‘расследованию’.
По ссылке pyroMax’a попадаем в блог некоего товарища Logan.
Источник: www.playwrite-blog.net/tools-and-utilities/singularity-texture-patch/
Статья: Singularity automated streaming texture patch
Вдохновлённый фантастической работой pyroMax и Ко. по исправлению бага с текстурами в Singularity, я решил создать программу, которая автоматически исправляет код и решает траблу.
У меня нет этой игры, но я всё-таки потестил свою прогу, она должна работать, но не на всех версиях игры...
~ by Logan on June 27, 2010.
Короче, Logan сделал мини-патч, который автоматом правит всё по инструкции pyroMax (но нам он не подходит, успокойтесь).
Всё не перевожу, потому что там дублируется инфа из двух статей выше.
И на закуску:
Источник: ve3d.ign.com/articles/news/55789/Raven-On-Singularity-PC-Texture-Streaming-Problems
Статья: Raven On Singularity PC Texture Streaming Problems - Jun 28, 2010 at 8:40 AM - Andrew Burnes
Как вы уже заметили, в последней игре от Raven'ов (Singularity) присутствует довольно серьёзная проблема с текстурами (хрен не заметишь)
Её решение уже найдено самими юзерами, для этого надо изменить в hex-редакторе некоторые файлы игры. Но так как этот баг попадал в категорию "серьёзного бага", мы связались с разрабами и получили ответ: 'Мы исследуем проблему. Пока можем сказать, что этот баг возникает только на PC, и мы будем держать вас в курсе'.
Сегодня уже 15 июля - от них ни слова. Что они там исследуют???
Сделаем выводы
Вот мы и подошли к концу. Надеюсь, что вы нашли здесь ответы на свои вопросы, тогда я не зря угробил время на перевод и оформление (и поиск тупых картинок).
Выводы:
1-2. Эти шикарные высокоинтеллектуальные фразы не пропустила цензура (см. оригинал). 3. Пару человек справились с багом быстрее, чем большая компания. Остальное додумайте сами… P.S. кстати, есть ещё инфа про Field of View, но это уже совсем другая история… P.P.S. пожалуй, вставлю парочку картинок по теме Singularity просто так. Enjoy ;)
Created by ZimaAlex – Jul 15, 2010.
All rights reserved… bla-bla-bla…
Special for PG. Special for you. Special for fun.
P.S.
Как я и обещал, ссылка на оригинал - файл в формате .doc: ссылка на народ
Может кто-нибудь читает на толчке, а ноута нет - вот и распечатаете :)
№1 - Singularity - История бага с размытыми текстурами (вы здесь)
№2 - Singularity - Оптимизация (теория)
№3 - Singularity - Всё об игре (часть 1)
№4 - Singularity - Оптимизация (практика)
№5 - Singularity - Всё об игре (часть 2)
//почистить код, если будет время, а то лишних div'ов полно
//напомните мне стереть комментарии
1188 Прочтений • [Singularity - История бага с размытыми текстурами (#2695)] [16.05.2012] [Комментариев: 0]