shader——表面着色器
表面着色器包括四个函数
- 顶点变换函数
- 表面着色函数
- 光照模型
- 最终颜色修改函数
表面着色器最终会被编译成一个复杂的顶点着色程序
- #pragma surface 入口函数名称 光照模型(Options)
- surface后面跟表面着色器的入口函数,surf(Input IN,inOut SurfaceOutput o)//surfaceoutput三种选择
- 光照模型
- 系统内置Lambert(漫反射光照),BlinnPhong(高光光照)
- 自定义光照:名字为Name
- harf4 Lighting<Name>(SurfaceOutput s,harf3 lightDir,harf atten)
- harf4 Lighting<Name>(SurfaceOutput s,harf3 lightDir,harf3 viewDir,harf atten)
- harf4 Lighting<Name>(SurfaceOutput s,harf3 light)
可选参数:
vertex:name vertex入口函数
void<Name>(inout appdata_full v)只需该顶点着色器中的输入顶点数据
harf4<Name>(inout appdata_full v,out input o)修改输入顶点数据,以及为表面着色器传递数据
finalcolor:name最终颜色修改函数
void<Name>(Input IN,SurfaeOutput o,inout fixed color)
其他可选参数
- alpha:Alpha混合模式,用户半透明着色器
- alphatest:varirableName Alpha测试模式,用户透明镂空着色器
- exclude_path:prepress使用指定的渲染路径
- addshadow:添加阴影投射器和集合通道
- dualforward:将双重光照贴图用于正向渲染路径中
- fullforwardshadow:在正向渲染路径中支持的所有阴影类型
- decal:add:附加印花着色器
- decal:blend:附加半透明印花着色器
- softvegetation:使用表面着色器,仅在Soft Vegetation开启时渲染
- noambient:不使用任何光照
- novertexlights:在正向渲染中不使用球面调和光照或逐点光照
- nolightmap:在这个着色器上禁用光照贴图
- nodirlightmap:在这个着色器上禁用方向光照贴图
- noforwardadd:禁用正向渲染添加通道
- approxview:对于有需要的着色器,逐顶点而不是逐像素计算规范化视线方向
- halfasview:将半方向传递到光照函数中
Input结构附加数据
Input:包含着色器所需要的纹理坐标,使用:uv+纹理名字,如果有第二张纹理,就使用uv2+纹理名字
附加数据:
- float3 viewDir:视图方向
- float4 color:每个定点的颜色插值
- float4 screenPos:屏幕坐标
- float3 worldPos:世界坐标
- float3 worldRefl:世界坐标中的反射向量
- float3 worldNormal:世界坐标中的法线
- float3 worldRefl;INTERNAL_DATA:世界坐标反射向量,但必须表面着色器写入o.Noraml参数
- float3 worldNormal;INTERNAL_DATA:世界坐标法线向量,但必须表面着色器写入o.Normal参数
SurfaceOutput结构体
- SurfaceOutput:
- half3 Albedo:漫反射的颜色值
- half3 Normal:法线坐标
- half3 Emission:自发光颜色
- half Specular:镜面反射系数
- half Gloss:光泽系数
- half Alpha:透明度系数
- SurfaceOutputStandard
- half Smoothness:0=粗糙,1=光滑
- half Matallic:0=非金属,1=金属
- SurfaceOutputStandardSpecular
- fixed3 Albedo
- fixed3 Specular
- fixed3 Normal
- half3 Emission
- half Smoothness
- half Occlusion:遮挡,默认为1;
- fixed Alpha

浙公网安备 33010602011771号