制作3D游戏时如何避免或减轻玩家的晕3D现象?

最近做了一个小游戏,结果跑了1分钟不到就开始头晕头疼了,联想到肯定有一些玩家会有晕3D的症状,那么,在游戏开发过程中,如何避免或者是减轻这类情况的产生呢?

关注者

138

被浏览

25,760

关注问题​写回答

孟亮

游戏达人/电影达人/健身爱好者/篮球爱好者

​ 关注

27 人赞同了该回答

第三人称比第一人称视角要好点,上帝视角比第三人称好点,场景开阔点比狭窄的山洞房间要好点,帧数不稳定容易晕,摄像机频繁和地形碰撞容易晕

发布于 2014-04-07 18:51

知乎用户

7 人赞同了该回答

最近刚在收购中火了一把的Oculus Rift的论坛上有帖子在收集相关的东西,看了一下,主贴贴出来几个值得3d开发的时候注意的地方:

* 高帧率是必须的(VR、赛车类需要有60帧左右,PC游戏需要30帧左右)

* 画面里最好保持有个静态的参考物(为什么TPS没有FPS那么晕?因为有个主角可以看到。再想想一下在FPS里面,枪都看不到的时候乱跑是不是最晕?因为有枪的时候,枪相对还是静态的。)

* 第一人称下,慢慢的移动

* 变动速度的时候不要变得太快(特别是要避免突然的“刹车”或者是“启动”)

* 暗一点的场景会比亮的场景会好一点

编辑于 2014-04-09 17:52

匿名用户

2 人赞同了该回答

1、减小镜头移动的灵敏度、或者固定镜头

2、开阔镜头视野

3、控制渲染和光影

4、调整剧烈动作时的机位移动

发布于 2014-04-08 00:27

知乎用户

2 人赞同了该回答

镜头不要来回晃,走路不要左右摇摆,如果人物和场景物体或其他角色互动时有视角上的效果,要保持连贯,比如背后刺杀就触发条件后一次完成,不要中间磕磕碰碰……再有就是光晕,反射和模糊,如果角色移动速度很高,这些效果很酷。如果后面场景一堆石头反射贼强,一顿眩光,一会儿就晕了。

发布于 2014-04-07 22:59

知乎用户

7 人赞同了该回答

目前看的「Level up! The guide to great video game design」里面正好说到这个,翻译如下:

1、尽量优化游戏,使其运行在 60 帧以上;

2、近景元素不要上下摆动,比如人物武器;

3、尽量使当前地图地形平坦;

4、环境里加入大型静态物体,使玩家拥有焦点;

5、不要过度摇晃当前镜头;

6、不要使玩家经常(或者快速)上下调整视角。(例如一下要看天空,然后马上又要看地这类)

发布于 2014-05-06 20:21

知乎用户

垂直同步,虽然我一直不知道这到底是什么,不过我真的开了这个就不晕了。。

发布于 2014-04-08 16:47

知乎用户

5 人赞同了该回答

@孟亮

点了赞,作为一个晕3D的玩家来说一下自己的晕3D体验。

  1. 场景切换造成的视野变化(第三人称),比如从视野宽阔的野外进入山洞/房间/走道时视野突然变窄,镜头自动拉近,这个过程非常非常难受。
  2. 镜头转动,比如人物行走路径曲折造成的镜头变化,或者突然蹦出来的cg动画(镜头转动,大量特效等)。
  3. 画面非常精细的情况下出现大量画面运动,比如突然出现很多小怪,酷炫的技能效果,很多玩家聚集在一起行动。

晕3D的详细解释

3d晕眩症_百度百科

,不是所有人都能体会这种晕3D的感觉,这是由个体生理差异造成的,类似晕车。所以游戏设计者除了把镜头切换、视野变化做得更流畅以外,能做的实在不多。尤其很多晕3D的人士在精细画质下更难受而在低画质的时候会舒服一些,但是3D游戏不可能为此降低画质。

发布于 2014-04-08 01:27

邓波

http://www.replay-technologies.cn/

​ 关注

2 人赞同了该回答

转自: 克服VR眩晕之帧数:提升UE4内容实时渲染效率 |VR第一资讯 VR013

VR已经成为了当今最火热的一个话题,带上头盔之后,从此进入一个奇妙的世界,在这里你不再是观众,你参与这个世界发生的每一件事件。整个世界从此与众不同。在赛道上飞驰,在战场上纵横
但是生理机制让我们的大脑在身体并没有移动,而视觉在不断告诉我正在飞速前行的迷惑中产生了晕眩。如何解决因为VR而产生的眩晕,就成为每一位设计师需要面对的问题。

