Unity手册-网格、材质和纹理

本篇只是相关知识点的整理

网格

  • 尽可能将网格合并在一起。这些网格应该尽可能共享材质和纹理。这种做法可大幅提升性能。
  • 如果需要在 Unity 中进一步设置游戏对象(添加物理设置、脚本或其他组件),请确保在 3D 应用程序中妥善命名游戏对象。使用 pCube17 或 Box42 之类的名称可能会很费力。
  • 使网格在 3D 建模应用程序中的世界原点居中。这样可以使网格更容易在 Unity 中定位。
  • 如果网格没有顶点颜色,Unity 会在第一次渲染网格时自动将全白色顶点颜色数组添加到网格。
  • Unity Editor 显示太多顶点或三角形(与 3D 建模应用程序中的原始模型相比)。
    这是正常的。您正在查看的是实际发送到 GPU 进行渲染的顶点/三角形数量。除了材质要求发送两次这些顶点/三角形的情况之外,其他诸如硬法线和非连续 UV 的元素与 3D 建模应用程序显示的情况相比会显著增加顶点/三角形数量。三角形在 3D 和 UV 空间中都需要处于连续状态以形成条带,因此当有 UV 接缝时,必须使三角形退化以形成条带,而这会增加计数。
  • 导入网格资源时,如果网格带蒙皮,则 Unity 会自动创建带蒙皮的网格渲染器 (Skinned Mesh Renderer),而如果网格不带蒙皮,则创建网格过滤器 (Mesh Filter) 及网格渲染器 (Mesh Renderer)。
    为了渲染非蒙皮网格,出于历史遗留原因,必须同时提供网格过滤器 (Mesh Filter) 和网格渲染器 (Mesh Renderer) 组件。

网格切割、换装、捏脸、骨骼动画、模型扭曲的原理

材质

材质定义了用于渲染此材质的着色器以及着色器参数(例如要使用的纹理贴图、颜色和数值)的具体值。
。。。

纹理

