float curvature(float3 VertexNormal,float3 WorldPositon) | |
{ | |
float DeltaN = length(abs(DDX(VertexNormal)+DDY(VertexNormal))); | |
float DeltaP = length(abs(DDX(WorldPositon)+DDY(WorldPositon))); | |
float curvature = DeltaN / DeltaP ; | |
reture curvature ; | |
} |
瑞丽散射和米氏散射
A dot b = |a|*|b|cos 弧度
|a | 是 a 向量的长度 sqrt (x2*y2*z^2)
角度乘以 π/180 等于弧度,弧度乘 180/π 等于角度
折射后法线
T = Ñ i+(Ñ COS(Θ 1) - SQRT [1 - Ñ 2(1 - (cos(Θ 1))2)])N
其中 n = n 1 /n 2 n1 是起源物体的折射率 n2 是进入物体的折射率,i 是射线的向量
float ontT = 1-t;
RealVelocity = ontT*ontT*P0+2*t*ontT*P0+t*t*P1;
灯光是最后算的,点光源所覆盖的像素通过 Gbuffer 获取信息,求得着色,这样的话离相机越近的地方,所覆盖的像素也就越大,消耗更高
在 view space 下,depth 的变化是线性的,但在 clip space 下,就要分情况讨论了。
当使用正交投影时,深度是线性变化的。
当使用透视投影时,深度是非线性变化的。
在 unity 中通过纹理采样 SAMPLE_DEPTH_TEXTURE 之后,得到的深度值往往是非线性的。然而,我们的计算过程中通常是需要线性的深度值
float z = depth * 2.0 - 1.0;
float linearDepth = (2.0 * near) / (far + near - z * (far - near));