近期热门
Fog Of War shader(战争迷雾)【转】

[U3D] Fog Of War shader(战争迷雾)【转】

[复制链接]
17226 11 0 1 13年前
作者 shallway 发表于 八 13, 2012 有0个评论
                                                                                                                       

花了几天时间,从想法到实现,做出了比较完美的效果,还是挺有成就感的。首先,网上有分享解决方案,但是太繁琐,需要生成mesh来表现雾,而且效果很差。unity asset store上也有卖的,价钱高至75刀,而且我看了介绍,其解决方案也是生成mesh。如果对Post Image Effects有了解,那么很容易想到战争迷雾肯定就是一个全屏shader而已,何必那么麻烦呢。so,带着这个想法,做出了这个东西,我把它集成在Xffect Editor Pro 1.3.0里了,花75刀的价钱不仅能买到同等价钱的战争迷雾,还外带了一个特效编辑器,怎能错过~呵呵,不说废话了,我写这篇文章还是要分享自己的思路的,希望对读者有帮助。
首先,我们在玩RTS游戏时,地图的探索并显示的方式看起来像什么?

对,就像在PS里用笔刷工具画图一样。。
那么,我们可不可以在游戏里存储一张类似的贴图,然后把各个物体的世界坐标投射到XZ平面上,如果在白色区域内的则显示,否则就显示战争迷雾。
接下来,我们需要解决两个问题:
1,如何生成这个贴图?
2,如何从一个屏幕里取得每个像素的世界坐标?
一,生成可见区域贴图:
我们只需要跟踪一个client,并定义一个半径。当client移动的时候,以它的XZ坐标为半径画一个圆形区域,代表可见区域,不断累加后就相当于是用笔刷画图了。需要注意的是,Texture2D.Apply()是非常昂贵的,所以需要保证:贴图不可过大;贴图只需要8位,存储alpha数据即可
二,从屏幕获得每个像素的世界坐标
实际上这个问题已经有很多解决方案了(Reconstruct Position),但是由于引擎差异,我尝试了很久,通用解决方案都以失败告终。后来发现了unity自带的Image Effect: GlobalFog.js,里面提供了最快的解决方案。copy过来即可用,但是有一个问题:不支持AA!我也不知道是什么原因,即便是unity自带的GlobalFog也不支持AA,而unity官方也没有给出任何说明。而且由于这个解决方案需要depth texture,而mobile是不会自动生成它的,所以暂时不支持mobile。但是若要用在mobile上,也是有办法的,可以自己写pixel shader生成depth texture。
剩下的问题就是把每个像素映射到可见贴图里,从而决定该像素是否可见,当然,为了美观,还得加一些边缘blur效果。
over,最后放上一个demo视频,包含教程:
http://v.youku.com/v_show/id_XNDM4NjY1NTg4.html


转自:http://shallway.net/blog/fog-of- ... %E8%BF%B7%E9%9B%BE/

                                                       
0
点赞
0
打赏
1
添加到收藏夹

0

点击复制链接

使用微信扫码分享
一次扣10个券
全部评论11
您需要登录后才可以回帖 登录

没有看懂{:7_277:}{:7_277:}
11年前  ·  11楼
回复

使用道具 举报

11年前  ·  10楼
回复

使用道具 举报

9#
CGJOY网友 
{:7_256:}
12年前  ·  9楼
回复

使用道具

先留个名慢慢学习{:7_268:}
12年前  ·  8楼
回复

使用道具 举报

很好~~~
12年前  ·  7楼
回复

使用道具 举报

感觉还不错
12年前  ·  6楼
回复

使用道具 举报

能把源代码发的看下吗

12年前  ·  5楼
回复

使用道具 举报

相当的支持啊
12年前  ·  4楼
回复

使用道具 举报

现在正好要做这个效果
可以好好研究下
12年前  ·  3楼
回复

使用道具 举报

Post Image Effects还真没注意过,现在研究下。
13年前  ·  2楼
回复

使用道具 举报

数据加载中....
没有更多评论了
您当前使用的浏览器IE内核版本过低会导致网站显示错误

请使用高速内核浏览器或其他浏览器