首页 > 其他 > 详细

shader——表面着色器

时间:2020-09-08 12:26:35      阅读:67      评论:0      收藏:0      [点我收藏+]

表面着色器包括四个函数

  • 顶点变换函数
  • 表面着色函数
  • 光照模型
  • 最终颜色修改函数

表面着色器最终会被编译成一个复杂的顶点着色程序

  • #pragma surface 入口函数名称 光照模型(Options)
  • surface后面跟表面着色器的入口函数,surf(Input IN,inOut SurfaceOutput o)
  • 光照模型
    • 系统内置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参数

 

shader——表面着色器

原文:https://www.cnblogs.com/joemono/p/13631618.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!