游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4140|回复: 13

水深模拟

[复制链接]

9

主题

132

帖子

145

积分

注册会员

Rank: 2

积分
145
QQ
发表于 2010-4-29 10:19:00 | 显示全部楼层 |阅读模式
   最近在做水效果。发现水深效果挺难模拟的。
   我的做法:

       法一:
          1. 生成一张水深图(就是alpha图), 模糊N遍.
          2. 正常采样深度图.
         
          这样效果不好.

       法二:
          1. 同上1.
          2. 计算物体空间点到相机的向量.
          3. 沿向量采样N次, 并每次减掉高度差.
          4. 求均值.

        法三 (还在考虑中):
          1. 生成水深图(3D纹理)
          2. 基本同法二.

    求各位大大有什么好的方法, 资料也行.

    法一效果图:
         

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2010-4-29 16:58:00 | 显示全部楼层

Re:水深模拟

我也做了水面,不过没有考虑水深的情况,觉得用alpha图来记录水深应该是可行的,tex2d本身就会做插值计算的,不用去做模糊就能有很好的过渡,我现在的水面是批量按块来绘制的,一张反射贴图,一次绘制N块裁剪出来的水面,如果加个alpha贴图就做不了批量了,效率肯定要掉下去

不过受楼主的启发,找个时间我也来改进改进,增加一种非批量带水深的绘制方式,如果能记录水深,甚至水边靠岸的部分可以换另外一个波纹贴图还能有小幅海浪的效果,不光是换颜色,也能换贴图,表现效果一定很棒,什么时候得要试试看

不过马上要考系分了,最近个把月都没时间搞自己那个引擎


8

主题

111

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2010-4-29 17:53:00 | 显示全部楼层

Re: 水深模拟

alpha图是预生成的吗,那要是水下有动态物体怎么办.

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2010-4-29 17:59:00 | 显示全部楼层

Re:水深模拟

水下动态的东西还要考虑深度吗?这个....不用考虑那么复杂吧
PS:已经做了normalmap水面折射效果
如果还要考虑动态浮出水面的物体边缘小波浪,只能考虑播放半透明公告牌特效了,?濉!!

11

主题

21

帖子

33

积分

注册会员

Rank: 2

积分
33
发表于 2010-4-30 10:14:00 | 显示全部楼层

Re:水深模拟

我觉得水面的反射的菲涅尔系数得再调调

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2010-4-30 10:38:00 | 显示全部楼层

Re:水深模拟

用了菲涅尔系数的,用来增强了反射光的饱和度,不过好大堆可调整的参数只给了默认值,还没时间去做个界面来做调节

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2010-5-2 18:24:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2010-5-3 23:47:00 | 显示全部楼层

Re:水深模拟

水面深度到水底的深度,也就是水深浅的效果,不是z深度吧,这两个貌似没有关系哦

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2010-5-4 02:16:00 | 显示全部楼层

Re:水深模拟

海水本身是无色的,海水的颜色主由三个颜色组成,1.环境光的散射,2.折射,3.反射
环境光的散射:假设海水均匀,无杂质,环境光在水中的效果就是蓝色,由于海水对光线的吸收,因此,从上到下,海水逐渐从淡蓝色变为黑色。由于海中杂质的存在,海水有时也可能是其他颜色,但深度带来的衰减是一样的。这个颜色应该是独立于视角,从每个角度观察都一样(均匀散射)。

折射:折射光线的来源其实属于水下散射光线的一部分。由于光线吸收,水面上a点对水下b点观察到的反射光线强度,依赖于ab之间的视距(不一定等于深度)

反射,这个没什么好说的,与海水深度无关。

a点观察b点的颜色应该等于三个元素加起来。但由于菲涅尔效果的存在,三者不是简单的加和关系。观察角度对反射/折射关系的影响,比对视距/折射光线的影响更明显。假设在一个远离b点靠近水平面的角度,此时你不会注意到由于视距变长,带来折射的衰减,而是看几乎看不到折射效果了。此外,真实的水往往是不均匀的,因此视距对的折射光线强度的影响就更淡化了。

个人觉得在水面上时,可以用简单的shallowWaterColor,deepWaterColorw外加预计算的深度,以及菲涅尔效果模拟海水,这样的模型应该足够精确(for real-time)
水下时,则根据物体相对视角的水平,垂直距离,分别进行雾化,外加screen space的折射即可。 当然还有godray

9

主题

132

帖子

145

积分

注册会员

Rank: 2

积分
145
QQ
 楼主| 发表于 2010-5-4 10:52:00 | 显示全部楼层

Re:水深模拟

RTT水面对FPS影响太大了, 所以我不打算用。

如果不用RTT, 水面就要用alpha.
alpha 与视角相关, 应该跟水面的深度值与水下场景的深度值差成正比,但是同样要实时。
所以我才想到用垂直角度的深度差。这样可以预生成。
但是有个很大的问题就是,视角不垂直的话, alpha是错误的。
WOW同样有这样的问题, 但他很聪明, alpha过度很快。

还有谢谢各位
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 19:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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