向量运算速查表

着色器中所有向量操作的快速参考。包含数学公式、HLSL 函数和图形学应用。

一、基本概念

= 方向 (Direction) + 大小 (Magnitude)

= 只有一个数值的量

概念数学表示HLSL 类型示例
2D 向量v = (x, y)float2, half2, fixed2UV 坐标
3D 向量v = (x, y, z)float3, half3, fixed3位置、法线、颜色(RGB)
4D 向量v = (x, y, z, w)float4, half4, fixed4裁剪坐标、颜色(RGBA)
标量s = nfloat, half, fixed亮度、距离、Alpha

Swizzle 操作

HLSL 允许用 .rgba.xyzw 访问和重组向量分量:

二、核心向量运算

三、点积 (Dot Product) 详解

夹角与点积的关系

夹角 θcos(θ)点积值图形学含义
1a
0° < θ < 90°(0, 1)正数表面偏对光源 → 部分光照
90°00表面平行光源 → 零光照
90° < θ < 180°(-1, 0)负数表面背对光源 → 背光面
180°-1-a

图形学三大应用

四、叉积 (Cross Product) 详解

重要特性

  • 不可交换:a × b = -(b × a)
  • 右手定则:方向由右手螺旋定则决定
  • 平行向量:若 a ∥ b,则 a × b = 0
  • 结果垂直:a × b 同时垂直于 a 和 b

标准正交基示例

图形学应用

应用公式说明
TBN 构建B = cross(T, N) * T.w法线贴图的切线空间基础
法线计算N = cross(v2 - v1, v3 - v1)由三角形顶点求面法线
轴向判定axis = cross(refDir, targetDir)判断旋转轴

五、坐标空间变换

变换矩阵HLSL 函数说明
对象 → 世界unity_ObjectToWorldmul(unity_ObjectToWorld, v)顶点位置变换
对象 → 世界 (法线)unity_ObjectToWorldmul((float3x3)unity_ObjectToWorld, n)法线方向变换,W=0
世界 → 对象unity_WorldToObjectmul(unity_WorldToObject, v)逆变换
对象 → 裁剪UNITY_MATRIX_MVPUnityObjectToClipPos(v)Built-in RP
对象 → 裁剪 (URP)TransformObjectToHClip(v)URP

快速记忆

  • 法线变换:位置用 float4(v, 1),方向用 float4(v, 0)
  • 世界空间:所有光照、摄像机相关计算的世界

六、常见光照公式中的向量运算

光照分量公式向量运算
漫反射 (Diffuse)max(0, dot(N, L))点积
高光 (Specular)pow(max(0, dot(N, H)), gloss)点积 + pow
反射方向reflect(-L, N)内置 reflect 函数
半程向量normalize(L + V)加法 + 归一化
边缘光 (Rim)1 - max(0, dot(N, V))点积
视线方向normalize(_WorldSpaceCameraPos - worldPos)减法 + 归一化

参考:《The Unity Shaders Bible》第 II 章 · 更新于 2026-07