Surface Shader中的自定义光照模型

  当你在编写 Surface Shaders 时,是在描述一个表面的属性(反射颜色、法线……),而且光的交互过程是由一个光照模型来计算的。内建的光照模型有Lambert(漫反射光照)和BlinnPhong(镜面光照)。

  有时候,你可能想要使用一个自定义的光照模型,这在Surface Shader中是可能的。光照模型其实就是一些满足某些约定的Cg/HLSL函数。Unity内建的光照模型Lambert和BlinnPhong定义在Lighting.cginc文件中。这个文件在:

  • Windows:{Unity安装目录}/Data/CGIncludes/Lighting.cginc
  • Mac:/Applications/Unity/Unity.app/Contents/CGIncludes/Lighting.cginc

光照模型声明

  光照模型是一系列名字以Lighting开头的约定函数。它们能够声明在shader文件或者包含的文件中的任何地方。这些函数是:

  1. half4 Lighting<Name> (SurfaceOutput s, half3 lightDir, half atten);用于正向渲染路径中不依赖视线方向的光照模型。
  2. half4 Lighting<Name> (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten);用于正向渲染路径中依赖视线方向的光照模型。
  3. half4 Lighting<Name>_PrePass (SurfaceOutput s, half4 light); 用于延迟光照路径中。

  注意:你不需要声明所有的函数。光照模型要么使用视线方向,要么不使用。同样的,如果光照模型不工作在延迟光照中,就不要声明 _PrePass函数,而且所有使用它的shader只会编译到正向渲染中。

解码光照贴图

  用于正向渲染和延迟光照的光照贴图数据的解码可以被自定义在类似光照函数的方式中。根据光照模型是否依赖视线方向,选择下面其中一种函数。要解码标准的Unity光照贴图纹理数据(传入到colortotalColor,indirectOnlyColor 和scale 参数中),请使用内建的DecodeLightmap函数。

  自定义解码单张光照贴图的函数是:

  1. half4 Lighting<Name>_SingleLightmap (SurfaceOutput s, fixed4 color);用于不依赖视线方向的光照模型(如漫反射)。
  2. half4 Lighting<Name>_SingleLightmap (SurfaceOutput s, fixed4 color, half3 viewDir); 用于依赖视线方向的光照模型。

  自定义解码两张光照贴图的函数是:

  1. half4 Lighting<Name>_DualLightmap (SurfaceOutput s, fixed4 totalColor, fixed4 indirectOnlyColor, half indirectFade); 用于不依赖视线方向的光照模型(如漫反射)。
  2. half4 Lighting<Name>_DualLightmap (SurfaceOutput s, fixed4 totalColor, fixed4 indirectOnlyColor, half indirectFade, half3 viewDir); 用于依赖视线方向的光照模型。

  自定义解码方向光照贴图的函数是:

  1. half4 Lighting<Name>_DirLightmap (SurfaceOutput s, fixed4 color, fixed4 scale, bool surfFuncWritesNormal); 用于不依赖视线方向的光照模型(如漫反射)。
  2. half4 Lighting<Name>_DirLightmap (SurfaceOutput s, fixed4 color, fixed4 scale, half3 viewDir, bool surfFuncWritesNormal, out half3 specColor); 用于依赖视线方向的光照模型。

例子

Surface Shader Lighting Examples

转载于:https://www.cnblogs.com/dreamlofter/p/4504468.html

