- 用户指南
- 资源商店 (Asset Store)
- 资源服务器 (Asset Server)(仅限团队许可证)
- 缓存服务器(仅限团队许可证)
- 幕后场景
- 创建游戏
- 运行时实例化预设 (Prefabs)
- 变换 (Transforms)
- 物理
- 添加随机的游戏元素
- 粒子系统(Particle Systems)
- Mecanim 动画系统
- 旧动画系统
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Sound (音频侦听器)
- 游戏界面元素
- 多玩家联网游戏
- iOS 开发入门
- Android 开发入门
- Blackberry 10 开发入门
- Metro:入门指南
- 本地客户端开发入门
- FAQ
- Advanced
- Vector Cookbook
- 资源包(仅限专业版)
- Graphics Features
- 资源数据库 (AssetDatabase)
- 构建播放器管道
- 分析器(仅限专业版)
- 光照贴图快速入门
- 遮挡剔除(仅限专业版)
- 相机使用技巧
- 运行时加载资源
- 通过脚本修改源资源
- 用程序生成网格几何体
- 富文本
- 在 Unity 工程 (Project) 中使用 Mono DLL
- 事件函数的执行顺序
- 移动优化实用指南
- Unity XCode 工程结构
- 优化图形性能
- 减少文件大小
- 理解自动内存管理
- 平台依赖编译
- 泛型函数
- 调试
- 插件(专业版/移动版特有功能)
- 文本场景文件格式(仅限专业版)
- 流媒体资源
- 启动时运行编辑器脚本代码
- 网络模拟
- VisualStudio C 集成
- 分析
- 检查更新
- 安装多版本 Unity
- 故障排除
- Unity 中的阴影
- Unity 中的 IME
- 对集成显卡进行优化
- 网络播放器 (Web Player) 部署
- 使用网络播放器中的信任链系统
程序材质
Unity 采用一种新的资源类型,即程序材质 (Procedural Materials)。其与标准材质 (Materials) 基本相同, 但有一点不同,其使用的纹理可在运行时生成,而非预先定义并存储。 通常,按程序生成纹理的脚本代码占用的存储和传输空间小于位图图像,因此程序材质 (Procedural Materials) 可帮助缩短下载时间。另外,生成脚本可含有参数,您可在运行时更改此类参数,以更改材质的可视属性。这些属性可以是从颜色变化到墙壁上的砖块大小等任何属性。这不仅意味着,单个程序材质 (Procedural Material) 可生成许多变体,还意味着可以将材质逐帧制作为动画。您还可制作出许多非常有趣的视觉效果 - 设想一个人物物逐渐变成石头或酸性物质一接触地面就腐蚀地面的场景。
Unity 的程序材质系统是基于 Allegorithmic 开发的行业标准产品 Substance。
支持的平台
在 Unity 中,独立系统和网页播放器发布目标(Windows 和 Mac OS X)完全支持程序材质 (Procedural Materials)。对于所有其他平台,Unity 会在发布期间将其预渲染或烘焙 成普通材质 (Materials)。尽管这明确否定了程序生成在运行时具有的优势,但仍有助于在编辑器的基本材质上创建变体。
将程序材质 (Procedural Materials) 添加至工程
程序材质 (Procedural Materials) 是作为 Substance 存档 (Substance Archive) 文件 (SBSAR) 提供 ,您可使用导入任何其他资源(直接拖放至资源文件夹 (Assets folder) 或使用 资源 (Assets)->导入新资源 (Import New Asset)...)一样的方式导入这些文件。 Substance 存档资源 (Archive asset) 包含一种或多种程序材质 (Procedural Materials) 和所需的所有脚本和图像。不支持未发布的 SBS 文件。
尽管执行步骤不同,但 Unity 会像处理任何其他材质 ( Material) 一样处理程序材质 (Procedural Material)。例如,要将程序材质 (Procedural Material) 分配到网格,您只需将其拖放至网格,和任何其他材质 (Material) 的处理方式完全相同。
程序属性 (Procedural Properties)
每种程序材质 (Procedural Material) 都是可生成特定类型的材质的自定义脚本。这些脚本与 Unity 脚本相似,因为这些脚本可含有在检视器中公开分配的变量。 例如,"砖墙 (Brick Wall)" 程序材质 (Procedural Material) 可公开属性,其可让您设置砌好的砖列数量、砖块颜色和砂浆颜色。 这可从单一资源获得无限数量的材质变体。运行时,您也可在脚本中设置这些属性,方法与设置 MonoBehaviour 脚本的公共变量大致相同。
程序材质 (Procedural Materials) 也可用于制作复杂的纹理动画。例如,制作动画描述钟表指针移动或蟑螂在地板上爬行的画面。
从零开始创建程序材质 (Procedural Materials)
程序材质 (Procedural Materials) 可与任意按程序生成的纹理和存储的位图组合配合使用。另外,使用前可对位图图像进行筛选和修改。不像标准材质 (Material),程序材质 (Procedural Material) 可使用 SVG 文件格式的矢量图像,其纹理不受分辨率影响。
可用于从头开始创建程序材质 (Procedural Materials) 的设计工具使用基于节点的可视编辑器,与艺术工具中找到的编辑器相似。略知皮毛或完全不懂编码的设计师也可创建程序材质。以 Allegorithmic 的 Substance Designer 的一张截图为例,其显示正在创建的"砖墙"程序材质 (Procedural Material):
获取程序材质 (Procedural Materials)
Unity 的程序材质 (Procedural Materials) 以行业标准 Substance 产品为依据,您可从 Internet 资源中获取可用的程序材质 (Procedural Materials) 资源,包括 Unity 自有的资源商店 (Asset Store)。Allegorithmic Substance Designer 可用于创建程序材质 (Procedural Materials),但也有其他采用 Substance 技术的应用程序(例如 3D 建模应用程序)的性能可与 Unity 相媲美。
性能和优化
程序材质 (Procedural Materials) 本身占用的存储空间少于位图图像。其缺点是以脚本为基础,运行这些脚本生成材质需要一些 CPU 和 GPU 资源。程序材质 (Procedural Materials) 越复杂,其运行期的开销越大。
程序材质 (Procedural Materials) 在以下情况下支持缓存:自生成以来,材质仅在其参数发生变化时,才会更新。此外,有些材质可能含有许多理论上可更改但在运行时很少需要更改的属性。这种情况下,您可以告知 Unity 无需更改的变量,以帮助其在先前生成的材质中缓存尽可能多的数据。通常,这将大幅提升性能。
程序材质 (Procedural Materials) 可以是系统上隐藏的变量, 如运行时间或程序材质 (Procedural Materials) 实例数量(此数据可用于制作动画)。更改这些变量的值后仍可强迫程序材质 (Procedural Material) 进行更新,即使参数没有发生明显变化。程序材质 (Procedural Materials) 也可只作用编辑器中的辅助工具(如通过设置程序材质 (Procedural Material) 的参数,然后进行"烘焙",生成标准材质 (Material))。 这将去除生成材质的运行时开销,但自然无法在设置游戏期间更改烘焙的材质或将其用于制作动画。
使用 Substance 播放器分析性能
由于程序材质 (Procedural Material) 的复杂程度会影响运行时的性能, Allegorithmic 使用Substance 播放器 (Player)工具分析功能。您可在Allegorithmic 网站 免费下载此工具。
Substance 播放器 (Player) 将相同的优化渲染引擎用作集成到 Unity 的播放器, 因此,Unity 中的渲染性能优于 Substance Designer。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论