Unity 3D开发--Shader入门基础

Shader "Unlit/xxShader"
{
         Properties
         {
                   //基础属性 并可以显示在属性板上
                   _MainTex ("Texture", 2D) = "white" {}
         }
         //子着色器(SubShader):一个Shader可以有多个子着色器。这些子着色器互不相干且只有一个会在最终的平台运行。
         //编写多个的目的是解决兼容性问题。Unity会自己选择兼容终端平台的Shader运行。
         SubShader
         {
                   //设置渲染队列、渲染类型、阴影、投影,硬件将通过判定这些标签来决定什么时候调用该着色器
                   Tags { "RenderType"="Opaque" }
                   //Shader LOD 就是让我们设置一个数值,Unity内建Shader定义了一组LOD的数值,这个数值决定了我们能用什么样的Shader。
                   //通过LOD,我们就可以为某个材质写一组SubShader,指定不同的LOD,LOD越大则渲染效果越好,当然对硬件的要求也可能越高
                   //然后根据不同的终端硬件配置来设置 globalMaximumLOD来达到兼顾性能的最佳显示效果。
                   LOD 100
 
                   //顶点片段的Shader需要在Pass通道里编写
                   //一个Pass就是一次绘制
                   //可以有多个通道,每个通道都会渲染一遍,
                   //多次Pass可以实现很多特殊效果,例如当人物被环境遮挡时还可以看到人物轮廓就可以用多Pass来实现
                   //每个Pass中都可以包含自定义的Cg代码,从CGPROGRAM开始到ENDCG结束
                   Pass
                   {       
                            //CG代码需要编写在CGPROGRAM...ENDCG之间
                            CGPROGRAM
                            //编译命令 一个顶点程序 一个片段程序
                            #pragma vertex vert
                            #pragma fragment frag
                            // make fog work
                            #pragma multi_compile_fog
                            
                            #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;
                            float4 _MainTex_ST;
                            
                            //计算顶点
                            v2f vert (appdata v)
                            {
                                     v2f o;
                                     o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                                     o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                                     UNITY_TRANSFER_FOG(o,o.vertex);
                                     return o;
                            }
                            //计算片段 所使用参数是计算顶点后返回的数据
                            fixed4 frag (v2f i) : SV_Target
                            {
                                     // sample the texture
                                     //计算纹理的颜色 并返回
                                     fixed4 col = tex2D(_MainTex, i.uv);
                                     // apply fog
                                     UNITY_APPLY_FOG(i.fogCoord, col);                                
                                     return col;
                            }
                            ENDCG
                  }
         }
    //如果不硬件不满足所有SubShadr则调用默认,最基础的shader
    FallBack "Diffuse"
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值