Unity Shader——Writing Surface Shaders(2)——Custom Lighting models in Surface Shaders相关推荐

  1. Unity Shader 表面着色器边缘光(Rim Lighting)二

    这一节我们要实现下面的效果 (图一) (图二) 首先针对图一我们创建一个材质,并把颜色改成红色的,然后我们就得到了一个很普通的红色小球. 我们只需要在鼠标进入的时候把材质的Shader换成带边缘光的S ...

  2. Unity Shader特效:人物模型动态流动光特效

    本文写于2017-6-6,转载请注明 以下为正文 ---------------------------------------------------------- 先上效果图: Shader界面图 ...

  3. 《 Unity Shader 入门精要》 第3章 Unity Shader 基础

    第3章 Unity Shader 基础 3.1 Unity Shader 概述 材质与 Unity Shader 在 Unity 中我们通常需要将材质(Material) 和 Unity Shader ...

  4. Unity Shader - Custom SSSM(Screen Space Shadow Map) 自定义屏幕空间阴影图

    文章目录 思路 实践 获取光源空间ShadowMap[A] 获取屏幕空间的深度图[B] 获取SSSM(Screen Space Shadow Map) 绘制一个全屏的Quad[C] 输出SSSM RT ...

  5. Unity Shader - Custom DirectionalLight ShadowMap 自定义方向光的ShadowMap

    文章目录 思路 实践 在方向光的位置,放一个正交相机 调整光源相机参数 将光源投影空间的正交视锥体画出来 投射阴影 接收阴影 改进 超出Shadow map的默认为光照 添加光照处理 添加PCF柔滑整 ...

  6. 【Unity Shader】(六) ------ 复杂的光照(上)

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题.              [Unity Sha ...

  7. Unity Shader - Built-in管线下优化 multi_compile_fwdbase、multi_compile_fog 变体

    文章目录 变体过多的缺点 项目情况 #pragma multi_compile_fwdbase 和 multi_compile_fog 生存的变体(keyword) 生存的变体 变体的数量 查看编译生 ...

  8. unity Shader 入门精要 EX

    unity Shader 入门精要: 1.shader概念 2.shader分类(顶点Shader.像素Shader) 3.Shader编程语言 4.Unity Shader 4.1概述 4.2分类( ...

  9. Unity Shader入门

    什么是Shader Shader(着色器)是一段能够针对3D对象进行操作.并被GPU所执行的程序.Shader并不是一个统一的标准,不同的图形接口的Shader并不相同.OpenGL的着色语言是GLS ...

最新文章

  1. 【MySQL】可重复读模式下 unique key失效案例
  2. C语言—静态存储与动态存储
  3. 面试官让我说出2种@Transactional注解的失效场景,我一口气给他说了六种
  4. Table还是CSS,请您说说您的见解
  5. vue组件一直注册不了_Vue自定义组件及组件的注册方法
  6. 目标检测(Object Detection)综述--R-CNN/Fast R-CNN/Faster R-CNN/YOLO/SSD
  7. jquery开关灯案例_JS/jQuery实现简单的开关灯效果【案例】_輕微_前端开发者
  8. c g位置服务器,C32/G34平台铺路 AMD为十二核CPU蓄势
  9. 台式计算机硬盘的安装位置,台式电脑分别如何安装SSD(固态硬盘)详细图文教程...
  10. 仿QQ聊天界面里边的相册(QQ相册)
  11. AWB调试中(Tuning)的几个问题
  12. 未转变者服务器物品ID大全,Unturned未转变者Elver物品代码大全 Elver地图全ID代码汇总...
  13. 【仿】阿里巴巴首页(未登录)
  14. js 手机号码和电话号码(座机号)正则校验
  15. 计算机网络(学习过程中--持续更新)
  16. 《程序员的第一年》---------- 周未回想
  17. Photoshop CC 2019快速选择工具的抠图
  18. 顺丰菜鸟之争落幕:今日12时起恢复数据传输
  19. itext使用模板生成pdf文件
  20. 汽车网络安全风险评估方法

热门文章

  1. 《spring 2.0技术手册》入门不错!
  2. Ubuntu使用——23(dock的美化)
  3. 写给正在入坑linux系统的伙伴
  4. DIV水平方向居中的几种方法
  5. BZOJ2843: 极地旅行社
  6. div中的内容水平垂直居中
  7. Perl Nmap报告处理摸索(学习)
  8. 【WP7】对象序列化
  9. Java Socket入门实例
  10. 了解 WPF 中的路由事件和命令