欢迎光临散文网 会员登陆 & 注册

23.Shader-RenderTexture和玻璃效果

2023-06-29 17:03 作者:机智的小草yns  | 我要投稿

目录:

    1,渲染纹理 RenderTexture

    2,玻璃效果和GrabPass


渲染纹理-RenderTexture

将相机的渲染目标指定为的一张RT(RenderTexture)

假镜子效果

思路: 相机渲染->RT上->反转uv采样


核心代码

完整代码 Texture_RTMirror.shader


相机设置

在Asset中创建一个RT, 并将它设为一个新相机的输出

效果

观察者视角变化时, 因为RTCam角度没跟着变化, 导致画面不变化, , 只能算假镜子

目前比较主流的镜子实现是SSR(Screen Space Reflection)




玻璃效果和GrabPass

说明

GrabPass: Unity中的特殊Pass,它用于捕捉当前的画面存储到一张纹理中。

Queue一般设为Transparent , 用于保证所有不透明物体都渲染完成

GrabPass通常用来制作玻璃的透射效果

比起透明度混合,GrabPass可操作更多的细节,比如使用法线来模拟折射。  

核心代码

GrabPass{"_GrabPassTexture"} 指定纹理名, GrabPass会将屏幕内容输出到纹理上


效果


但对于玻璃, 并不需要显示整个屏幕, 所以需要对uv坐标做映射处理

需要将顶点从裁剪空间坐标->屏幕坐标->uv坐标

最后将屏幕纹理采样

效果

可以叠加纹理

完整代码 Texture_GrabPass.shader


扩展: ComputeGrabScreenPos的源码


UNITY_UV_STARTS_AT_TOP  Direct3D的平台使用值1;OpenGL的平台使用值0

所以需要scale调整坐标系



渲染纹理vs. GrabPass

GrabPass用法简单, 而渲染纹理效率高

Shader入门精要


所有完整代码: https://github.com/smartgrass/MyCodes/tree/main/ShaderLearning

下一篇: 时间动画

shader基础最后一篇了


23.Shader-RenderTexture和玻璃效果的评论 (共 条)

分享到微博请遵守国家法律