pix.PlayGround.ru

Начало расследования

pix.PlayGround.ruКак вы уже заметили, интерес геймеров к шутеру Singularity угасает, поэтому я подготовил парочку статей по разработкам местного технического отдела (хе-хе), чтобы подвести итоги. Ну и как всегда написал всё это в Word, провёл форматирование текста, вёрстку, и вдруг Премодератор Файлов (трепещите!) говорит, что, мол, не положено пихать вордовские документы, когда у нас есть такая супер-пупер фича - DOX. Уговоры и взятки не помогли - Великий и Ужасный (не тот, о котором вы подумали) был непреклонен. Так уж и быть, перенесу всё это в DOX, убив полдня (а то и весь день), но в конце всё равно оставлю ссылку на оригинальный документ.
Внимание: данная статья не будет редактироваться и в неё не будет вноситься новая инфа!

Дальнейший текст является моими бредовыми мыслями в цифровой форме :) Это не является статьей или рецензией, больше похоже на отчёт, подведение итогов
(так как моих слов здесь от силы 10%, остальное – перевод с английского, который выделен курсивом, строки кода и картинки).
«Дело было вечером, делать было нечего…», вот так и был создан этот документ, цель которого – не только рассказать о способе устранения злополучного текстурного бага, но и описать его историю, показать, сколько людей участвовало в его исправлении, как всё это происходило и чем закончилось. И мне посрать на ваше мнение.

Ах да, плашки я спёр с Луркоморья (картинок и так много, обойдёмся без них).

Начнём-с!
В последнее время на форуме PG по игре Singularity остро встала проблема так называемых "размытых текстур". К сожалению, отсутствие достоверной информации и молчание самих разработчиков отрицательно сказалось на оперативности нашего исследования в этом направлении (нихрена ж себе фраза, такое можно придумать только по пьяни). Геймеры по всему миру начали замечать этот баг уже 25-26 июня, и многие из них сразу же пытались его исправить, ковыряясь в файлах игры (метод тыка никто не отменял).

Информация с VE3D

ТП (техподдержка) на VE3D достигла наибольшего успеха в решении этой проблемы.
Статья: Singularity PC Plagued By Texture Streaming Problems; Fix Found - Jun 26, 2010 at 8:40 AM - Andrew Burnes (перевод с английского мой, поэтому он очень дословный и кривой, приношу свои извинения):
О боже, несмотря на огромное число задержек c выходом игры и время, потраченное игроками в её ожидании, в Singularity осталась проблема с потоковой загрузкой текстур. Например, при прохождении игроком последней части любого уровня картинка сначала выглядит так (рис.1), а через несколько минут становится нормальной (рис.2).
pix.PlayGround.ru pix.PlayGround.ru

Используя Unreal Engine, игра имеет малое количество загрузочных экранов на протяжении 10-часовой одиночной кампании, как раз благодаря впечатляющим возможностям движка подгружать и обрабатывать текстуры. К несчастью, иногда такая "фоновая" загрузка идёт дольше, чем при использовании обычного "загрузочного экрана". К тому же, большинство игроков в начале уровня сразу бегут и стреляют, и не ждут, пока всё подгрузится, что приводит к такому недорисованному окружению...
Хватит теории, а то заснуть можно, если кому реально интересен сам движок UE – на оф. сайт
unrealtechnology.com и задрачиваем изучаем его до посинения.

Предприимчивые геймеры нашли несколько способов, обходящих эту траблу, но не исправляющих её. Для этого юзерам необходимо покопаться в реестре - это было вернее, чем простое изменение ini-файла (перевёл проще, а то "мрачный мир редактирования реестра" страшно звучит). При открытии ключа реестра HKEY_CURRENT_USER»Software»Activision»Singularity в редакторе (хотя бы regedit’ом) выводился список переменных, многие из которых можно изменить для повышения качества теней, улучшения фильтрации...
Для ускорения загрузки текстур юзерам необходимо было добавить переменную (в DWORD) bUseBackgroundLevelStreaming со значением 1. Во-вторых, также можно было добавить и EnableHighPolyChars для надёжной прорисовки ГГ и большинства врагов в высоком разрешении всё время, таким образом защищая некоторые текстуры (от выгрузки). Баг оставался, но теперь он был менее заметен и исправлялся быстрее...
Нах это надо, если сам баг оставался? Меня это не устраивает, с таким же успехом можно было выпить цианистый калий вместе с ношпой – авось эффект будет менее заметен и быстрее пройдёт. Идите вы в одно место с такими советами (вместе с анти-матом PG).

