Shader笔记——3.纹理基础

图片类资源

图片类型

图片类型分为两种:位图和矢量图

  • 位图
    又称点阵图、光栅图,其存储单位是图像上每一个点的像素值,每个像素都有自己的颜色信息。

  • 矢量图
    又称向量图,使用点和线来描述物体。

图片格式

位图图像是由一个个像素点组成,像素点就是颜色点,而颜色最简单的方式就是用RGB或RGBA表示。一般情况下R,G,B(A)每个分量都是用一个字节(8位)来表示,所以RGB的图片中每个像素大小就是3*8=24位, RGBA的图片中每个像素大小是4*8=32位。如果直接将图像原始数据存储到硬盘中,存储RGBA 32位的图片,一个像素占4字节,储存一张1080P的图片则需要1920*1080*4字节= 8294400B 8294400/1024/1024 = 7.9101MB。于是我们便要压缩像素数据,在压缩的过程中压缩算法也针对图像数据结构进行特殊处理,这样我们便有了jpeg、png等图片格式。

不同图形库中每个像素点中RGBA的排序顺序可能不一样。上面说过像素一般会有RGB,或RGBA四个分量,那么在内存中RGB的排列就有6种情况RGB、RBG、GRB、GBR、BGR、BRG,同理RGBA的排列有24种情况。不过一般只会有RGB,BGR, RGBA, RGBA, BGRA这几种排列。 绝大多数图形库或环境是BGR/BGRA排列。

RGB565 每个像素用16位表示,RGB分量分别使用5位、6位、5位

RGB555 每个像素用16位表示,RGB分量都使用5位(剩下1位不用)

RGB24 每个像素用24位表示,RGB分量各使用8位

RGB32 每个像素用32位表示,RGB分量各使用8位(剩下8位不用)

ARGB32 每个像素用32位表示,ARGB分量各使用8位

纹理

Unity中的纹理,就是在游戏物体上或者包裹在游戏物体周围的图片或视频文件,用来给游戏物体一个视觉上的效果。

  • Unity会识别3D工程Assets文件夹下的所有图片或视频文件并保存为Texture,在2D工程中会被保存成Sprite。
  • 只要图片或视频文件满足Unity指定的大小要求,它就会被导入并优化以供游戏使用。
  • 对于多层psd或tiff文件,这些文件在导入Unity时会自动合并,并且原psd或tiff文件的大小不会对游戏造成大小损失。因为合并图层的过程发生在Unity内部,而不是原psd或tiff文件本身。

导入素材窗口分为两部分,上方的纹理导入器Texture Importer,下方的预览窗口

TextureImporter2019-1.jpg

纹理导入器中的各个属性确定了图片如何从工程的Assets文件夹导入到Unity Editor

  • 纹理类型Texture Type是纹理导入器Texture Importer的第一个属性,通过纹理类型来确定你导入的纹理要被用来做什么,根据你所选择的纹理类型,这之后的属性选项会随之改变。

  • 纹理形状Texture Shape是Type是纹理导入器Texture Importer的第二个属性,通过纹理形状来确定该纹理的形状和结构。

  • 高级设置Advance Settings允许开发者对Unity处理纹理的方式进行更精细的调整。

  • 特定平台的重载,当我们针对不同的平台进行Build时,我们需要考虑到分辨率、文件大小及内存分配的要求、像素的尺寸以及各个目标平台的纹理质量,我们可以对自己需要特别处理的平台设置进行调整。

纹理类型

PropertyFunc
Texture Type通过纹理类型来确定你导入的纹理要被用来做什么,根据你所选择的纹理类型,这之后的属性选项会随之改变。
Default对大部分纹理最常见的纹理类型设置,在导入纹理时它提供大部分的属性设置
Normal map将纹理类型设置为此法线贴图后,会转换颜色到一个适合的实时法线映射的格式
Sprite(2D and UI)如果你要将此纹理用于2D游戏的UI则选择此选项为你所需要的纹理类型
Cursor如果你要将此纹理用作一个自定义的游标则选择此选项为纹理类型
Lighting Map如果你要将此纹理用作一个光照图则选择此选项为纹理类型,这个选项会允许对一些特殊格式进行编码,(根据平台的不同,如RGBM或者dLDR)

纹理形状

PropertyFunc
Texture Shape用这个选项来确定纹理的形状,默认设置为2D
2D对大部分纹理最常见的纹理形状设置,这个选项确定该图片文件为一个2D的纹理。这样的纹理经常被用来做3D网格的贴图或者GUI
CubeCube选项定义该纹理为一个cubemap,这样的纹理被用来做天空盒或者反射环境

高级设置

