Lighting overview

原文链接:https://docs.unity3d.com/Manual/LightingInUnity.html


Lighting 概览
      为了计算一个三维物体的shading, Unity需要知道照射到物体上光线的亮度,方向和颜色.


       这些属性由场景中的Light对象提供. 不同类型的Light根据指定的颜色以不同的方式发光;有些光从光源发出后,亮度随距离增加而减弱,并且光线从光源到物体的角度也会不一样.不同类型的光源的详细介绍参考链接: Types of light.
       Unity能为不同的用途用不同的方法计算复杂、高级的光照效果.

选择一个光照技术

       在unity中光照基本上可以被分为'realtime'或者'precomputed', 两种技术也可以混用,以创造身临其境的光照场景.这部分内容会简单介绍这两种技术之间相对的优点以及各自的性能特征.

realtime lighting

      默认情况下,unity中的 directional, spot 和 point三种light是realtime类型的.也就是说它们向场景中发射直射光,并且每帧都会更新.当lights和GameObjects在场景中移动时,光照会立刻更新.可以同时在场景和game视图中观察到这一点.


       只有realtime light时的显示效果.注意由于没有反射光导致阴影是完全黑暗的.只有落入spot light视锥范围内的面被照亮.

      Realtime光照是场景中最基础的光照对象,照亮移动中的角色或其他物体时非常有用.但是仅仅使用realtime lights本身时,光线是不会反射的.为了用 global illumination技术创造出更加真实的场景,我们需要启用Unity的 precomputed光照方案.

Baked lightmaps

       Unity能够计算复杂的static光照效果(使用一个叫做global illumination或gi的技术),并且将其存储在一个叫做lightmap的参考纹理图中.这个计算过程被称为baking.当baking lightmap时,场景中static类型物体的光照效果会被计算成纹理,叠加到场景中几何物体的表面,从而创造出光照效果.
   
        左图:一个简单的生成了lightmap的场景. 右图:Unity生成的lightmap纹理.注意阴影和光照信息都在lightmap中.

       lightmaps能够处理照射到物体表面的直射光和从场景中其他物体或表面反射的间接光。形成的光照纹理和物体表面的颜色、法线信息都可以被物体材质的Shader处理。
       光照bake后形成的lightmap在游戏过程是不能改变的,所以它们也被称为static类型的。Realtime光照可以覆盖叠加到场景中lightmap的表面,但是lightmap本身是不能改变的。
       使用这种方法,我们可以牺牲在游戏中动态移动lights的功能,换取性能的提升,以满足硬件性能较低的移动平台。

Precomputed realtime global illumination

      由于static lightmaps不能反映场景中光照条件的变化,precomputed realtime GI提供了动态更新复杂场景光照的技术。
      这种方法使得通过实时响应光照变化的反射光创造特征丰富的光照场景成为可能。一个很好的例子是时间系统:光源的位置和颜色随时间发生变化。传统的backed光照是不可能实现这个功能的。

        使用Precomputed Realtime GI实现的一个简单的时间系统。
       为了在游戏可接受的帧率下达到这些效果,我们需要将一些冗长的数学运算从实时计算转化为precomputed. 游戏中发生的交互会引起复杂的光照行为,precomputing将计算负担转移到时间不是很关键的阶段去处理。这种方法称为‘offline’处理。
       更深入的信息请参考链接: lighting and rendering tutorial

益处和代价

       Backed GI和Precomputed Realtime GI是可以同时使用的,但要记住性能消耗是单独使用两种技术的和。我们需要在显存中同时存储两套lightmaps,而且shaders对两者都要进行decoding。
       在这两中技术中选取哪一种,取决于你的项目需求和目标设备的硬件性能。比如在显存和处理能力比较受限制的移动设备上,选择Baked GI光照技术能够提供较好的性能。在有较好的图形硬件的计算机或者较新的游戏终端上,可以选择 Precomputed GI 甚至同时使用这两种技术。当项目的目标硬件设备范围较广时,需要支持的硬件性能最低的设备往往决定了需要采用哪种光照技术。
       

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值