Из-за отсутствия официального форума и комьюнити-менеджера, мы дошли до самих Raven и Activision и попросили их прокомментировать сложившуюся ситуацию...
Об этом расскажу в конце.
pix.PlayGround.ru

Update: товарищ pyroMax сообщил нам, что он нашёл расположение настроек размера пула текстур в файлах игры, их изменение помогало решить похожие проблемы с другими играми на UE3 (рис.3). Однако в нашей ситуации эта настройка спрятана в .bin-файле и требуется редактировать как и bin, так и exeшник! Raven к тому же спрятали все настройки...
pix.PlayGround.ru
К сожалению, фикс pyroMax'а работает только на европейской версии игры и конечно не работает, если Singularity пропатчена. Всем остальным юзерам необходимо ВРУЧНУЮ редактировать в hex-редакторе свои файлы.
Update #2: pyroMax считает, что его фикс должен работать на всех версиях.
Update #3: Raven занимаются ‘исследованиями’.
Итак, мы выяснили, что такая трабла присуща всем играм на Unreal Engine, но в старых играх это особо не проявлялось из-за малого количества обрабатываемых ресурсов, тем более разрабы Singularity явно пытались выжать из данной версии движка максимум… всё равно непонятно, кто виноват.
Появилась зацепка – некий pyroMax, который якобы решил проблему тысячелетия (да, типа рис.4 :))

Встреча с таинственным PyroMax

Выходим на pyroMax'а - он сидит на Dear Wandy.
Тема: Index » General Discussion » Singularity Texture Streaming Fix
Singularity... представляет собой наихудший пример использования технологии потоковой передачи текстур UE (знаю, фигово перевёл, но вы и так поняли). К тому же, настройки UE3 спрятаны и зашифрованы разрабами...
Мне нравится эта игра... (опустим пафосное вступление) итак, я нашёл решение проблемы.
pix.PlayGround.ru
Инструкция pyroMax'а (можете не читать, она не совсем подходит русской версии (я уверен, что вы подумали это - рис.5),но в следующем разделе я написал для нашей версии игры):

Часть 1.
1. Найдите »%ProgramFiles%»Activision»Singularity(TM)»RvGame»CookedPC»Coalesced_INT.bin
2. Забэкапьте и откройте в hex-редакторе.
3. Найдите строку текста TextureStreaming в Юникоде.
4. Вы должны получить примерно такой результат:
Code:
00065100   FF FF 54 00 65 00 78 00 74 00 75 00 72 00 65 00   яяT.e.x.t.u.r.e. 
00065110   53 00 74 00 72 00 65 00 61 00 6D 00 69 00 6E 00   S.t.r.e.a.m.i.n.
00065120   67 00 00 00 0D 00 00 00 F7 FF FF FF 50 00 6F 00   g.......чяяяP.o.
00065130   6F 00 6C 00 53 00 69 00 7A 00 65 00 00 00 FC FF   o.l.S.i.z.e...ья
00065140   FF FF 31 00 33 00 30 00 00 00 F0 FF FF FF 48 00   яя1.3.0...ряяяH.
5-6. Перепишите значение PoolSize со 130 на 400, должно получиться так:
Code:
00065100   FF FF 54 00 65 00 78 00 74 00 75 00 72 00 65 00   яяT.e.x.t.u.r.e.
00065110   53 00 74 00 72 00 65 00 61 00 6D 00 69 00 6E 00   S.t.r.e.a.m.i.n.
00065120   67 00 00 00 0D 00 00 00 F7 FF FF FF 50 00 6F 00   g.......чяяяP.o.
00065130   6F 00 6C 00 53 00 69 00 7A 00 65 00 00 00 FC FF   o.l.S.i.z.e...ья
00065140   FF FF 34 00 30 00 30 00 00 00 F0 FF FF FF 48 00   яя4.0.0...ряяяH.
7. Если всё ок, сохраните файл и получите хэш SHA-1 для него.
 