引起VR眩晕有很多原因啦,比如设计上的,技术上的。渲染的帧数高低必定是其中一个最主要的原因之一。关于UE4里对VR内容的优化方法和思路大部分是和传统的3D游戏优化是一致的,有部分是VR尤其相关的。接下来就以oculus为平台和大家一起分享一下在UE4里常见内容的一些设置和优化的思路和方法.


首先我们来看一个优化过程的实例,先有个大概的了解。打开一个UE4下载的项目,particle cave, VR preview,带上眼镜就能体验了,对,就这么简单,虽然说这个并不是一个针对VR的项目。

这里做了一些简单的设置
1、发现摄像机是以预设轨道在飞,而且明显感觉帧率不高,哦,好晕。为了比较方便衡量接下来优化,我做了一些摄像机的设置,让摄像机开始游戏后固定在一个我认为帧数最低的画面。
2、确保帧数没有被限制住,关闭垂直同步,把最高帧数限制上限提高好了,再run一下,固定住了,转转头可以,hmm。。真的挺卡的

再接个命令证实一下,最直接和GPU渲染效率有关的就是分辨率喽
HMD SP 100 54FPS
帧数立马提高不少,果然是GPU渲染瓶颈

降低渲染品质
Adjust scalability to medium 72FPS
成功了? 还没有哦,这个太暴力了
这个肯定不是最优的优化结果了。因为肯定有些可以进一步做大量的优化,有些和视觉相关比较大的调整可以提高质量。而非粗暴的都调低了,那接下来就得找原因了

打开GPUprofiling: (Ctrl+Shift+,)
看下最大的GPU开销在哪里

  1. Base pass: Deferred Decals
  2. Lighting: ReflectionEnvironment:
  3. Translucency: Postprocessing:

从最大开销的几个点入手
BASEPASS: 敲入几个渲染选项命令行:
r.Earlyzpass 1:增加draw calls和一部分GPU的消耗,但大大降低base pass的消耗
关闭了一些不需要的PP效果
一套最优POP设置组合:

  1. Postprocessing setting:
  2. Scene color;
  3. Fringe intensity 0
  4. Grain intensity 0
  5. Color grading intensity 0
  6. Bloom setting
  7. LPV 0
  8. Ambient occlusion 0
  9. DOF Method Gaussian, 其他参数 全部 0
  10. Motion blur all 0
  11. AA FXAA
  12. SSR 0 MAX roughness 0.01
  13. Ambient cubemap 0

再VR preview,
嗯,还是75,当然了,DK2上顶格是75,再优化看不出效果
13.39ms 75FPS

把品质调高成high Scalability high,还是75,哈哈,没问题!
现在算优化完了吧? 其实还可以再优化,这时候的优化就是以尽量提升画质但不降低帧数为目标。

看看哪些还可以优化的? 当然有 !之前的Translucency花费好高
Viewmode: shade complexity 好红, 一堆overdraw
Decal的花费也很高, Stat scenerendering, decals in view
环境反射的花费很高: 选中sphere reflection capture, 看一下总共有几个,观察他们影响范围是否重叠严重

Vertex intensity: 好密啊。高密度的三角面几乎看上去就像一个实体了, 一个三角面的大小在屏幕上的面积小于2*2个像素就会极大的增加开销
还有Particle 。
现在基本上已经定位到可执行层面的原因了,一些原因也已经通过可接受的渲染参数调整解决了;另外一些就必须要artist来优化Assets本身了。
哪些工作最快,质量损失最小,能够换其他更能提升品质的选项。
启示他们并不需要这么多面,assets的优化需要更多的时间。把scaleability有些选项提升到EPIC,当然他们并不是全部


一些引起DRAW CALL数量多的原因

  1. 同屏看到的Actor太多,如果材质复杂这个因素还会加成。 合并Actor,尤其是中远处
  2. 材质ID太多(or Section; Mesh elements)。重用材质贴图,尽量把同一材质物体合成为一个物体
  3. 每个actor上的feature太多。主要是增加投影的属性,增加custom depth的属性
  4. 太多灯光投影(这里投影的消费来自于需要计算哪些物体需要被投影)

MESH DRAW CALL往往是个大头,MESH ID 的数量可以在STATISTICS统计可以很方便的查看,从经验判断哪些资源制作不合理

关于ACTOR设置feature会增加DRAW CALL数的是投影和custom depth,可以通过一些工具来检查这些设置。使用property matrix来过滤,检查,并修改

