# 灯光创建指南 ## 要点 使用光照时的关键规则是仔细检查源放置结果。光源的半径应足以照亮房间或区域的必要部分,但不能超过合理的限制。例如,使用专为小型警卫室设计的光源来照亮大型机库是不合适的。 ## 光源 光源模板位于`/prog`目录下的`lights.blk`文件中。例如,在基于 *daNetGame* 的项目中,可以在此处找到它: `/prog/gameBase/content/common/gamedata/templates/lights.blk` 有关光源设置的详细信息,请参阅 [灯光](./lights.md) 一文。 **要点:** - 对于每个新的视觉模型,创建并配置一个新的光源,在光源名称中包含视觉模型的名称(如果需要,还包括光半径等功能参数)。 - 更喜欢使用 **spot** 灯而不是 **omni** 灯。 - 光源可以通过任务编辑器(游戏中的`F12`)进行调整。这些更改不会保存,但可以立即预览。 - 要更改一天中的时间,请使用基于浏览器的工具 [Var Editor](http://127.0.0.1:23456/editvar)。 - 在配置光源时平衡亮度和最大半径。 - 如果创建用于室外的 **omni** (在`envi_probe`之外),请确保禁用 `light__use_box`参数;否则,光源不会在外部渲染。 - 如果可能,请避免激活阴影。 - 如果启用了阴影,则它们应仅应用于静态对象。如有必要,动态对象可能具有唯一的光源。 - 始终在游戏中检查阴影,因为在某些情况下,启用的阴影可能会降低场景质量,具体取决于光源相对于视觉模型的位置。 - 如果光源的视觉模型可以被销毁,请在光源模板中添加 `destroyable_with_rendinst:tag` 参数。 - 如果光源仅在夜间激活(例如,路灯),请将参数`light__nightly:b=yes`添加到模板中。 ### IES 纹理 有关创建 IES 纹理的详细信息,请参阅 [光度学灯光](./photometric_lights.md) 一文。不要犹豫,生成多个 IES 纹理。根据光源和/或视觉模型命名它们。 ### 闪烁的光源 有关闪烁光源的更多信息,请参阅 [闪烁的灯光](./flickering_lights.md) 文章。 要正确设置闪烁的光源,必须创建以下实体: 1. 闪烁的光源。 ```{note} 这与光源不同;有关详细信息,请参阅 [文章](./flickering_lights.md)。 ``` 2. 带有动画控制器的动态视觉模型。 3. 将动态模型的 animChar 链接到闪烁源的模板。如果动态模型可以被销毁,请不要忘记指定 destructibility。 4. 一个 gameObj 模板,用于将动态模型的 animChar 链接到闪烁源。 5. 光源。 6. 将光源与闪烁光源链接的模板。 7. 将光源链接到闪烁光源的 gameObj 模板。 8. 一个由两个游戏对象组成的复合文件:一个用于将闪烁源链接到动态模型,另一个用于将闪烁源链接到光源。 ## 视觉模型 这是指光源的几何模型,例如灯、聚光灯、手电筒或光源的任何其他视觉表示。 考虑光源是否需要闪烁。对于应急灯、火把和大多数灯(因为许多灯可能具有闪烁的变体),请创建具有自发光表面的动力学模型,并在必要时创建渲染实例基。将视觉模型分为渲染实例和动态模型背后的逻辑及其准备工作在 [Flickering Lights](./flickering_lights.md) 一文中进行了详细说明。 ### 发射强度 发射强度没有确切的值,因为它取决于反照率、发射掩码和发射表面的大小等因素。单独配置发射强度,请记住,值越低通常越好。过度发射会破坏摄像机的适应能力,并对游戏体验产生负面影响。 有关配置发射的更多详细信息,请参见 [本文](../shaders/dng-shaders/rendinst_emissive.md)。 ## GameObj ```{seealso} 有关更多信息,请参阅 [gameObjects](../about-assets/gameobjects/gameobjects.md). ``` 为光源和动态视觉模型创建 gameObj。例如,在基于 *daNetGame* 的项目中,它们位于以下位置: `/develop/assets/common/gameRes/gameObjects` 为方便起见,请确保在 gameObj 中定义一个参考模型。例如: `ref_dynmodel:t="lamppost_d_glass_flicker_dynmodel"` 这是在 [*daEditor*](../../dagor-tools/daeditor/daeditor/daeditor.md) 中显示几何体所必需的。 ## 限制框 *限制框* 是一个用于切断光线的 gameObj。对于不投射阴影的光源,需要它来防止光线穿过墙壁。通常,它不会包含在包含光源的复合文件中,而是手动放置在该位置或添加到整个建筑物的复合文件中。 对象命名为: `omni_light_restriction_box.gameObj.blk` ## Composite [复合](../all-about-blk/composit_blk.md) 文件可以使用相同的视觉模型,但具有不同的光源。在这种情况下,请确保在复合文件名中包含光源功能。始终在包含光源的合成图像的名称中指定半径,例如: `factory_lamp_a_flicker_10m_cmp.composit.blk` 包含光源的复合材料可能包括: - **RendInst** – static base,可以是可破坏的,并包含销毁逻辑。 - 描述光源或将光源链接到闪烁光源的 **GameObj** 模板。 - **GameObj** 模板,以防光源具有闪烁变体。 - 用于切断光线的 **限制框** ,尽管它通常单独放置,不包括在与光源的合成中。 ## 放置光源 请记住在放置光源时考虑光半径。同一光源不能同时照亮小房间和大大厅。 这将使大厅照明不足或导致小房间过度照明。过高的亮度不仅会破坏视觉沉浸感,还会破坏游戏体验。