`
plmkome
  • 浏览: 41710 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

vision引擎中地形光照贴图介绍

阅读更多
引言
本章中,我们将探讨在处理地形时如何使用静态光照和 vLux 光照贴图。

光照贴图在很多场合下都是最合适的光照技术, 但也有一些缺点:
 
不能使用动态时间变化系统。
不适合大型游戏世界,因为光照贴图分辨率不足以覆盖大片区域。
   注:为每个区块使用单一光照贴图页面时,后一个缺点也可以避免。 但所产生的纹理会对内存占用造成显著影响,不管是在磁盘还是运行库中。 所以一般而言,建议为大型世界使用其他光照手段。
 
地形光照贴图属性
 
地形光照尺寸独立于 vLux 光照贴图尺寸设置,并提供基于单个页面或逐区块的尺寸选项。 从 vForge 图形列表中选择地形图形后,您就可以在光照属性部分打开 LightmapSize(光照贴图尺寸)属性。

LightmapSize(光照贴图尺寸): 指定为该地形计算出的光照贴图页面尺寸。
 
NoLightmapping(无光照贴图): 不使用光照贴图
SinglePage_256x256(单页 256×256): 分辨率设为 256 的单页光照贴图
SinglePage_512x512(单页 512×512): 分辨率设为 512 的单页光照贴图
SinglePage_1024x1024(单页 1024×1024): 分辨率设为 1024 的单页光照贴图
SinglePage_2048x2048(单页 2048×2048): 分辨率设为 2048 的单页光照贴图
PerSector_256x256(逐区块 256×256): 分辨率设为 256 的逐区块光照贴图
PerSector_512x512(逐区块 512×512): 分辨率设为 512 的逐区块光照贴图
PerSector_1024x1024(逐区块 1024×1024): 分辨率设为 1024 的逐区块光照贴图
PerSector_2048x2048(逐区块 2048×2048): 分辨率设为 2048 的逐区块光照贴图
SceneSpecificLightmaps(场景特定光照贴图): 当不同场景引用同一个地形时,决定了光照贴图是否在不同场景中通用。 如设为 False,则同样的光照贴图会被所有使用该地形的场景共享。
 
CastStaticShadows(投射静态阴影): 指示该地形是否应投射烘培到光照贴图和光照网格中的静态阴影。
 
LightInfluenceBitMask(光照影响位元蒙版): 指定应影响该地形的静态和动态光照的位元蒙版。 见光源中相应的世界影响蒙版属性。
 
   注:光照贴图仅作用于静态光照,所以,如果场景不含任何静态光照,则产生的光照贴图为纯黑。 户外场景中常用的静态光照之一是模拟日光的静态平行光照。
 
相关 vLux 设置
 大部分 vLux 设置完全不影响地形的光照贴图。 例如,如前文所述,页面尺寸来自地形图形,而非 vLux 设置。 要编辑光照的 vLux 设置,选择vForge菜单 → Static Lighting(静态光照) → Edit Settings(编辑设置):

vLux 设置章详细解释了所有 vLux 设置。 但我们还是在这里列出相关参数:
 
SuperSample(超采样): 对于所有光照贴图接收器,该参数定义了质量等级。
LightEquation(光照方程): 该类别的子属性也应用于地形。
GlobalAmbient(全局环境): 全局环境色会被添加到地形上。
BumpLightmaps(凹凸光照贴图): 仅在需要法线贴图时有效。 见下文。
 
环境光对比天空光照
如果没有任何环境光,背对平行光照的地形斜坡会完全黑暗。 为了实现大气的真实光照散射,vLux 提供了两种选择:
 
全局环境色: 该色彩会被添加到光照贴图。 其预计算速度当然很快,但看起来不十分真实。 根本问题在于会失去光照对比度。
天空光照: 这是全局环境色的高级版本,因为还为每个光照接收器额外评估了天空半球的可见部分。 天空光照计算可能需要很长时间,具体取决于设置。
 
计算光照贴图
 地形光照贴图的计算方式与任何其他光照贴图一样,因为它依然使用 vLux。 要开始光照贴图计算流程,点击主工具栏按钮图标或选择vForge菜单 → Static Lighting(静态光照) → Calculate Lighting(计算静态光照)。 

查看光照贴图结果
vLux 完成地形光照贴图计算后,可关闭指向性预览模式查看其结果。 该预览模式启用时,会提供用于编辑的动态平行光照。 关闭该模式即可看到您的新光照贴图。

    提示:为了从平行光照获得所见即所得地形光照,首先在无光照时计算一张光照贴图。 这会将地形转黑,然后将您的静态平行光照添加到场景中。 默认设置下,该静态光照将作为带有预烘培黑色光照贴图的动态光照混合使用,旋转光照直到您感到满意,然后重新计算光照贴图。
 
与动态预览光照进行比较,如启用了自荫蔽,光照贴图结果也会显示静态的地形自荫蔽。

光照贴图技术的一个优势是可以烘培不限数量的静态光照,而不会造成额外的性能或内存负担。

地形上的法线贴图
SDK 自带一个默认着色器,用于地形上每个纹理通道的凹凸光照贴图和法线贴图。 任何内置地形着色器都不使用高光纹理卡位。 下面是在地形上显示法线贴图的要求。
 
法线贴图通道
     每个细节纹理都需要一个法线贴图纹理文件:

      法线贴图着色器
    必须应用一个新着色器效果。 默认的 Terrain.Shaderlib 库中包含一个变体版效果,可将法线贴图纳入考量:

     在 vLux 中激活凹凸光照贴图
   因为静态照明几何体上的法线贴图需要凹凸光照贴图,vLux 设置中必须启用该选项:

      法线贴图仅在烘培模式中显示
     不在烘培模式下时,地形会以预览模式渲染(每个层分开),不会考虑法线贴图。 只有当切换到烘培模式(也就包括在导出的场景中),才会使用支持法线贴图的真实着色器:

   注:切换到烘培模式后,使用的细节纹理数量会减少到着色器可混合的最大限度(例如默认地形着色器的上限是 5 个细节纹理)。 所以,如果使用更多的细节纹理,您会注意到一部分通道消失了。 但是,零售版本中能看到的外观也和烘培模式一样。
 
待一切都设置妥当后切换到烘培模式,图像就会显示凹凸贴图:

植被阴影
对于实体图形或静态几何网格图形等标准图形,有个属性决定了这些几何网格是否应投射光照贴图阴影。 如果被标记为投射器,它们自然会在地形上投射光照贴图阴影。
还有一个绘制地形植被的类似设置。 可以为模型和 SpeedTree 类型的植被层启用静态阴影投射。 此外,还可指定可选的阴影投射几何网格,用于阴影投射。 该几何网格仅在 vLux 计算时临时使用,不会被运行库载入。

CastLightmapShadows(投射光照贴图阴影): 如启用,该植被类型被静态光照计算视为阴影投射器。 该选项应仅用于较大的模型。
 
CastDynamicShadows(投射动态阴影): 如启用,且使用动态光照,该植被类型会投射动态阴影。 该选项应谨慎使用,因为会影响到渲染性能。
 
CustomLightmapCasterMesh(自定义光照贴图投射器几何网格): 如果为该植被类型启用光照贴图阴影,则该几何网格定义了一个可选的、用于该光照贴图的低多边形几何网格。 这一几何网格不用于渲染。
 
 
为什么要为光照贴图阴影使用不同的模型?
 
有两个原因:
 
vLux 只能处理有限数量的多边形。 如果定义了数千个植被实例,则模型多边形总数会数倍于此,vLux 将无法处理。
 
SpeedTree 几何网格不能被 vLux 直接计算,因为该几何体依赖与镜头对齐的公告牌,不被 vLux 支持。 所以,对于 SpeedTree 植被,使用另一种投射器模型文件来替代是完全合理的。 如果不为 SpeedTree 植被指定投射器模型,它会使用水平公告牌来投射阴影。 如果 SpeedTree 工具中也没有指定以这些公告牌投射阴影,则该模型不会显示任何光照贴图阴影。
 
导出场景
如果已经被照亮一次,该场景必须被导出,才能在导出的 vscene 版本中应用光照贴图。

转自:projectanarchy中文社区

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics