赞
踩
关于理论知识
【技术美术图形部分】纹理基础1.0-纹理管线_flashinggg的博客-CSDN博客
上篇是总结了纹理映射一整个的流程,其中2.3纹理采样中提到了需要进行两块设置:
本篇博客算是在Unity Shader中,对上述两种模式进行的实践,理论过程就不再赘述。
参考的书籍
《 Unity Shader 入门精要》——冯乐乐
我用的Unity版本
我用的Unity版本是Unity2021.3.8f1,而书里用的Unity版本是Unity5吧,Unity的一些参数设置已经有些不一样了,学习的时候需注意。
《入门精要》书中的例子都是可以直接在书的github上一口气下载下来。给的纹理其实就是一张张图片,以导入的7.1.2章节的纹理图片为例,属性栏如下:
我们在导入纹理图片时,需要正确的设置纹理类型才能给Unity Shader传递正确的纹理信息。正常来说按默认设置的Default就行,Default是所有纹理最常见的类型,可用于访问导入的大多数的纹理属性。
除了Default之外还有,Normal Map——法线贴图;Sprite——精灵和UI的图;Cursor——鼠标指针的样子图等等。
可选的有最常用的2D纹理;3D纹理;Cube(立方体贴图)等,默认是2D纹理。
提示内容是这样的
先进行一个复习!在【技术美术图形部分】2.1 色彩空间的就重点介绍了线性空间和伽马空间以及二者为什么需要相互转换,看一遍相当于复习吧!
需要知道的最重要的一点是:渲染过程使用线性空间,最终显示使用伽马空间。而传入的纹理有“进行了sRGB色彩空间转换”“没有进行sRGB色彩空间转换”的类型区别,于是!出现以下两种情况:
一般来说,都提倡让GPU去自动做这件事,省去了Shader中写入转换函数的麻烦,以此优化游戏性能。
按照上图,我理解的是:如果勾选了sRGB这项,代表Unity会自动对传入的纹理做预处理(对传入的纹理在渲染前进行Gamma矫正)并存入伽马空间,我们就不需要在Shader中手动写入了。
案例对比可以参考文章Unity中纹理启用SRGB的坑_小葱man的博客-CSDN博客
同时这篇文章还指出一点,我们不需要在shader写入显示前的线性-->伽马空间的函数,这个操作也是由Unity替我们完成。
这是纹理比较重要的一个属性,其实就是在纹理管线中的提到的纹理采样会用到的映射函数。关于每种映射方式,在纹理管线那篇博客已经讨论过了,这里重点来在Unity中实践实践,加深印象。
场景中创建材质,Shader就用7.1之前的,并给Tilling平铺属性一个(3, 3)属性,来看看不同封装模式的效果:
下图从左到右依次为Point、Bilinear、Trilinear三种过滤模式,64X64 -> 256X256的效果:
对于缩小纹理,一般采取MipMap技术。对于导入的纹理,默认开启了MipMap。
让我们看看对于渐远地面,MipMap开启与不开启的效果对比(均采用Bilinear滤波)
Bilinear滤波+MipMap
Bilinear滤波(不加MipMap)
emmmm...后者简直不忍直视,可见MipMap做了多么大的贡献!
上至下依次是:Point、Bilinear、Trilinear和MipMap技术结合的效果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。