文章目录
Unity 支持的图片格式有很多
BMP:是 Windows 操作系统的标准图像文件格式,特点是几乎不进行压缩,占磁盘空间大
TIF:基本不损失图片信息的图片格式,缺点是体积大
JPG:一般指 JPEG 格式,属于有损压缩格式,能够让图像压缩在很小的存储空间,一定程度上会损失图片数据,无透明通道
PNG:无损压缩算法的位图格式,压缩比高,生成文件小,有透明通道
TGA:支持压缩,使用不失真的压缩算法,还支持编码压缩。体积小,效果清晰,兼备 BMP 的图像质量和 JPG 的体积优势,有透明通道
PSD:是PhotoShop(PS)图形处理软件专用的格式,通过一些第三方工具或自制工具可以直接将 PSD 界面转为 UI 界面
其它还支持 EXR、GIF、HDR、IFF、PICT 等等
其中 Unity 最常用的图片格式是 JPG、PNG、TGA 三种格式
设置纹理类型主要是为了让纹理图片有不同的主要用途,指明其是用于哪项工作的纹理
(一)Default
默认纹理,大部分导入的模型贴图都是该类型
sRGB(Color Texture):启用可以将纹理存储在伽马空间中(对每一个像素做一次幂函数运算)
人眼对光强的反应不呈线性。我们在观察光时会发现一些亮度比另一些亮度更容易看到,即从黑到白的线性渐变在我们人眼中不是线性渐变的
由于历史原因,监视器和显示器具有相同的特性。向监视器发送线性信号会导致看起来像上图右侧的渐变,人眼观察感觉是错误的。为了弥补这一点,需要发送经校正的信号来确保监视器能够呈现出看起来自然的图像。这种校正称为伽马校正。
伽马和线性颜色空间同时存在的原因是,光照计算应该在线性空间中进行,以便确保数学上的正确性,但结果应该在伽马空间中呈现以便让人眼看起来正确。在帧缓冲格式限制为每通道 8 位的旧硬件上,计算光照时使用伽马曲线可在人类可感知的范围内提供更高的精度。在人眼最敏感的范围内,使用的位数最多。
伽马空间的公认标准称为 sRGB 。该标准定义了它与线性空间之间的一个映射,使得人眼能充分利用 8 位 / 通道的精度
线性渲染指的是渲染场景的过程,此情况下的所有输入都是线性的,也就是说,没有经过伽马校正以适合人眼观察或输出到显示器。
Alpha Source:指定如何生成纹理的 Alpha 通道
Alpha Is Transparency:启用可以过滤边缘上的瑕疵,建议启用
(二)Normal Map
法线贴图就是在原物体的凹凸表面的每个点上均作法线
法线:垂直于某个点的切线方向的方向向量
(三)Editor GUI and Legacy GUI
一般在编辑器中或者 GUI 上使用的纹理
(四)Sprite(2D and UI)
2D 游戏或者 UGUI 中使用的格式
Sprite Mode:图像中提取精灵图形的方式
Pixels Per Unit:世界空间中的一个距离单位对应多少像素
MeshType:网格类型
只有 Single 和 Multiple 模式才支持
Full Rect:创建四边形,将精灵显示在四边形上
Tight:基于像素 Alpha 值来生成网格,更加贴合精灵图片的形状
任何小于 32 * 32 的精灵都会使用 Full Rect 模式,即使是设置成 Tight 也是
Extrude Edges:使用滑动条确定生成的网格中精灵周围流出的区域大小
Pivot:精灵图片的轴心点
Single 模式才有此选项,对应九宫格布局中的 9 个点
Generate Physics Shape:启用此选项,Unity 会自动根据精灵轮廓生成默认物理形状
只有 Single 和 Multiple 模式才可使用
Sprite Editor:编辑 Sprite,需要安装 2D Sprite 包,后续讲解
(五)Cursor
自定义光标
(六)Cookie
光源剪影格式
Light Type:应用的光源类型
一般点光源的剪影需要设置为立方体纹理,方向光和聚光灯的剪影设置为 2D 纹理
Alpha Source:指定如何生成纹理的 Alpha 通道
Alpha Is Transparency:启用可以过滤边缘上的瑕疵,建议启用
(七)Lightmap
光照贴图格式
(八)Single Channel
纹理只需要单通道的格式
Channel:希望将纹理处理为 Alpha 还是 Red 通道
Alpha Source:指定如何生成纹理的 Alpha 通道
Alpha Is Transparency:启用可以过滤边缘上的瑕疵
纹理不仅可以用于模型贴图,还可以用于制作天空盒和反射探针
纹理形状设置主要就是用于在两种模式之间进行切换
(一)2D
2D 纹理,最常用的设置,这些纹理将使用到模型和 GUI 元素上
(二)Cube
立方体贴图,主要用于天空盒和反射探针
Mapping:如何将纹理投影到游戏对象上
Convolution Type:纹理的过滤类型
Fixup Edge Seams:解决低端设备上面之间立方体贴图过滤错误
Convolution Type 为 None 或 Diffuse 才有用
高级设置主要是纹理的一些尺寸规则、读写规则、以及 MipMap 相关设置
(一)MipMap
在三维计算机图形的贴图渲染中有一个常用的技术被称为 Mipmapping。
为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为 Mipmap,Mipmap 需要占用一定的内存空间
Mipmap 中每一个层级的小图都是主图的一个特定比例的缩小细节的复制品,虽然在某些必要的视角,主图仍然会被使用,来渲染完整的细节。但是当贴图被缩小或者只需要从远距离观看时,Mipmap 就会转换到适当的层级
因为 Mipmap 贴图需要被读取的像素远少于普通贴图,所以渲染的速度得到了提升。而且操作的时间减少了,因为 Mipmap 的图片已经是做过抗锯齿处理的,从而减少了实时渲染的负担。放大和缩小也因为 Mipmap 而变得更有效率。
如果贴图的基本尺寸是 256 * 256 像素的话,它的 Mipmap 就会有 8 个层级,每个层级是上一层级的四分之一的大小
依次层级大小就是:128 * 128、64 * 64、32 * 32、16 * 16、8 * 8、4 * 4、2 * 2、1 * 1(一个像素)
开启 MipMap 功能后,Unity 会帮助我们根据图片信息生成 n 张不同分辨率的图片,在场景中会根据我们离该模型的距离选择合适尺寸的图片用于渲染,提升渲染效率
在 Unity 中,启用选项 Generate Mip Maps 后,可以看见图片的 Mipmap:
(二)参数介绍
Non-Power of 2:如果纹理尺寸非 2 的幂该如何处理
None:纹理尺寸大小保持不变
To nearest:将纹理缩放到最接近 2 的幂的大小
(PVRTC 格式要求纹理必须为正方形)
To larger:将纹理缩放到最大尺寸大小值的 2 的幂的大小
To smaller:将纹理缩放到最小尺寸大小值的 2 的幂的大小
Read / Write Enabled:启用可以使用 Unity 中提供的一些方法从纹理中获取到数据,会占用额外内存
Streaming Mipmaps:启用则可以使用纹理串流
主要用于在控制加载在内存中的 Mipmap 级别,用于减少 Unity 对于纹理所需的内存总量,用性能换内存
Mip Map Priority:Mipmap 优先级
Unity 根据优先级来确定分配资源时优先考虑哪些 Mipmap
Generate Mip Maps:允许生成 MipMap
2D 游戏不需要启用
Border Mip Map:启用可避免颜色向外渗透到较低 MIP 级别的边缘,默认启用即可
Mip Map Filtering:优化图像质量的过滤方法
Box:随着尺寸减小,级别更加平滑
Kaiser:随着 Mipmap 尺寸大小下降而使用的锐化算法,效果较好
如果远处纹理太模糊,可以使用该算法
Mip Maps Preserve Coverage:Mipmap 的 Alpha 通道在 Alpha 测试期间保留覆盖率
Fadeout Mip Maps:级别递减时使 Mipmap 淡化为灰色,需要保留颜色时则不勾选
平铺拉伸主要设置纹理的平铺规则以及拉伸规则
(一)准备工作
在 Unity 2D 中创建 Quad 与 Material,Material 选择 Unlit / Texture 材质,并关联一张图片,将 Material 拖到 Quad 上
我们将 Tiling 的 X 和 Y 都设置为 2
(二)参数介绍
Wrap Mode:平铺纹理时的方式
Repeat:在区块中重复纹理
Clamp:拉伸纹理的边缘
Mirror:在每个整数边界上镜像纹理以创建重复图案
Mirror Once:镜像纹理一次,然后将拉伸边缘纹理
看上去像是直接 Clamp,但我们设置偏移位置 Offset 中 X 为 -1 后,可以看见是镜像了的
Per-axis:单独控制如何在 U 轴和 V 轴上包裹纹理
这里 U 和 V 轴相当于 X 和 Y 轴
Filter Mode:纹理在通过 3D 变化拉伸时如何过渡
Aniso Level:以大角度斜视查看纹理时提高纹理质量,性能消耗高
平台设置主要设置纹理最终打包时在不同平台的尺寸、格式、压缩方式
它非常的重要,因为它影响了你的包大小和读取性能方面的问题
Max Size:导入纹理的最大尺寸,一般设置为 2048 即可
Resize Algorithm:当纹理尺寸大于 Max Size 时,使用的缩小算法
Format:纹理格式
各个平台支持的格式不同,如果选择 Automatic,会根据平台使用默认设置
IOS —— 选择默认的纹理压缩设置(PVRTC)可以获得更大的兼容性
Andorid —— ASTC、ETC2 / EAC、ETC、RGBA 16 位、RGBA 32 位
Compression:纹理的压缩类型
Use Crunch Compression:启用后,使用 Crunch 压缩
压缩时间长,但解压速度快
Split Alpha Channel:分离 Alpha 通道
仅当压缩格式为 ETC 时才会出现
会把一张图分成两张纹理,一张包含 RGB 数据,一张包含 Alpha 数据,会节约内存
Override ETC2 fallback:若设备的格式不支持 ETC2,则将使用该格式
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r
如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit