赞
踩
以下内容笔者个人翻译自:http://www.theknightsofunity.com/
Unity引擎提供了一个强化你游戏开发过程的非常棒的工具。甚至在SPRs(可编程渲染管线)出现之前,就包含了许多实用的功能,比如今天要讨论的话题:Render Textures。
在这篇文章中我会向你阐述如何在你的游戏中使用Render textures。
我已经通过Unity 2018.4并使用传统渲染管线创建了一个新项目,但是我也在SPRs项目中使用过该功能。我从package manager中导入了Post processing Stack v2插件,设置了一些颜色分级,环境遮罩,晕映等特效。对于Shader,我使用了Amplify Shader编辑器在渲染纹理的顶部添加一些视觉效果。
本质上,render textures就是那些被特殊摄像机所渲染的图像。设定一个非常非常简单。你只需要创建一个新资源通过Create > Render Texture 然后将其分配给你的相机。我的建议是为render texture与gameplay分别创建独立的摄像机。
Render Texture的控制面板如下图所示,可以控制许多参数比如大小,颜色格式以及一些标准纹理选项。
我们可以在项目中像其他纹理一下使用它。
接下来,我们需要创建一个摄像机,然后指派我们的render texture到右边的输入区域。最好修改Clear Flags为Solid Color然后选择黑色,那么我们的摄像机就会在没有任何内容被渲染的时候保持为一个特定的颜色,接着设置不透明度为0。同时我还设置了Culling Mask(遮罩剔除),这样相机就只能捕捉到正确图层的东西。但这一步不是必须的,你同样也可以保持render everything。
设置投射方式为正交也仅仅用于示例目的,它也是可选的。
现在,render texture将捕获相机实时渲染的所有内容。
对于第一个例子,我将创建render texture来告诉我们传送门的另一边是什么。这是一个演示render texture本质的简单方式,也能告诉你在游戏中修改它会产生什么样的结果。
这是我对于相机的设置(摄像机正在捕捉本文中的另一个元素)。然后,将记录的渲染纹理放置到“标准着色器”中。
在此之上,为了产生折射的效果,我添加了另一个网格与自定义着色器,下图是该shader的样子:
该Shader产生的效果这这样的:
正是如此,设置渲染纹理是非常直接和简单的。现在你已经知道在Unity中折射是如何工作的了。
Render Texture也可以用于水迹。我将创建一个粒子系统,然后将它转移到render texture,将它插入到一个简单的水着色器中。
对于制作一种简单的水,我创建了一个着色器,使用深度缓冲来掩盖其他物体边缘的杂色纹理。如果有足够的透明度,它就足够像水一样工作了。
Render texture的设置如下图所示。我在水面上创建了一个正投影相机。这个相机只是在一个特定的图层上渲染一个粒子系统,然后把它保存到render texture。这样,它就不需要渲染不必要的元素两次,并且捕获的纹理有黑色的背景,所以我可以使用它作为alpha。
我做的texture现在已经准备好被削减了,这意味着当我从纹理中减去alpha时,它将逐渐失去覆盖。
然后将texture插入到创建的着色器中。在粒子系统中,我在生命周期内使用颜色来淡出基本texture,所以在shader中,它会在使用步骤函数时进行削减。
将texture render插入到水的shader中,水面上的痕迹将出现在粒子系统放置的同一点上。注意,在主摄像机中,你应该禁用带有粒子的图层,这样基本的粒子系统就不会被渲染。只有它在水面上的投影是可见的。
现在水的痕迹将出现在水面上,而不是在一个单独的物体上。粒子系统在水外是看不到的,否则,我就得在物体在水中时留下痕迹。这种方法节省了时间,而且只在水上留下痕迹。
Render Texture是一个非常直接的工具。它可以让我们在平面上做简单的投影,也可以让我们在水面上创建困难的轨迹。这一功能提供了许多提升游戏的方法。但要注意的是,游戏中的每一个摄像头都将花费你额外的内存,所以要谨慎使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。