水面Alpha混合与边界柔和

    水面原来采用渲染质量较高的菲捏珥水面,这样渲染出来的效果确实不错,不过这需要渲染折射图与反射图,再加上最后一遍场景渲染,整个场景需要渲染三遍,虽然GPU GEM2里面提到了这类水面的优化,经过项目中使用发现开销还是相当的大,外加上原来没有考虑边界柔和,导致水面切边非常锋利,所以决定采用较低的alpha水面混合来代替。

       接下来说说我采用的水面alpha混合方案,需求如下:

1.      水面只需要反射天空

2.      边界柔和,水深的地方反射强度大,也就是越看不清水底

3.      相机距离水面的距离越近,水面就需要越透明(试想相机看着人,而看不见水面下的情况)

根据以上需求,我决定采用在PS中做逐像素渲染。

1.      只反射天空虽然有时候看起来并不真实,但实现足够简单,效率高,这样就不需要反射图了,节省一个RT。简单的实现就是采用一张立方体贴图,然后根据相机与像素向量求个反射向量,再用texCUBE做个采样搞定。

2.      边界柔和看这张图,没有边界柔和的图很丑陋,像一把刀切过一样。这个可以通过做一张水深遮罩图来完成,这张图用基本的灰度图就可以了,平铺整个地形,可以这样生成:取像素任意一点,转换为世界坐标,求出与地形的交点,如果地形在上,则为全透明,填0,如果大于25.5则填1,中间做个线型混合 (byte)(abs(h) × 10)。这样得到的深度图效果如下:

 

如果把这张深度图做为alpha来输出,颜色为白色,我在场景中截了一张图,看,是不是有点样子了,岸边的锋利边缘被柔化了^_^

 

3      相机距离水面的距离越近,水面就需要越透明,这个只须在PS中用distance求出相机与像素的距离,然后通过求出的距离混合alpha就可以了。

看看加上颜色信息后的最终效果,反射了天空,柔化了边缘,效率也提高了,正是我们想要的。

 

 

再来一张:

 

 

 

 

转载请注明出处:

作者:gogoplayer

E-mail : gogoplayer@163.com

QQ : 78939328

http://www.gogoplayer.com.cn

posted on 2008-11-19 15:46 gogoplayer 阅读(1624) 评论(9)  编辑 收藏 网摘 所属分类: XNA图形学HLSL

评论

#1楼 2008-11-19 21:31 梦在天涯      

code!

沙发!
  回复  引用  查看    

#2楼 2008-11-20 10:21 777[未注册用户]

开发环境是什么?? 这个是广告还是教育贴?   回复  引用    

#3楼[楼主] 2008-11-20 11:34 gogoplayer      

@777
没必要告诉你,这是私人blog,随手写的,可以随便理解,^_^
  回复  引用  查看    

#4楼 2008-11-20 18:13 大 城小格[未注册用户]

3d引擎?
photoshop教学帖?

应该不是平面设计吧。感觉是3d引擎。
  回复  引用    

#5楼 2008-11-23 22:04 颜斌1[未注册用户]

@gogoplayer
如果是私人blog就别发到首页 发到首页 就应该允许别人交流 不进行交流 你发首页干嘛? 显摆?
  回复  引用    

#6楼[楼主] 2008-11-25 18:54 gogoplayer      

@颜斌1
即使显摆关你何事?你不要来就好了
  回复  引用  查看    

#7楼 2008-12-02 22:45 I love this game      

呵呵 挺好的   回复  引用  查看    

#8楼 2009-06-11 16:22 88532060[未注册用户]

计算量大不?
效果真不错。。。代码能不能发给我一份哈
  回复  引用    

#9楼 2009-06-11 16:22 88532060[未注册用户]

a88532060a@sina.com   回复  引用    

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1336737




相关文章:

相关链接:

导航

<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

统计

与我联系

搜索

 

常用链接

留言簿

我的标签

随笔分类

随笔档案

最新评论

阅读排行榜

评论排行榜