深度貼圖轉換空間座標算是很重要的技術,他被廣泛應用在影子、打光及各種後處理特效…若不懂這個技術,我認為對real time rendering還是一知半解,另外在Computer Version也有相關的議題Depth sensors are the key to unlocking next level computer vision applications.。
在這邊跟大家介紹一下相關的處理流程及技術影片。
實作步驟如下:
- 繪製深度貼圖(這個是廢話,當然是必需的)
- 計算ViewRay(在vertexShader裡計算,含長度)
float viewRay = mul(unity_CameraInvProjection, localPosition * _ProjectionParams.z).xyz; - 計算ViewSpacePosition(depth是深度貼圖讀取出來的,viewRay則是vertex output)
float3 viewSpacePosition = viewRay * depth; - 計算WorldSpacePosition(_InverseView從c#傳Camera的cameraToWorldMatrix)
float3 worldSpacePosition = mul(_InverseView, float4(viewSpacePosition , 1)).xyz; - 接下來就可以好好享受WorldSpacePosition(也就是拿他的xz當project texture的uv)
相關技術影片如下:
相關參考技術demo專案:
keijiro/DepthInverseProjection
Dream continues in...
沒有留言:
張貼留言