返回介绍

内置着色器包含文件

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

Unity 含有几个可由您的着色器程序用来引入预定义变量和帮助函数的文件。这是由标准 #include 指令完成的,例如:

    CGPROGRAM
    // ...
    #include "UnityCG.cginc"
    // ...
    ENDCG

Unity 中的着色器包含文件具有 .cginc 扩展名,且内置文件为:

  • HLSLSupport.cginc - (自动包含) 用于跨平台着色器编译的帮助宏和定义。
  • UnityCG.cginc - 常用的全局变量和帮助函数。
  • AutoLight.cginc - 光照和阴影功能,例如,表面着色器在内部使用此文件。
  • Lighting.cginc - 标准表面着色器光照模型;当您编写表面着色器时自动将其包含。
  • TerrainEngine.cginc - 用于地形 (Terrain) 和植被 (Vegetation) 着色器的帮助函数。

如果您想看看帮助代码中具体完成了什么操作,可在 Unity 应用程序内找到这些文件(Windows 操作系统:{unity install path}/Data/CGIncludes/UnityCG.cginc;Mac 操作系统:/Applications/Unity/Unity.app/Contents/CGIncludes/UnityCG.cginc)。

HLSLSupport.cginc

在编译着色器时该文件被自动包含。它通常声明多个预处理器宏来协助多平台着色器的开发。

UnityCG.cginc

该文件通常包含在 Unity 着色器中以引入多个帮助函数和定义。

UnityCG.cginc 中的数据结构

  • struct appdata_base:具有位置、法线和一个纹理坐标的顶点着色器输入。
  • struct appdata_tan:具有位置、法线、切线和一个纹理坐标的顶点着色器输入。
  • struct appdata_full:具有位置、法线、切线、顶点颜色和两个纹理坐标的顶点着色器输入。
  • struct appdata_img:具有位置和一个纹理坐标的顶点着色器输入。

UnityCG.cginc 中的通用帮助函数

  • float3 WorldSpaceViewDir (float4 v) - 返回从给定对象空间顶点位置朝向相机的世界坐标空间方向(未规范化)。
  • float3 ObjSpaceViewDir (float4 v) - 返回从给定对象空间顶点位置朝向相机的对象空间方向(未规范化)。
  • float2 ParallaxOffset (half h, half height, half3 viewDir) - 计算用于视差法线贴图 (normal mapping) 的 UV 偏移量。
  • fixed Luminance (fixed3 c) - 将颜色转换为亮度(灰度)。
  • fixed3 DecodeLightmap (fixed4 color) - 从 Unity 光照贴图(视平台而定为 RGBM 或 dLDR)解码颜色。
  • float4 EncodeFloatRGBA (float v) - 将 [0..1) 范围内的浮点数编码为 RGBA 颜色,以存储于低精度渲染目标中。
  • float DecodeFloatRGBA (float4 enc) - 将 RGBA 颜色解码为一个浮点数。
  • 类似地,使用两个颜色通道的 float2 EncodeFloatRG (float v)float DecodeFloatRG (float2 enc)
  • float2 EncodeViewNormalStereo (float3 n) - 将视图空间法线编码为 0..1 范围内的两个数字。
  • float3 DecodeViewNormalStereo (float4 enc4) - 从 enc4.xy 解码视图空间法线。

UnityCG.cginc 中的正向渲染帮助函数

这些函数仅在使用正向渲染(ForwardBase 或 ForwardAdd 通道类型)时有用。

  • float3 WorldSpaceLightDir (float4 v) - 在给定对象空间顶点位置的情况下,计算到光源的世界坐标空间方向(未规范化)。
  • float3 ObjSpaceLightDir (float4 v) - 在给定对象空间顶点位置的情况下,计算到光源的对象空间方向(未规范化)。
  • float3 Shade4PointLights (...) - 在光照数据被紧密打包进向量中的情况下,计算四个点光灯的照明。正向渲染使用这个函数来计算逐顶点光照。

UnityCG.cginc 中的顶点光照帮助函数

这些函数仅在使用逐顶点光照着色器(“顶点”(Vertex) 通道类型)时有用。

  • float3 ShadeVertexLights (float4 vertex, float3 normal) - 在给定对象空间位置和法线的情况下,计算四个逐顶点光源和环境光的照明。

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

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

发布评论

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