游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7602|回复: 5

简单的运动模糊效果实现(RenderMonkey)

[复制链接]

14

主题

345

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
QQ
发表于 2007-10-2 15:06:00 | 显示全部楼层 |阅读模式
当一个物体快速移动的时候, 人眼会感觉它变模糊. 同样的现象在电影和照片上也存在. 产生这种现象的原因是人眼并不是无限快地接收信息的, 而是每隔一段很短的时间” 截取” 一幅画面。如果物体移动的速度超过了人眼捕获画面的速度, 那么物体会呈现条纹效果.

了解现实世界中的效果有助于我们用计算机去实现它. 理想的方法是判断每个像素在相邻两帧之间移动的速度, 跟据这个信息再来进行处理. 这个方案是可行的, 但是有点复杂. 另一种方法就是将当前帧的画面跟上一帧的画面进行混合, 并不考虑物体的移动速度. 这只是一种近似效果, 并在如今的视频游戏中得到了广泛的应用.



实现运动模糊屏幕效果有两方面的目的: 一是为了模拟现实中的运动模糊 二是它可以减轻渲染中的锯齿效果, 特别是在硬件不支持反锯齿的情况下, 这是一个廉价的替代方案.

实现原理:
1.先将场景渲染到一个RenderTarget1上
2.将RenderTarget1跟上一帧渲染的结果进行混合, 并输出到RenderTarget2
3.将RenderTarget2输出到屏幕, 并将其保留到下一帧进行混合
详见下图:

Shader实现

两个Pass
Teapot Pass将场景正常渲染到BaseSceneRT上.

BlurPass进行混合, 输出到BluredRT, 注意同时这里BluredRT做为Texture1输入上一帧的结果所以设置在渲染时不进行清除操作.

混合时需要一个比例值blur_factor进行插值, 在这里我设置为0.5
PixelShader代码:
sampler2D Texture0;
sampler2D Texture1;
float blur_factor;

float4 ps_main( float2 texCoord : TEXCOORD0 ) : COLOR
{
   float4 color1 = tex2D( Texture0, texCoord );
   float4 color2 = tex2D( Texture1, texCoord );
   
   //插值
   return lerp( color1, color2, blur_factor );
}

最后把BluredRT输出到屏幕即可(按说这里应该再加一个Pass的, 我偷懒, 直接把BluredRT显示到窗口上看效果了)

快速拖动物体, 可以看到效果了^_^:



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1809418

14

主题

345

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
QQ
 楼主| 发表于 2007-10-2 15:08:00 | 显示全部楼层

Re:简单的运动模糊效果实现(RenderMonkey)

Gameres就不会弄个HTML编辑器么?真是的,本来排好版的,到这里全乱了,代码着色也没了,图片还要一张张插入..........

32

主题

1259

帖子

1351

积分

金牌会员

Rank: 6Rank: 6

积分
1351
发表于 2007-10-2 18:32:00 | 显示全部楼层

Re:简单的运动模糊效果实现(RenderMonkey)

RenderMonkey 下载下来就带个 运动模糊 的例子

27

主题

418

帖子

455

积分

中级会员

Rank: 3Rank: 3

积分
455
QQ
发表于 2007-10-2 22:55:00 | 显示全部楼层

Re:简单的运动模糊效果实现(RenderMonkey)

用OGL的累积缓存也很简单,可惜D3D似乎没有。

不用抱怨了,也许你捐点钱,就能实现你的愿望了,嘻嘻。

14

主题

345

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
QQ
 楼主| 发表于 2007-10-3 13:57:00 | 显示全部楼层

Re: Re:简单的运动模糊效果实现(RenderMonkey)

testerHooK: Re:简单的运动模糊效果实现(RenderMonkey)

用OGL的累积缓存也很简单,可惜D3D似乎没有。

不用抱怨了,也许你捐点钱,就能实现你的愿望了,嘻嘻。

这东西还不简单么?找个eWebEditor替换掉这个编辑框就行了

44

主题

248

帖子

274

积分

中级会员

Rank: 3Rank: 3

积分
274
发表于 2007-10-5 16:40:00 | 显示全部楼层

Re:简单的运动模糊效果实现(RenderMonkey)

我都是用一个alpha混合 来实现运动模糊的,效果还不错
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-20 19:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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