Форумы
На Windows Server 2003, можно получить более высокие результаты в тестовых пакетах, не меняя частот
Последние статьи
AverTV 305 Studio и Windows 7 x64

AverTV 305 Studio и Windows 7 x64
Традиции производителей остаются неизменны, старое железо не работает на новых системах, а новые системы на старом железе...

читать далее...

 

Ремонт бесперебойного блока питания (UPS)

Ремонт бесперебойного блока питания (UPS)
Думаю у многих в шкафу или кладовке остался старый ИБП, который по их мнению как говориться: "отжил своё". А вот и нет!

читать далее...

 

Программный тюнинг видеокарт на примере GTX 460 и HD 5770

Программный тюнинг видеокарты на примере GTX 460 и HD 5770
В качестве GTX 460 была взята карта от Palit, HD 5770 представляет XFX.

читать далее...

 

HIS Radeon R7 250 iCooler - тестируем бюджет


Проверяем новую архитектуру AMD и чип Oland, на примере бюджетной новинки в лице HIS Radeon R7 250 1 гБайт GDDR5

читать далее...

 

Разгон видеокарты на примере Palit 8600 GT


В один прекрасный день, придя домой, после успешно прожитых 2х дней вне дома )), я включил комп и сказал себе: "что либо я сегодня убью свою видеокарту, а завтра пойду за новой в магазин, либо избавлюсь от уже поднадоевшего свиста и треска дросселей моей видеокарты"... так и сделал.... что из этого вышло читайте

читать далее...

 

Установка SATA дисков на системы IDE

Установка SATA дисков на системы IDE
Рассмотрим проблемы и их решения, а также устройства, которые нам в этом помогут

читать далее...

 

Athlon XP Barton, Epox EP-8RDA3I и конец 2013 года

AMD Athlon XP 2500+ Barton
Процессор Athlon XP 2500+ Barton (1999 года выпуска), плата Epox EP-8RDA3I (2002 г.в.) и Windows 7 (2009). Помучаем старое железо спустя почти 15 лет!

читать далее...

 

Разгон и BSEL мод процессора Intel Celeron Tualatin

Разгон и BSEL мод Tualatin
Ещё одна достаточно старая статья, но не менее интересная, будем гонять Intel Celeron Tualatin 1.3 гГц Socket 370 через BSEL модификацию.

читать далее...

 

PhysX на ATI Radeon HD 5870

Radeon PhysX
Рано или поздно каждый владелец видеокарты от AMD сталкивался с вопросом про PhysX, а точнее можно ли его задействовать вообще.

читать далее...

 

Cooler Master Elite 311 - практика

Cooler Master Elite 311
Давно хотел поменять свой корпус системного блока, в итоге выбрал именно эту модель.

читать далее...

 

Читать все

Crysis 3 DirectX 9, DirectX 10 теория и практика

Главная страница » Статьи » Crysis 3 DirectX 9, DirectX 10 теория и практика

Дата публикации: 16.03.2013 (20:58)

Crysis 3 DX9 DX10

Совсем недавно вышла новая игра от CryTek. В новой версии движка, разработчики дружно послали подальше всех обладателей старых DX9-DX10 карт, решение этой несправедливость мы рассмотрим в данной статье. Давайте дружно передадим привет Немцам!.
Всё дело в том, что CryTek хочет заработать как можно больше денег, для этого и была проплачена данная игра. Ведь AMD и Nvidi'и выгодно побыстрее продать свои карты DX11.
Иначе чем объяснить такой отказ от старого API? Когда игра также выходит на консолях PS3 и XboX 360, где максимальный уровень поддержки DX заканчивается цифрой девять!

Сравнение Crysis 3 и предыдущей версии игры (C3)

Единственное весомое отличие этих движков в том, что последний не поддерживает старый API DirectX, остальное худо бедно схожее. Теперь обо всем по порядку.
Общее: в обоих движках структура папок является схожей, в частности: Bin32, Engine, Patch лежат в корне основной папки игры.

Начинаем превращение Crysis 3 в Crysis 2.5 ))