Часть 2.
1-2. Найдите файл »%Program Files%»Activision»Singularity(TM)»Binaries»Singularity.exe ; забэкапьте и откройте его в hex-редакторе.
3. Найдите строку текста coalesced_int.bin в ASCII.
4. Вы должны получить примерно такое:
Code:
017FBAF0   00 00 04 00 00 00 00 00 63 6F 61 6C 65 73 63 65   ........coalesce
017FBB00   64 5F 69 6E 74 2E 62 69 6E 00 FF A3 26 E7 39 21   d_int.bin.яЈ&з9!
017FBB10   29 E7 D1 1B 09 0A 83 1B F7 2D B9 54 7F 28 63 6F   )зС...ѓ.ч-№T.(co
017FBB20   61 6C 65 73 63 65 64 5F 6A 70 6E 2E 62 69 6E 00   alesced_jpn.bin.
5-6. Перепишите часть кода значением хэша SHA-1, полученного в части 1, примерно так:
Code:
017FBAF0   00 00 04 00 00 00 00 00 63 6F 61 6C 65 73 63 65   ........coalesce
017FBB00   64 5F 69 6E 74 2E 62 69 6E 00 63 58 B6 9E 2F D0   d_int.bin.cX¶ћ/Р
017FBB10  B6 CD 08 6B AC DF 93 1E 17 A9 A1 6C 58 DE 63 6F  ¶Н.k¬Я“..©ЎlXЮco
017FBB20   61 6C 65 73 63 65 64 5F 6A 70 6E 2E 62 69 6E 00   alesced_jpn.bin.
7. Если всё ок, то сохраните файл и мучайтесь дальше играйте!
 
Примечания:
1.Hex-дампы выше взяты из розничной версии игры, ваши результаты могут отличаться.
2. Попытка запустить игру сразу после выполнения части 1 (перед частью 2) приведёт к ошибке/крэшу.
3. Если после выполнения всех действии игра не запускается, восстановите оригинальные файлы и повторите снова.
4. Если после восстановления игра всё равно не запускается, то переустановите игру.
pyroMax – последнее редактирование - Jun 27, 2010 at 6:07am

Правим баг вручную

pix.PlayGround.ru
Наша инструкция для крякнутой русской версии (на примере WinHex v15.6) – для нубов чайников.
Часть 1
pix.PlayGround.ru
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)).
pix.PlayGround.ru
Warning: юзерам с кривыми руками дальнейшее чтение инструкции ЗАПРЕЩЕНО!!!
4. По инструкции необходимо исправить 130 на 400. Для этого глубоко вдохните, нажмите синим курсором на 1, поменяйте цифру на 4; вместо цифры 3 пишете 0, выдохните.
Для тех, кто не читал
матчасть, объясню попроще: данные слева (в шестнадцатеричном формате) и данные справа (текст/символы в ASCII/Unicode) редактируются одновременно, так как ЭТО ОДНО И ТО ЖЕ, но просто записано по-разному.
Не трогайте код слева, с вашими знаниями в hex-редактировании это может привести к непредсказуемым последствиям!!! Нужно исправить всего две цифры, больше ничего не делайте, не ищите себе приключений на одно место, а то потом пойдёте в аптеку за вазелином.
5. Должно получиться что-то типа этого (рис.9).
pix.PlayGround.ru pix.PlayGround.ru
6. Сохраняем: File->Save (на вопрос об апдейте – Yes).
pix.PlayGround.ru 7. Не закрывайте файл, получите хэш SHA-1 (160-bit) для всего файла.
Tools->Compute Hash (рис.10) -- SHA-1 (рис.11)—ОК.
Рис.12 – хэш получен для всего файла (всё ок)
Рис.13 – хэш получен только для части файла – есть в названии Block (что нихрена не верно!) – необходимо отменить выделение (можно просто закрыть и снова открыть этот файл).
pix.PlayGround.ru pix.PlayGround.ru
8. Получаете ряд чисел/букв, запоминаете или записываете, мне всё равно, он пригодится позже (в части 2).
9. Закрываете окно.
pix.PlayGround.ru
Радуйтесь – часть 1 завершена, перекурите, расслабьтесь, но ни в коем случае не запускайте игру!!!
P.S. но я пошёл до конца, запустил игру и получил Runtime Error, это было действительно неожиданно (рис.14)!!!
//конец части 1

