灯光

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)Español (es)Русский (ru)中文 (zh)Translate (Translate)
概括性的地图制作系列 讨论你的想法——帮助我们写你需要的文章和想法

弹药 | 生物 | 蚁狮 | 光束和激光 | 线缆和绳子 | 动态的天空与云雾 | 颜色理论 | 战斗 | 联合军 | | 尘土、雾、烟 | 升降机 | 关卡转换 | 环境光效、太阳、天气、室外 | 爆炸 | 火焰 | 植被 | 玻璃和窗户 | 梯子 | 光效 | 优化 | 物理 | 视网膜扫描仪 | 声效和音乐 | 特效 | 地形 | 火车 | 机枪塔 | | 僵尸

向导

一个拥有充足光线的房间的例子

类型

静态光源

Tip.png提示:静态光源被编译为光照贴图(en),它照亮固体(en)模型(en),以及Cubemaps(en), 提供静态反射(en)。 它对渲染器来说是空闲(en)的,因为附加的静态光在一开始就已经被处理了。
light(en):一个静态的,全方位的点光源。(例如一个裸灯泡或火焰。)
light_spot(en):一个静态的,单向点光源。(如火炬或手电筒),圆锥形光束角度不能超过90°。
light_environment(en):提供两种光源:
  • 一种是从天空盒所有面漫反射出来的'环境'光(表示来自云里的反射光以及一般的大气层)
  • 一种是只投向一个方向的定向'亮度'光(相当于太阳光或月光)
都是从使用它的地图的toolsskybox材质发射出来的。参见天空盒(en)
env_particlelight(en):点亮由env_smokestack(en)产生的颗粒。颗粒并没有受正常照明。使用(不超过)这些中的2个,使得(仅限这个实体)env_smokestack(en)颗粒出现以反映环境照明。
发光贴图(en)
固体(en)应用表面发光的材质(在game_dir/lights.rad中定义)会在一个180°的椎体里投射体积光。

静态光接收器

固体(en)
这个Hammer面编辑对话框(en)工具'光照贴图规模(en)'可以用来控制如何锐化或柔化固体表面的光照贴图 - 在高对比度区域之间效果最明显,比如阴影。请注意,增加额外的光源不会显著影响性能,减少光照规模(如提高分辨率),将会直接增加地图文件的大小和内存使用。
prop_static(en)
不同于其它模型实体,prop_static是静态发光的:一个光照值存储给每一个顶点(en),以及模型的碰撞网络(en) (或者,可选的参考网络(en)),被用来计算光照贴图阴影。
有以下选项:
  • disableshadows - 不要投射光照贴图阴影
  • disablevertexlighting - 只为实体模型存储一个光照值。
  • disableselfshadowing - 防止实体从自身投射阴影。
  • ignorenormals - 忽略法线的顶点数据来计算照明。这对叶子之类的东西非常有用,还有其他薄法线网络。

动态光源

Tip.png提示:动态光源是在运行中计算的,所以渲染起来很"费劲(en)"
env_projectedtexture(en)过道的照明。
light_dynamic(en)
:一个简单的,单向的,可移动的,可开关和可调整的动态光。
point_spotlight(en):一个在它射中的表面产生动态的聚光灯效果的动态光源。
npc_spotlight(en):一个聚光灯NPC(en),类似于point_spotlight,但是拥有追踪目标的能力。
env_projectedtexture(en)
一个拥有贴图的灯而不是纯色的动态光,而且还有逼真的动态阴影。影响所有的表面,它可以接受照明,而且可以用于第二章(en)里玩家的手电。

动态阴影