Для успешной переделки я (YURBAN) использовал Crysis 2 v. 1.9 и Crysis 3 v. 1.2
Операции:

  • В папке с игрой Crysis 3, переименовываем: bin32 в bin32_BACK
  • Переименовываем Crysis 3\system.cfg в Crysis 3\system.cfg_BACK
  • Копируем из папки, с установленным Crysis 2 - папку bin32 в папку игры Crysis 3.
  • Копируем/перемещаем Crysis 2\system.cfg в Crysis 3\system.cfg
  • Запускаем exe-шник: Crysis3\bin32\crysis2.exe и получаем ошибку:
    Crysis 3 DX9 DX10
  • Периодически читаем файл Crysis3\Game.log!
  • Теперь переименовываем папку Crysis3\C3 в Crysis3\gamecrysis2
  • Переименовываем файл в Crysis3\gamecrysis2\_FastLoad\startup.pak в Crysis3\gamecrysis2\_FastLoad\startup.pak_BACK
  • Копируем/перемещаем файл Crysis2\gamecrysis2\_FastLoad\startup.pak в Crysis3\gamecrysis2\_FastLoad\startup.pak
  • Копируем/перемещаем папку из Crysis3\Localization в Crysis3\gamecrysis2\Localized
  • Пробуем запустить Crysis3\Crysis2.exe снова: получаем черный экран с зеленым бегающим курсором, через несколько секунд игра опять вылетает!
  • Das ist Gut!
  • Читаем снова Crysis3\Game.log, видим что-то вроде:
    Initializing AI System
    [Error] Unable to find any Localization Data!
    [Error] Failed to load anim pair file! scripts/animPairs.xml No 3P animations will play!
    [Profile] Warning: Could not open configuration file
    [Game Version]: RELEASE PURE CLIENT
    [Error] Unable to load 'Scripts/Progression/ProgressionTokens.xml'
    [Error] Unable to load 'Scripts/Progression/PersistantStatMapParams.xml'
Проблема отстутсвия локализации кроется в следующем: в Crysis 2 имеется лишь один архив gamecrysis2\Localized\Russian.pak, в Crysis 3 их уже два - Localization\Russian.pak и Localization\Russian_xml.pak

Работаем по "жесткой" схеме

Качаем программу PAK Manager (Pak Manager Tool), она нужна для распаковки шифрованных *.PAK файлов игры, с официального сайта CryTek, поставляемую в комплекте с Crysis 2 Mod SDK

Crysis 3 DX9 Project

Обновлено 22.03.2013!
После изнурительного копания в CryEngine 2 и CryEngine 3 было установлено, что в последнем (из игры), присутствуют важные настройки.
Среди них нужно отметить - r_Driver(CE3) принимает значения: DX11, AUTO и NULL.
Цитата из crysis3.exe "Sets the renderer driver ( DX11/AUTO/NULL )". А также очень помогла строчка: Specify in system.cfg like this: r_Driver = "DX11". Specifies index of the preferred video adapter to be used for rendering (-1=off, loops until first suitable adapter is found). Выставление r_Driver="DX9" привело к исчезновению части объектов на картах и отсутвием прорисовки персонажей (видна была только голова и оружие).

Проверяем r_ShadersExport (0 off, 1 allow shader export during shader cache generation - Currently 360 only.), то есть экспортируем обработанные эффекты в файлы (Crysis3\USER\Shaders\Cache).
И опять неудача, как было выявлено научными изысканиями, большинство команд, которые были доступны в C2, здесь либо зафиксированы, либо движок не реагирует никак на их изменение, хотя в коде часто просматриваются настройки для PS3 и Xbox 360, в частности: r_ShadersPS3 и r_ShadersXenon. Вообще говоря, сам файл crysis3.exe содержит много мусора и ненужной информации, например, можно найти вызовы и параметры компилятора, но то что нужно отыскать так и не удалось, на этой ноте изучение CryEngine 3 было остановлено. Стоит отметить что в коде C3, проскакивает выражение D3D9, так что возможно, изначально, CE3 создавался и под DX9 также, видимо разработчики столкнулись с какой-то необъяснимой проблемой и решили не напрягатся, сварганив по быстрому "новый" движок.

Чего удалось добиться

Опытным путем было выявлено, что C3, откликается на комманду в system.cfg, sys_spec (0-6), причем значение 5 для Xbox 360, а значение 6 для PS3! (sys_spec=5). Должен заметить что в этом случае, игра начинает использовать весь ваш N-ядерный процессор без остановки, нагружая его на 99%! Видео ниже демонстрирует основную проблему, в движке CE3 нет текстур низкого разрешения, по крайней мере для персонажей. Кроме того обнаружили возможность перекомпиляции текстур. Смотрите скриншоты ниже и смотрите ролик.

