Unity Shader入门精要 | 渲染纹理和程序纹理

本文介绍了Unity中的渲染纹理技术,包括渲染目标纹理和多重渲染目标的概念,详细阐述了如何实现镜子和玻璃效果。对于镜子效果,通过设置渲染目标为渲染纹理并调整顶点着色器实现。而在实现玻璃效果时,利用GrabPass获取屏幕图像并结合法线纹理、环境Cubemap模拟折射和反射。最后对比了渲染纹理与GrabPass的效率差异,强调了渲染纹理在移动设备上的优势。此外,还简要提及了程序纹理的用途,即通过计算机生成纹理以实现丰富的动画和视觉效果。
摘要由CSDN通过智能技术生成

渲染纹理

渲染目标纹理(RTT):把整个三维场景渲染到一个中间缓冲中,而不是传统的帧缓冲

多重渲染目标(MRT):把场景同时渲染到多个渲染目标纹理中,不需要为每个渲染目标纹理单独渲染完整的场景,比如延迟渲染

在Unity中定义为渲染纹理(Render Texture),有两种实现方式:一种是在Project目录下创建一个渲染纹理,然后把某个摄像机的渲染目标设置为该纹理;另一种是在屏幕后处理时使用GrabPass命令或OnRenderImage函数来获得当前屏幕图像,放在一张等大的纹理中。


镜子效果

新建一个小房间的场景,里面放置一些球形和立方体,并且放一个四边形作为镜子。

在这里插入图片描述

放置一个新的摄像机,并把它的渲染目标设置为新建的渲染纹理Mirror Texture。编辑应用于镜子材质的shader,只需要处理一个纹理属性,并且在顶点着色器中翻转纹理x坐标,并在片元着色器中输出:

v2f vert(a2v v) {
   
    v2f o;
    o.pos = UnityObjectToClipPos(v.vertex);
    
    o.uv = v.texcoord;
    // Mirror needs to filp x
    o.uv.x = 1 - o.uv.x;
    
    return o;
}

fixed4 frag(v2f i) : SV_Target {
   
    return tex2D(_MainTex, i.uv);
}

把前面的渲染纹理应用于这个shader,效果如下:

在这里插入图片描述


玻璃效果

这部分使用GrabPass的方法。

声明玻璃的纹理、法线纹理,_Cubemap模拟的是反射的环境,_Distortion控制折射的扭曲程度,_RefractAmount控制反射程度。

Properties {
   
	_MainTex ("Main Tex", 2D) = "white" {
   }
	_BumpMap ("Normal Map", 2D) = "bump" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值