
正确的第三人称视角(第三人称摄像机)
《天国:拯救2》的第三人称视角模组,包含相机碰撞剔除修正、基于部分射线投射的准星修复,以及实验性的自由视角环绕模式。
查看大图前言
不久前,我制作了第三人称视角(TPV 摄像机)启用器,它开启了游戏内置的调试用第三人称摄像机。那个摄像机并非为正常游戏而设计,因此解决它的古怪特性和限制变成了一项艰巨的任务,我最终花费了远多于构建新功能的时间来修复破损的东西。
这个模组是从相反方向进行的完全重写。它没有借用调试摄像机,而是让游戏保持在普通的第一人称模式,并在其之上重建了第三人称视角,然后添加了真正重要的部分:简单的摄像机碰撞和基于射线投射的准星对齐。它简单得多,而且效果也确实更好。有趣的是,用这种方式完成它大约只花了两周时间,而我修补旧方法却花了将近一个月。
现在仍处于早期阶段,所以如果有任何感觉不对劲的地方,或者您有想法能让它变得更好,请告诉我。希望您喜欢它,也感谢您尝试它。
注意:请原谅我糟糕的视频质量和帧率 T_T
https://www.youtube.com/watch?v=NuCQHDoQnVE
主要功能
- 可随时切换的第三人称视角(默认:F3,或按住 LB + RB)
- 过肩视角框架,可调节距离、高度和侧向偏移
- 实时拉近或拉远摄像机
- 基本的自由观察模式,可环顾角色四周(早期,参见已知限制)
- 根据情境自动切换视角:进入战斗、瞄准弓箭、对话、小游戏、骑马或菜单时切换到第一人称或第三人称(期间仍可手动切换),情境结束时恢复之前的视角
- 游戏内预设管理器:从覆盖界面编辑、添加和保存摄像机预设;内置的普通游戏、战斗、瞄准、骑马、潜行和特殊姿势(躺下、坐下、跪下、乘坐马车)预设会根据情境自动应用,您还可以将自定义预设绑定到状态组合(例如蹲下瞄准),最具体的匹配项优先
- 自由观察的灵敏度分别为鼠标和手柄的每个轴独立设置,因此水平和垂直可以单独调整;设置负值可反转该轴。将任何预设设置标记为“共享”,可将其值立即应用于所有预设
- 摄像机碰撞,带可选透视模式(默认关闭),可忽略可以看透的细柱、栏杆和围栏,并避免进入角落;还有布料屋顶夹持(默认开启),可防止低头时钻入帐篷或遮阳篷的布料中;所有设置均可在 INI 文件中调整
- 准星与您指向的目标保持对齐(部分实现,仅适用于交互,尚未达到 100%)
- 完全支持键盘和 XInput 控制器
- 几乎所有设置都可以在游戏运行时实时编辑
- 开源,完全透明
一旦进入游戏,第三人称视角会自动开启;按下切换键可切回第一人称,或者将 INI 中的 AutoEnableTPV = false 设置为以第一人称开始。
需求
- 天国:拯救 II(Steam 或 GOG 版本)
- 一个 ASI 加载器 - 不包含,您需要自行下载(参见下面的步骤 1)
安装
这个模组是一个 .asi 插件,因此需要一个 ASI 加载器来运行。加载器不包含在此下载中 - 您自行安装一次(步骤 1)。如果您已经为 KC:D 2 从其他模组安装了 ASI 加载器,请跳到步骤 2。
如果您安装了旧的 KCD2_TPVToggle 模组,请先将其移除:从游戏目录中删除 KCD2_TPVToggle.asi 和 KCD2_TPVToggle.ini。TPVCamera 会替代它,同时运行两者会产生冲突。
步骤 1:安装 ASI 加载器
下载 ThirteenAG 制作的 Ultimate ASI Loader,并将其中一个 DLL 文件放入游戏的二进制文件夹(包含 WHGame.dll 的 Bin/Win64MasterMaster... 子文件夹):
- dinput8.dll - 推荐(已在 KC:D 2 中测试)
- version.dll - 如果
dinput8.dll不起作用,可选择此文件 - winmm.dll - 另一个可选文件
每个链接下载一个 ZIP 文件;仅提取 DLL 文件并将其放到 WHGame.dll 旁边。
步骤 2:安装模组
- 从“文件”选项卡下载最新版本。
- 将所有文件解压到同一个二进制文件夹中,位于
WHGame.dll和加载器 DLL 旁边:<KC:D 2 安装文件夹>/Bin/Win64MasterMasterSteamPGO/GOG 版本使用其自己的Bin/Win64MasterMaster...文件夹。
步骤 3:启动并游玩
启动游戏;一旦进入游戏,第三人称视角会自动开启。按 F3(或在控制器上按住 LB + RB)切回第一人称。
如何验证加载器是否工作: 启动一次后,检查二进制文件夹中是否存在 KCD2_TPVCamera.log 文件。如果没有,则加载器未加载模组 - 将您的加载器 DLL 重命名为其他变体(version.dll、winmm.dll)并重新启动。
文件夹布局(所有文件都放在二进制文件夹中,位于 WHGame.dll 旁边):
Bin/Win64MasterMasterSteamPGO/
|-- WHGame.dll (游戏)
|-- dinput8.dll (ASI 加载器 - 您下载的)
|-- KCD2_TPVCamera.asi (本模组)
|-- KCD2_TPVCamera.ini (设置)
\-- KCD2_TPVCamera_presets.json (首次运行时创建)
Linux / Steam Deck(Wine/Proton)
您的 ASI 加载器 DLL 需要 Wine/Proton DLL 重写,以便游戏加载它而不是内置版本。如果您安装了 dinput8.dll(推荐的加载器):
Steam: 前往游戏的属性 -> 启动选项,并添加:
WINEDLLOVERRIDES="dinput8=n,b" %command%
命令行: 在您的启动命令前加上:
WINEDLLOVERRIDES="dinput8=n,b"
如果您选择了不同的加载器 DLL,请改用其名称(例如 winmm=n,b 用于 winmm.dll)。
默认控制
所有按键均可在 KCD2_TPVCamera.ini 中重新绑定。
- 进入/退出第三人称: F3,或按住 LB + RB
- 切换自由观察模式: F4,或按住 LB + 点击左摇杆(LS)
- 按住进行自由观察: 默认未绑定(瞬时自由观察:按住环顾四周,松开后弹回)
- 打开预设管理器覆盖界面: Home
- 拉近: LShift + PageUp,或按住 LB + D-pad 上
- 拉远: LShift + PageDown,或按住 LB + D-pad 下
- 强制第一人称 / 强制第三人称: 默认未绑定
在控制器上,缩放功能与游戏的库存/地图快捷键共享 D-pad,因此模组在您缩放时会向游戏隐藏该 D-pad 按钮(ZoomInKey.Consume / ZoomOutKey.Consume 键,默认开启),这样完成缩放后不会打开库存或地图。如果您希望 D-pad 继续用于游戏,则将其设置为 false。键盘缩放键不受影响。
配置
编辑 KCD2_TPVCamera.ini,按组分类:
- [Settings] - 日志级别、视角热键、预设覆盖界面键和会话开始的自动启用标志
- [Camera] - 缩放键、摄像机空间交互切换和视角过渡缓动(视角框架本身按预设设置)
- [Orbit] - 自由观察模式键(按下切换和瞬时按住)以及光标冻结(自由观察手感按预设设置)
- [Collision] - 碰撞探测和半径、
UseCoverageCollision(仅当物体遮挡角色时才拉近)及其覆盖/侧壁选项,以及独立的UseRenderOcclusion布料屋顶夹持(启用、蒙皮和返回速度按预设设置) - [StateBehavior] - 进入情境时切换第一/第三人称(战斗、瞄准、对话、小游戏、骑乘、菜单、覆盖界面),退出时恢复先前的视角(期间的手动切换保持不变),以及在选定情境中暂停/恢复自由观察
- [Presets] - 预设混合速度;摄像机框架位于游戏内预设管理器(按 Home 键打开)中,并存储在 INI 旁边的
KCD2_TPVCamera_presets.json中。该文件在首次运行时从内置默认值自动创建;它不随模组分发,因此更新模组永远不会覆盖您调整过的预设。
大多数值在您保存文件后的下一帧生效。
热键格式
- 命名键:V, F3, Numpad1, Mouse4, Gamepad_A 等。
- 修饰键:Ctrl, Shift, Alt(或 LCtrl, RCtrl 等)
- 多组合:F3,Gamepad_LB+Gamepad_RB(单独 F3 或按住 LB + 按下 RB)
- 空值禁用绑定
请参阅支持的输入名称参考中的完整列表。
配合控制器使用
DetourModKit 通过 XInput API 原生支持手柄输入。直接在 INI 中使用手柄按钮名称:
; 用手柄 Y 按钮切换
ToggleViewKey = Gamepad_Y
; 使用修饰键组合(按住 LB + 按下 RB)
ToggleViewKey = Gamepad_LB+Gamepad_RB
; 多个独立组合(逗号 = 或)
ToggleViewKey = F3,Gamepad_LB+Gamepad_RB
仅限 XInput: Xbox 控制器原生工作。对于 PS4/PS5/Switch 控制器,请使用 XInput 转换层(例如 DS4Windows、DualSenseX、BetterJoy)或 Steam Input 将您的控制器模拟为 XInput。详细信息请参阅手柄兼容性。
推荐模组
这些模组与第三人称摄像机配合良好:
- 无头盔视野 - 移除在第三人称下显得格格不入的头盔视野黑边/黑条。
- 第一人称大修 - 使某些动作和交互保持在第三人称,而不是强制将视角切换回游戏默认摄像机。
- 可选战斗(可选)- 修改战斗和摄像机锁定行为,使近战战斗更自由,目标切换更容易。
已知限制
- 自由观察模式是一个原始的概念验证:用于旋转摄像机查看亨利正面效果不错,但对于正常游戏来说很粗糙(观察模式下交互尚未生效)。
- 自由观察模式在骑马和战斗中与游戏自身的摄像机控制冲突,因此在那些情境下会自动禁用。
- 在某些动画中,第一人称的身体骨架从后面看仍然可能略微奇怪。
- 摄像机碰撞可防止视角穿墙,但尚无柔和边缘平滑处理。
- 基于射线投射的准星修复是部分的:它不涵盖所有交互类型,因此有些交互仍然显示视差或偏移,并且在有多个可交互物体的密集区域,使用提示会来回跳跃。
- 第三人称下的某些世界交互仍然可能不流畅或有错误;如果某个交互看起来有问题,请关闭摄像机。
- 预设覆盖界面有意不挂接游戏的交换链:它通过私有 WARP 设备渲染,并使用 GDI 位块传输进行合成,这使其与 ReShade 和 OptiScaler 等覆盖界面和注入器兼容。代价是打开覆盖界面时帧率下降;由于它只是一个您短暂打开进行调节的面板,而不是玩着玩的,因此这是可以接受的。
路线图
- 重做自由观察模式,使其可在正常游戏中可用(观察期间交互、更平滑的启用/释放、更好的鼠标手感),包括解决在骑马和战斗中(目前自由观察被自动禁用)与游戏自身摄像机的冲突。
- 软边缘摄像机碰撞,使视角绕过障碍物时更平滑,而不是直接弹跳。
- 更干净地处理摄像机和角色之间的薄遮挡物(围栏栏杆、薄树叶)。
- 修复角色背后的阴影被剪裁的问题(阴影级联仍然跟随第一人称视野)。
- 扩展基于射线投射的准星/交互修复,以覆盖更多交互类型,并防止在密集区域中,使用提示在附近的可交互物体之间跳跃。
游戏更新后: 模组通过几个备用签名定位其挂接的每个游戏函数,因此它会自动适应微小的游戏变化。如果核心游戏函数被大量重写,重大更新可能仍需要模组更新。
致谢与源代码
使用 DetourModKit 构建核心功能。
- Ultimate ASI Loader 由 ThirteenAG - ASI 加载层
- SafetyHook 由 cursey - 内联/函数中间挂接
- Zydis / Zycore 由 Florian Bernd & Joel Höner - x86/x64 反汇编(由 SafetyHook 使用)
- SimpleIni 由 Brodie Thiesfield - INI 配置解析器
- nlohmann/json 由 Niels Lohmann - JSON 预设序列化
- Dear ImGui 由 Omar Cornut - 覆盖界面 GUI
- DirectXMath 由 Microsoft - 数学基元
- Frans 'Otis_Inf' Bouma - 他的摄像机工具和灵感,以及模组制作方向和指导
- Warhorse Studios 创造了这款精彩的游戏
我所有的《天国:拯救 II》模组和工具都可以在这个 GitHub 仓库中找到。欢迎贡献或提出改进建议!
显示 1-7 条,共 7 条
以上为资源接口提供的文件记录。安装时请在客户端确认文件、游戏版本及依赖。
还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。