11.Wave Shader

这个shader是在这位博主点击打开链接的文章基础上进行修改得到的,原作是在shadertoy网站上。不得不说,被shadertoy上的大神们震精了,真的是令我叹为观止,啥也不说了,慢慢学吧。

shader的效果:


Shader的代码如下,甚是短小精悍

Shader "Study/11_Waves"
{  //see https://www.shadertoy.com/view/4dsGzH  Properties{_Color("Main Color", Color) = (1,1,1,0.5)}SubShader{Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" }  Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"float4 _Color;struct v2f{float4  pos : SV_POSITION;float4  srcPos : TEXCOORD0;};float4 _MainTex_ST;v2f vert(appdata_base v){v2f o;o.pos = mul(UNITY_MATRIX_MVP, v.vertex);o.srcPos = ComputeScreenPos(o.pos);return o;}half4 frag(v2f i) : COLOR{fixed3 COLOR1 = fixed3(0.0,0.0,0.3);fixed3 COLOR2 = fixed3(0.5,0.0,0.0);float BLOCK_WIDTH = 0.03;float2 uv = (i.srcPos.xy / i.srcPos.w);fixed3 final_color = fixed3(1,1,1);fixed3 bg_color = fixed3(0,0,0);fixed3 wave_color = fixed3(0,0,0);// TO create the waves   float wave_width = 0.01;uv = -1.0 + 2.0*uv;uv.y += 0.1;for (float i = 0.0; i<7.0; i++){uv.y += (0.07 * sin(uv.x + i / 7.0 + _Time.y));wave_width = abs(1.0 / (150.0 * uv.y));wave_color += fixed3(wave_width * 1.9, wave_width, wave_width * 1.5);}final_color = bg_color + wave_color;return fixed4(final_color, 1.0);}ENDCG}}
}


这个shader精髓,是数学的魅力,原博主也只是简单的分析了一下,最精髓的其实是这个for循环里的这三行,其他的就不细说了,参考那位博主的文章吧。

uv.y += (0.07 * sin(uv.x + i / 7.0 + _Time.y));
wave_width = abs(1.0 / (150.0 * uv.y));
wave_color += fixed3(wave_width * 1.9, wave_width, wave_width * 1.5);

这三行只能用精妙来形容。整个shader,不仅仅是位移,连发光效果的颜色都是通过短短这三句来控制的。

第一行,根据uv.x和绘制线的条数来控制uv.y,+=号保证了多条线的间隔。如果是等于号,则相同的uv.x下将得到同样的color,效果就会类似是一个移动的大长方体:



第二行,根据uv,y计算线的宽度。这又很精妙。。。运用除法运算,1除以uv,y和一个常数的积。当uv,y大于一个常数后,也就是乘积大于1之后,宽度将永远是0,第三行最后计算出来的color也是背景色,这就是控制显示范围和线条宽度变化的地方。


第三行就不说了,根据宽度计算颜色,因为宽度不同,计算出的颜色也会不同。而因为uv,y随着时间变化,宽度也会变化,所以最终呈现出这么绚丽的效果。

真的,我都惊呆了,给那些大神们献上膝盖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

macpro台式计算机,Mac Pro正式上架 真的可以用来刨土豆丝

12月15日消息&#xff0c;早在6月4号WWDC全球开发者大会上就已经发布的新版Mac Pro电脑&#xff0c;近期正式上架苹果官网开销&#xff0c;某一外媒在收到2019年新版Mac Pro后&#xff0c;第一件事竟不是体验其性能&#xff0c;而是验证它是否可以用来给土豆或者奶酪刨丝。在视…

12.屏幕高斯模糊

本系列文章由浅墨_毛星云 出品&#xff0c;转载请注明出处。 文章链接&#xff1a; http://blog.csdn.net/poem_qianmo/article/details/51871531 作者&#xff1a;毛星云&#xff08;浅墨&#xff09; 微博&#xff1a;http://weibo.com/u/1723155442 本文工程使用的Uni…

