MMD联动Unity学习笔记 Vol.54 Unity Shader Graph Texture2D 相关节点

前言
这期我们还是跟着官方的视频学习Unity里关于Shader Graph的内容,这期是这个系列的第11期,贴图输入Input Texture。




顾名思义,2D纹理就是Unity常见的各种贴图,而Texture Array纹理数列和Texture Atlas纹理集一样,都属于多个纹理的集合。Atlas是把各个元素都存在一张图中,它本身仍是一张贴图。而Array这个概念可能对于技术同学们来说比较好理解,简单说,Array就像是一叠卡片一样叠在一起。在Shader Graph中,Atlas可以使用2D Asset节点,而Array就要使用到2D Array节点了。

比较麻烦的是,现在Unity里无法直接在Editor创建纹理数列,我们只能在代码中创建。完成代码在下面工程中。
工程下载:https://github.com/Sennettming/Unity-ShaderGraph-Tutorial

另一个缺点是因为Unity中没有针对Texture 2D Array的Importer来辅助设置不同平台的压缩格式和大小,所以在针对多平台打包的时候,我们需要对每一个平台都烘焙一个单独的Texture Array,并用代码将其和对应的平台联系起来。

我们使用Sample Texture 2D节点来采样输入给Shader的2D的贴图,包括法线,简单来说,这个过程就是把存储在内存里的位图通过对应的UV坐标映射到渲染物体的表面。而纹理采样节点会向Shader输出一个四维向量的颜色值,你可以用自定义的UV算法和上一节讲的采样器对默认值进行修改。

回到第二节的案例,可以发现,我们这个效果也主要是由自定义的UV算法来实现的。所以实际上根据不同的算法,最后采样得到贴图的效果,也就大不相同。

Sample Texture 2D LOD和Sample Texture 2D的区别就在于,LOD节点可以获取被采样节点的Midmap层级,但这个一般很少被用到。

当采样Texture Array资源的时候,需要单独提供一个sliceIndex的参数,做为判断当前采样的是数组中哪一张图片的依据,对应到Sample Texture 2D Array节点的Index参数。相对于Texture Atlas说,纹理数列Texture Array的好处在于可以存储更多的纹理,而且没有UV切分的限制。