一、导入纹理

  • 纹理尺寸大小
    理想情况下,纹理尺寸大小应该是每边为 2 的幂(即 2、4、8、16、32、64、128、256、512、1024、2048 像素 (px),以此类推)。纹理不必是正方形;也就是宽度可与高度不同。
    在 Unity 中可以使用 NPOT(非 2 的幂)纹理大小。但是,NPOT 纹理大小通常需要稍微多一点的内存,并且 GPU 的采样速度可能更慢,因此,只要有可能,最好使用 2 的幂大小以提高性能。

    如果平台或 GPU 不支持 NPOT 纹理大小,Unity 会对纹理进行缩放和填充以达到下一个 2 的幂大小。此过程会使用更多内存并使加载速度变慢(尤其是在较旧的移动设备上)。通常,只应将 NPOT 大小用于 GUI 用途。
    您可以使用纹理导入器的 Advanced 部分中的 Non Power of 2 选项在导入时放大 NPOT 纹理资源。

  • Mipmap
    Mipmap 是图像逐渐减小版本的列表。如果纹理使用 Mipmap 时,当纹理远离摄像机时,Unity 会自动使用较小版本的纹理。这样可以降低渲染纹理的性能成本,而且不会造成明显细节损失。Mipmap 还可以减少纹理锯齿和闪烁。
    启用 Mipmap 会让内存使用量增加 33%,因此,仅当纹理与摄像机之间的距离将发生改变时,才应该对纹理使用 Mipmap。如果纹理与摄像机之间的距离不会改变(比如用于 UI、天空盒等等对象的纹理),则不应对这种纹理使用 Mipmap。

  • 法线贴图
    法线贴图由法线贴图着色器用于使简单多边形模型看起来好像包含更多细节。Unity 使用编码为 RGB 图像的法线贴图。您也可以选择从灰度高度贴图图像生成法线贴图。

  • Alpha 贴图
    Alpha 贴图是仅包含 Alpha 信息的纹理。可以使用 Alpha 贴图对材质应用不同级别的透明度。
    在 Unity 中,可以通过如下方式来创建 Alpha 贴图:创建在 Alpha 通道中包含信息的纹理,或创建灰度纹理并将灰度值转换为 Alpha 值。

  • 细节贴图
    如果您想创建地形,通常要使用主纹理来显示地形的各个区域,如草地、岩石和沙地。如果地形很大,可能会变得非常模糊。细节纹理通过在靠近主纹理时淡入小细节来隐藏这一情况。
    绘制细节纹理时应注意,中性灰色不可见,白色使主纹理变亮两倍,黑色使主纹理完全变黑。

  • 反射(立方体贴图)
    要将纹理用于反射贴图(例如在反射探针或立方体贴图的天空盒中),请将 Texture Shape 设置为 Cube。

  • 各向异性过滤
    各向异性过滤可提高从掠射角观察时的纹理质量。此渲染在显卡上非常消耗资源。提高各向异性水平通常对于地面和地板纹理而言是一种很好的做法。请使用 Quality 设置强制对所有纹理进行各向异性过滤或完全禁用该功能。

    纹理导入时一些特殊选项:

  • Read/Write Enabled
    启用此属性可以从脚本中使用 Texture2D.SetPixels、Texture2D.GetPixels 和其他 Texture2D 方法访问纹理数据。在内部,Unity 使用纹理数据的副本进行脚本访问,这会使纹理所需的内存量增加一倍。因此,默认情况下会禁用此属性,仅在需要脚本访问权限时才应启用。

  • Crunch 压缩
    如果适用,使用 Crunch 压缩。Crunch 是一种基于 DXT 或 ETC 纹理压缩的有损压缩格式。Unity 在 CPU 上将纹理解压缩为 DXT 或 ETC,然后在运行时将其上传到 GPU。Crunch 压缩有助于纹理在磁盘上使用尽可能少的空间并方便下载。Crunch 纹理可能需要很长时间进行压缩,但在运行时的解压缩速度非常快。

    unity支持的文件格式:
    BMP、EXR、GIF、HDR、IFF、JPG、PICT、PNG、PSD、TGA、TIFF

    各个平台支持的纹理格式
    Unity 支持许多常见的图像格式作为导入纹理的源文件(例如 JPG、PNG、PSD 和 TGA)。但是,3D 图形硬件(例如显卡或移动设备)在实时渲染期间不会使用这些格式。这种硬件要求纹理以专门格式进行压缩,这些格式针对快速纹理采样进行了优化。不同的平台和设备分别都有自己的专有格式。

    默认情况下,Unity Editor 会自动将纹理转换为最合适的格式,以匹配您选择的构建目标,而且构建中仅包含转换后的纹理。源资源文件保留为原始格式,位于项目的 Assets 文件夹中。但是,大多数平台支持多种纹理压缩格式,可供您进行选择。

    Unity 为每个平台设置了默认格式,但您可以覆盖默认格式并为某些纹理选择不同的压缩格式(例如,如果使用纹理作为遮罩,只有一个通道,则可以选择使用 BC4 格式来降低文件大小,但同时保持质量)。
    在这里插入图片描述

    关于 iOS 的注意事项
    选择默认的纹理压缩设置 (PVRTC) 可获得更大的兼容性。如果您的应用程序不包含 OpenGL ES 2 支持,则可以选择一种 ASTC 格式。这些格式提供更好的质量和灵活性,并且压缩速度比 PVRTC 快。
    关于 Android 的注意事项
    在这里插入图片描述
    Unity纹理压缩的说明
    Unity纹理压缩时的一些注意事项和规范
    纹理贴图的类型
    关于android和astc的支持情况
    几种常见纹理的原理

二、渲染纹理(Render Texture)

渲染纹理__是在运行时创建和更新的特殊类型的__纹理。要使用渲染纹理,首先要创建一个新的渲染纹理,并指定一个摄像机以渲染到其中。然后,即可像使用常规纹理一样在__材质__中使用渲染纹理。Unity 标准资源中的水 (Water) 预制件便是实际使用渲染纹理进行实时反射和折射的一个示例。

三、自定义渲染纹理
自定义渲染纹理是渲染纹理的扩展,允许用户使用着色器轻松更新相关纹理。这对于实现各种类型的复杂模拟(例如焦散、雨水效果的波纹模拟、墙上的液体喷溅等)非常有用。此外,它还提供脚本和着色器框架,从而协助进行更复杂的配置,如部分或多通道更新、改变更新频率等。

要使用自定义渲染纹理,必须创建新的自定义渲染纹理资源并为其分配材质。然后,此材质将根据各种参数更新纹理的内容。再然后,就像常规纹理一样,可将自定义渲染纹理分配给任何类型的材质,甚至可用于另一个自定义渲染纹理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值