Unity Shader基础:基础语法知识分享

发表于2018-03-21
评论0 2k浏览
想利用shader实现酷炫效果之前,大家唯一需要做的就是掌握基础知识,然后在这些基础知识的基础上再去进阶。为此下面就和大家分享下在学习编写shader过程中的语法知识。

在代码中的注释很详细了,在这里就直接贴代码,可以根据代码和注释了解shader编程
Shader "LJL/ShaderText"//shader路径,不一定和shader文件名保持一致  
{  
    Properties//属性  
    {  
        _Color("Color",Color)=(0,0,0,0)  
    }  
    //子shader,一个shader文件可以有多个SubShader,显卡运行时,从第一个SubShader开始运行,如果不能运行则运行第二个,以此类推,倘若都无法运行成功,则运行FallBback里Unity自带的shader  
    SubShader  
    {  
        Pass  
        {  
            CGPROGRAM//在这里编写CG代码,如果是GLSL就写成GLSLPROGRAM;SLHL写成SLHLPROGRAM,语法大致和C语言类似  
            fixed4 _Color;//变量的定义  
            //声明顶点函数,声明顶点函数的函数名  
            #pragma vertex vert  
            //声明片元函数,声明片元函数的函数名    
            #pragma fragment frag  
            struct S1  
            {  
                float4 selfPosition:POSITION;//Unity的模型顶点赋值  
                float3 selfNormal:NORMAL;//Unity的模型法线方向赋值  
                float4 texcoord:TEXCOORD0;//Untiy该模型第一张纹理贴图赋值  
            };  
            struct S2  
            {  
                float4 position:SV_POSITION;//屏幕顶点信息  
                float3 temp:COLOR0;//这个语义用于数据存储,比如在vert函数上存放,frag函数上调用  
            };  
            //顶点函数:通过语义告诉系统,需要获得模型顶点,最后将模型顶点转换为剪裁顶点并赋值给语义告诉系统显示在屏幕上  
            //POSITION语义作用是从Unity获取模型顶点  
            //SV_POSITION作用是模型在屏幕上的位置信息   
            S2 vert(S1 s1)  
            {  
                S2 s2;  
                s2.position=mul(UNITY_MATRIX_MVP,s1.selfPosition);  
                s2.temp=s1.selfNormal;//函数间数据传递  
                //mul是一个矩阵转化函数,UNITY_MATRIX_MVP是一个宏,通过这个参数,进行模型空间到剪裁空间的转换  
                return s2;  
            }  
            //片元函数:返回一个颜色值并赋值给SV_Target语义  
            //SV_Target语义作用是确定屏幕上每个像素点的颜色信息  
            fixed4 frag(S2 s2):SV_Target  
            {  
                return fixed4(s2.temp,0)*_Color;  
                //return fixed(0,0,0,0);  
            }  
            ENDCG  
        }  
    }  
    Fallback"Diffuse"  
}  

显示如下图:

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引