java ndc_【Unity Shader】从NDC(归一化的设备坐标)坐标转换到世界坐标的数学原理...

本文介绍了如何在Unity Shader中从归一化的设备坐标(NDC)转换到世界坐标,详细讨论了使用View-Projection逆矩阵过程中涉及的数学原理和步骤,包括齐次除法的重要性,并通过推导过程解答了为何需要除以w分量的疑问。
摘要由CSDN通过智能技术生成

从NDC(归一化的设备坐标)坐标转换到世界坐标要点

参考资料

How to go from device coordinates back to worldspace http://feepingcreature.github.io/math.html

《Unity Shader入门精要》

前情提要,从运动模糊说起

产生运动模糊效果,一般来说有两种做法,第一种是将当前帧和下一帧或上一帧等等图像混合起来作为当前的屏幕图像,这样做法可以导致物体运动时会出现多个残影(因为多个帧混合起来了),可以产生运动模糊效果,但效率不高。

第二种做法是,在Shader里面利用View-Projection矩阵及其逆矩阵获得当前帧和上一帧的世界坐标,通过这两个坐标得到当前像素的运动速度及其方向,再根据这个速度,向这个像素速度方向的N个纹素进行取样并混合,从而产生模糊效果。

而这第二种做法,就是我遇到问题的地方。

总所周知,在Shader里面,可以根据深度图和当前uv坐标得到当前像素的NDC坐标,那么只要采用View-Projection(视图-裁剪)的逆矩阵就可以将NDC坐标变换到世界坐标下(正是我们所需要的值),按理说,这样应该就可以了,但是我在《Unity Shader入门精要》中看到的计算方法却是下面这样。

1 fixed4 frag(v2f i) : SV_Target{

2 // 从深度图中获得深度

3 float d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture,i.uv_depth);

4 // 根据深度和当前uv坐标反推当前NDC坐标(注意这个坐标已经经过了齐次除法了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值