技术标签: unity shader编程 游戏渲染实战
流动贴图,为了实现一个流动的效果,然而它存储的信息是顶点的移动向量信息,只占用RG通道,将一个归一化二维向量保存到像素中,所以我们看到的flowmap都是如下颜色的(0.5, 0.5, 0);
它的实现思路是借鉴了向量场的概念,可以看一下参考中的向量场相关介绍;
在shader的实现中,它利用了uv动画的原理,也就是我们需要根据flowmap中的信息做uv偏移,然后通过时间来改变偏移大小,从而产生一个流动效果;但是,我们不能允许uv的偏移量过大,因为随着时间叠加后,如果偏移量过大,肯定会导致采样错误,所以我们需要将时间来控制到0,1的一个循环中,这样就可以保证不会出现采样的异常了;
片元着色器如下所示,
fixed4 frag (v2f i) : SV_Target
{
float3 flowDir = tex2D(_FlowMapTex, i.uv) * 2.0f - 1.0f;
flowDir *= _Speed;
float phase0 = abs(fmod(_Time.y, 2) - 1);
half3 tex0 = tex2D(_MainTex, i.uv + flowDir.xy * phase0);
return fixed4(tex0, 1);
}
但是上述这种实现方式会在一个周期之后有跳变的效果;
为了解决这个跳变的效果,采用的解决方案是采样两次,然后在这两次采样之间做一个插值,然后做一个插值;注意插值系数也是要动态改变的,而且插值系数采用了绝对值的计算,也就是它是循环的(从0到1,再从1到0,而不会从1跳变到0)
fixed4 frag (v2f i) : SV_Target
{
float3 flowDir = tex2D(_FlowMapTex, i.uv) * 2.0f - 1.0f;
flowDir *= _Speed;
float phase0 = abs(fmod(_Time.y, 2) - 1);
float phase1 = frac(_Time.y + 0.5f);
half3 tex0 = tex2D(_MainTex, i.uv + flowDir.xy * phase0);
half3 tex1 = tex2D(_MainTex, i.uv + flowDir.xy * phase1);
float flowLerp = abs((phase0 - 0.5f) / 0.5f);
half3 finalColor = lerp(tex0, tex1, flowLerp);
return fixed4(finalColor, 1);
}
知乎 简单了解flowmap的使用(UE4)-https://zhuanlan.zhihu.com/p/33288033
知乎-向量场的介绍:https://zhuanlan.zhihu.com/p/46362611
Medium-FlowMap着色器教程(UE4):https://medium.com/@thelouishong/shader-tutorial-flow-map-4410af832a8d
Github-Unity Flow Map Shader代码:https://gist.github.com/TarasOsiris/e0e6e6c3b8fdb0d8074b
http://alex.vlachos.com/graphics/Vlachos-SIGGRAPH10-WaterFlow.pdf
文章浏览阅读604次。ipod 硬件检测 操作方法_ipod检测
文章浏览阅读1.7k次。实时监控后台录入的网络设备在线情况,断线提醒,历史状态查询,实时监控图表,后台录入数据后自动生成拓扑图。_服务器巡检系统
文章浏览阅读9.5k次。软件项目管理 ——2.1.项目立项 归档于软件项目管理初级学习路线第二章 软件项目确立《初级学习路线合集 》前言大家好,这节我们学习软件项目立项概念一、项目启动背景项目启动的背景大致可以分为四类:1.符合法规,法律或者社会要求2.满足相关方的要求或需求3.执行,变更业务或技术战略4.创造,改进或修复产品,过程或服务二、软件项目启动启动项目是因为客户的需求,然后实现这个要求,最后提交给客户。但是 不是所有的需求都可以被_软件项目立项流程
文章浏览阅读4.5k次,点赞5次,收藏8次。基本知识MenuStrip是C#用来做Windows窗口应用程序的一个常用组件,翻译过来就是菜单栏(类似文件、编辑、视图、帮助等等这一栏)。所有经常看到有很多软件的文件-保存选项后面写着Ctrl+S,这就是利用快捷键间接调用点击保存这个事件的功能。实验首先在visual studio中依次点击文件-新建-项目,出现下图按图中数字顺序选择,第三项可以自己设置。确定完成后,可以在解决方案资源管..._menustrip快捷键
文章浏览阅读396次。之前在知乎看到有人在问 自己写了一个冒泡排序算法如何用HTML,CSS,JavaScript展现出来排序过程。 感觉这个问题还挺有意思 。前些时间就来写了一个。这里记录一下实现过程。基本的思想是把排序每一步的时候每个数据的值用DOM结构表达出来。问题一:如何将JavaScript排序的一步步进程展现出来?我试过的几种思..._js快速排序动画演示效果实现
文章浏览阅读865次。ps:以前经常会处理此类问题,但一直没有闲暇时间记录,今天就把这个东西记录一下。1、提出问题业务中不可避免出现重复提交的问题,场景大概如下: 用户请求开户,后端接口处于开户处理中,在这个过程中,用户再次请求开户,那么此时在未做对应处理的情况下,即使业务代码中去判断开户重复也是无用的,因为一般增删改操作处于事务当中,后一个请求不会读取到上一个请求未提交事务的数据(如果读取到了那就是脏读),所以我们得在业务代码执行之前进行相应的防重复提交处理。2、解决方案大概思路如下: 1、用户第一次请求时,放_接口重复提交问题
达梦数据库基础2-数据库实例(Linux),介绍了在Linux系统中创建和管理达梦数据库实例的方法,包括使用图形界面工具和命令工具来进行操作。摘要长度:88个字符。
文章浏览阅读1w次,点赞14次,收藏119次。最近出了点意外,FPGA的事暂时搁置了。没办法,谁让“老板“”让我做什么,我就得做什么呢!!!这几天调试一块射频板,测试过程中简单总结了几个参数的简单调试方法,在此做个记录,以备以后可能还会用到。当然能够知道这些,也离不开百度,谷歌,还有前辈们的指导,在此表示感谢,话不多说 直接开内容,弄完睡觉。0、测试环境:所有测试激励均为单频信号源。- 1、S参数(1)测试仪器:矢量网络分析仪,电源..._射频测试s参数
文章浏览阅读1.1k次,点赞2次,收藏3次。你知道的越多,不知道的就越多,业余的像一棵小草!你来,我们一起精进!你不来,我和你的竞争对手一起精进!编辑:业余草推荐:https://www.xttblog.com/?p=5081手把..._复制下面的网址下载时选择 源文件 (普通下载)我们的用户软件终身免费升级http
文章浏览阅读3.8k次。初级实验_数码管滚动显示的摘要
文章浏览阅读6.3k次,点赞7次,收藏50次。fifo 做为FPGA常用的一个模块,每次用的时候都是丢三落四,不是忘这里就是忘哪里。现在记录下来。1--- 关于FIFO 的复位,是高复位。懒得用复位信号的时候,就是把复位信号一直拉低。后来仿真发现,这样fifo是不工作的,因 为仿真时候观察写入和读出数据计数都是0。在虚伪的时候还需要注意,复位信号如果和fifo的时钟不同步,一定要在新时钟下面打两拍。 还有..._fifo ip核使用读写位宽不一致设置
文章浏览阅读2.1w次,点赞55次,收藏206次。1.首先,输入codeforces点击进入。2. 进入之后,你将会看到这样的一个页面,先点击左上角,Register(注册)3.emmmmmmm如下,#我的QQ邮箱,懒得删。按照它的提示输入信息,完成之后,Register一下。然后正常登入就好4.你可以输入自己的信息,这里就不多说了5.如图,说的很详细了吧6.选题目点击进入..._codeforces