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

 

posted @ 2020-09-08 11:44  密斯塔Joe  阅读(403)  评论(0)    收藏  举报