广东东软学院计算机系主任罗,广东东软学院副校长朱爱红一行来访我校

3月27日&#xff0c;广东东软学院副校长朱爱红、教务部部长程江涛、品牌发展部部长李惠旋、计算机学院院长黄迅、SOVO主任吴志成、网络与信息中心主任付冬波、实验教学中心主任谢振华、图书馆馆长刘春林等一行18人来访我校。我校副校长郭权接待来访嘉宾。嘉宾一行参加调研会议嘉…

事业单位职称工资计算机,终于!事业单位绩效工资、职称变了!关系上千万人收入!...

原标题&#xff1a;终于&#xff01;事业单位绩效工资、职称变了&#xff01;关系上千万人收入&#xff01;大学生热烈追捧事业单位和公务员&#xff0c;并将其称为铁饭碗&#xff01;有很多大学生们在大学毕业之后就选择了去考公务员或者事业单位&#xff01;甚至不少同学甚至…

remove是什么意思计算机语言,remove是什么意思?remove是什么意思?

remove()是C语言中的函数&#xff0c;一般作用是删除数组、链表对象所有的元素。函数原型是intremove(char*filename)。函数功能remove()函数用于删除指定的文件&#xff0c;其原型如下&#xff1a;int remove(char *filename);函数声明2&#xff1a;templateinline bool remov…

Unity3D_NGUI_安卓APK安装包瘦身实践

减包瘦身是个精细活。本文整理了0907版本操作过程&#xff0c;以备日后参考。 经过一番折腾&#xff0c;各位攻城狮的努力&#xff0c;美术设计师的支持&#xff0c;策划爷的理解&#xff0c;UI资源&#xff08;图集、字体、单局外模型贴图&#xff09;从45.4MB减少到24.5MB。如…

Unity3D之Shader自定义编辑器功能拓展

一、前言最近在开发一个关卡类的游戏&#xff0c;在导入一些3D物体的时候&#xff0c;发现很多时候同一个3D物体需要渲染的方式不一样&#xff0c;比如这颗树要双面渲染&#xff08;Cull Off&#xff09;&#xff0c;但在很多情况下是可以剔除背面&#xff08;Cull Back&#x…

理解依赖注入(IOC)

IOC:英文全称&#xff1a;Inversion of Control&#xff0c;中文名称&#xff1a;控制反转&#xff0c;它还有个名字叫依赖注入&#xff08;Dependency Injection&#xff09;。 作用&#xff1a;将各层的对象以松耦合的方式组织在一起&#xff0c;解耦&#xff0c;各层对象的调…

局域网win7计算机如何互访,局域网win7电脑的互访步骤

局域网win7电脑的互访步骤Windows7如何实现局域网内的互访?下面是局域网win7电脑互访的步骤&#xff0c;为大家提供参考。步骤一&#xff1a;同步工作组 不管使用的是什么版本的Windows操作系统&#xff0c;第一步&#xff0c;要保证联网的各计算机的工作组名称一致步骤二&…

服务器自动挂载硬盘,Linux硬盘分区及开机自动挂载

本文以CentOS 6.4为例&#xff0c;查看当前linux服务器分区&#xff1a;df -h查看当前linux服务器硬盘&#xff1a;fdisk -l/dev/sda 第一块硬盘/dev/sdb 第二块硬盘依此类推以/dev/sdb为新增硬盘为例&#xff0c;需要进行以下操作方可正常使用1、分区fdisk /dev/sdb依次输入n&…

GPU Pro2 - 1.Terrain and Ocean Rendering with Hardware Tessellation

最近时间多了起来&#xff0c;准备捡起扔下了的渲染部分的知识。想拜读下GPU Pro系列并且做个笔记&#xff0c;不知道自己能否坚持下来&#xff0c;但愿可以吧。自己能力也有限&#xff0c;写的东西也只是自己的理解&#xff0c;肯定有很多理解不到位甚至错误的地方&#xff0c…

GPU Pro2 - 3.Procedural Content Generation on the GPU

