如何防止游戏中的“水下视线”


19

在许多玩家可以进入水下的游戏中,当您看屏幕的上半部分在空中,屏幕的下半部分在水下时,几乎就像不存在水一样,播放器正在...随着水声缓慢飞行?

在此处输入图片说明

有解决这个问题的逻辑方法吗?算法?由于许多游戏仍然具有此功能,因此似乎还没有解决方案。我不想犯同样的错误。


4
现代游戏的着色器在水上和水下都不同。如今看起来肯定不像这样。我相信《孤岛危机》具有相当先进的水下渲染功能:youtube.com/watch?
v=yXxEZJdFjeM

9
@ sm4:我猜这个游戏也有这个功能。但是问题是相机没有在水的上方,在水的上方,由于附近的削波,您可以看到下方的水。
Kikaimaru 2013年

@Kikaimaru我明白了,我没有完全理解这个问题。但是《孤岛危机》似乎没有这个问题。
MartinTeeVarga 2013年

2
噢,但是我还应该怎么看河底是否有珍珠呢?(上古卷轴遗忘):D
Singular1ty 2013年

1
也许您可以检查角色“ head”是否在水下而不是摄影机,并且除非该角色也在水下,否则不要让摄影机进入水下
Luke B.

Answers:


16

简单地不允许这种情况怎么样?

我不知道您是如何制作游戏的,但是如果您检测到该视图部分处于水下,则可以强制将相机置于水面之上,并且只有当整个视图都在水面之下时,您才能切换到水下的看法。

根据您的操作方式,这可能意味着从开始潜水的那一刻起以及从水面下实际观看场景时还有额外的延迟。从UX的角度来看,这实际上可能是一件好事,因此请随时尝试。

在一个单独但又相关的注解上,我想知道为什么大多数水下场景都变得清晰明了……如果您将头放在水下,您会注意到您的眼睛不是为水下瞄准而设计的,因此一切看上去都很模糊。您必须戴上护目镜才能真正在水下看到。

另外,在水下,事物看起来(和听到)与在水面上截然不同。水比空气吸收光的速度快得多,因此光传播的距离越远,到达您的眼睛的光就越少。这意味着您走得越深,物体看起来越蓝(红光的能量更少,因此比蓝光更容易吸收)。实际上,在水下仅仅12米处,血液看起来是黑色的,而不是红色。

我还没有看到一个非专业的游戏,它甚至试图使水下环境变得正确……


5
许多游戏会改变水下的灯光和声音。请参阅上面评论中链接的《孤岛危机》视频。我敢肯定这并不完全现实,但是(a)大多数人都没有在深水环境中的直接经验,并且(b)在将您带入水下的游戏中,您大概需要能够看到并玩游戏。
内森·里德

我相信大多数游戏都不会这样做,因为没有人愿意在水下看不到东西。或者,也许游戏的所有主要角色都经过Moken的训练!news.nationalgeographic.com/news/2004/05/...
MartinTeeVarga

1
在游戏开发中,这种“医生,当我这样做会很受伤”的解决方案通常是最佳的解决方案。
Trevor Powell

1
@TrevorPowell:我读了十遍你的评论,但我仍然不明白你的意思。也许您想阐述一下?
2013年

2
道歉!这是一个古老的杂耍笑话的参考。这个笑话是这样的: 病人: “医生,当我这样做时会很痛!”。 医生: “不要那样!” 我只是想说,在游戏中,解决问题的最简单方法通常是使游戏停止进入必须解决问题的状态。(例如:最简单的解决方法“当近夹平面与水面相交时图形看起来不正确”是“不要让近夹平面与水面相交”)
Trevor Powell 2013年

7

您所指的问题与相机在水平面上的视线剪切有关。典型的“水下效果”是通过全屏后处理效果来完成的,如果像这样裁剪视图,看起来将不正确(这将是相反的问题)。

即使您费心去检测剪裁情况(可能很困难)并剪刀剪裁或剪裁其他全屏水下效果,使其仅应用于水下场景(这是您可以探索的潜在解决方案),您仍然可以实际水上飞机本身的问题。过渡过程中仍然会有令人不快的视觉伪像。您可以检测到该平面并将其严重模糊。这可能是最接近真实世界的类比,即通过部分浸没的相机镜头所看到的视图。

或者,完全避免这种情况的发生:如果玩家“在”水上方,则不要让相机进入水平面以下;当玩家“在”水之下时,不要让相机进入水平面以上。仅当您具有针对水上/水下的离散播放器操作模式时,这才真正起作用,并且如果有物理按钮或播放器可以在“在表面游泳”和“在下面游泳”之间进行转换的其他明显且明显的动作,则效果最佳。表面。”

您无需解释潜水的明确按键,而可以将摄像机调低到足够高的水平来解释“俯冲”,从而解释向前运动。然后,您可以使用图形效果(飞溅或其他效果)来隐藏相机在水平面上的过渡,通常这是无法跨越的。

我们在激战2中使用了这种技术。


3

当相机在水下时,游戏通常会开启某种效果,主要是蓝雾。要处理近平面夹过水面的情况,您可以在相机靠近水面时打开雾着色器,然后将一些代码添加到像素着色器中,以计算对应于近水平面的点该像素,并且仅当该点在水面以下时才激活雾。

如果雾化是作为后期处理完成的,则通过渲染全屏通道,这特别容易-您只需要计算全屏四边形或三角形的每个顶点在近平面上的世界空间位置(带反函数)视图/投影矩阵),然后将此值插值到像素着色器;然后您可以检查其垂直分量,看看它是在水平面之上还是之下。

对于加分点,您可以使用相同的技术添加几像素厚的纹理来表示水面的弯月面,因此它看起来不太像一条锐利的线。


(如果水表面是网格,会有问题,但仍然是一个很好的一般答案)
2013年

0

我有两种方法;一个使用着色器,另一个可以使用GUI。两者将开始相同:

“简体”- If, Object(Camera) is in 3d Space(Water bounding box/whatever you choose) trigger a shader/GUI.

着色器将提供更多的真实感,您可以应用变形像这样

雾像COM。男孩说,可以通过GUI应用。创建具有部分透明度的照片,并将其用作整个相机视图上的GUI。对于您提供的照片,我会尝试使用棕色。

这已在名为Drea D Out的恐怖游戏中使用。如果玩家走近幽灵,屏幕将变得模糊。尽管它没有在水下使用,但产生了类似的效果:)

您始终可以选择两种方法,也可以制作可以改变颜色的着色器。

http://media.indiedb.com/images/games/1/21/20833/Demo_update_SS01.png

Taken from : http://sahdan-share.blogspot.com/2013/04/dreadout.html
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.