另外一个经常使用的查找原因的方法排除法
通过隐藏各种元素,寻找哪个是导致DRAW CALL数量的大头
记得隐藏HUD,有的时候HUD也是个大头之一
Showflag.slate 1
如果是GPU瓶颈,最快速的验证方式就是改变分辨率,降低分辨率可以极大提高帧数。为了抵消畸变纠正而产生的图像模糊,或者分辨率的丢失,在渲染的的buff里往往是实际屏幕尺寸的120-130%,这样增加了图像的锐利度,但降低了渲染的速度。
HMD SP全称是HMD 的screen percentage, 这个参数就是来修改渲染buff的尺寸的,HMD SP 120是默认值,改成100看看。
如果像刚才例子看到的,帧数有大幅度的提高,那就是GPU负担太大的问题了,如果分辨率的改变对于帧数影响不大,很有可能是因为面太多了。

对这些内容重点做检查,看看有没有超标的现象出现

  1. 分辨率
  2. HMD SP
  3. 投影贴图
  4. 面数/点数(灯光的多少,阴影的设置,多少物体)
  5. LOD,关闭shadow,灯光屏幕面积
  6. 面数密度太高,高到一个三角面小于2*2的像素,这个往往发生在远处物体
  7. 点处理,点太多
  8. 点动画的shader太复杂
  9. tessellation太复杂
  10. 太多UV,太多SG
  11. 查看staticmesh editor里点和面数的差别是否大
  12. 点没有合并等
  13. view cost(HZB occlusion culling)
  14. Precumputed visibility volume
  15. Scene cost GPU particle simulation
  16. 材质复杂度
  17. quality switch,sin, pow, cos, divide, Noise很费
  18. 由于Texture 太多,太大 Texture caching反复的page in and out of 显存
  19. 遮挡的culling计算
  20. Precumputed visibility volume
  21. 延迟灯光

当使用lighting function,IES,接受投影,区域光,复杂shading modes的时候会变得更贵
反射ssr有问题,关掉。 后期, AO,很费

知道哪里有问题了,接下来就可以着手行动了,但之前做个目标规划还是可以事半功倍的。
最小化图像质量妥协,是一种有的放矢的妥协策略。比如高质量的阴影对于高品质的抗锯齿而言对于最终项目实际的表达效果次要。减小阴影品质来换取高品质AA就是一种有的放矢的妥协策略。因此尽量大的减小不是非常关心的渲染品质部分,增加更可见的渲染品质部分。
从容易做起,从开关一些渲染选项,品质参数调整,到直接删东西,优化一个用到几百次的物件,这些都是立竿见影的方式,这样可以做允许的时间计划内完成目标,如果有更多时间和预算可以对相对低性价比的。
目标75帧是必须的,不要说68,70,都不行,必须75,做实际体验中有很大区别。

最常见的问题所在

  1. 测试环境不合适,灯光没有build
  2. Actor或者材质ID太多
  3. 面太多,没有任何的LOD设置
  4. 灯光使用没有节制: 各种动态投影,灯光类型随意
  5. 没有合理的设置CULL的条件
  6. 透明太多
  7. Postprocess太高级了

这些原因又互相影响,一方面的增加也会增加另外方面的开销

其他一些VR的特有行为

  1. VR 需要畸变色差纠正
  2. VR需要双屏
  3. VR需要更大的渲染分辨率
  4. VR需要传递传感器信息

比如对于oculus部分是在驱动层级做掉了,比如如何纠正畸变,如何双屏,如何传递传感器信息。
对于传感器信息和视频匹配的准确性,以及渲染的屏幕覆盖率,在UE4里是可以根据需要来修改的,除了这些,其他就和以往的优化思路一致了。

创建测试环境。找原因

  1. Testing in a stable enviroment
  2. run Standalone game
  3. use pause or slomo 0.001 to prevent random numbers
  4. Measuring few times
  5. 确保帧数不封顶
  6. s.Vsync 0
  7. s.MaxFPS
  8. 了解瓶颈
  9. GPU瓶颈
  10. profileGPU(ctol+shift+,)
  11. 分辨率
  12. HMD SP
  13. 投影贴图
  14. 面数/点数(灯光的多少,阴影的设置,多少物体)
  15. LOD,关闭shadow,灯光屏幕面积
  16. 面数密度太高,高到一个三角面小于2*2的像素,这个往往发生在远处物体
  17. 点处理,点太多
  18. 点动画的shader太复杂
  19. tessellation太复杂
  20. 太多UV,太多SG
  21. 查看staticmesh editor里点和面数的差别是否大
  22. 点没有合并等
  23. view cost(HZB occlusion culling)
  24. Precumputed visibility volume
  25. Scene cost GPU particle simulation
  26. 材质复杂度
  27. quality switch,sin, pow, cos, divide, Noise很费
  28. 遮挡的culling计算
  29. Precumputed visibility volume
  30. 延迟灯光
  31. 当使用lighting function,IES,接受投影,区域光,复杂shading modes的时候会变得更贵
  32. 反射ssr有问题,关掉,后期AO,很费
  33. cup瓶颈,CUP GAME瓶颈
  34. stat game
  35. AI复杂度
  36. BP
  37. raycast
  38. 物理
  39. 内存分配
  40. CUP RENDER瓶颈
  41. stat scenerendering
  42. 材质ID太多
  43. 重用材质贴图,尽量把同一材质物体合成为一个物体
  44. actor太多,如果材质复杂这个因素还会加成
  45. 合物体,尤其是中远处
  46. 每个actor上的feature太多,比如增加投影的属性,增加custom depth的属性
  47. 太多灯光投影(这里投影的消费来自于需要计算哪些物体需要被投影)

