23.Shader-RenderTexture和玻璃效果
目錄:
????1,渲染紋理 RenderTexture
????2,玻璃效果和GrabPass
渲染紋理-RenderTexture
將相機(jī)的渲染目標(biāo)指定為的一張RT(RenderTexture)
假鏡子效果
思路: 相機(jī)渲染->RT上->反轉(zhuǎn)uv采樣
核心代碼
完整代碼 Texture_RTMirror.shader
相機(jī)設(shè)置
在Asset中創(chuàng)建一個RT, 并將它設(shè)為一個新相機(jī)的輸出

效果

觀察者視角變化時, 因為RTCam角度沒跟著變化, 導(dǎo)致畫面不變化, , 只能算假鏡子
目前比較主流的鏡子實現(xiàn)是SSR(Screen Space Reflection)

玻璃效果和GrabPass
說明
GrabPass: Unity中的特殊Pass,它用于捕捉當(dāng)前的畫面存儲到一張紋理中。
Queue一般設(shè)為Transparent , 用于保證所有不透明物體都渲染完成
GrabPass通常用來制作玻璃的透射效果。
比起透明度混合,GrabPass可操作更多的細(xì)節(jié),比如使用法線來模擬折射。 ?
核心代碼
GrabPass{"_GrabPassTexture"} 指定紋理名, GrabPass會將屏幕內(nèi)容輸出到紋理上
效果

但對于玻璃, 并不需要顯示整個屏幕, 所以需要對uv坐標(biāo)做映射處理
需要將頂點從裁剪空間坐標(biāo)->屏幕坐標(biāo)->uv坐標(biāo)
最后將屏幕紋理采樣
效果

可以疊加紋理

完整代碼 Texture_GrabPass.shader
擴(kuò)展: ComputeGrabScreenPos的源碼
UNITY_UV_STARTS_AT_TOP ?Direct3D的平臺使用值1;OpenGL的平臺使用值0
所以需要scale調(diào)整坐標(biāo)系

渲染紋理vs. GrabPass
GrabPass用法簡單, 而渲染紋理效率高


所有完整代碼: https://github.com/smartgrass/MyCodes/tree/main/ShaderLearning
下一篇: 時間動畫
shader基礎(chǔ)最后一篇了