刚开始学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编程(一):水波浪相关推荐

  1. 【浅墨Unity3D Shader编程】之三 光之城堡篇:子着色器、通道与标签的写法 amp; 纹理混合...

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://hpw123.net/a/C__/kongzhitaichengxu/2014/1117/120.html 作者:毛星 ...

  2. 【GPU精粹与Shader编程】(一) 全系列核心知识点总览

    系列文章前言 <GPU Gems>1~3 .<GPU Pro>1~7 以及<GEM Zen>组成的GPU精粹系列书籍,是游戏开发.计算机图形学和渲染领域的业界大牛们 ...

  3. 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 第一个Shader的书写

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...

  4. 【Unity3D Shader编程】之九 深入理解Unity5中的Standard Shader (一)屏幕水幕特效的实现

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/49556461 作者:毛星云(浅 ...

  5. 【Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 第一个Shader的书写

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...

  6. 【GPU精粹与Shader编程】(七) 一篇文章读完《GPU Gems 3》

            本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处           文章链接: https://zhuanlan.zhihu.com/p/44671434 本文是[GPU精 ...

  7. 【GPU精粹与Shader编程】 七 一篇文章读完 GPU Gems 3

            本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处           文章链接: https://zhuanlan.zhihu.com/p/44671434 本文是[GPU精 ...

  8. 【浅墨Unity3D Shader编程】之中的一个 夏威夷篇:游戏场景的创建 amp; 第一个Shader的书写...

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...

  9. 【Unity3D Shader编程】之一 夏威夷篇 游戏场景的创建 第一个Shader的书写

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  10. 【浅墨Unity3D Shader编程】之一 游戏场景的创建 第一个Shader的书写

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...

最新文章

  1. 西瓜书_阶段1_作业参考
  2. 技术文章是怎样炼成的?
  3. 使用Windows命令行启动服务
  4. 【Tiny4412】烧写Android系统remote data too large问题分析和解决
  5. CF986B Petr and Permutations 思维
  6. Hash冲突处理终极版
  7. 为了在简历上写掌握【Java中IO流】,做了该篇总结
  8. 华为s8600手机驱动_华为自研驱动IC已流片,最快今年量产
  9. android+eclipse工程,#Cocos2d+lua#android+Eclipse工程编译设置
  10. springboot 控制台输出错误信息_springboot(6)——整合日志
  11. xshell和xftp免费版下载地址
  12. 谁说Excel中不能输入“0”开头的数字?
  13. countif和sum套用_COUNTIF与SUMIF函数的常见用法
  14. 正弦定理和余弦定理_教师招聘 数学中学说课稿 《余弦定理》
  15. 关于TI XDS100V1和XDS100V3仿真器电脑无法识别的解决办法
  16. 根据ID3算法给出游玩的决策树的实战案例
  17. Python人工智能之图片转文字识别
  18. 高清视频相关知识和、KMPlayer 硬解码(DXVA)设置、Z520+US15W+GMA500硬解码测试
  19. 量子通信需要量子计算机吗,【光明日报】关于量子通信,这些问题你困惑过吗...
  20. CSS和js和HTML一起做出网页版别踩白块游戏

热门文章

  1. 【题解】poj1639[2018.8.24校赛 最小生成树 A]Picnic Planning 最小度限制生成树
  2. jdbc连接mysql数据库驱动加载失败_Java连接数据库,成功加载SQL驱动程序,但数据库连接失败...
  3. 刘诺一,妈妈,安娜伊思·马田
  4. Linux-epoll机制
  5. 【4月英语——处于波动期】
  6. php yii2 service层,卩大王叫我来巡山
  7. robotframework:log日志输出现中文乱码如xC4xE3
  8. ManGe总结的常用js方法
  9. 在生产中提供Django静态和媒体文件
  10. day9-字符串总结