UNITY3D shader学习心得<三> Vertex and Fragment Shader

Vertex and Fragment Shader:最强大的Shader类型可编程渲染管线. 使用的是CG/HLSL语法。分为2个部分vertex顶点部分和Fragment像素部分。


Pass

{

   Name "MyPass"              //Pass名称

   Tags {"LightMode"="Always"}     //光照模式

   CGPROGRAM                 //CG程序开始,嵌入CG程序

   #pragma  vertex  vert        //预编译指令 指定顶点函数的名字 必须实现  渲染管线自动调用  vertex要小写

   #pragma  vragment frag        //预编译指令 指定片段函数的名字 必须实现 渲染管线自动调用  vragment要小写

   #pragma  Target 3.0           //shader模式版本3.0   默认是2.0

   #include "UnityCG.cginc"        //包含"UnityCG.cginc"文件 路径在:\Editor\Data\CGIncludes

   sampler2D _MainTex;           //声明贴图 要和根Shader里的Properties的变量名对应。

   float4  _Color;             //声明颜色

   //vertex函数输出结构体,也是fragment函数输入结构体

   struct v2f{

   float4 pos:SV_POSITION;         // :SV_POSITION 指明语义,顶点位置  语义都是大写

   float4 texcoord:TEXCOORD0;       //  纹理坐标

   } ;                      //结构体后面要加 ; 号

   //vertex函数实现 appdate_base是UnityCG.cginc里定义的结构体 

   v2f vert(appdate_base v){

    v2f o;

    o.pos=mul(UNITY_MATRIX_MVP,v.vertex);       //使用HLSL中的mul函数   将顶点位置转化为投影坐标系位置。

    o.texcoord=v.vertex;                  

    return o;

   }

   //fragment函数实现

   half4 frag(v2f i):COLOR{   //指明函数返回的是COLOR,输出颜色

   half4 col= _Color*tex2D(_MainTex,i.texcoord.xy);  //使用tex2D函数 将位置信息和贴图相乘。得到每个点贴图纹理。

   return col;

}    


   ENDCG                   //CG程序结束


}


!!!!!  颜色取值范围是0-1 颜色四个值用XYZW表示 UV是0到1  normal是-1到1 

LightMode 的可选值:

  • Always: 总是渲染。没有光照应用。

  • ForwardBase: 用于正向渲染,环境主要方向灯和定点光/SH 等的应用

  • ForwardAdd用于正向渲染,附加的像素光被应用,每个光照一个pass

  • PrepassBase用于延迟光照,渲染法线/镜面指数。

  • PrepassFinal: 用于延迟光照,通过结合纹理,光照和自发光渲染最终颜色

  • Vertex: 用于顶点光照渲染,当物体没有光照映射时,所有顶点光照被应用

  • VertexLMRGBM: 用于顶点光照渲染,当物体有光照映射的时候使用顶点光照渲染。在平台上光照映射是RGBM 编码

  • VertexLM: 用于顶点光照渲染,当物体有光照映射的时候使用顶点光照渲染。在平台上光照映射是double-LDR 编码(移动平台,及老式台式CPU)
  • ShadowCaster: 将物体当做阴影产生者来渲染

  • ShadowCollector: 为了正向渲染对象的路径,将对象的阴影收集到屏幕空间缓冲区中。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是重阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值