本页将介绍 Unity 中光照的工作方式。
Unity 中光照的工作方式类似于光在现实世界中的情况。Unity 使用详细的光线工作模型来获得更逼真的结果,并使用简化模型来获得更具风格化的结果。
直射光是发出后照射到表面一次再被直接反射到传感器(例如眼睛的视网膜或摄像机)中的光。间接光是最终反射到传感器中的所有其他光线,包括多次照射到表面的光线和天光。为了获得逼真的光照效果,需要模拟直射光和间接光。
Unity 可以计算直接光照和/或间接光照。Unity 使用什么光照技术取决于项目的配置方式。
实时光照是指 Unity 在运行时计算光照。烘焙光照是指 Unity 提前执行光照计算并将结果保存为光照数据,然后在运行时应用。在 Unity 中,项目可以使用实时光照、烘焙光照或两者的混合(称为混合光照)。
有关配置 Light 组件以提供实时、烘焙或混合光照的信息,请参阅光源模式。
全局光照是对直接和间接光照进行建模以提供逼真光照效果的一组技术。Unity 有两个全局光照系统。
烘焙全局光照系统包括光照贴图、光照探针和反射探针。所有渲染管线均支持烘焙全局光照 (Baked Global Illumination) 系统。每个功能的文档中指出了烘焙全局光照系统中该功能的渲染管线支持情况。
实时全局光照系统包括使用 Enlighten 的实时全局光照,并为光照探针增加了额外功能。内置渲染管线支持实时全局光照。高清渲染管线 (HDRP) 和通用渲染管线 (URP) 不支持实时全局光照系统。请注意,目前已弃用 Enlighten,很快就会从 Unity 中删除实时全局光照系统。想了解更多相关信息,请参阅 Unity 博客。
Creating cookies for the Built-in Render Pipeline
根据项目使用的渲染管线,Unity 在 Light Inspector 中显示不同的属性。
属性: | 功能: |
---|---|
Type | 当前的光源类型。可选值为 Directional、Point、Spot 和 Area。有关这些值的信息,请参阅光源类型。 |
Range | 定义从对象中心发出的光线的行进距离(仅限__点光源__和__聚光灯__)。 |
Spot Angle | 定义聚光灯锥形底部的角度(以度为单位)(仅限__聚光灯__)。 |
Color | 使用拾色器来设置发光的颜色。 |
Mode | 指定光源模式。可选模式为 Realtime、Mixed 和 Baked。有关这些值的信息,请参阅光源模式。 |
Intensity | 设置光源的亮度。**方向光__的默认值为 0.5。点光源、**聚光灯__或__面光源__的默认值为 1。 |
Indirect Multiplier | 使用此值可改变间接光的强度。如果将 Indirect Multiplier 设置为低于 1 的值,每次反弹都会使散射光变得更暗。大于 1 的值使光线在每次弹射之后更明亮。例如,将阴暗处的阴暗面(例如洞穴内部)变亮到能够清晰可见,这个非常有用。如果要使用实时全局光照,但是希望限制单一实时光源以便它只发出直射光,请将其 Indirect Multiplier 设置为 0。 |
属性: | 功能: |
---|---|
Shadow Type | 决定此光源投射生硬阴影、柔和阴影还是根本不投射阴影。生硬阴影 (Hard Shadows) 会产生锐边的阴影。与__柔和阴影 (Soft Shadows)__ 相比,生硬阴影 (Hard Shadows) 不是特别逼真,但涉及的处理工作较少,并且在许多使用场合中是可接受的。此外,柔和阴影 (Soft Shadows) 往往还会减少阴影贴图中的“块状”锯齿效果。 |
Baked Shadow Angle | 如果 Mode 设置为 Baked 或 Mixed,Type 设置为 Directional__,且 Shadow Type__ 设置为 Soft Shadows__,此属性将为阴影边缘添加一些人工柔化,使其看起来更自然。 | | Baked Shadow Radius| 如果 Mode__ 设置为 Baked 或 Mixed,Type 设置为 Point 或 Spot__,且 Shadow Type__ 设置为 Soft Shadows__,此属性将为阴影边缘添加一些人工柔化,使其看起来更自然。 | | Realtime Shadows| 这些属性在 Mode__ 设置为 Realtime 或 Mixed 且 Shadow Type 设置为 Hard Shadows 或 Soft Shadows 时可用。使用这些属性可控制实时阴影渲染设置。 |
Strength | 使用滑动条来控制此光源所投射阴影的暗度(以 0 和 1 之间的值表示)。默认情况下,此值设置为 1。 |
Resolution | 控制阴影贴图的渲染分辨率。较高的分辨率会增加阴影的保真度,但需要更多的 GPU 时间和内存使用量。 |
Bias | 使用滑动条来控制阴影被推离光源的距离(定义为 0 到 2 之间的值)。这可用于避免错误的自阴影瑕疵。请参阅阴影贴图和 Bias 属性以了解更多信息。默认情况下,该值设置为 0.05。 |
Normal Bias | 使用滑动条来控制阴影投射面沿着表面法线收缩的距离(定义为 0 到 3 之间的值)。这可用于避免错误的自阴影瑕疵。请参阅关于阴影贴图和 Bias 属性的文档以了解更多信息。默认情况下,该值设置为 0.4。 |
Near Plane | 使用滑动条来控制渲染阴影时近裁剪面的值,定义为介于 0.1 和 10 之间的值。此值被限制为光源的 Range 属性的 0.1 个单位或 1%(以较低者为准)。默认情况下,该值设置为 0.2。 |
属性: | 功能: |
---|---|
Cookie | 指定用于投射阴影的纹理遮罩(例如,为光源创建轮廓或图案光照)。 |
Draw Halo | 勾选此框可绘制直径等于 Range 值的光源的球形光环 (Halo)。您还可以使用 Halo 组件来实现此效果。请注意,除了光源 (Light) 组件中的光环外,还绘制 Halo 组件,并且 Halo 组件的 Size 参数将确定其半径,而不是直径。 |
Flare | 如果要设置光晕在光源位置渲染,请将资源置于此字段中以用作其源。 |
Render Mode | 使用此下拉选单来设置所选光源的渲染优先级。这会影响光照保真度和性能。 |
Auto | 在运行时确定渲染方法,具体取决于附近光源的亮度和当前的 Quality 设置。 |
Important | 光源始终以像素质量为单位进行渲染。Important 模式仅用于最显著的视觉效果(例如,玩家汽车的前照灯)。 |
Not Important | 光源以快速、顶点/对象模式进行渲染。 |
Culling Mask | 使用此属性可选择性排除对象组,使其不受光源影响。有关更多信息,请参阅层。 |
如果创建包含 Alpha 通道的纹理并将其分配给光源的 Cookie 变量,则会从光源投射剪影。剪影的 Alpha 遮罩会调制光源亮度,从而在表面上产生亮点和暗点。是为场景增加复杂性或氛围的好方法。
顶点光照 (VertexLit) 着色器无法显示剪影或阴影。
请注意,使用前向渲染时,会对带有剪影的方向光禁用阴影。在此情况下,可以编写自定义着色器来启用阴影;请参阅关于编写表面着色器的文档以了解更多详细信息。
与面光源一样,发光材质在其表面区域发光。它们有助于在场景中反射光线,并且在游戏过程中可以更改颜色和强度等相关属性。虽然实时全局光照不支持面光源,但使用发光材质仍可实现类似的实时柔和光照效果。
“Emission”是标准着色器的属性,它允许场景中的静态对象发光。默认情况下,“Emission”的值设置为零。这意味着使用标准着色器指定材质的对象不会发光。
发光材质没有范围值,但发出的光同样将以方差速率衰减。只有 Inspector 中标记为“Static”或“Lightmap Static”的对象才会接受发光材质的光。同样,应用于非静态或动态几何体(例如角色)的发光材质将不会影响场景光照。
然而,即使发光量高于零的材质对场景光照没有影响,它们仍然会在屏幕上明亮发光。通过从标准着色器的“Global Illumination”Inspector 属性中选择“None”,也可以获得这种效果。像这样的自发光材质可用于产生诸如氖灯或其他可见光源之类的效果。
发光材质仅直接影响场景中的静态几何体。如果您需要动态或非静态几何体(如角色)接受发光材质发出的光,则必须使用光照探针。
环境光(也称为漫射环境光)是场景周围存在的光,并非来自任何特定的光源对象。它可以是场景整体外观和亮度的重要影响因素。
环境光在许多情况下都很有用,具体取决于您选择的艺术风格。一个例子是明亮的卡通风格渲染,其中可能不需要暗阴影,或者可能要将光照手绘成纹理。如果您需要在不调整单个光源的情况下增加场景的整体亮度,环境光也很有用。
可在 Lighting 窗口中找到环境光设置。
阴影为场景添加了一定程度的深度和真实感,因为它们可以显示对象的比例和位置,否则对象看起来显得扁平。在 Unity 中,光源可将游戏对象的阴影投射到其自身的其他部分或附近的游戏对象上。
Unity 使用一种称为阴影贴图的技术来渲染实时阴影。
阴影贴图使用称为“阴影贴图”的纹理。阴影贴图类似于深度纹理。光源生成阴影贴图的方式与摄像机生成深度纹理的方式类似。假设摄像机与光源位于相同的位置,则摄像机无法看到的场景区域与光源的光线无法到达的场景区域相同;因此,这些区域处于阴影中。
Unity 会在阴影贴图中填充与光线在射到表面之前传播的距离有关的信息,然后对阴影贴图进行采样,以便计算光线射中的游戏对象的实时阴影。
有关阴影贴图的更多信息,请参阅关于阴影贴图 (shadow mapping) 的 Wikipedia 页面。
为了计算阴影贴图的分辨率,Unity 会进行以下工作:
1.确定光源可以照亮的屏幕视图区域。方向光可以照亮整个屏幕。对于聚光灯和点光源,该区域是光源边界形状(点光源为球体,聚光灯为锥体)在屏幕上的投影。投影形状在屏幕上具有宽度和高度(以像素为单位);然后采用这两个值中的较大者。这个值就称为光源的像素大小。
2.确定阴影质量乘数。为此,Unity 采用 Shadow Resolution 设置(在 Quality Settings 窗口中进行设置)。质量设置对应于以下值: - 非常高:1.0 - 高:0.5 - 中:0.25 - 低:0.125 3.执行以下计算,然后将结果确定为最大大小:
光源类型: | 公式: | 最大分辨率(以像素为单位): |
---|---|---|
Directional | NextPowerOfTwo (像素大小 * 阴影质量乘数 * 3.0) | 当阴影分辨率的质量为非常高时并且/或者如果 GPU 的 RAM 为 512MB 或更高,最高分辨率为 4096 x 4096,否则为 2048 x 2048。 |
聚光灯 | NextPowerOfTwo (像素大小 * 阴影质量乘数 * 2.0) | 如果 GPU 的 RAM 为 512MB 或更高,最高分辨率为 2048 x 2048,否则为 1024 x 1024。 |
点光源 | NextPowerOfTwo (像素大小 * 阴影质量乘数 * 1.0) | 如果 GPU 的 RAM 为 512MB 或更高,最高分辨率为 1024 x 1024,否则为 512 x 512。 |
点光源的大小下限比其他类型的大,因为它们对阴影使用立方体贴图。这意味着此分辨率下的六个立方体贴图面必须同时保存在视频内存中。渲染它们的成本也非常高,因为潜在的阴影投射物可能需要渲染到所有六个立方体贴图面中。
在内置渲染管线中,可以通过将 Light.shadowCustomResolution 属性设置为大于 0 的值来设置光源阴影贴图的分辨率。当该值大于 0 时,Unity 对所有光源类型都会执行以下计算:
NextPowerOfTwo (shadowCustomResolution)
然后会根据光源类型和硬件来确定最大分辨率,如上表所示。
注意,仅在内置渲染管线中支持 shadowCustomResolution
属性。高清渲染管线 (HDRP) 或通用渲染管线 (URP) 不支持它。
可以使用 Inspector 为每个 Light 组件配置实时阴影和烘焙阴影设置。
场景中的每个网格渲染器 (Mesh Renderer) 还具有 Cast Shadows 和 Receive Shadows 属性,必须根据需要启用它们。
通过从下拉菜单中选择 On 启用 Cast Shadows__,即可启用或禁用网格的阴影投射。或者,选择 Two Sided__ 以允许表面的任一面投射阴影(因此在进行阴影投射时会忽略背面剔除),或选择 Shadows Only 以允许不可见的游戏对象投射阴影。
使用 Shadow Distance 属性可以确定 Unity 渲染实时阴影的最大距离(与摄像机之间的距离)。
游戏对象距摄像机的距离越远,产生的阴影就越不明显。这有两个原因:一个原因是阴影在屏幕上看起来更小,另一个原因是远处的游戏对象通常不是人们关注的焦点。可以通过为远处的游戏对象禁用实时阴影渲染来利用此原理。这样可以节省浪费的渲染操作,并可以提高运行时性能。此外,没了远处阴影后,场景通常看起来更好。
如果当前摄像机远平面小于阴影距离,Unity 将使用摄像机远平面而不是阴影距离。
要掩盖超出阴影距离的缺失阴影,可以使用诸如雾效之类的视觉效果。
在内置渲染管线中,请在项目的质量设置 (Quality Settings) 中设置 Shadow Distance 属性。
在通用渲染管线 (URP) 中,请在通用渲染管线资源中设置 Shadow Distance 属性。
在高清渲染管线 (HDRP) 中,请为每个体积 (Volume) 设置 Shadow Distance 属性。
如果场景使用 Shadowmask 光照模式,则 Unity 会使用光照探针或阴影遮罩纹理来渲染从混合光源产生的超出阴影距离的阴影。还可以配置 Unity 如何渲染超出阴影距离的阴影。
硬阴影比软阴影省性能。
每个模型可以在MeshRenderer个性化,Plane是只有单面的,如果需要另外一面就需要启用双面阴影了。
不关心光的时候,把这个点了,不然渲染光照很费性能
Enlighten系统弃用 新的GI叫渐进光照贴图
烘培只是生成贴图,然后贴到物体上面去,造成一个有光的效果,实际上。。如果这货用在动态物体上,那么这货的阴影之类的就不会跟着人变化而变化,节省性能的时候就是阴影抽象化,比如用地下一个圆圈代替人的阴影。
下面单词略微会优点变化,但是大概一致
只能烘焙,因为这货很复杂,很消耗性能
很多时候 需要搭配Light Probe Group(光源侦测),不然动态物体走过去会没反应
音频源 (Audio Source) 在场景中播放音频剪辑。剪辑的音源可通过音频监听器或者混音器播放。音频源可播放任何类型的音频剪辑,可设置以 2D、3D 或混合 (SpatialBlend) 模式播放。音频可在扬声器(立体声到 7.1)之间扩散 (Spread),并在 3D 和 2D 之间变换 (SpatialBlend)。可通衰减曲线控制传播距离。此外,如果监听器位于一个或多个混响区内,则会将混响应用于音频源。可对每个音频源应用单独的滤波器,以获得更丰富的音频体验。有关更多详细信息,请参阅音频效果。
*属性:* | *功能:* |
---|---|
Audio Clip | 参考将要播放的声音剪辑文件。 |
Output | 默认情况下,剪辑将直接输出到场景中的音频监听器 (Audio Listener)。使用此属性可以更改为将剪辑输出到混音器 (Audio Mixer)。 |
Mute | 如果启用此选项,则为静音。 |
Bypass Effects | 可快速“绕过”应用于音频源的滤波器效果。启用/停用效果的快捷方式。 |
Bypass Listener Effects | 这是快速启用/停用所有监听器的快捷方式。 |
Bypass Reverb Zones | 这是快速打开/关闭所有混响区的快捷方式。 |
Play On Awake | 如果启用此选项,声音将在场景启动时开始播放。如果禁用此选项,需要通过脚本使用 Play() 命令启用播放。 |
Loop | 启用此选项可在__音频剪辑__结束后循环播放。 |
Priority | 从场景中存在的所有音频源中确定此音频源的优先级。(Priority值为0 表示优先级最高。值为256, 表示优先级最低。默认值为 128)。对于音轨值应为 0,避免被意外擦除。 |
Volume | 声音的大小与离__音频监听器__的距离成正比,以米为世界单位。 |
Pitch | 由于__音频剪辑__的减速/加速导致的音高变化量。值 1 表示正常播放速度。 |
Stereo Pan | 设置 2D 声音的立体声位置。 |
Spatial Blend | 设置 3D 引擎对音频源的影响程度。 |
Reverb Zone Mix | 设置路由到混响区的输出信号量。该量是线性的,范围在 0 到 1 之间,但允许在 1到1.1 范围内进行 10dB 放大,这对于实现近场和远距离声音的效果很有用。 |
*3D Sound Settings* | 与 Spatial Blend 参数成正比应用的设置。 |
Doppler Level | 确定将对此音频源应用多普勒效果的程度(如果设置为 0,则不应用任何效果)。 |
Spread | 在发声空间中将扩散角度设置为 3D 立体声或多声道。 |
Min Distance | 在 MinDistance 内,声音将保持可能的最大响度。在 MinDistance 之外,声音将开始减弱。增加声音的 MinDistance 属性可使声音在 3D 世界中“更响亮”,而降低此属性则可以让声音在 3D 世界中“更安静”。 |
Max Distance | 声音停止衰减的距离。超过此距离之后,声音将保持与监听器之间距离 MaxDistance 单位时的音量,不再衰减。 |
Rolloff Mode | 声音衰减的速度。此值越高,监听器必须越接近才能听到声音。(这取决于图)。 |
- Logarithmic Rolloff | 靠近音频源时,声音很大,但离开对象时,声音降低得非常快。 |
- Linear Rolloff | 与音频源的距离越远,听到的声音越小。 |
- Custom Rolloff | 音频源的音频效果是根据曲线图的设置变化的。 |
有三种曲线模式:对数 (Logarithmic Rolloff)、线性 (Linear Rolloff) 和自定义 (Custom Rolloff)。可能通过编辑音量距离曲线来自定义音效曲线,如下所述。如果音量距离设置为对数或者线性情况下,尝试去编辑,类型自动变为自定义曲线。
可按音频源与音频监听器之间距离的函数形式修改音频的若干属性。
Volume:随着距离变化的幅度(0.0 到 1.0)。
Spatial Blend:2D(原始声道映射)到 3D(所有声道下混为单声道并根据距离和方向衰减)。
Spread:随着距离变化的角度(0.0 到 360.0 度)。
Low-Pass(仅当低通滤波器 (LowPassFilter) 附加到音频源时):随着距离变化的截止频率(22000.0 到 10.0)。
Reverb Zone:路由到混响区的信号量。请注意,音量属性以及距离和方向衰减首先应用于信号,因此会同时影响直接信号和回响信号。
音量 (Volume)、空间混合 (Spatial Blend)、扩散 (Spread)、低通 (Low-Pass) 音频滤波器和混响区混合 (Reverb Zone Mix) 的距离函数。当前与音频监听器的距离在图中用红色竖线标记。
要修改距离函数,可直接编辑曲线。有关更多信息,请参阅编辑曲线指南。
如果不为音频源指定__音频剪辑__,音频源不起作用。剪辑音源是将要播放的音源文件。音频源就像一个控制器,用于启动和停止该剪辑音源的播放,以及修改其他音频属性。
要创建新的音频源,请执行以下操作:
1.将音频文件导入到 Unity 项目中。这些文件成了剪辑音源。 1.从菜单栏中选择 GameObject > Create Empty。 1.在选中新的游戏对象之后,选择 Component > Audio > Audio Source。 1.在 Inspector 中,找到 Audio Source 组件上的 Audio Clip 属性并分配一个剪辑,方法是从 Project 窗口中拖动一个剪辑,或者单击 Inspector 属性右侧的小圆圈图标,然后从列表中选择一个剪辑。
**注意:**如果只想要为 Assets 文件夹中的一个__音频剪辑__创建__音频源__,则可以将该剪辑音源拖动到 Scene 视图中,随后将自动为其创建一个包含__音频源__组件的游戏对象。如果将剪辑音源拖动到现有游戏对象上,则会附加剪辑以及新的__音频源__(如果还没有音频源)。如果对象已经有了__音频源__,则新拖放的剪辑音源将替换音频源当前使用的剪辑音源。
如果游戏缺少某种音频,无论是背景音乐还是其他音效,那么游戏是不完整的。Unity 的音频系统既灵活而又强大。它可以导入大多数标准音频文件格式,精通于在3D 空间中播放声音,还可根据需要提供其他效果(比如回声和滤波)。Unity 还可以通过用户机器上任何可用麦克风来录制音频,以便在游戏过程中进行使用或存储和传输。
在现实生活中,人们听到的声音是由物体发出来的。声音被感知的方式取决于许多因素。倾听者可以粗略地分辨出声音来自哪个方向,根据音量和音色判断距离。由于多普勒效应,快速移动的声源(如坠落的炸弹或过往的警车)会随着移动而改变音高。此外,周围环境也会影响声音的反射方式,因此洞穴内的声音会产生回声,但相同的声音在露天环境中却不会产生回声。
为了模拟位置的影响,Unity 要求声音源来自附加到对象的__音频源__。然后,发出的声音由附加到另一个对象(通常是主摄像机)上的__音频监听器__拾取。Unity 然后可以模拟音频源与监听器物体之间的距离和位置的影响,并相应地播放给用户。此外还使用源对象和监听器对象的相对速度来模拟多普勒效应以增加真实感。
Unity 无法仅根据场景几何体来计算回声,但您可以通过向对象添加__音频滤波器__来模拟回声。例如,您可以针对应该来自洞穴内的声音应用“回声”滤波器。如果对象在具有猛烈回声的地方来回移动,可以在场景中添加__混响区 (Reverb Zone)__。例如,游戏中驾车穿过隧道。如果在隧道内放置一个混响,那么汽车的发动机声音会在汽车驶入时开始回响,当汽车从另一侧驶出时,回声会消失。
Unity 混音器 (Audio Mixer) 允许您混合各种音频源,对音频源应用效果,以及执行母带制作 (mastering)。
音频源、音频监听器、混音器、音频效果和混响区的手册页中提供了有关可用于获得正确效果的众多选项和参数的信息。
Unity 可使用与其他资源相同的方式导入 AIFF、WAV、MP3 和 Ogg 格式的音频文件,只需要将文件拖入 Project 面板即可。导入音频文件会创建音频剪辑,然后可以将音频剪辑拖动到音频源中,或通过脚本来使用音频剪辑。音频剪辑参考页面提供了有关音频文件的可用导入选项的更多详细信息。
对于音乐,Unity 还支持音轨模块,这些模块使用短音频样本作为“编曲”,然后进行安排以播放曲调。可以从 .xm、.mod、.it 和 .s3m 文件导入音轨模块,但与普通音频剪辑的其他使用方式大致相同。
Unity 可以通过脚本来访问计算机的麦克风,并可通过直接录音来创建音频剪辑。Microphone 类提供了一个简单的 API 来查找可用的麦克风,查询麦克风的功能,以及开始和结束录制会话。麦克风的脚本参考页面中提供了音频录制的更多信息和代码示例。
与网格或纹理一样,__音频文件__资源的工作流程非常流畅且可靠。Unity 可以导入几乎任何常见文件格式,但在处理音频文件时,有一些细节值得注意。
自 Unity 5.0 开始,音频数据与实际音频剪辑 (AudioClip) 分离。音频剪辑仅仅是引用包含音频数据的文件,音频剪辑(AudioClip)导入器中有各种选项组合用于确定在运行时如何加载剪辑。这意味着您可以非常灵活地确定哪些音频资源应始终保留在内存中(因为您可能无法预测音频资源的播放频率和速度,例如脚步、武器和撞击的声音),而哪些资源可以根据需要加载,或者随着玩家通关而逐渐加载(语音、背景音乐、氛围循环音乐等等)。
在 Unity 中对音频进行编码时,音频在磁盘上的主要存储选项包括 PCM、ADPCM 或 Compressed。此外,还有几种特定于平台的格式,但这些格式的工作方式都类似。Unity 在导入音频时支持大部分常见格式(请参阅以下列表),并在将某个音频文件添加到项目中后,Unity 将导入此音频文件。默认模式为 Compressed,此模式下的音频数据压缩格式为 Vorbis/MP3(对于独立平台和移动平台)或 HEVAG/XMA(对于 PS Vita 和 Xbox One)。
有关压缩格式以及音频数据编码时可以使用的其他选项的详细描述,请参阅音频剪辑文档。
导入到 Unity 中的任何音频文件都可以作为__音频剪辑__实例在脚本中获取,因此可让音频系统在游戏运行时能够访问经过编码的音频数据。游戏可以在实际音频数据加载之前通过音频剪辑来访问有关音频数据的元数据信息。之所以能实现这一点,是因为导入过程已从编码的音频数据中提取了各种信息,例如长度、声道数和采样率,并将其存储在音频剪辑中。这在创建自动对话或音乐排序系统时可能很有用,因为音乐引擎可以在实际加载数据之前使用关于长度的信息来安排音乐播放。此外,由于只需将某一时间需要的音频剪辑保留在内存中,因此还有助于减少内存使用量。
*格式* | *扩展名* |
---|---|
MPEG layer 3 | .mp3 |
Ogg Vorbis | .ogg |
Microsoft Wave | .wav |
音频交换文件格式 | .aiff / .aif |
Ultimate Soundtracker 模块 | .mod |
Impulse Tracker 模块 | .it |
Scream Tracker 模块 | .s3m |
FastTracker 2 模块 | .xm |
音轨模块本质上是以编程方式建模、组织和排序的音频样本包。这个概念是在 20 世纪 80 年代引入的(主要与 Amiga 计算机相关),并从游戏开发和演示文化的早期就开始流行。
音轨模块文件在很多方面类似于 MIDI 文件。音轨是包含有关何时播放乐器以及音高和音量的信息的乐谱,并且由此可以重新创建原始乐曲的旋律和节奏。但是,MIDI 的缺点在于声音取决于音频硬件中可用的音库,因此 MIDI 音乐在不同的计算机上听起来可能不同。相比之下,音轨模块包括高质量的 PCM 样本,无论使用何种音频硬件,都能确保获得相似的体验。
Unity 支持四种最常见的模块文件格式,即 Impulse Tracker (.it)、Scream Tracker (.s3m)、扩展模块文件格式 (.xm) 和原始模块文件格式 (.mod)。
音轨模块文件不同于主流 PCM 格式(.aif、.wav、.mp3 和 .ogg)之处在于音轨模块文件可以非常小,但没有相应的音质损失。单个声音样本可以在音高和音量方面进行修改(并可应用其他效果),因此它基本上充当“乐器”,可以播放曲调,但不会产生将整个乐曲录制为样本的开销。因此,音轨模块适用于需要音乐但难以下载大型文件的游戏。
目前,创建和编辑音轨模块的最流行工具是适用于 OSX 的 MilkyTracker 和适用于 Windows 的 OpenMPT。有关更多信息和讨论,请参阅 2010 年 6 月发表的博客文章 Unity 中的 .mod (.mod in Unity)。