Unity中包含几个文件,可以用于你的Shader程序,里面包含了预定义的变量和辅助函数。使用它需要用 #include指令

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

Shader包含的文件在Unity中后缀为.cginc,内置的文件为:

  • HLSLSupport.cginc - (自动包含) 为跨平台的着色器编译宏和定义提供帮助。
  • UnityShaderVariables.cginc - (自动包含)常用的全局变量。
  • UnityCG.cginc - 常用的辅助函数
  • AutoLight.cginc - 照明&阴影功能,如表面着色器在内部使用这个文件
  • Light.cginc - 标准表面着色器照明模式,当你写surface shaders时自动包含。
  • TerrainEngine.cginc - 对地形和植被着色器的辅助函数

这些文件在Unity文件夹({unity install path}/Data/CGIncludes/UnityCG.cginc on Windows,           /Applications/Unity/Unity.app/Contents/CGIncludes/UnityCG.cginc on Mac),如果你想看看究竟是什么样的辅助代码。

HLSLSupport.cginc

在编译Shader时自动包含。它声明了各种预处理器宏在多平台材质发展辅助。

UnityShaderVariables.cginc

在编译Shader时自动包含。它宣称各种内置的着色器中常用的全局变量。

UnityCG.cginc

这个文件经常在Unity Shader中包含,带来许多辅助方法。

  Data结构在UnityCG.cginc 

  • appdata_base:顶点着色器输入与位置,法线,纹理坐标
  • appdata_tan:顶点着色器输入与位置,法线,切线,一个纹理坐标
  • appdata_full:顶点着色器输入与位置,法线,切线,顶点颜色和两个纹理坐标
  • appdata_img:顶点着色器输入与坐标和一个纹理坐标

  泛型的方法在UnityCG.cginc

  • float3 WorldSpaceViewDir(float4 v) - 返回世界空间向量(没有进行归一化的)从给定对象空间顶点位置对着镜头
  • float3 ObjSpaceViewDir(float4 v) - 返回对象空间向量(没有进行归一化的)从给定对象空间顶点位置对着镜头
  • float2 Parallaxoffset(half h, half height, half3 viewDir) - 为正常视差映射计算UV偏移
  • fixed Luminance(fixed3 c) - 将颜色转换为亮度(灰度)
  • fixed3 DecodeLightmap(fixed4 color) - 从Unity的光照映射中解析颜色(RGBM或dLDR取决于平台)
  • float4 EncodeFloatRGBA(float4 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) - 从enc.xy中解码为视图空间法线

  正向渲染方法在UnityCG.cginc

  这些方法只有在使用正向渲染(forward rendering)时才有用(ForwardBase或ForwardAdd通过类型)。

  • float3 WorldSpaceLightDir (float4 v) - 计算世界空间向量(没有归一化的)的光,给定对象空间顶点位置。
  • float3 ObjSpaceLightDir(float4 v) - 计算物体空间向量(没有归一化的)的光,给定对象空间顶点位置。
  • float3 Shade4PointLights(....) - 计算照明从四个点光源,光数据紧密到向量,正向渲染使用这个去计算per-vertex(每个顶点)的灯光

  顶点照亮方法在UnityCG.cginc

  这些方法只有在使用pre-vertex lit

  • float3 ShadeVertexLights(float4 vertex, float3 normal) - 计算照明从四个per-vertex 光照和环境从给予的物体空间坐标和法线