PropertyDescription
Non Power of 2如果你要导入纹理的尺寸不是2的幂,那么这个选项会在导入时进行一个缩放,默认选项设置为 None ,即纹理大小是2的幂,纹理尺寸导入时不会发生缩放;ToNearest选项会将尺寸缩放到距离导入尺寸最近的2的幂的尺寸,例如导入时 257x511 px Texture,会被缩放为256x512 px (注意,如果最终平台的是IOS,则纹理格式会被转化为PVRTC,纹理需要是正方形的,经过ToNearest缩放会被缩放为512x512 px);ToLarger选项会将该贴图缩放为512x512 px;ToSmaller选项会将该纹理缩放为256x256 px。
Read/Write Enabled开启这个选项将会允许从脚本方法中获取纹理数据,例如Texture2D.SetPixels, Texture2D.GetPixels 和其他的 Texture2D方法。需要注意的是,这种操作是拷贝一份纹理数据,将会消耗双倍的纹理内存资源,所以必须在必要的时候再启用这个属性。这个操作也只适用于未被压缩的和DXT压缩的纹理,其他类型的纹理不能被读取;默认选项设置为关闭
Streaming Mip Maps开启这个选项来在该纹理上使用纹理流,这个属性适用于在3D环境下的Unity通过MeshRender渲染的所有纹理。漫反射贴图、法线贴图和光照图都用于纹理流
Mip Map Priority使用这个选项设置mipmap的优先级。Unity使用这一点来确定在分配资源时要优先考虑哪些mipmap。值越大表示优先级越高(例如,3的优先级高于1)。此设置仅在启用流式MIP映射时可用。mip map priority number也是内存预算的mipmap偏移量(启用纹理流时在质量设置中设置)。例如,优先级为2时,纹理流系统尝试使用比优先级为0的纹理高两个mip级别的mipmap。每个轴上高一个mip级别是2x,每个轴上高两个级别是4x,因此高两个mip级别会导致纹理更大16x。如果它不能做到这一点,它将使用较低的MIP级别来满足内存预算。负值也有效。有关详细信息,请参见纹理流API。
Generate Mip Maps开启这个选项来进行minmap的生成,
Border Mip Maps开启这个选项来避免色彩渗出到mip较低层次的边缘。用于光源cookies
Mip Map Filtering有两种优化图片质量的minmap过滤方法,默认的是Box,是最简单的方式淡出mipmap,随着尺寸的减小mip级别变得更平滑。Kaiser,是随着尺寸的减小,通过在纹理上的锐化算法来进行过滤mip maps。如果你的纹理在远距离变模糊,试试这个选项。
Mip Maps Preserve Coverage开启这个选项来使生成的mipmap的alpha通道在alpha测试期间保留覆盖范围
Fadeout Mip Maps开启这个选项可使mipmap随着mip级别的进展逐渐变灰。常用于地图详情。最左边的滚动是第一个开始淡出的mip级别。最右边的滚动定义了纹理完全变灰的mip级别。
Wrap Mode确定纹理在进行平铺时的行为,默认设置为Clamp,拉伸纹理边缘;Repeat选项,重复平铺该纹理; Mirror选项,在每个整数边界处镜像该纹理以创建重复图案; Mirror Once选项,镜像该纹理一次,然后拉伸其边缘; Per-ax选项,单独控制Unity如何在U轴和V轴上包装纹理。
Filter Mode确定纹理在通过三维变换得到拉伸时如何过滤,默认设置为点模式Point(无过滤),纹理在近距离变成块状; 双线性Bilinear选项,纹理在近距离变模糊; 三线性Trillnear选项,和双线性Bilinear类似,但是在不同的MIP级别之间纹理也会变得模糊
Aniso Level从一个高角度看纹理时提高纹理质量。适用于地板与地面纹理

特定平台的纹理压缩格式

常见的图片类资源格式
  • BMP

BitMap的缩写,没有压缩像素格式,存储在文件中时先有文件头、再图像头、后面就都是像素数据了。在Windows操作系统中还比较常见,几乎没有对数据进行压缩,所以BMP格式的图片通常具有较大的文件大小。

  • JPEG

是有损的、采用直接色的位图。是在不影响人类可分辨的图片质量的前提下,尽可能的压缩文件大小。

适用场景:得益于更丰富的色彩,JPEG非常适合用来存储照片,用来表达更生动的图像效果,比如颜色渐变。不适合用来存储企业Logo、线框类的图。因为有损压缩会导致图片模糊,而直接色的选用,又会导致图片文件较GIF更大。

  • PNG

Portable Network Graphics的缩写,PNG-8是PNG的索引色版本,是无损的、使用索引色的位图。PNG-24是无损的、使用直接色的、点阵图。

适用场景:PNG-8是非常好的GIF格式替代者,在可能的情况下,应该尽可能的使用PNG-8而不是GIF,因为在相同的图片效果下,PNG-8具有更小的文件体积。并且,PNG-8还具有更好的透明度支持。从显示效果上来看,PNG-24跟BMP没有不同。PNG-24的优点在于,它压缩了图片的数据,使得同样效果的图片,PNG-24格式的文件大小要比BMP小得多。

  • GIF

Graphics Interchange Format的缩写,采用LZW压缩算法进行编码。是无损的、采用索引色的、点阵图。即采用GIF格式保存图片不会降低图片质量。得益于数据的压缩,GIF格式的图片,其文件大小要远小于BMP格式的图片。文件小,是GIF格式的优点,同时,GIF格式还具有支持动画以及透明的优点。缺点是GIF格式仅支持8bit的索引色,即在整个图片中,只能存在256种不同的颜色。

适用场景:适用于对色彩要求不高同时需要文件体积较小的场景,比如企业Logo、线框类的图等。

  • WebP

是谷歌开发的一种新图片格式,同时支持有损和无损压缩的、使用直接色的、点阵图。相同质量的无损或者有损图片,WebP具有更小的文件体积,并且也支持图片透明度。

REF

文档:

https://docs.unity3d.com/Manual/class-TextureImporter.html

书籍:

OpenGL宝典、Unity Shader入门

转载于:https://www.cnblogs.com/sylvan/p/10589455.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值