`
izuoyan
  • 浏览: 9223703 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

快速LightMap烘焙

阅读更多

什么是烘焙? 简单地说, 就是把物体光照的明暗信息保存到纹理上, 实时绘制时不再进行光照计算, 而是采用预先生成的光照纹理(lightmap)来表示明暗效果. 那么, 这样有什么意义呢?

好处:

  1. 由于省去了光照计算, 可以提高绘制速度
  2. 对于一些过度复杂的光照(如光线追踪, 辐射度, AO等算法), 实时计算不太现实. 如果预先计算好保存到纹理上,这样无疑可以大大提高模型的光影效果
  3. 保存下来的lightmap还可以进行二次处理, 如做一下模糊, 让阴影边缘更加柔和

当然, 缺点也是有的:

  1. 模型额外多了一层纹理, 这样相当于增加了资源的管理成本(异步装载, 版本控制, 文件体积等). 当然, 也可以选择把明暗信息写回原纹理, 但这样限制比较多, 如纹理坐标范围, 物体实例个数...
  2. 模型需要隔外一层可以展开到一张纹理平面的UV(范围只能是[0,1], 不能重合). 如果原模型本身就是这样, 可以结省掉. 但对于大多数模型来说, 可能会采用WRAP/MIRROR寻址, 这只能再做一层, 再说不能强制每个模型只用一张纹理吧? 所以, lightmap的UV需要美术多做一层, 程序展开算法这里不提及....
  3. 静态的光影效果与对动态的光影没法很好的结合. 如果光照方向改变了的话, 静态光影效果是无法进行变换的. 而且对于静态的阴影, 没法直接影响到动态的模型. 这一点, 反而影响了真实度

肯定不只这几点,但我暂时只想到这几点

那么怎么生成lightmap呢?

最直接的办法: 光线追踪....(原理想想很简单, 按照物体定律来就可以了)

但是光线追踪这东西......就算用来离线生成我都嫌慢-_-

下面说的这个是利用GPU进行计算的, 跟实时光照没什么两样:

原理:

想想实时渲染的顶点变换流程: pos * WVP之后, 顶点坐标就变换到屏幕空间了[-1, 1]

如果VertexShader里直接把纹理坐标做为变换结果输出(注意从[0,1]变换到[-1,1]), 那么相当于直接变换到了纹理坐标系, 这时在PixelShader里还是像原来那样计算光照, 输出的结果就可以拿来做lightmap了

示例:

这是一个典型的Phong光照模型下的球(这里不考虑阴影效果, 对它不需要进行特殊处理):

这是VS:

把原来的WVP变换改成变换到纹理坐标系:

输出的结果就成这样了:

保存下来可以直接使用. 这里我用的模型比较特殊, 本身的UV就满足前面提到的条件, 所以直接跟原纹理叠加就可以. 当然, 如果只保存明暗信息的话, 就不影响原纹理的复用, 因为通常lightmap不需要很高的精度:

有了lightmap, 再次画的时候就简单了, 只需要贴纹理, 光照大可以关掉:

如果还想要一更好的效果, 可以加入一些实时的全局光照算法, 如Dynamic Ambient Occlusion之类...阴影同理...

分享到:
评论

相关推荐

    使用Unity直接制作Lightmap

    传统的做法往往需要借助外部软件如3ds Max等进行光照贴图(Lightmap)的烘焙,随后导入Unity中进行后续处理。然而,随着Unity引擎功能的不断完善与优化,开发者现在可以直接在Unity编辑器内部完成Lightmap的制作。...

    threejs-lightmap-baker:浏览器内的实验性光照贴图贝克(ThreeJS,react-three-fiber)

    在ThreeJS + react-fiber-fiber中快速,便宜地进行全局照明光照贴图烘焙。 。 在此处查看屏幕截图和简要说明: : 。 要在本地尝试实验性光照贴图显示,请执行以下操作: git clone git@github....

    Save lightMap in prefab

    光照贴图(Lightmap)是Unity引擎中一种用于优化实时渲染场景光照的技术,它通过预计算光照信息并将其烘焙到纹理中,从而减轻了运行时CPU和GPU的负担。Prefab则是一种可重用的游戏对象模板,它允许开发者保存和管理...

    虚拟现实,房产精装间,使用MentalRay烘培,实现Unity3d·HDR版LightMap-附件.rar

    在导入由MentalRay烘焙的HDR LightMap后,Unity3d可以使用这些光照信息,使得虚拟环境中的物体和空间拥有更加真实的光照效果。同时,Unity3d提供了丰富的Shader和Script系统,开发者可以通过编写自定义脚本来控制...

    电信设备-基于云端光照烘焙的移动端3D实时渲染方法及系统.zip

    光照烘焙(Lightmap Baking)是一种预先计算并存储光照效果的技术,它将复杂的光照计算过程在离线阶段完成,然后将结果烘焙到3D模型的纹理上。这种方式可以极大地减少运行时的计算量,提升渲染效率,同时保持高质量...

    光照贴图:一个OpenGL示例,展示了使用Embree在CPU上烘焙的路径跟踪光照贴图

    通过将光照信息烘焙到纹理中,游戏和应用可以在运行时快速地应用全局光照效果,而无需每次帧更新都重新计算。 在OpenGL中,我们通常使用着色器来处理光照计算,但这些计算可能会非常耗时,特别是在复杂的场景中。而...

    国内第一本讲解Quest3d 游戏制作的书籍

    - 分析了如何在Quest3D中实现高效LightMap烘焙。 - **关键知识点**: - LightMap的定义与用途。 - 如何在3ds Max中制作并导入Quest3D。 ##### 第三部分:3ds Max Character Studio与Quest3D结合应用 - **章节...

    Unreal Engine 4 的光和影.docx

    具体来说,Mesh Distance Field能够快速判断网格与光源之间的距离,从而优化阴影的计算过程。 #### 六、间接光照缓存(ILC) ILC(Indirect Light Cache)是一种用于存储间接光照信息的技术。它采用球形谐波编码方式...

    Webgl-3d美术资产规范

    5. **烘焙贴图**:烘焙是将光照信息和其他复杂效果烘焙到贴图上的过程,包括LightMap和CompleteMap等不同工作流。烘焙贴图有助于提高渲染效率和降低性能需求。 6. **Blender和3ds Max导出教程**:这些教程介绍了...

    光域网文件

    烘焙过程可能会比较耗时,但完成后,模型就可以在不依赖原始光源的情况下快速显示光照效果。 在室内建筑的光域网应用中,制作者可以精细调整光域网的参数,如光照强度、衰减距离和颜色温度,以达到理想的效果。此外...

    游戏高精度漂亮美女模型(含贴图)

    4. **3D模型的制作流程**:创建高精度3D模型通常涉及以下步骤:概念设计、建模、UV展开、贴图绘制、烘焙(Lightmap)以及最终的导入和调整。这个过程需要艺术家对3D软件的熟练掌握,以及对艺术设计的理解。 5. **3D...

    Unity3d-SkyBox-35个天空盒(含预览图)

    在实际开发中,天空盒还可以与全局光照(Global Illumination)、环境光探头(Light Probes)和烘焙光照(Lightmap Baking)等技术结合使用,以实现更逼真的光照效果。同时,天空盒还可以与动态天气系统相结合,让...

    Virtools的虚拟场景运用篇.pdf

    Virtools是一款强大的3D/VR整合平台,它能够创建快速、高质量、多用途、模块化且支持网络播放的Web3D内容。这个工具广泛应用于3D游戏开发、数字营销、虚拟导览、教育、艺术、医学模拟以及大型沉浸式展示等领域。其...

    辐射度光照图生成器for open scene graph DEMO 代码

    这通常涉及解决一个大的线性系统,可能需要高效的数值算法,如多网格方法或快速多极方法。 5. **光照贴图烘焙**:一旦辐射度计算完成,结果会被烘焙到光照贴图中,这个贴图可以被用作后续渲染的光照源,极大地提高...

    Unity游戏项目源码 光照合集 完整版

    4. **光照贴图(Lightmap)**:Unity支持预烘焙的光照信息,通过光照贴图将静态对象的光照信息存储在纹理上,从而减少运行时的计算需求。 5. **全局光照(Global Illumination)**:Unity支持PBR(基于物理的渲染)光照...

    U3D高清室内场景模型资源.zip

    3. **光照信息**:可能包含烘焙好的光照贴图(Lightmap),这是预先计算好的光照效果,用于提升场景的光照质量,尤其在移动设备上,可以减少实时计算的负担。 4. **动画文件**:如果模型包含动画,如门的开关、人物...

    【Unity3d】SNOW

    可以使用烘焙光照(Lightmap)或者实时光照(Realtime Lighting)来模拟不同时间段的光照效果,比如日出、正午和日落时分的雪景。 4. **材质和着色器(Materials & Shaders)**:为使雪地看起来更加真实,需要定制...

Global site tag (gtag.js) - Google Analytics