shader-3

shader语义:语义实际就是一个赋予shader输入输出的字符串;语义可以让shader知道从哪里读取数据,并把数据输出到哪里。但是并不一定需要特殊的意义。

系统数值语义:SV代表的含义就是系统数值。在渲染流水线中具有特殊的寓意。SV_POSITION(大多数平台与POSITION等义,索尼除外)语义修饰顶点着色器的输出变量pos。

锯齿参数调整。

经量使用较低精度,可以优化shader性能。

Shader Model等级决定了shader中各个特性的能力,体现在shader能够使用的运算符指令数目、寄存器个数等各个方面。

避免使用分支和循环语句,大大降低性能,将一些计算向cpu中进行预运算。

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/2"
{
 
    SubShader
    {
        Pass
        {
            CGPROGRAM
               #pragma vertex vert
               #pragma fragment frag
               //引用cginc文件
               #include "UnityCG.cginc"
			
                struct v2f {
                    float4 pos : SV_POSITION;//描述着色器输出的顶点位置
                    fixed4 color : COLOR0;
                };
               //appdata_full 内置结构体 
               v2f vert(appdata_full v){
                 v2f o;
                 o.pos = UnityObjectToClipPos(v.vertex);
                 //可视化法线方向
                 o.color = fixed4(v.normal * 0.5 + fixed3(0.5, 0.5, 0.5), 1.0);
                 //可视化切线方向
                 o.color = fixed4(v.tangent.xyz * 0.5 + fixed3(0.5, 0.5, 0.5), 1.0);
                 //可视化副切线方向
                                  //叉积
                 fixed3 binormal = cross(v.normal, v.tangent.xyz) * v.tangent.w;
				o.color = fixed4(binormal * 0.5 + fixed3(0.5, 0.5, 0.5), 1.0);
                 
                 //可视化第一组纹理坐标
                 o.color = fixed4(v.texcoord.xy, 0.0, 1.0);
                 //可视化第二组纹理坐标
                 o.color = fixed4(v.texcoord1.xy, 0.0, 1.0);
                 
                 //可视化第一组纹理坐标的小数部分
                 //frac 取小数部分
                 o.color = frac(v.texcoord);
                 // 当你想将颜色值规范到0~1之间时,你可能会想到使用saturate函数(saturate(x)的作用是如果x取值小于0,则返回值为0。如果x取值大于1,则返回值为1
				if (any(saturate(v.texcoord) - v.texcoord)) {
					o.color.b = 0.5;
				}
				o.color.a = 1.0;
                 
                 //可视化第二组纹理坐标的小数部分
                 o.color = frac(v.texcoord1);
				if (any(saturate(v.texcoord1) - v.texcoord1)) {
					o.color.b = 0.5;
				}
				o.color.a = 1.0;
                 //可视化顶点颜色
                 //o.color=v.color;
                 return o;
               }
               //SV_Target 描述片元着色器的输出颜色
              fixed4 frag(v2f i) : SV_Target {
				return i.color;
			  }         
			   
            ENDCG
        }
    }
}
发布了24 篇原创文章 · 获赞 1 · 访问量 1252

猜你喜欢

转载自blog.csdn.net/birdswillbecomdragon/article/details/104827198