典型的三维数据有:
空间位置坐标(x,y,z) RGB颜色 法线信息 法线贴图
shaderforge对维度的表现在于节点输入输出端口发出的连线的线条数,有几条线就代码节点的数据是几维的。
例如使用RGBA颜色的R通道,就将四维数据降为了一维数据。
当低维度的数据与高维度的数据进行计算时,shaderforge会将低纬度的数据自动提升上去
1->(1,1,1,1)
(1,2)->(1,2,0,0)
GPU是以四维向量为基本单位来计算的。4个浮点数所组成的float4向量是GPU内置的最基本类型。使用GPU对两个float4向量进行计算,与CPU对两个整数或两个浮点数进行计算一样简单,都是只需要一个指令就可以完成。
HLSH的基本数据类型定义了float、int和bool等非向量类型,但是它们实际上都会被Complier转换成float4的向量,只要把float4向量的其中3个数值忽略,就可以把float4类型作为标量使用。
在使用float4向量中的个别数值时,可以用xyzw或rgba,都可以用来表示四维向量中的数值。但不能把它们混用,例如不能用xyba,把它视为颜色时就用rgba,否则就是用xyzw,不能把这二者混合使用。
float4 appendData = float4(float3(x,y,z),float(w)) //数据维度附加
float w = appendData.w; //或appendData.a; //数据维度的分解
一个颜色是一个单个的三维数据,一个图片就是一个三维数组。