Часть 2
pix.PlayGround.ru 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, смотрите дальше вправо – ищете следующий символ после этого текста (не считая точек и пробелов) - у меня это ‘<’, тыкаете курсорм в него и слева тоже появляется курсор, и вы начинаете оттуда слева вручную вбивать значение хэша (помните теорию – меняется одновременно!).
pix.PlayGround.ru
Мда, фигово я объяснил, лучше выложу скрины (рис.17).
pix.PlayGround.ru
У меня хэш SHA-1 равен A95609A1E40371CDAEAC46DE6496677063806A46, его я и пишу (рис.18).
pix.PlayGround.ru
Всё проще некуда, в части 1 мы меняли данные справа – слева менялись сами; сейчас меняем данные слева – справа меняется само, так как ЭТО ОДНО И ТО ЖЕ.
Warning: не трогайте ничего справа, меняем только данные слева!!!
Обратите внимание, что если смотреть справа, то вы должны закончить вбивать хэш прямо перед строкой coalesced_pol.bin, она не должна измениться. Если, вбивая значение SHA-1, вы заметили нехватку символов, то возможно, вы пишете не с того места.
Инфа к сведению: значение хэша SHA-1 (160-bit) – 40 символов!
5. Сохраняем файл, закрываем.
6. Теперь наступает момент истины – запускаем игру. Если у вас выдаёт ошибку (рис.14), то вы неудачник, делайте всё заново, остальным же можно открывать шампанское – сейчас вы круты, как никогда, наслаждайтесь!
 
Примечания:
1. Инструкция написана мной таким образом, что просто не должно возникнуть никаких вопросов (типа “что это за херня?”), здесь даже нет никаких напрягающих терминов.
2. Всё работает!!
3. Да, кстати:
pix.PlayGround.ru
//загрузить и вставить огромное количество скринов - рис.6-18, так надело принтскринить из Ворда (спасибо Великому Премодератору, чтоб ему сейчас икнулось)
//complete

Ещё немного инфы

Вернёмся к нашему ‘расследованию’.
По ссылке pyroMax’a попадаем в блог некоего товарища Logan.
Статья: Singularity automated streaming texture patch
Вдохновлённый фантастической работой pyroMax и Ко. по исправлению бага с текстурами в Singularity, я решил создать программу, которая автоматически исправляет код и решает траблу.
У меня нет этой игры, но я всё-таки потестил свою прогу, она должна работать, но не на всех версиях игры...
~ by Logan on June 27, 2010.
Короче, Logan сделал мини-патч, который автоматом правит всё по инструкции pyroMax (но нам он не подходит, успокойтесь).
Всё не перевожу, потому что там дублируется инфа из двух статей выше.

И на закуску:
Статья: Raven On Singularity PC Texture Streaming Problems - Jun 28, 2010 at 8:40 AM - Andrew Burnes
Как вы уже заметили, в последней игре от Raven'ов (Singularity) присутствует довольно серьёзная проблема с текстурами (хрен не заметишь)
Её решение уже найдено самими юзерами, для этого надо изменить в hex-редакторе некоторые файлы игры. Но так как этот баг попадал в категорию "серьёзного бага", мы связались с разрабами и получили ответ: 'Мы исследуем проблему. Пока можем сказать, что этот баг возникает только на PC, и мы будем держать вас в курсе'.
Сегодня уже 15 июля - от них ни слова. Что они там исследуют???

Сделаем выводы

pix.PlayGround.ruВот мы и подошли к концу. Надеюсь, что вы нашли здесь ответы на свои вопросы, тогда я не зря угробил время на перевод и оформление (и поиск тупых картинок).

Выводы:
1-2. Эти шикарные высокоинтеллектуальные фразы не пропустила цензура (см. оригинал). 3. Пару человек справились с багом быстрее, чем большая компания. Остальное додумайте сами… pix.PlayGround.ru 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'ов полно
//напомните мне стереть комментарии
Нравится9
Комментарии
    B
    i
    u
    Спойлер