灯光

From Valve Developer Community
< Zh
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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在橙盒里已经有了说明,并且是"仅照明"。它使用纯无色替换了所有贴图图像,让你看到究竟是什么在发光,其位置和方式。

参见

外部链接