【shaderforge学习笔记】 Geometry Data(物理信息)

本文是关于Unity中ShaderForge的学习笔记,重点讨论了Geometry Data,包括Bitangent Dir、Depth、Face Sign、Fresnel、Normal Direction等概念,详细解释了它们的物理意义、计算方法以及在Unity Shader中的实现。通过学习,可以深入理解3D图形学中的切线空间转换、深度信息获取、法线方向计算等关键技术。
摘要由CSDN通过智能技术生成

shaderforge物理信息

这里写图片描述


Bitangent Dir

1. 官方说明
这里写图片描述
输出世界空间下模型网面的bitangent(副切线)方向

2. 节点输出
bitangent方向的三维向量
这里写图片描述

3. 简单介绍TBN切线空间以及Bitangent向量
切线空间,同局部空间、世界空间等一样,是3D图形学中众多的坐标系之一。切线空间基于网面的顶点由法线、切线、副切线构成一个互相垂直的三维坐标系。当模型网面变形时,切线坐标系必定跟着面一起运动,那么在这个坐标系里的某个点或向量,不需要变动。当整个面发生变化时,我们只需要计算面上的坐标系到世界坐标系的转换矩阵,那么定义在这个面上的点或坐标(固定的),乘以这个矩阵即可得到在世界中的坐标。这个坐标系术语里称为tangent space(或称TBN切线空间)。
一个右手坐标系的TBN切线坐标系如下图所示:

这里写图片描述
TBN切线空间的TBN这三个字母分别代表tangent、bitangent和normal向量。
tangent是顶点的切线,normal是顶点的法线,bitangent由tangent和normal叉乘(注意进行叉乘的N和T的先后顺序!在右手坐标系中是N × T,在左手坐标系中是T x N! 注意:Unity是左手坐标系)得到,是一个垂直于tangent和normal的向量bitangent。

切线坐标系转换到世界坐标系

切线空间到世界空间的转换矩阵T2W:

\begin{bmatrix}
T_{x} & T_{y} & T_{z} \\ 
B_{x} & B_{y} & B_{z} \\ 
N_{x} & N_{y} & N_{z} 
\end{bmatrix}

切线空间下的法线向量乘以转换矩阵,得到世界坐标系下的切线向量

normalWorld= normalize(mul(normalTangent,T2W));

4. Unity Shader获取Bitangent Dir
对于每个顶点,我们只要提供法线normal和切线tangent两个向量即可。bitangent向量可以通过tangent叉乘normal得到。

struct VertexInput {
    float4 vertex : POSITION;
    float3 normal : NORMAL;
    float4 tangent : TANGENT;
};
struct VertexOutput {
    float3 normalDir : TEXCOORD0;
    float3 tangentDir : TEXCOORD1;
    float3 bitangentDir : TEXCOORD2;
};
VertexOutput vert (VertexInput v) {
    o.normalDir = UnityObjectToWorldNormal(v.normal);
    o.tangentDir = normalize( mul( unity_ObjectToWorld, float4( v.tangent.xyz, 0.0 ) ).xyz );
    o.bitangentDir = normalize(cross(o.normalDir, o.tangentDir));
    return o;
}

参考

Unity 点乘和叉乘的原理和使用
【D3D11游戏编程】学习笔记二十四:切线空间(Tangent Space)


Depth

1. 官方说明
这里写图片描述
Depth为摄像机投影空间的近平面到物体的距离。

2. 节点输出
一个一维数据,表示从物体位置到相机投影空间近裁屏幕的距离大小
这里写图片描述

3. 简单介绍相机的投影空间
将3D的物体显示到2D的屏幕上,需要投影和剪裁,相机的投影方式一般有两种:正交投影(Orthographic)和透射投影(Perspective)。相机的正交投影空间和透视投影空间都有近平面(通过near值调节近平面位置)和远平面(通过far值调节远平面位置),我们认为投影空间近平面到物体的距离为物体的深度值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值