随笔 - 833  文章 - 1  评论 - 106  阅读 - 200万

【转】 水效模拟

Realistic Water, Real-time, Reflection, Refraction, Bump mapping.

1, Static Water

这种水适合用于平静的小水面,比如小水沟或雨后积水。分别渲染水面上和水面下的场景作为反射贴图和折射贴图,再做叠加。

tips:

1,渲染反射贴图时需要把水面下的部分剪裁掉。最简单的方法是在shader里设置gl_ClipDistance,可惜不同硬件厂商甚至不同的驱动程序对其实现都是不同的。另一种简单的方法是使用Oblique Frustum Clipping,它通过修改ProjectionMatrix以使用任意平面作为NearPlane,达到剪裁的效果。值得注意的是,这种方式会影响到ZBuffer。

2,折射贴图可以直接使用场景渲染图,不过水面上的物体如果被折射采样,会出现问题。CryTek的建议是:Mask out everything above water surface。

3,通过比较水面和场景的深度,可以柔化它们的交界处。

2, Bump Water

对于大一些的水面,比如水塘或河流,需要表现出水的流动。这通常使用一个平面几何体作为水的表面,使用NormalMap模拟水纹,卷动DudvMap进行纹理扰乱,模拟水的波动。

3, Wave Water.

对于大面积的水面,比如湖或海,仅仅有水纹是不够的,还需要波浪。一种做法是将预先做好的网格投射到屏幕上,然后在VertexShader中通过DisplaceMap修改每个顶点的位置。另一种做法是不使用几何体作为水面,直接在PixelShader中读取场景深度,对高度低于水面的像素渲染水效果。参考:http://www.gamedev.net/reference/articles/article2642.asp

posted on   3D入魔  阅读(902)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2010年3月 >
28 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10

点击右上角即可分享
微信分享提示