撰写了文章 发布于 2017-12-15 17:46:35
【弹幕程序科普计划】 第十四篇 动态纹理
【动态纹理】
动态纹理并不是什么复杂的技术,但是往往容易被刚入门的游戏制作者忽略。因此本次来简单介绍一下这项技术。
在制作符卡背景时,我们经常会看到一张可以循环移动的贴图(或者叫纹理),举例来说像这样:
以上贴图素材出自《妖精大战争》。要实现这样一个效果,当然首先需要素材图片能够循环,然后再在程序里让它循环起来。以上这张图是从右向左运动,可能最容易想到的实现方法就是在右边源源不断地生成向左运动的图片。如果图片运动方向是斜向的,也可以用类似的方法来实现,只不过稍微麻烦一点。
然而,如果使用动态纹理技术,这个效果会更好实现。所谓动态纹理,其实指的是对贴在模型上的贴图进行位置变换。着重指出一下,是对贴图进行位置变换,而不是对模型进行位置变换。假设将上述的贴图素材贴在一个平面模型上,然后对其进行位移变换,就可以得到这样的效果:
除了位移变换以外,还可以进行旋转变换:
以及缩放变换
当然,这种效果可能和之前说的连续发送贴图的效果大同小异。要旋转或者缩放贴图,用2D方法完全够用,要做个符卡背景是只要能实现,用什么方法都可以。然而,本次介绍动态纹理,重点其实不在这里。其重点在于,动态纹理并不一定要用在平面上,还可以用在各种形状的模型上,从而实现一些很奇特的效果。
比如说《东方绀珠传》2面背景月亮的放射效果
比如说《弹幕音乐绘》3面流动的小溪
黑暗空间
以及。。
即使只是制作符卡背景,现在东方正作也经常利用动态纹理来实现一些放射效果或者收缩效果,大家不妨留意一下,比如本次天空璋6面符卡背景。不过其效果和上述的月亮放射效果大同小异。由于例子太多,这里就不一一截图了。
那么本次科普就到这里,希望能给各位爱好者一些新的启发。
琪露诺 1年前
补充给大家,实际制作动态纹理的时候,也会有不同的做法,比如:1、用普通的方法显示纹理,但只“抠出”区域内的一部分,“隐藏”掉外面的部分(在shader里或者在后处理上);2、改变四边形顶点的uv坐标来实现动态纹理(就像上图的绿底四边形一样);3、在shader里对每个的uv坐标,以时间为参数,分别计算出它们对应“源文件”的什么位置(就像月亮那张图的效果,大概是进行了极坐标和直角坐标的转换)。
发布