内置的材质包含文件 .cginc的更多相关文章

  1. 使用input:file控件在微信内置浏览器上传文件返回未显示选择的文件

    使用input:file控件在微信内置浏览器上传文件返回未显示选择的文件 原来的写法: <input type="file" accept="image/x-png ...

  2. python内置函数,lambda表达式,文件读写

    Lambda表达式: lambda是个匿名函数,自动加return返回 a={ 6:2,8:0, 1:4,-5:6,99:11,4:22} print(sorted(a.items()))#按key排 ...

  3. python基础-4 函数参数引用、lambda 匿名函数、内置函数、处理文件

    上节课总结 1.三元运算 name=“name1”if 条件 else “name2” 2.深浅拷贝 数字.字符串 深浅,都一样 2.其他 浅拷贝:只拷贝第一层 深拷贝:不拷贝最后一层 3.set集合 ...

  4. 【转】用 PHP 内置函数 file_put_contents 写入文件

    PHP 内置函数 file_put_contents 用于写入文件. file_put_contents 函数最简单的写法,可以只用两个参数,一个是文件路径,一个是要写入的内容,语法如下: file_ ...

  5. Android 操作手机内置存储卡中的文件

    场景:需要读取指定文件的内容,此文件是手动存储到手机内置存储卡中的,且手机上不存在SD卡. 对于android通过activity提供的openFileOutput和openFileInput可以直接 ...

  6. python中的内置函数,递归,递归文件显示(二),二分法

    1.部分内置函数 repr()显示出字符串的官方表示形式,返回一个对象的string形式 # repr 就是原封不动的输出, 引号和转义字符都不起作用 print(repr('大家好,\n \t我叫周 ...

  7. PHP 内置函数fgets读取文件

    php fgets()函数从文件指针中读取一行 语法: fgets(file,length) 参数 描述 file  必需.规定尧要读取的文件 length 可选 .规定尧都区的字节数.默认是102字 ...

  8. python day5 lambda,内置函数,文件操作,冒泡排序以及装饰器

    目录 python day 5 1. 匿名函数lambda 2. python的内置函数 3. python文件操作 4. 递归函数 5. 冒泡排序 6. 装饰器 python day 5 2019/ ...

  9. Python文件操作函数os.open、io.open、内置函数open之间的关系

    Python提供了多种文件操作方式,这里简单介绍os.open.io.open.内置函数open之间的关系: 一.内置函数open和io.open实际上是同一个函数,后者是前者的别名: 二.os.op ...

随机推荐

  1. __I、__O 、__IO volatile是什么?怎么用? .

    这是ST库里面的宏定义,定义如下: #define __I volatile const /*!< defines 'read only' permissions */ #define __O ...

  2. 第三届蓝桥杯预赛真题_第一题_两种微生物 X 和 Y

    /* 假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍). 一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y. 现在已 ...

  3. centos6.5vpn搭建

    centos6.5vpn搭建整个搭建流程,服务端,客户端安装及测试. 达到的效果: 在安装vpn客户端的机器可通过vpn(virtual private network)专用线路(vpn主配置文件中定 ...

  4. 【转】Python3.x移除了callable内建函数

    原文地址:http://www.cnblogs.com/elvisxu/archive/2010/10/26/1861958.html 最近学习Python的时候,在Python3下跑<Dive ...

  5. Hat's Fibonacci(大数,好)

    Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  6. ItextSharp代码示例

    示例代码目录 示例代码0101. 5 示例代码0102. 7 示例代码0103. 9 示例代码0104. 11 示例代码0105. 13 示例代码0106. 15 示例代码0107. 17 示例代码0 ...

  7. 转 C#中静态方法与非静态方法区别比较

    C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用 ...

  8. SQL Server2008不允许修改表结构解决办法

    1.修改表结构遇到 2.点击取消 3.打开[工具]—[选项] 4.找到[Desiginers]标签,在右边找到“阻止保存要求重现创建表的更改”,取消勾选.

  9. Matlab中边缘提取方法简析

    1.Matlab简述 Matlab是国际上最流行的科学与工程计算的软件工具,它起源于矩阵运算,已经发展成一种高度集成的计算机语言.有人称它为“第四代”计算机语言,它提供了强大的科学运算.灵活的程序设计 ...

  10. Windows下命令行下启动ORACLE服务

    检查监听器状态:C:\>lsnrctl statusLSNRCTL for 32-bit Windows: Version 9.2.0.1.0 - Production on 30-6月 -20 ...