Crysis3.exe FAR Crysis3.exe #2 FAR

В данный момент команда энтузиастов HardWare Masters работает над этим, как закончим и протестируем - выложим!

Crysis 2 MOD SDK

Для установки пакета разработчика от немцев, требуется C2 версии 1.9, если у Вас установлена пиратка и SDK не устанавливается вываливаясь с ошибкой: "requires a full installation of the game Crysis 2, updated to Patch 1.9", то нужно сделать следующее:
- проверить ключ реестра (для 32-битных систем) HKEY_LOCAL_MACHINE\SOFTWARE\Crytek\Crysis 2 ключ строкового типа Install Dir, если такой записи нет в реестре или путь указан не верно, то создать и прописать нужный!
- для x64 систем, ключ реестра лежит по адресу: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Crytek\Crysis 2, действия аналогичны предыдушему пункту.

Crysis 2 SDK MOD

Полезные ссылки

Документация по CryENGINE 3
Crysis 3 X360 Image (Шейдеры 9)
DirectX SDK

DirectX 11 Hook/Hack/Patch

После массы проведенного времени в изучении движка от игры Crysis 2, на ум пришла идея эмуляции/обхода API вызовов DirectX 11. Собственно идея не новая, если вспомнить старую утилиту от немецкого автора, под названием 3D Analyze, которая позволяла эмулировать версию шейдеров и настраивать каждое приложение практически под любую видео карту, то этот метод решения является более быстрым и надежным. Мы отправили Thomas'у сообщение, но и сами уже начали работать по этому направлению. Патч/Хак/Утилита будет представлять себя либо прямой патч (.dll) либо универсальный (модифицировать память процесса).

В итоге исследований EXE-файла было решено сделать "свою" библиотеку d3d11.dll, чтобы функции в библиотеке возвращали нужные параметры без участия драйверов. Также в процессе исследования технологии DirectX был найден очень интересный ряд деталей, например то, что любую модель с эффектами DX11, можно отрендерить практически на любой видеокарте. Собственно возникло подозрение, что все "плюшки" DX10/11 и т.д., это надстройки над DX9, и поддержка соотв API, кроется только в драйверах. Ведь какая разница что отправлять на чип? В конце концов всё равно машинный код отправляется на чип, для примера, Тесселяция - по факту, добавляет ещё несколько каркасов к уже имеющейся модели. В итоге мы видим воочую весь современный маркетинг, то есть, для продажи новых чипов придумали новые фишки, которые и на более ранних моделях (8600GT / Radeon 4000 серия...) можно также воссоздать. Например если в DX9 выпуклость можно построить 9 командами, то в DX11 лишь 3мя, это просто для примера, на выходе всё равно графический чип будет нагружаться одинаково ). Ещё один момент, даже если Вы сделаете модель только для 11 версии шейдеров, Вам всё равно придется устанавливать "выпуклости и освещение" руками. Именно по этому в Crysis 3 шейдеры для моделей уже лежат в самой игре ). По факту все блоки стоят в драйверах и в библиотеках (спасибо MS, NV и AMD - все монополисты). Ниже видео, демонстрирует в какую сторону нужно копать, а также наглядно показывает верность моего утверждения.
Что Мы хотим сделать? Заменить библиотеки DX11, аналогами, то есть каждый вызов фунции API 11.0/11.1, будет всегда успешным ;).
Немного вспомнив историю... Например как долго народ сидел на XP, и всех всё устраивало, а также провал Vista (основная фишка псевдо DX10), а потом медленный переход на Seven (вылезанная виста и псевдо-новый DX11), ещё раз доказывает верность утверждения.

Подготовка к хаку

Альтернативная библиотека DirectX 11 - концепт

DirectX 11 Alternative

После поверхностного исследования игры на предмет вызова функций DirectX, до загрузки меню, были найдены две: D3D11CreateDevice и D3D11CreateDeviceAndSwapChain. Открыв базу знаний микрософта (MSDN) было обнаружено, что расхождений не так уж и много, за исключением кол-ва аргументов.

Объявление функции D3D11CreateDevice

HRESULT D3D11CreateDevice( _In_ IDXGIAdapter *pAdapter, _In_ D3D_DRIVER_TYPE DriverType, _In_ HMODULE Software, _In_ UINT Flags, _In_ const D3D_FEATURE_LEVEL *pFeatureLevels, _In_ UINT FeatureLevels, _In_ UINT SDKVersion, _Out_ ID3D11Device **ppDevice, _Out_ D3D_FEATURE_LEVEL *pFeatureLevel, _Out_ ID3D11DeviceContext **ppImmediateContext );