找到瓶颈的方法

  1. stat unit
  2. disable一些stuff,然后看效率上的区别
  3. 一些可调的show flag
  4. 开关屏幕反射
  5. 开关AO
  6. 开关AA
  7. 开关bloom
  8. 开关延迟灯光
  9. 开关灯光类型
  10. 开关动态阴影
  11. 开关GI
  12. 开关后期
  13. 开关环境反射
  14. 开关折射
  15. 开关贴画
  16. 开关半透明
  17. 开关tessellation
  18. viemode
  19. ProfileGPU
  20. ProfileCPU
  21. stat game
  22. stat scenerendering
  23. Profiler

后期优化首选项:

  1. Scene color fringe;
  2. ambient cubemap,
  3. image based lens flares;
  4. LPV off;
  5. Grain intensity,
  6. DOF off,
  7. ssr off,
  8. or roughness 0.01;
  9. Motion blur off

最后选择的参数需要应用到DEVICE PROFILES里或者BP里

减小 shader的 instruction的数量
减少Texture sample的数量:把经常使用到同一个物体上的Pattern合在一张贴图上;去掉对质量影响很小的贴图,比如Specular,AO在实际情况中平衡来使用
使用quality switch,sin, pow, cos, divide, Noise,多向量的计算总是大于单向量的计算

UE4里由于使用了延迟灯光,所以灯光的优化比前向渲染方便的多。最快速最有效的方法:使用静态光源。
如果使用的事动态光减小 Lighting cull,半径,衰减,Z INTERSSECTION, cone大小角度。总之尽量减少重叠

投影的开销最大往往不是来自于pixel shader,而是来自于被投影的mesh面数太多,还会被灯光数量,投影物体数量放大
关闭投影的灯光;减小范围或张角;减面,加LOD
r.Shadow.MaxResolution

创造性作假:

  1. 三角面:
  2. 远处mattinpaiting
  3. 投影面片,画在贴图上


一个作品的优化不是一朝一夕的事情,需要确定目标配置:确定最低配置,配置范围小,这样的优化才更有针对性,并且学会在开阔的视野在设计时需要巧妙的避免不必要的内容,学会如何制定Budget:质量优先驱动;快速原型制作;分析制定
对内容制作者前期的培训花费是值得的,完成这些工作之后,一个高品质的VR作品就会诞生。

编辑于 2016-05-10 15:24

知乎用户

说句外行的感受吧。

玩《卓越之剑》的时候就会晕,玩其他的3D游戏不晕,因为前者在旋转视角的时候,是以景物为圆心转动,人物在画面的位置上也会转,其他的游戏则是以人物为圆心转动,除了自身原地旋转之外没有位置改变。

……这是我对晕3D的唯一体验实例。

发布于 2014-04-09 15:08

匿名用户

3 人赞同了该回答

我在2011年之前从来不知道什么叫晕3D,直到我完了一款叫《狂怒》(Rage)的游戏。其搜索搜索一下“狂怒 晕”可以发现不少人都是这样。说明体质不同晕3D程度也不同。《狂怒》发挥的很好最大限度挖掘了人的晕3D潜力。

为什么《狂怒》会这么晕还没有个权威的说法,讨论比较多的是视角过窄而游戏镜头焦距设置过短,造成画面像中间压缩。眼镜看到的画面和大脑的预期画面冲突造成晕车一样的感觉。戴近视镜的同学可以试试把你的眼镜腿朝前试试看,类似那种感觉。

因此怎么避免晕3D呢?我也不知道,我不会做游戏,但是我认为合理设置视角焦距,符合人类视觉习惯就好了

编辑于 2014-04-08 17:41

洋钱

确实 我刚玩了把rage 晕了来这找答案

2014-10-07

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值