返回介绍

表面着色器中的自定义光照模型

发布于 2021-06-20 00:15:07 字数 1168 浏览 947 评论 0 收藏 0

编写表面着色器时,您是在描述一个表面的属性(反射率颜色、法线等等),并由光照模型完成光照交互的计算。内置光照模型为 Lambert(漫反射光照)和 BlinnPhong(高光光照)。

有时您可能想使用自定义光照模型,在表面着色器 (Surface Shader) 中这是可以实现的。光照模型不过是与一些惯例匹配的几个 Cg/HLSL 函数。内置 LambertBlinnPhong 模型在 Unity 的 Lighting.cginc 文件中加以定义(Windows 操作系统:{unity install path}/Data/CGIncludes/Lighting.cginc;MAC 操作系统:/Applications/Unity/Unity.app/Contents/CGIncludes/Lighting.cginc)。

光照模型声明

光照模型是几个名称由光照 (Lighting) 开头的正规函数。它们可声明于您的着色器文件或某个被包含的文件的任何位置。函数为:

  1. half4 LightingName (SurfaceOutput s, half3 lightDir, half atten); 其在正向渲染路径中用于与视线方向相关的光照模型(例如,漫反射)。
  2. half4 LightingName (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten); 其在正向渲染路径中用于与视线方向相关的光照模型。
  3. half4 LightingName_PrePass (SurfaceOutput s, half4 light); 其用于延时光照路径中。

请注意,您不必声明所有函数。一种光照模型要么使用视线方向,要么不使用。类似地,如果光照模型在延时光照中无效,您就不必声明 _PrePass 函数,然后所有使用它的着色器都将仅编译成正向渲染。

示例

表面着色器光照示例

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文