Tip.png提示:动态阴影只能由世界的模型(en)投射出来(NPC,物理道具等),并且只能投射到固体(en)表面(来自静态和动态光源)。它们是在运行时计算,所以它们相当粗糙并且渲染起来相对比较费劲(en)
Warning.png警告:这些都不是真正的阴影,它们是从远处的投射者投来的程序(在代码中生成的)贴图。在Left 4 Dead(求生之路),Portal 2(传送门2)以及Alien Swarm(异型丛生),阴影的方向是在每个实体的基础上计算出来的,取决于距离实体最近的光。但不在Source2006/2007模组里,除非你应用Source2007里的动态DTT阴影角(en)到你的模组。
Warning.png警告:动态阴影有时候会射穿墙或地板,暴露玩家或物体的位置。如果你遇到这种情况,使用info_no_dynamic_shadow(en)来解决这个问题。
Note.png注意:只有当没有在QC(en)里定义shadowlod的情况下,阴影才会由视觉网络"投射"出来。阴影的LOD只有低细节的网络,用于生成阴影。这些不适用于阴影地图制作(手电,env_projectedtexture(en)。)
Note.png注意:当它们重叠的时候,动态阴影不要互相或者与光源贴图融合。这可能会产生不良的“倍增”的效果,例如一个放置在物理道具桌子上的物理道具。你可以在动态实体上启用或禁用阴影来解决这个问题。
Note.png注意:动态阴影支持半透明。如果你的模型有不同程度的不透明度,它可以表现在阴影上。在这里可以看得到
shadow_control(en):一个点实体,用于控制动态阴影预测地图,包括最大距离投射,方向投射,以及锐利度/散漫度。
info_no_dynamic_shadow(en):一个点实体,用来列出哪些固体(en)表面不接收动态阴影。
prop_physics(en)实体:拥有一个"shadowcastdist"键值,来设置这个物体投射多远的动态阴影。
prop_dynamic(en)实体:拥有一个"disableshadows"键值,以及"enableshadows"和"disableshadows"输入来控制动态阴影投射。
NPC实体:拥有prop_dynamic阴影控制,再加上一个"disablereceiveshadows"
待完善: to prevent...?

丁达尔效应

丁达尔效应是因为光在透明介质中通过悬浮颗粒(胶体)产生的散射而形成的。比如大雾里的车大灯。

  • 光晕(发光动画)效果:
  • env_sprite(en) - 一个实体,用于创建全方位的光晕或眩光效果。
  • env_lightglow(en) - 一个不对称的发光体(对于高对比度的区域)。
  • env_sun(en) - 添加一个高亮的haloed给天空盒(en),来表示太阳或月亮的位置。
  • 光束(体积光)效果:
  • 固体贴图:models/effects/vol_light001
  • 固体贴图:models/effects/vol_light002
  • 模型models/Effects/vol_light.mdl - 用于prop_static(en)

公开的值

汽车大灯

亮度(Brightness)231 223 192

Note.png注意:从L4D2 SDK中获取的
17号城的白天
亮度237 218 143 800
环境(Ambience)190 201 220 100
莱温霍姆的夜晚
亮度175 230 239 50
环境43 45 57 5
联合军的灯
亮度147 226 240 3000
环境N/A
钨灯泡
亮度254 216 146
环境N/A
荧光灯
亮度159 237 215
环境N/A

欲知跟天空盒(en)材质相搭配的值,请查看天空列表(en)

注意

  • 命名一个光源会使其更加"昂贵"(需要消耗更多资源)。仅当你需要的时候才命名光源。多个光源共享一个名字比起使用不同的名字要"便宜"得多。
  • light_dynamic(en)非常"昂贵",而且在某些系统上甚至不会出现。
  • 基础的光源实体不会伴随着可见的物体出现(如灯泡)。为此,你需要一个道具。请查看HL2光源道具(en)获取列表。
  • 基础光源实体不会伴随着"光晕"出现,即便你希望在大雾或朦胧的区域看到它们。要实现这一点,无论是编译还是运行地图都要启用HDR(en),或者添加一个point_spotlight(en)(除非需要否则设置动态光照为"关")或者env_lightglow(en)实体。
  • 除非你运行vrad(en)(或等价的)否则地图将不会发光 。除非地图无泄漏(en),否则Vrad无法正确运行,也无法计算出真实的光照反射。
  • 一些贴图提供它们自己的光,可以使用模组目录里的lights.rad(en),或者使用sourcesdk/bin里的那个就可以做到。
  • 移动基于物体的固体,它们的发光方式也不会改变。它们的光照只会根据它们在Hammer里的位置来计算。(比如,一个在黑暗房间里的固体,将其带到高亮房间里,它也不会变亮。)

控制台命令(en)

mat_fullbright 2. 白色高亮的物理道具看起来像是bug;其实当它们在运动的时候算是正常的。
mat_fullbright <0-2>
0是正常的照明。
1是全亮的灯光,一切都是100%地发光。
2在橙盒里已经有了说明,并且是"仅照明"。它使用纯无色替换了所有贴图图像,让你看到究竟是什么在发光,其位置和方式。

参见

外部链接