《Unity着色器和屏幕特效开发秘笈》—— 2.2 通过修改UV坐标实现纹理贴图的滚动

简介:

本节书摘来自华章出版社《Unity着色器和屏幕特效开发秘笈》一 书中的第2章,第2.2节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.2 通过修改UV坐标实现纹理贴图的滚动

在当今的游戏行业中,最常见的一种纹理技术就是在物体的表面实现滚动纹理。使用这种技术我们可以实现如瀑布、河流、熔岩流等效果。它也是我们创建纹理动画的一种基础技术,在后面的章节中我们将对它进行详细介绍。让我们先来看看如何在一个表面着色器创建一个简单的滚动效果。

2.2.1 准备工作

在开始本节的学习之前,你需要创建一个新的着色器文件和一个新的材质。这样,我们就创建了一个简洁漂亮的着色器,我们可以使用它来研究滚动效果。

2.2.2 如何操作

首先,打开我们刚才创建的着色器文件,然后输入下面提到的代码:

  1. 该着色器需要两个新的属性,我们可以用来控制纹理滚动的速度。因此,我们将添加X方向的速度属性和Y方向的速度属性,如下代码所示:

screenshot

  1. 修改surf()函数,通过tex2D()函数来改变UV坐标。然后使用内置的_Time变量来实现动态纹理,当我们点击Unity播放按钮时纹理会随时间运动起来。
    screenshot

screenshot

下图展示了使用滚动UV系统为你的环境创建一个简单河流运动的效果图。在纸质的书本上是很难展示运动效果的,但是请相信它是可以运动的。
screenshot

2.2.3 实现原理

这套纹理滚动系统首先需要声明两个属性,使着色器的使用者能够提高或降低纹理的滚动速度。它的作用在于我们可以从材质Inspector面板中获取浮点值,然后传递给着色器里的surf函数。有关着色器属性的详细信息,请查阅第1章。
一旦我们从材质Inspector面板中获取了浮点值,我们就可以使用它们实现着色器的UV偏移了。
在程序的开始,我们首先将UV值存储在scrolledUV变量中。这个变量必须是一个float2或fixed2类型的变量,因为UV值是通过Input结构体传入的:
screenshot

这样,当访问网格的UV时,我们就可以使用滚动速度变量和内置的_Time变量对纹理进行偏移。该内置变量返回的是float4类型的值,这意味着当我们进入游戏时,变量的每个组成部分都包含不同的时间值。

_Time变量为我们提供一个基于Unity游戏时钟的递增型浮点值。因此,我们可以使用该时间值在UV方向上移动我们的UV值,也可以通过滚动速度变量来加快或减慢时间。
screenshot

使用时间计算出正确的偏移量后,我们就可以添加新的偏移值到原有UV值上。这也是我们在下一行使用+=运算符的原因。我们要把原来的UV值,加上新的偏移量,然后传递给tex2D()函数作为新的UV纹理。这样我们就创建了一个物体表面的纹理运动效果。由于我们只对UV坐标进行修改,所以这些是模拟的纹理运动效果。
screenshot

相关文章
|
3月前
|
算法 安全 图形学
Unity Hololens2开发|(十一)MRTK3 Solver(求解器)
Unity Hololens2开发|(十一)MRTK3 Solver(求解器)
|
3月前
|
API 图形学
Unity Hololens2开发|(十)MRTK3空间操作 ObjectManipulator (对象操控器)
Unity Hololens2开发|(十)MRTK3空间操作 ObjectManipulator (对象操控器)
|
3月前
|
Go 图形学
Unity Hololens2开发|(九)MRTK3空间操作 ConstraintManager(约束)
Unity Hololens2开发|(九)MRTK3空间操作 ConstraintManager(约束)
|
3月前
|
算法 图形学 UED
Unity Hololens2开发|(八)MRTK3空间操作 BoundsControl(边界控制)
Unity Hololens2开发|(八)MRTK3空间操作 BoundsControl(边界控制)
|
3月前
|
图形学
Unity Hololens2开发|(七)MRTK3子系统 TextToSpeechSubsystem(文本转语音)
Unity Hololens2开发|(七)MRTK3子系统 TextToSpeechSubsystem(文本转语音)
|
3月前
|
图形学
Unity Hololens2开发|(六)MRTK3子系统 DictationSubsystem(听写功能)
Unity Hololens2开发|(六)MRTK3子系统 DictationSubsystem(听写功能)
|
3月前
|
图形学
Unity Hololens2开发|(五)MRTK3子系统 KeywordRecognitionSubsystem(关键字识别)
Unity Hololens2开发|(五)MRTK3子系统 KeywordRecognitionSubsystem(关键字识别)
|
4月前
|
图形学
【Unity3D开发小游戏】Unity3D零基础一步一步教你制作跑酷类游戏
【Unity3D开发小游戏】Unity3D零基础一步一步教你制作跑酷类游戏
|
4月前
|
设计模式 存储 前端开发
【Unity3D日常开发】Unity3d中使用MVC框架
【Unity3D日常开发】Unity3d中使用MVC框架
|
10月前
|
人工智能 算法 安全
开源游戏区块链项目分享:Unity开发的独立区块链
开源游戏区块链项目分享:Unity开发的独立区块 2023年了,区块链在这此时代热浪下都已经是即将燃尽的火苗了,而ChatGPT、Stable Diffusion等AI产品已经成为当下风口和热浪。然而区块链作为上一任浪热下的余晖,真的就这么完事了么?其实目前区块链在国内更多作为信用链存在,用于法律签约、物流运输、商务合作、加密合约等等公共底层方面。 而此文将不仅探讨区块链的其他实际用途,同时也开源了一个Unity3D C#编写的区块链代码,如果你是技术人员,刚好你做区块链项目,希望这个文章和代码能帮助到你。
536 0