当前位置:首页 > Windows程序 > 正文

wing of prey 座舱视角渲染方式调查

2021-05-25 Windows程序

为了实现一个能够显示飞行员的座舱视角,调查了pix了模拟空战游戏wing of prey,以下是这次的调查记录。

首先通过pix进入游戏(需管理员身份开启),在option中开启座舱视角,按F12记录当前帧的渲染信息,退出游戏后,可以在pix的窗口中看到刚刚截取的一帧的详细渲染信息。

 

测试一:座舱视角是由几个camera完成的

由于每次准备camera时候,都会设置camera的投影矩阵,所以这里通过搜索以下字符串,来确定座舱视角是由几个摄像机完成的。

```IDirect3DDevice9::SetTransform(D3DTS_PROJECTION```

 

通过搜索结果、以及对应的渲染画面发现,在所截取的一帧中,为camera设置了两次D3DTS_PROJECTION,而两次的画面,也正式分别渲染座舱,,和座舱外世界。因此在WOP中的座舱视角,是由两个相机共同完成的,暂且称两个camera分别为:“近相机”、“远相机”。其中,近相机负责渲染机舱以及机舱内设备,远相机负责渲染除此之外的其他物体。

 

测试二:近相机的far clip是多少,远相机的near clip是多少。

当飞机降落在地面上时,在游戏中调整camera朝向地面,按下F12截取这一帧的渲染信息,进行分析。

再次通过查找```IDirect3DDevice9::SetTransform(D3DTS_PROJECTION```可以找到设置camera投影矩阵的地方,通过该方法的第二个参数所传递的投影矩阵,可以算出两个相机的clip各是多少,然而这里得到的是一个内存地址,暂时没有找到矩阵本身信息。

 

测试三:muzzle flash由哪个相机负责渲染。

在飞机开枪时,按下F12,截取出一帧带有muzzle flash的渲染信息,进行分析。

通过搜索```IDirect3DDevice9::SetTransform(D3DTS_PROJECTION```,能够选定远相机和近相机分别渲染了什么,最终发现,muzzle flash是和机舱是同一个相机渲染出来的。

远相机是否渲染了muzzle flash不确定,即使渲了也可能因为其near clip比muzzle flash位置远而也被剔除掉。

技术分享


 

测试四:导弹是由哪个camera渲染的

进入游戏中的座舱视角,发射一枚导弹后按F12截取当前帧的渲染信息。

方法同上,最终发现,导弹和地形是由同一个camera渲染的。

这里猜测,由于远相机的near clip设置的值很合适,所以没有出现这些粒子被cull的问题。

技术分享

 

 

测试五:翼尖尾流特效是由哪个camera负责渲染的

方法同上,不再赘述,如图所示,是用远相机进行渲染的。

 

技术分享

 

技术分享

最终方案

通过以上的测试,以及根据项目本身情况的分析,最终确定的方案如下图:

技术分享

 

 

wing of prey 座舱视角渲染方式调查

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70905.html