1、什么是OpenGL、DirectX
shader可以认为是一种渲染命令,由openGL或者dx进行解析,来控制渲染丰富多彩的图形
OpenGL 使用GLSL编写shader DirectX 使用HSSL编写shader 英伟达CG 编写shader(跨平台)
2、unity shader的分类
使用的是ShaderLab编写unity中的shader 1、表面着色器 2、顶点/片元着色器 3、固定管线着色器
3、shader基本结构
shader “Siki/01 myshader”{
Properties{
_Color("_Color",Color) = (1,1,1,1)
_Vector("Vector",Vector)= (1,2,3,4)
_Int("Int",Int) = 2145
_Float("Float",Float) = 4.5
_Range("Range",Range(1,11)) = 6
_2D("Texture",2D) = "red"{}
_Cube("Cube",Cube) = "white"{}
_3D("Texure",3D) = "black"{}
}
SubShader{
Pass{
CGPROGRAM
float4 _Color;
fixed4 _Col;
float4 _Vector;
float _Int;
float _Float;
float _Range;
sampler2D _2D;
samplerCube _Cube;
sampler3D _3D;
ENDCG
}
}
Fallback “VertexxLit”
}
4、shader的顶点函数与片元函数
unityCG.cginc中一些常用的函数
float3 WorldSpaceViewDir(float4 v)
float3 UnityWorldSpaceViewDir(float4 v)
float3 ObjSpaceViewDir(float4 v)
float3 WorldSpaceLightDir(float4 v)
float3 UnityWorldSpaceLightDir(float v)
float ObjSpaceLightDir(float v)
float3 UnityObjectToWorldNormal(float3 norm)
float3 UnityObjectToWorldDir(float3 dir)
float3 UnityWorldToObjectDir(float3 dir)
shader “Siki/01 myshader”{
SubShader{
Pass{
CGPROGRAM
#progrma vertex vert
#progrma fragment frag
float4 vert(float4 v : POSITION) :SV_POSITION{
float4 pos = mul(UNITY_MATRIX_MVP,v);
return pos;
}
xxx frag(yyy){
}
ENDCG
}
}
Fallback “VertexxLit”
}
|