Shader编程(一):水波浪
刚开始学shader ,写一下笔记。
一、常用shader
1、Standard Surface Shader:(标准表面着色器) 是一种基于物理法人着色器,以模拟现实真实的方式来模拟材质与灯光之间的关系,可以很轻易的表现出各种金属反光效果,同时此种Shader的书写逻辑也更符合人类的思维模式。
2、Unlit Shader:最基本的顶点片断着色器,不受光照影响的Shader,多用于特效、UI上的效果制作。
3、Image Effect Shader:也是顶点片断着色器,只不过是针对后处理而定制的模版,后处理是什么呢?Bloom(也有人叫Glow/泛光/辉光等说法)、调色、景深、模糊等,这些基于最终整个屏幕画面而进行再处理的Shader就是后处理。
二、属性类型(shader脚本中定义在Properties模块中的)
1、Color颜色
_Color("ColorValue", Color) = (1,1,1,1)
[HDR]_Color("ColorValue", Color) = (1,1,0,1)
变量名:_Color
显示名称:ColorValue (显示在面板上)
类型:Color
默认值:(1,1,1,1) [0-1]之间的浮点数 rgba
2、Int整数
_Int("IntValue", Int) = 1
3、Float浮点数
_Float("FloatValue", Float) = 0.5
_Float("FloatValue", Range( 0 , 1)) = 0.5
[PowerSlider(3)]_Float("FloatValue", Range( 0 , 1)) = 0.5
[IntRange]_Float("IntValue", Range( 0 , 1)) = 1
第二种情况显示float的范围在0-1
4、Vector四维数
_Vector("VectorValue", Vector) = (0,0,0,0)
5、2D纹理
_MainTex("2D纹理", 2D) = "white" {}
[NoScaleOffset]_MainTex("2D纹理", 2D) = "white" {}
[Normal]_MainTex("2D纹理", 2D) = "white" {}
第三种情况是法线贴图
6、3D纹理
_MainTex("3D纹理", 3d) = "" {}
7、Cube立方体纹理
_MainTex("Cube纹理", CUBE) = "" {}
三、shader整体框架
Shader "Custom/SinShader"
{Properties{_Color("Color", Color) = (1,1,1,1) //接收外部材质}SubShader{Pass{CGPROGRAM //开始#pragma vertex vert //定点着色器 入口函数#pragma fragment frag//片段着色器 入口函数ENDCG //结束}}
}
四、第一个shader(SinShader)
Shader "Custom/SinShader"
{Properties{_MainTex ("Texture", 2D) = "white" {} //水波图片接收}SubShader{Pass{CGPROGRAM#pragma vertex vert //顶点着色器入口函数#pragma fragment frag//片段着色器入口函数#include "UnityCG.cginc" //负责引用unity封装的相关库函数struct appdata //数据结构(目前只用到这两种){float4 vertex : POSITION; //POSITION:位置 常用语意修饰之一float2 uv : TEXCOORD0; //TEXCOORD0:第一套纹理 常用语意修饰之一};sampler2D _MainTex; //Properties中定义的变量 如果当前Pass要使用的话,需要再定义一次 2D对应sampler2Dfloat4 _MainTex_ST; //为了使用 TRANSFORM_TEX函数定义//负责改变各个顶点的相位 实现水波像正弦函数一样波动appdata vert (appdata v){appdata o;//获得点到中心点的距离 ,相当于正弦函数的X值float dis = distance(v.vertex.xyz, float3(0, 0, 0)); //获得距dist _Time.z一定偏移点的相位,相当于正弦函数的y值//可以通过修改h的缩放倍数,该波峰波谷的值,以及通过改_Time.z缩放倍数改变波浪的快慢float h = cos(dis+_Time.z); //o.vertex = mul(UNITY_MATRIX_MVP,v.vertex);o.vertex = UnityObjectToClipPos(v.vertex);//将计算好的y值赋值到顶点o.vertex.y = h; o.uv = TRANSFORM_TEX(v.uv, _MainTex);return o;}fixed4 frag (appdata i) : SV_Target{fixed4 color = tex2D(_MainTex, i.uv); //2D纹理查找 根据uv和贴图计算各个点应该显示什么颜色return color;}ENDCG}}
}
五、效果如下
第一次用录gif图,录的不太清楚,可能是电脑问题
六、UVShader
Shader "Custom/UVShader"
{Properties{_MainTex ("Texture", 2D) = "white" {}_BlackTex("Texture1",2d) = "white"{}}SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;UNITY_FOG_COORDS(1)float4 vertex : SV_POSITION;};sampler2D _MainTex;sampler _BlackTex;float4 _MainTex_ST;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _MainTex);UNITY_TRANSFER_FOG(o,o.vertex);return o;}fixed4 frag (v2f i) : SV_Target{float2 uv_offset = float2(_Time.y*0.2,_Time.y*0.2);fixed4 LightColor= tex2D(_BlackTex, i.uv+uv_offset);fixed4 col = tex2D(_MainTex, i.uv) +LightColor;return col;}ENDCG}}
}
效果:
给鱼添加了水波纹的效果
Shader编程(一):水波浪相关推荐
- 【浅墨Unity3D Shader编程】之三 光之城堡篇:子着色器、通道与标签的写法 amp; 纹理混合...
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://hpw123.net/a/C__/kongzhitaichengxu/2014/1117/120.html 作者:毛星 ...
- 【GPU精粹与Shader编程】(一) 全系列核心知识点总览
系列文章前言 <GPU Gems>1~3 .<GPU Pro>1~7 以及<GEM Zen>组成的GPU精粹系列书籍,是游戏开发.计算机图形学和渲染领域的业界大牛们 ...
- 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 第一个Shader的书写
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...
- 【Unity3D Shader编程】之九 深入理解Unity5中的Standard Shader (一)屏幕水幕特效的实现
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/49556461 作者:毛星云(浅 ...
- 【Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 第一个Shader的书写
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...
- 【GPU精粹与Shader编程】(七) 一篇文章读完《GPU Gems 3》
本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处 文章链接: https://zhuanlan.zhihu.com/p/44671434 本文是[GPU精 ...
- 【GPU精粹与Shader编程】 七 一篇文章读完 GPU Gems 3
本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处 文章链接: https://zhuanlan.zhihu.com/p/44671434 本文是[GPU精 ...
- 【浅墨Unity3D Shader编程】之中的一个 夏威夷篇:游戏场景的创建 amp; 第一个Shader的书写...
本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...
- 【Unity3D Shader编程】之一 夏威夷篇 游戏场景的创建 第一个Shader的书写
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- 【浅墨Unity3D Shader编程】之一 游戏场景的创建 第一个Shader的书写
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...
最新文章
- 西瓜书_阶段1_作业参考
- 技术文章是怎样炼成的?
- 使用Windows命令行启动服务
- 【Tiny4412】烧写Android系统remote data too large问题分析和解决
- CF986B Petr and Permutations 思维
- Hash冲突处理终极版
- 为了在简历上写掌握【Java中IO流】,做了该篇总结
- 华为s8600手机驱动_华为自研驱动IC已流片,最快今年量产
- android+eclipse工程,#Cocos2d+lua#android+Eclipse工程编译设置
- springboot 控制台输出错误信息_springboot(6)——整合日志
- xshell和xftp免费版下载地址
- 谁说Excel中不能输入“0”开头的数字?
- countif和sum套用_COUNTIF与SUMIF函数的常见用法
- 正弦定理和余弦定理_教师招聘 数学中学说课稿 《余弦定理》
- 关于TI XDS100V1和XDS100V3仿真器电脑无法识别的解决办法
- 根据ID3算法给出游玩的决策树的实战案例
- Python人工智能之图片转文字识别
- 高清视频相关知识和、KMPlayer 硬解码(DXVA)设置、Z520+US15W+GMA500硬解码测试
- 量子通信需要量子计算机吗,【光明日报】关于量子通信,这些问题你困惑过吗...
- CSS和js和HTML一起做出网页版别踩白块游戏
热门文章
- 【题解】poj1639[2018.8.24校赛 最小生成树 A]Picnic Planning 最小度限制生成树
- jdbc连接mysql数据库驱动加载失败_Java连接数据库,成功加载SQL驱动程序,但数据库连接失败...
- 刘诺一,妈妈,安娜伊思·马田
- Linux-epoll机制
- 【4月英语——处于波动期】
- php yii2 service层,卩大王叫我来巡山
- robotframework:log日志输出现中文乱码如xC4xE3
- ManGe总结的常用js方法
- 在生产中提供Django静态和媒体文件
- day9-字符串总结