GPU Pro2 - 3.Procedural Content Generation on the GPU 这篇文章着重介绍了基于Brownian 噪声和高度图在GPU中实时生成和渲染无限大地形系统。 Procedural content generation (PCG)程序化生成在许多游戏中已经有广泛应用&#xff0c;从简单的随机物体摆放&#xff0c;到全…

GPU Gems1 - 1 用物理模型进行高效的水模拟(Effective Water Simulation from Physical Models)

该读书笔记大多内容参照了大神浅墨的该篇文章https://zhuanlan.zhihu.com/p/35974789 本章介绍了一种在GPU中模拟和渲染大的水体的系统。它把基本网格的集合波动于动态发现贴图的生成结合起来。 1.1 目标和范围 这章里&#xff0c;我们将由计算简单正弦函数之和开始&#xf…

GPU Gems1 - 2 水刻蚀的渲染

2.1 引言 光线从弯曲的表面反射或折射&#xff0c;因此只聚焦在受光面上的某些区域&#xff0c;于是就产生了刻蚀现象。本文从美学角度出发&#xff0c;不以纯物理的方式计算&#xff0c;使其很容易在大多数图形硬件上实现&#xff0c;效果又十分逼真。 2.2 刻蚀的计算 如果想…

邮箱服务器ip地址白名单,申请SSL证书时如何设置IP地址白名单和邮箱白名单

8月3日消息 在申请SSL证书时&#xff0c;由于您的邮箱可能默认设置或自定义设置了拦截国外邮件&#xff0c;可能会导致您接收不到CA的邮件&#xff0c;给验证、收取证书带来了不便&#xff1b;如果服务器&#xff0c;防火墙也设置了拦截操作&#xff0c;那么即使您按CA要求完成…

GPU Gems1 - 3 Dawn Demo中的皮肤渲染(Skin in the Dawn Demo)

该篇文章参照浅墨的这篇文章&#xff1a;https://zhuanlan.zhihu.com/p/35974789 Dawn是由NVIDIA创建的&#xff0c;用来介绍GeForce FX产品线的演示程序&#xff0c;它说明如何使用可编程的着色技术创建出逼真的人类角色。 最初的Dawn Demo由NVIDIA于2002年发布&#xff0c;…

GPU Gems1 - 5 改良的Perlin噪声的实现

Perlin 噪声 KenPerlin(1985a,2002)KenPerlin(1985a,2002) 定义的噪声函数是最常用的噪声函数&#xff0c;称为 Perlin 噪声。PerlinPerlin 噪声在全部 (x,y,z)(x,y,z) 整形顶点处的参数值都为 00&#xff0c;变化源自各顶点间的梯度向量&#xff0c;然后再进行平滑插值。 计算…

GPU Gems1 - 7 无数波动草叶的渲染

本文部分参照该文章https://zhuanlan.zhihu.com/p/35974789 1.引言 本章介绍了一种灵活的&#xff0c;广泛应用的草模拟。该方案渲染的草不仅生长得自然&#xff0c;也能够逼真地在风中舞动&#xff0c;而且性能很高。 2.概述 首先&#xff0c;需要意识到&#xff0c;对单个…

2003文件服务器迁移2016,服务器2016设置文件共享

服务器2016设置文件共享 内容精选换一换为了保证使用生成的镜像创建的新云服务器可以实现一键式重置密码功能&#xff0c;建议您安装密码重置插件CloudResetPwdAgent&#xff0c;可以应用一键式重置密码功能&#xff0c;给云服务器设置新密码。下载一键式重置密码插件CloudRese…

GPU Gems1 - 8 衍射的模拟

1.什么是衍射 小尺度的表面细节引起反射波彼此干扰&#xff0c;这个现象就是衍射。首先&#xff0c;计算机绘图的大多数表面反射模型都忽略自然光的波动效果。当表面的细节比光的波长&#xff08;约1um&#xff09;大许多时&#xff0c;不存在问题。但对于小尺寸的细节&#x…