- 用户指南
- Components
- 寻路
- 动画组件
- 资源组件
- 音频组件(AudioComponent)
- 音频侦听器(AudioListener)
- 音频源(AudioSource)
- 音频过滤器(AudioFilter)(仅限专业版)
- 混响区域(ReverbZone)
- 麦克风(Microphone)
- 物理组件(PhysicsComponent)
- 箱体碰撞体(BoxCollider)
- 胶囊碰撞体(CapsuleCollider)
- 角色控制器(CharacterController)
- 角色关节(CharacterJoint)
- 可配置关节(ConfigurableJoint)
- 恒定力(ConstantForce)
- 固定关节(FixedJoint)
- 铰链关节(HingeJoint)
- 网格碰撞体(MeshCollider)
- 物理材质(PhysicsMaterial)
- 刚体(Rigidbody)
- (SphereCollider)
- 弹簧关节(SpringJoint)
- 交互布(InteractiveCloth)
- 蒙皮布(SkinnedCloth)
- 车轮碰撞体(WheelCollider)
- 游戏对象(GameObject)
- 图像效果(ImageEffectScripts)
- 高光溢出和镜头光晕(BloomandLensFlare)
- 模糊(Blur)
- 相机运动模糊(MotionBlur)
- 颜色修正曲线(ColorCorrectionCurve)
- 颜色修正(ColorCorrection)
- 颜色修正查找纹理(ColorCorrectionLookupTexture)
- 对比度增强(ContrastEnhance)
- 对比度拉伸(ContrastStretch)
- 起皱(Crease)
- 视野深度(DepthofField)3.4
- 视野深度(DepthofField)
- 边缘检测(EdgeDetection)
- 鱼眼(Fisheye)
- 全局雾(GlobalFog)
- 发光(Glow)
- 灰度(Grayscale)
- 运动模糊(MotionBlur)
- 噪波和颗粒(NoiseAndGrain)
- 噪波(Noise)
- 屏幕叠加(ScreenOverlay)
- 棕褐色调(SepiaTone)
- 边缘检测效应
- 阳光照射(SunShaft)
- 屏幕空间环境光遮蔽(SSAO)(ScreenSpaceAmbientOcclusion(SSAO))
- 倾斜位移(TiltShift)
- 色调映射(Tonemapping)
- 旋转(Twirl)
- 渐晕(Vignetting)(和色差(ChromaticAberration))
- 状态同步详细信息
- 旋涡
- 设置管理器(SettingsManager)
- 网格组件(MeshComponents)
- 网络组
- 效果
- 渲染组件
- 变换组件(TransformComponent)
- UnityGUI组
- 向导
- 地形引擎指南(TerrainEngineGuide)
- 树木创建器指南
- 动画视图指南
- GUI脚本指南
- 网络参考指南
- 移动设备上的网络连接
- 高级网络概念
- Unity中的网络元素
- RPC详细信息
- NetworkLevelLoading
- 主服务器
- 最小化网络带宽
- 社交API
- 内置着色器指南
- Unity的后台渲染
- 着色器参考
- ShaderLab语法:Shader
- ShaderLab语法:Properties
- ShaderLab语法:子着色器(SubShader)
- ShaderLab语法:Pass
- ShaderLabsyntax:Color,Material,Lighting
- ShaderLab语法:剔除和深度测试(Culling&DepthTesting)
- ShaderLab语法:纹理组合器(TextureCombiners)
- ShaderLab语法:雾(Fog)
- ShaderLab语法:Alpha测试(Alphatesting)
- ShaderLab语法:混合(Blending)
- ShaderLab语法:通道标记(PassTags)
- ShaderLab语法:名称(Name)
- ShaderLab语法:绑定通道(BindChannels)
- ShaderLab语法:使用通道(UsePass)
- ShaderLab语法:GrabPass
- ShaderLab语法:子着色器标记(SubShaderTags)
- ShaderLab语法:回退(Fallback)
- ShaderLab语法:自定义编辑器(CustomEditor)
- ShaderLab语法:其他命令
- ShaderLab语法:Pass
- 高级ShaderLab主题
- ShaderLab内置值
- 其他
- 网络视图
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Mecanim 动画系统
- 动画状态机
- 混合树 (Blend Tree)
- 在 Mecanim 中使用动画曲线 (Animation Curves)(仅限专业版 (Pro))
- 循环动画片段
- Animation State Machine Preview (solo and mute)
- 动画参数
- 旧动画系统
- 使用类人动画
- 动画层
- 资源导入与创建
- 音轨模块
- 减少文件大小
- 光照贴图 UV
- 资源准备和导入
- 如何安装或升级标准资源 (Standard Assets)?
- FBX 导出指南
- 从 Maya 中导入对象
- 从 Cinema 4D 中导入对象
- 从 3D Studio Max 中导入对象
- 从 Cheetah3D 中导入对象
- 从 Modo 中导入对象
- 从 Lightwave 中导入对象
- 从 Blender 中导入对象
- 为优化性能建模角色
- 如何使用法线贴图 (NormalMaps)?
- 如何修正已导入模型的旋转?
- 程序材质
- 如何使用水?
- 分析器(仅限专业版)
- 绘制调用批处理
- 遮挡剔除(仅限专业版)
- Unity 中的高动态范围 (High Dynamic Range) 渲染
- 在 Unity 4 中使用 DirectX 11
- 文本场景文件格式(仅限专业版)
- 使用网络播放器模版
- 平台依赖编译
- 日志文件
- 首选项
- 粒子系统曲线编辑器
- 渐变编辑器
- 怎样制作网格粒子发射器?(旧粒子系统)
- 深入了解光照贴图
- 光照贴图快速入门
- 着色器
- 动画脚本(旧版)
- 自定义
- 布局模式
- 扩展编辑器
- 网络实例化
- 材质和着色器
- 如何使用细节纹理?
- 着色器:顶点和片段程序
- Unity 中的阴影
程序材质
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论