POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
查看: 1291|回复: 2
打印 上一主题 下一主题

Batman: Arkham Asylum 1.1 零售版 MSAA 修正补丁 for 非 N 卡用户

[复制链接]
跳转到指定楼层
1#
发表于 2010-5-19 09:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
http://www.ngohq.com/graphic-car ... sylum-msaa-fix.html

OK i'm not sure if i'm posting it in a right section, but as long as this limitation of "Batman: Arkham Asylum" game is hardware-related, i'm doing it here (correct me if i'm wrong, please).

I assume you all are aware of the issue, if you are here. If not, you can read some article or that official shameful tutorial.



So i recently tried to play Batman on my system, only to find out i can't enable MSAA, even using ATI Tray Tools. Maybe there are bugs in a hook library, or some problems because of other installed software, i don't know. The only 2 possible ways i found at the public are:

- VendorID emulation with ATT - didn't work for me neither on XP nor 7.
- MSAA patch by Thomas Bruckschlegel - works perfectly, but causes Windows LIVE to be disabled rightaway. This means no profiles, no progress save.

Tried to investigate this a bit more and discovered that the whole thing is plain simple. It took me just a couple of days to create a working solution.
It was tested by me on Windows XP x86 and Windows 7 x64. Let me know if it works for you or not.
__________________

Batman: Arkham Asylum - MSAA fix (100422)

* DESCRIPTION:
This patch will fix the anti-aliasing issue in "Batman: Arkham Asylum" game to enable the native MSAA support for any non-NVIDIA GPU.
- intended only for v1.1 of the game.
- tested only with PhysX System Software 9.10.0222 installed.

* HOW TO USE:
1. Drop the fix to the root game directory (not to the Binaries subfolder but near it).
2. Launch the fix and press the "Cake" button.

* NOTE:
- Do not use this version with NoAA option. Or rename/delete PhysXLoader.dll from Binaries folder if you want to play without anti-aliasing.
__________________

Here is how the difference looks like on my system:

        This image has been resized, click on this bar to view the full image.

__________________

Some technical details, if anyone is interested...
I discovered that both known methods are not 100% proper. When you are forcing your non-NVIDIA GPU to have a "10DE" VendorID, it actually helps to force a native anti-aliasing. But don't forget that this game is UE3-based. There are 3 checks inside the game:

1. Compare VendorID to 1002 (ATI) and decide if DisableATITextureFilterOptimizationChecks should be used.
2. Compare VendorID to 10DE (NVIDIA) and decide if UseMinimalNVIDIADriverShaderOptimization should be used.
3. Compare VendorID to 10DE (NVIDIA) and decide if MSAA is allowed.

As you see, it is actually not a good idea to emulate VendorID for your non-NVIDIA GPU. Both (1 and 2) options may cause a minimal impact on the performance and visual experience, but since it is a UE3 we can't deny that they are somewhat important.

Ironically, MSAA patch by Thomas Bruckschlegel patches both (2 and 3) places, and you still end up with not 100% proper engine configuration for your non-NVIDIA GPU.

It was easy to patch only a 3rd check to force MSAA support, but Windows LIVE made it impossible statically (patched inside the .exe) and almost impossible dynamically (patched in memory during a runtime). If you patch the executable file - LIVE just won't load, and when you patch it in memory - the game will crash within a minutes, as a result of LIVE security checks.

My solution consists of 4 parts:
- patch the BmLauncher.exe to allow setting MSAA level with original launcher.
- modified PhysXLoader.dll v2.8.3.31 (that's why it was tested only with PhysX SS 9.10.0222)
- dll file #1
- dll file #2

Just to clarify, the whole thing has nothing to do with PhysX, it may even work with other PhysX SS packages (although i'd recommend trying 9.10.0222 first). PhysXLoader.dll is just one of the few 3rd party dlls, which are being loaded somewhere near the engine initialization - at a point where the game did not process MSAA settings yet. The modified PhysXLoader.dll loads my custom dll #1 along with itself, and the purpose of #1 is to patch the needed (3rd) check in memory. Additionally, it creates a code for loading a dll #2 somewhere after MSAA settings processing place.
The purpose of dll #2 is to replace all the modified (and already executed) code with original code, so nothing will detect code modifications during a runtime.
You just end up with correctly-processed MSAA settings regardless of your GPU's VendorID and unmodified code section in memory, thus LIVE won't cause a crash.

You can see the result of the crash if you temporary rename or delete my dll #2 (fix.dll) from Binaries folder.
2#
发表于 2010-5-19 11:55 | 只看该作者
塞钱战术。变成了买时间迂回战术了
回复 支持 反对

使用道具 举报

3#
发表于 2010-5-19 11:58 | 只看该作者
插个话,GTX400在Dirt2 中打开16xCSAA有问题,来来往往资讯NV好久,最后给我结论:Dirt2自身问题。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2025-9-13 08:41

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

快速回复 返回顶部 返回列表