前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >水下效果

水下效果

作者头像
逍遥剑客
发布2018-05-21 15:25:22
7740
发布2018-05-21 15:25:22
举报

这里说的水下效果, 是指在水底下时, 为了增强真实感, 做的一种水的波动效果, 算是post process的一种吧

原理很简单, 就是把渲染好的屏幕场景做为一张纹理输入, 然后对上面的像素按时间进行扰动, 这样感觉好像水在晃动一样, 增强代入感. (想想潜水时^_^)

代码很简单, 没啥好说的

struct VS_OUTPUT {    float4 pos       : POSITION0;    float2 texCoord : TEXCOORD0; }; float fTime0_1;   VS_OUTPUT vs_main( float4 inPos: POSITION ) {    VS_OUTPUT o = (VS_OUTPUT) 0;      inPos.xy = sign( inPos.xy);    o.pos = float4( inPos.xy, 0.0f, 1.0f);     // get into range [0,1]    o.texCoord = (float2(o.pos.x, -o.pos.y) + 1.0f)/2.0f;    return o; }

sampler2D Texture0;//屏幕RenderTarget sampler2D Texture1;//扰动纹理 float fTime0_1;   float4 ps_main( float2 texCoord : TEXCOORD0 ) : COLOR {       float2 bump = tex2D(Texture1, texCoord + (fTime0_1*20));       float2 texel = texCoord + bump/500;    return tex2D( Texture0, texel ); }

Texture1是一张bumpmap

最终效果:

可能不太明显, 毕竟是个动态效果, 把波动值加大:

关于扰动的时候屏幕边缘会显示另一边的像素的问题, 只要把texture0的寻址模式改成CLAMP就OK啦

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2008年04月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档