unity shader内置变量及函数

LightMode标签:
Always 不管 使用 哪种 渲染 路径, 该 Pass 总是 会被 渲染, 但不 会计 算 任何 光照
ForwardBase 用于 前 向 渲染。 该 Pass 会计 算 环境 光、 最重要的 平行 光、 逐 顶点/ SH 光源 和 Lightmaps
ForwardAdd 用于 前 向 渲染。 该 Pass 会计 算 额外 的 逐 像素 光源, 每个 Pass 对应 一个 光源
Deferred 用于 延迟 渲染。 该 Pass 会 渲染 G 缓冲( G- buffer)
ShadowCaster 把 物体 的 深度 信息 渲染 到 阴影 映射 纹理( shadowmap) 或 一张 深度 纹理 中
PrepassBase 用于 遗留 的 延迟 渲染。 该 Pass 会 渲染 法线 和 高 光 反射 的 指数 部分
PrepassFinal 用于 遗留 的 延迟 渲染。 该 Pass 通过 合并 纹理、 光照 和 自 发光 来 渲染 得到 最后 的 颜色
Vertex、 VertexLMRGBM 和 VertexLM 用于 遗留 的 顶点 照明 渲染


 

 

 

前 向 渲染 可以 使用 的 内置 光照 变量:
名     称 类     型 描     述
_LightColor0 float4 该 Pass 处理 的 逐 像素 光源 的 颜色
_WorldSpaceLightPos0 float4 _WorldSpaceLightPos0. xyz 是 该 Pass 处理 的 逐 像素 光源 的 位置。 如果 该 光源 是 平行 光, 那么_ WorldSpaceLightPos0. w 是 0, 其他 光源 类型 w 值 为 1
_LightMatrix0 float4 × 4 从世 界 空间 到 光源 空间 的 变换 矩阵。 可以 用于 采样 cookie 和 光 强 衰减( attenuation) 纹理
unity_ 4LightPosX0, unity_ 4LightPosY0, unity_ 4LightPosZ0 float4 仅 用于 Base Pass。 前 4 个 非 重要的 点 光源 在世 界 空间 中的 位置
unity_ 4LightAtten0 float4 仅 用于 Base Pass。 存储 了 前 4 个 非 重要的 点 光源 的 衰减因子
unity_ LightColor half4[ 4] 仅 用于 Base Pass。 存储 了

前 4 个 非 重要的 点 光源 的 颜色

 

 

前 向 渲染 可以 使用 的 内置 光照 函数
函   数  名 描     述
float3 WorldSpaceLightDir (float4 v)  仅可 用于 前 向 渲染 中。 输入 一个 模型 空间 中的 顶点 位置, 返回 世界 空 间中 从 该 点 到 光源 的 光照 方向。 内部 实现 使用 了 UnityWorldSpaceLightDir 函数。 没有 被 归一 化
float3 UnityWorldSpaceLightDir (float4 v) 仅可 用于 前 向 渲染 中。 输入 一个 世界 空间 中的 顶点 位置, 返回 世界 空 间中 从 该 点 到 光源 的 光照 方向。 没有 被 归一化
float3 ObjSpaceLightDir (float4 v) 仅可 用于 前 向 渲染 中。 输入 一个 模型 空间 中的 顶点 位置, 返回 模型 空 间中 从 该 点 到 光源 的 光照 方向。 没有 被 归一 化
float3 Shade4PointLights (...) 仅可 用于 前 向 渲染 中。 计算 四个 点 光源 的 光照, 它的 参数 是 已经 打包 进 矢量 的 光照 数据, 通常 就是 表 9. 2 中的 内置 变量, 如 unity_ 4LightPosX0, unity_ 4LightPosY0, unity_ 4LightPosZ0、 unity_ LightColor 和 unity_ 4LightAtten0 等。 前 向 渲染 通常 会使 用 这个 函数 来 计算 逐 顶点 光照

 

 

 

 

 


 

 

 

 

 

 

 

 

 

顶点 照明 渲染 路径 中 可以 使用 的 内置 变量
名     称 类     型 描     述
unity_ LightColor half4[ 8] 光源 颜色
unity_ LightPosition float4[ 8] xyz 分量 是 视角 空间 中的 光源 位置。 如果 光源 是 平行 光, 那么 z 分 量值 为 0, 其他 光源 类型 z 分 量值 为 1
unity_ LightAtten half4[ 8] 光源 衰减 因子。 如果 光源 是 聚光灯, x 分量 是 cos( spotAngle/ 2), y 分量 是 1/ cos( spotAngle/ 4); 如果 是 其他 类型 的 光源, x 分量 是 − 1, y 分量 是 1。 z 分量 是 衰减 的 平方, w 分量 是 光源 范围 开 根号 的 结果
unity_ SpotDirection float4[ 8] 如果 光源 是 聚光灯 的 话, 值 为 视角 空间 的 聚光灯 的 位置; 如果 是 其他 类型 的 光源, 值 为( 0, 0, 1, 0)

 

 

 

 

 

 

顶点 照明 渲染 路径 中 可以 使用 的 内置 函数
函   数  名 描     述
float3 ShadeVertexLights (float4 vertex, float3 normal) 输入 模型 空间 中的 顶点 位置 和 法线, 计算 四个 逐 顶点 光源 的 光照 以及 环境 光。 内部 实现 实际 上调 用了 ShadeVertexLightsFull 函数
float3 ShadeVertexLightsFull (float4 vertex, float3 normal, int lightCount, bool spotLight) 输入 模型 空间 中的 顶点 位置 和 法线, 计算 lightCount 个 光源 的 光照 以及 环境 光。 如果 spotLight 值 为 true, 那么 这些 光源 会被 当成 聚光灯 来 处理, 虽然 结果 更 精确, 但 计算 更加 耗时; 否则, 按 点 光源 处理

 

你可能感兴趣的:(unity,shader)