Объявление функции D3D10CreateDevice

HRESULT D3D10CreateDevice( _In_ IDXGIAdapter *pAdapter, _In_ D3D10_DRIVER_TYPE DriverType, _In_ HMODULE Software, _In_ UINT Flags, _In_ UINT SDKVersion, _Out_ ID3D10Device **ppDevice );

Объявление функции D3D11CreateDeviceAndSwapChain

HRESULT D3D11CreateDeviceAndSwapChain( _In_ IDXGIAdapter *pAdapter, _In_ D3D_DRIVER_TYPE DriverType, _In_ HMODULE Software, _In_ UINT Flags, _In_ const D3D_FEATURE_LEVEL *pFeatureLevels, _In_ UINT FeatureLevels, _In_ UINT SDKVersion, _In_ const DXGI_SWAP_CHAIN_DESC *pSwapChainDesc, _Out_ IDXGISwapChain **ppSwapChain, _Out_ ID3D11Device **ppDevice, _Out_ D3D_FEATURE_LEVEL *pFeatureLevel, _Out_ ID3D11DeviceContext **ppImmediateContext );

Объявление функции D3D10CreateDeviceAndSwapChain

HRESULT D3D10CreateDeviceAndSwapChain( _In_ IDXGIAdapter *pAdapter, _In_ D3D10_DRIVER_TYPE DriverType, _In_ HMODULE Software, _In_ UINT Flags, _In_ UINT SDKVersion, _In_ DXGI_SWAP_CHAIN_DESC *pSwapChainDesc, _Out_ IDXGISwapChain **ppSwapChain, _Out_ ID3D10Device **ppDevice );

Этот код лежит на сайте MSDN, так что любой может проверить. В частности функция D3D11CreateDeviceAndSwapChain вызывается лишь два раза в игре до загрузки главного меню, собственно скорее всего тест на проверку фишек 11-ой версии DirectX на этом и основан, было решено подменить библиотеку d3d11.dll (поместил в папку с crysis3.exe), написав её "клон" который в первую очередь будет перехватывать все вызовы функций из игры и записывать в ЛОГ-файл, во вторых всегда можно будет вернуть нужные Нам значения!

Скриншот ниже, не показывает различий между DX9 и DX11 (Dragon Age 2), DX это просто программный API для видео драйвера, драйвер в свою очередь создает набор команд (инструкций) для графического процессора. Фишки DirectX 11 это просто дополнительные эффекты для DX9, DX10/DX11 - просто маркетинг чтобы продавать Windows Vista и другие операционки от Microsoft, а также чтобы менять видеокарту чаще из-за "новых" фишек, которые по сути ни что иное как просто программа. Если бы у Вас была документация по видео адаптеру (мы пытались её получить, но нам ответили отказом), например GeForce 6600, Вы бы могли легко сделать нужный драйвер под любой API, который умел бы создавать поток комманд для наложения тех же эффектов DX11 на простенькой 6600 или на любом другом чипе и адаптере!

DX9 and DX11

Файлы

Важно: для распаковки архива, Вам нужно использовать архиватор с поддержкой формата 7z, например, 7-zip (7-zip.org) или WinRAR (rarlab.com).

Ссылка #1: Crysis3_PakDecrypt.7z (6,1 МБ)




Комментарии

Ваше имя: *
Проверочное слово: *0000-0000-0000
Введите проверочное слово: *
Текст комментария:
Интересные новости

VIA вышла на рынок компактных ПК, создав APC - 22.12.2013

VIA APC Series
После успеха гражданина Великобритании, с его ультра-компактными ПК RaspBerry, компания VIA решила создать свои аналоги.

читать далее ...

AMD представила платформу Mantle - 20.12.2013

AMD Mantle
AMD представила новую аппаратно-программную платформу под названием Mantle. Новая среда будет нацелена на разработку современных игр и 3D-приложений (Kaveri APU).

читать далее ...

Internet Explorer 11 вышел для Windows 7 - 13.11.2013

Internet Explorer 11
Релиз 11-ой версии популярного браузера теперь для обладателей Windows 7.

читать далее ...

Читать все новости

Видео лента
https://youtube.com/devicesupport

Длительность: 00:02:57
Смотреть видео

 

Смотреть все видео