惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
The Register - Security
The Register - Security
D
Docker
The Cloudflare Blog
A
About on SuperTechFans
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
月光博客
月光博客
B
Blog RSS Feed
博客园 - 【当耐特】
The GitHub Blog
The GitHub Blog
B
Blog
IT之家
IT之家
美团技术团队
Engineering at Meta
Engineering at Meta
C
Check Point Blog
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog
Microsoft Azure Blog
Microsoft Azure Blog
S
SegmentFault 最新的问题
V
V2EX
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research
U
Unit 42
H
Help Net Security
雷峰网
雷峰网
人人都是产品经理
人人都是产品经理
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
博客园 - Franky
PCI Perspectives
PCI Perspectives
J
Java Code Geeks
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
腾讯CDC
A
Arctic Wolf
C
CERT Recently Published Vulnerability Notes
量子位
C
CXSECURITY Database RSS Feed - CXSecurity.com
Latest news
Latest news
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Hacker News
The Hacker News
有赞技术团队
有赞技术团队
Schneier on Security
Schneier on Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - 稻草人的麦田

[导入]显卡对于mipmap选择的研究 [导入]仔细研究了lithtech中的根据类名创建对象 [导入]光照优缺点 [导入]蜗牛的笔试题目 [导入]一个开发休闲游戏的程序组人与分配方案 [导入]格里高里的数学题 [导入]水彩化 [导入]伪 HDR/Blow [导入]描边,只是换了个过滤器而已 [导入]锐化模糊 [导入]卷积积分(转) [导入]再贴个圆形马赛克 [导入]马赛克 [导入]hlsl的浮雕效果 [导入]游戏出了一个demo [导入]图形文件的格式(转载) [导入] 一些色彩方面的知识 [导入]流浪歌手 [导入][转载]游戏引擎列表
[导入]运动模糊的制作
稻草人的麦田 · 2007-11-26 · via 博客园 - 稻草人的麦田

今天说一下运动模糊的制作好了,我采用的引擎是ogre+ode,已经有人把ogreode做好了,而且还做了一个汽车可以在里面跑,可是那个汽车竟

然没有运动模糊,而且那个汽车跑的也实在太慢了,我看来要想办法加入点东西才行。
先说下运动模糊的原理,其实我也是边看边说,呵呵,先说一下最基础的运动模糊,就是dx里面那个例子的。
首先,运动模糊属于全屏特效,所以肯定要创建一个和屏幕大小一样的渲染目标。
然后,再创建二个D3DFMT_G16R16F格式的texture,不作为渲染目标来用,但是肯定要传到hlsl里,因此也把参数设置为

D3DUSAGE_RENDERTARGET,只是用来储存屏幕上像素的运动速度,分别储存水平速度和竖直速度。而创建两个的目的就是分别储存上一桢和当前

桢的。
再创建一个屏幕大小的四边形,并且设置屏幕坐标(坐标的设定牵扯Directly Mapping Texels to Pixels)
这样,预备工作就完了。
取得渲染目标,并且更改,然后清空所有渲染目标,和其他全屏特效方法一样。
下面进入每一桢内来讲:
在每一桢中首先是交换当前的速度贴图材质和上一桢的速度贴图材质。
然后记录当前的世界渲染矩阵和视图矩阵,然后在当前贴图材质中在shader中用计算出速度并且保存到贴图中去。这样计算之后就得到了两个

图,一个是上一桢中的图,一个就是这一桢的图。
下一步,切换到我们就要渲染到的真正的屏幕表面,进入shader中去,分别对上一桢和当前桢的屏幕图进行采样,采样的结果分别是是上一桢

的速度和当前的速度。对两者进行比较,V上〉v下则当前像素的速度是就是上一桢的速度乘像素模糊系数,否则就是乘当前的速度乘模糊系数

。之后进行如下操作:
    // For each sample, sum up each sample's color in "Blurred" and then divide
    // to average the color after all the samples are added.
    float3 Blurred = 0;   
    for(float i = 0; i < NumberOfPostProcessSamples; i++)
    {  
        // Sample texture in a new spot based on pixelVelocity vector
        // and average it with the other samples       
        float2 lookup = pixelVelocity * i / NumberOfPostProcessSamples + OriginalUV;
       
        // Lookup the color at this new spot
        float4 Current = tex2D(RenderTargetSampler, lookup);
       
        // Add it with the other samples
        Blurred += Current.rgb;
    }
这样做的结果就是当前像素向周围像素按照速度等级逐渐模糊。
返回值为 (Blurred / NumberOfPostProcessSamples, 1.0f);是对其进行了求平均数的操作。

我修改了dx里面的例子,懒的动手重新写,虽然知道这是对自己的不负责,但是算了。改后的效果如下:我把第一个的运动模糊去掉了。

 

其实这篇日志断断续续写了半个月,想起来也窝囊,公司出了点变故,搞得我们放了1个星期的假,我也给自己放了一个星期的假回学校玩了一个星期才过来。于是耽误了不少时间。这段时间因为公司引擎对光线支持的不是很好,很可能要重写部分模块,于是重新研究lightmap了,打算把以前没有仔细研究透的地方搞透彻,这才发现挺多繁琐的东西我不知道哪。呵呵,发现问题就要补了。

文章来源:http://songxiaoyu8.blog.163.com/blog/static/2081812820071026102930115