3.2 坐标空间与变换节点:数据住在哪个空间


3.2 坐标空间与变换节点:数据住在哪个空间

本节摘要:同一个位置或方向,在物体空间、世界空间、视角空间、裁剪空间里的数值完全不同。本节讲清四套空间各自"住在哪、给谁用",给出空间选择的决策口诀,并说明 Transform 节点与空间下拉菜单的等价用法。

为什么会有四套坐标

上一节用 Normal Vector 节点时,我们刻意跳过了 Space 下拉。现在补上这笔账:节点给出的向量必须"住在某个空间里",而不同空间回答不同的问题。想象你在描述一个教室里的水杯:说"它离自己笔尖三厘米"用的是以笔为原点的私人坐标系,说"它在教室东南角"用的是以教室为原点的坐标系,说"它在照片左上角"用的是相机取景的坐标系——同一个水杯,三套坐标,谁也不矛盾。GPU 处理你的模型要经历同样的一串换算。

图:一个顶点位置穿越四套坐标空间的路径

图:一个顶点位置穿越四套坐标空间的路径

两套写法:专用节点与空间下拉

换空间有两种等价的操作方式。方式一:用专用的 Transform 节点,输入任意向量,从下拉里选"从哪个空间"与"到哪个空间"。方式二:很多数据源节点自带 Space 下拉(Normal Vector、View Direction、Position 都有),直接在下拉里选目标空间。两者底层调用同一套变换函数,选顺手的用。唯一要注意的是:别在一根链上换两次空间——比如先把法线转到世界空间,又过了一个内部默认切线空间的节点,结果就是难以排查的方向错乱。

一条老经验:空间相关的问题十有八九没有报错,只有"效果不对"。方向反了、光斑乱飘、描边时有时无,先问自己三个空间问题——这个节点默认输出什么空间、我上一步在什么空间、效果要求在什么空间——三问答完,错位点基本就现形了。

手算一次空间变换

用一维简化例子体会变换的含义。假设一个立方体在场景里被旋转了九十度并平移了两个单位:它某个顶点的物体空间坐标是 (1, 0, 0)。转到世界空间后,旋转把横躺的轴向竖了起来,平移再把整体挪两个单位,世界坐标变成 (0, 3, 0) 这类结果(具体数值取决于旋转轴与平移方向)。你在图里看到的 Position 节点输出,就是这个"已经住进所选空间"的坐标值——选不同空间,同一个顶点报出的数字完全不同,但指的是同一个点。

实验验证:画布放一个 Position 节点,Space 选 World,拆出 Y 通道接到渐变图 Lerp 的 T 端(替换原来的 UV)。保存,然后上下移动物体——渐变跟着世界高度走,物体本身的朝向不影响它;再把 Space 切成 Object,保存,旋转物体——渐变跟着模型转。一次实验,"跟着转与不跟着转"的口诀就长在手感里了。

法线贴图的空间特殊性

空间话题里有一个绕不开的特殊情况:法线贴图存的是切线空间的法线偏移。切线空间是"贴着表面"的坐标系,X 沿贴图横向、Y 沿纵向、Z 沿法线朝外——法线贴图里淡蓝色的主流颜色就是"偏移接近零"的表现。为什么它特殊?因为同一张法线贴图要贴到模型任何地方,只有"贴着表面定义"的坐标系才能通用。实践含义:法线贴图的采样输出保持切线空间直接接 Normal 端口,不要自己加空间转换;转换由管线在光照计算时处理。自己画蛇添足转一次空间,是法线相关效果翻车的高发原因。

空间选错的两个典型症状

症状一:效果跟着相机走。本该固定在物体上的图案随视角移动——典型原因是把本该用世界空间的效果写成了视角空间,或者相反。症状二:镜像物体效果不对称。物体沿 X 轴负缩放(镜像)后,物体空间的法线在负缩放下方向翻转,描边与光照出现不对称——处理办法是美术侧避免负缩放,或管线设置里开启相关修正。两个症状都指向同一句口诀:先问效果"应该跟着谁动",再定空间。

手算一道真正的空间题

用二维平面做一次完整换算。设一个正方形顶点的物体空间坐标是 (1, 1),它被顺时针旋转了九十度并放在场景原点右侧两个单位处。旋转九十度后,(1, 1) 变成 (1, -1)(横轴竖轴互换再翻符号);再加平移,世界坐标成为 (3, -1)。你在 Position 节点选 Object 空间读到的永远是 (1, 1),选 World 空间读到的永远是 (3, -1)——同一个顶点,两套坐标,数值不同但都正确。把这个二维例子想透,三维的四套空间就只是多了一个分量与更多步骤,原理没有增量。

Position 节点的四个空间速览

Position 节点与向量节点共用空间下拉,但每个空间下它的"身份"值得逐个点名:Object 空间给建模坐标(做随模型的规律图案,如条纹沿模型纵向分布);World 空间给场景坐标(做钉在世界上的效果,如按海拔渐变的地表染色的近亲);View 空间给相机坐标(做按镜头距离变化的效果,如近处清晰远处模糊的雾密度);Clip 空间给投影坐标(少用,屏幕空间效果的地基)。四个身份对应四类效果需求——把"效果需求反推空间选择"练成条件反射,空间问题就不再是坑。

空间相关问题的记录建议

空间问题的一大特点是"修好之后想不起为什么错"——症状(图案乱飘)与原因(空间选错)之间的因果不直观,纯靠记忆留存时间很短。建议把每次空间错误的"症状加原因加解法"三元组记进个人笔记,积累十来条后你会发现症状高度重复:乱飘、不对称、随视角变——三条症状三条病因,覆盖九成空间坑。第 8 章的排查表会有空间条目的正式席位,你的个人笔记就是那张表的素材来源。

空间节点的命名提示

Transform 节点在搜索列表里可能被中文界面翻译成"变换",与 Rotate、Scale 等几何节点并列——第一次找它时别被名字迷惑。它的检查器面板很朴素:一个空间来源下拉、一个空间目标下拉,输入输出各一个端口。用它做过的每次转换都值得顺手在旁边加个分组框标注方向(比如"切线转世界"),半年后回看这张图时,这两个下拉的历史值就是唯一的线索——标注是给未来的自己留的路标。

本节要点回顾

  • 四套空间各司其职:物体、世界、视角、裁剪,从建模数值一路到屏幕。
  • 旋转实验定空间:物体转效果跟着转用物体空间,不跟着转用世界空间。
  • 一条链只换一次:空间来回转换是方向错乱的高发源,能少换就少换。
  • 无报错的效果错:空间选错不报错只出怪效果,排查先问三个空间问题。

空间问题解决后,下一节进入"把数据揉成效果形状"的三个核心函数:Lerp、Step、Smoothstep。它们是溶解、描边、全息效果里真正的发动机,我们逐个手算。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U