Gandi 3.0文档
官网 打开编辑器
文档/扩展

光照

「光照」是引擎组里的一个扩展,给舞台加上游戏引擎式的 2D 光照:点光、聚光、日月光,墙体和物体投下的 软阴影,边缘立体感和法线贴图,自发光与泛光,空气里的光晕和光柱,以及整个画面的曝光和调色。横版、 正俯视、斜俯视(星露谷、宝可梦那种)三种画法都按各自的空间关系算光和影子。灯可以挂在角色身上 (克隆体自动带上),也可以摆在场景里;选一个画面风格、摆几盏灯、给物体装上碰撞体,画面就是一个 完整的夜景、室内或小镇,不需要写积木。

光照演示:月夜、火把、灯笼、水晶与萤火虫

打开方式#

在扩展库的「引擎」一组里添加「光照」。装上后:

  • 装配编辑器多一页光与粒子(和粒子扩展共用):中间就是舞台本身,在上面摆灯、调材质、调画面, 看到的就是作品里的样子。怎么操作见 引擎 的「光与粒子页」;
  • 选中舞台,角色栏参数区下面多一节光照:开关和画面风格,「在装配编辑器里调」直接翻到那一页;
  • 积木栏多一个光照分类。

新装上时场景是「原样」风格、横版视角:环境光 100% 白,没有灯的地方画面和原来完全一样。这时灯照在 白色上看不出来,「光与粒子」页放了灯会在舞台上方提示,一键调暗环境光或换成月夜。

怎么用#

1. 选画面风格#

在「光与粒子」页点一下空白处,右栏就是整个画面,在「风格」里点一个(舞台的「光照」一节里也有)。 风格一次写入环境光、日月光、天光、曝光、泛光、光晕、暗角和调色,一条撤销可以整套退回;之后每一项 仍然可以单独调。

同一个场景在八种风格下
风格 画面
原样 不改变原画,只有灯照到的地方变亮
晴天 暖白的日光从左上方照下,天光把朝上的边缘染淡蓝
黄昏 低角度的橙色日光,偏暖,暗角较重
月夜 蓝色的暗环境光和月光,泛光和光晕较强
洞穴 几乎全黑,只剩灯照到的地方
霓虹 暗紫色环境,高饱和,泛光最强
地牢 暗褐色环境,偏暖,暗角最重
电影 电影感色调映射,暗部更深,亮部过渡更柔和
右栏的画面设置

2. 选视角#

画面设置里的「视角」按游戏的画法选:

视角 画法 光和影子
横版 横版过关、剖开来看的室内 画面是后墙。灯的高度是离后墙多远;物体站在后墙前面,影子投到墙上
俯视 从正上方往下看 画面是地面。灯的高度是离地多高;物体有高度,影子从脚下拉出去
斜俯视 地面从上往下看,房子、树、人立着画 灯照的是它正下方那块地;立着的东西按脚下的地取光,影子倒在地上

斜俯视里:

  • 灯挂在灯罩上,「高度」填灯罩离地面多高,也就是画面上灯罩到灯杆底的距离。灯照亮的是正下方那一块 地,光晕留在灯罩上。
  • 投影的物体默认立着,按造型轮廓的剪影投影,画多高就算多高;不投影的(路面、花、水面)默认躺着。 材质的「立着」可以改。立着的东西前后有多厚填在「厚度」里:篱笆、路牌填得薄,不填就按轮廓估。
  • 一棵树可以装两个碰撞体(树干一个、树冠一个),把「形状」选成「碰撞体」:影子就是一根细细的树干 加一团离开地面的树冠,而不是整棵树的一大团。
  • 立着的东西按脚下那块地取光:走进树影里整个人变暗,迎着灯的一面亮,背着灯的一面暗。造型的 下边缘就当作脚底,造型图下面别留太多空白。
  • 走动的角色建议把材质的「阴影」设为「整体」:影子边扫过脚下时整个人一起变,不会被切成两半。
  • 灯罩和灯杆分成两只角色:灯杆只画到灯下面,不然灯杆会挡住自己的灯。
  • 灯在一个立着的东西正上方、而这东西差不多和灯一样高时(灯罩下的灯杆、光球飘过人头顶),它的影子 会淡掉,不会在脚下铺一大块。
  • 谁挡住谁还是由图层决定,越靠画面下方的东西越该在前面。
斜俯视演示:夜里的小镇,路灯、窗户、火狐的尾巴、萤火虫和跟着鼠标的光球在发光,房顶的瓦片带法线贴图

俯视里每样东西都有自己的高度:帐篷、原木、人的影子从篝火往外放射,比火苗高的帐篷影子一直拖到 林子里;树冠在材质里填了离地的高度,影子离开树干落在地上。

俯视演示:林间夜营,篝火和跟着鼠标的青色光球各投一套影子,帐篷两面坡一亮一暗

灯可以随时移动:两个演示里都有一颗跟着鼠标走的光球,影子跟着它实时转。

3. 摆灯#

在「光与粒子」页拿起点光(P),先在工具条上挑一个预设(火把、烛光、篝火、灯笼、窗光、霓虹、魔法、 萤火),在舞台上按下去就是灯的位置,拖出去就是半径。聚光(S)拖出去是朝向和射程,预设是手电和 舞台灯。放好以后拖灯本身挪位置,拖范围上的手柄改半径,聚光还能拖扇尖改朝向、拖扇边改张角;右栏 最上面的预设点一下换整套参数,位置不动。

  • 按在角色上放,灯就挂在这个角色身上:跟着它移动、转向、缩放,每一个克隆体各带一盏。火把挂在 拿火把的人身上,篝火挂在篝火上。
  • 按在空地上放(或者按住 Alt),灯就摆在场景里,不跟任何角色走:路灯、窗户、天花板上的灯。 不用为了一盏灯专门建一个角色。

放好以后在右栏「位置」的「挂在」里随时换,舞台上的位置不变。

光与粒子页里选中一盏灯
属性 范围 作用
类型 点光 / 聚光 聚光只照一个扇形
颜色 — 灯光的颜色
强度 0–6 灯正下方的亮度,1 相当于白色环境光
半径 10–3000 照多远,超出半径完全不亮
集中 0–4 0 时光均匀铺满半径,越大越集中在灯芯附近
光晕 0–3 灯周围空气里的一团亮光;聚光灯是一道可见的光柱
张角、柔边 1–179°、0–90° 聚光的扇形宽度和边缘过渡
朝向 度 聚光往哪照:挂在角色上时相对角色的朝向,摆在场景里时 0 是朝右
闪烁 不闪 / 火光 / 呼吸 / 脉冲 只改亮度,不改数据
高度 1–2000 横版是离后墙多远,俯视和斜俯视是离地多高。越低,边缘的明暗越强,影子越长
投影 开 / 关 这盏灯会不会被墙体、物体挡住
光源大小 0–400 发光体本身有多大。越大,影子的边越柔

4. 调材质#

材质是整个物体的一份设置。在「光与粒子」页点一个角色(画面上点它,或者在左边列表里点),右栏就是 它的材质。

右栏里一个角色的材质
属性 默认 作用
受光 100% 0% 时保持原画的颜色,不受任何光影响,适合界面和文字
立体感 100% 朝着灯的边缘被照亮、背着灯的边缘变暗的程度;也是法线贴图起伏的总倍数
自发光 0% 在黑暗里也亮;超过 100% 会产生泛光,适合火焰、窗户、霓虹
受灯光 100% 灯(点光和聚光)对它的影响;远景调低
挡光 自动 它怎么挡光:自动 / 墙体 / 物体 / 不挡,见下面「阴影」
形状 自动 挡光的形状:碰撞体 / 造型轮廓
立着 自动 斜俯视里立着还是躺着;自动是挡光的立着、不挡的躺着
离后墙 / 离地 0 横版是离后墙多远,俯视是离地多高
厚度 / 高度 0 横版和斜俯视是物体前后多厚,俯视是物体多高(0 按 24 算)
受阴影 逐像素 它怎么接收别人的影子:逐像素 / 整体 / 不受
法线贴图 — 这一张造型的法线贴图:生成、导入、清除;强度;翻转 Y

立体感不需要法线贴图:编辑器按造型自己的轮廓和明暗推算表面的起伏,所以一整张砖墙造型里, 每块砖的边都会被旁边的火把照亮。

法线贴图让表面的质感真正立起来:瓦片、树叶、石头的每一处凸起都迎光发亮、背光发暗,灯一动, 高光跟着走。在材质的「法线贴图」一节里按当前这张造型设置:

  • 「导入」选一张切线空间的法线贴图(PNG / WebP),和造型一样比例,大小随意;绿通道朝下的 (DirectX 习惯)打开「翻转 Y」。
  • 「生成」按造型的轮廓和明暗算一张:轮廓往里鼓成圆边,再叠上造型自己的明暗细节。
  • 「强度」调起伏有多明显。

有法线贴图的造型不再用自动推算的立体感。贴图存在作品里,一张造型一张,克隆体共用;动画的每一帧 各配一张。

材质里的法线贴图

受灯光解决 2D 画面没有纵深的问题:远处的山和前景的火把在舞台上挨在一起,但山不该被火把照亮。 把远景的受灯光调到 10%–40%,它仍然受环境光和日月光影响,却不会被前景的灯照亮。

5. 阴影#

挡光的东西分两种:

  • 墙体:在画面里直接挡光,墙后面是黑的;光只照进朝着灯那一面的一小条边。横版里是地面、房间的 墙和天花板这类整个纵深都实心的东西;俯视里是比灯还高的墙,填了「高度」就按那么高,矮墙的影子 有长有短。
  • 物体:有高度的东西,影子落在地面或后墙上。
    • 横版:站在后墙前面「深度」那么远(默认 24)。灯越近、物体越靠前,墙上的影子越大、越偏、越柔。 影子只落在贴着后墙的东西上,不会落在旁边另一个物体身上。
    • 俯视:从「离地」起,高「高度」(默认 24)。影子从脚下拉出去,灯越低越长;立在地上的物体不挡 自己站的那块地,影子也会落在旁边的物体身上。离了地的(树冠、屋檐)影子悬在地上,只落在地面上。
    • 斜俯视:立着的物体按剪影投影,影子从脚底倒在地上;躺着的同俯视。
室内:月光从窗口斜照进来,炉火把木柱和人的影子投在墙上

挡光的形状默认是物体上装的碰撞体:方框、圆、胶囊、多边形、按造型生成的都算,感应区不算。 碰撞体来自物理扩展的装配;光照读的是物体上的数据,物理扩展有没有在跑都不影响投影。没有碰撞体的 物体、斜俯视里立着的物体(碰撞体一般只包着脚下那一块),默认按造型轮廓挡光。

材质的「挡光」选「自动」时:没有碰撞体就不投影;横版和俯视里物理的静止刚体算墙体,其余算物体; 斜俯视里都算物体。

  • 影子贴着物体的地方清楚,离得越远越柔;「光源大小」越大越柔。
  • 灯挂在哪个物体上,那个物体就不挡这盏灯;灯在墙体里面时,那块墙体也不挡它。
  • 物体要比灯低,才会留下影子;和灯差不多高的,影子会拉得很长。
  • 日月光也会被挡住(画面设置的日月光里开「投影」,「柔和」调边缘)。横版里墙体之间的空隙 就是窗,月光从空隙里照进来,画面的「光晕」大于 0 时空气里有一道看得见的光柱;俯视和斜俯视里, 太阳越低影子越长。
  • 材质的「受阴影」决定一个物体怎么接收影子:「逐像素」是默认;「整体」只看它中心(斜俯视里是脚下) 那一点,整个角色一起变暗变亮;「不受」完全不受影子影响。

剖面怎么画:横版室内是把房子剖开来看,被剖开的外墙、天花板画成一整块暗色的切面,材质的 「受光」设为 0%;不要在切面上画正对镜头的砖块或拱窗,那是另一个视角。窗户是切面上的一个缺口, 缺口里看到的是屋外;窗上横穿的铁条在剖面上只是一个个小方块,给它们各装一个小碰撞体,就会在光里 划出细影。竖着的窗框在墙的厚度方向上,会把整道光挡掉,不要装碰撞体。碰撞体只包住墙本身的厚度, 不要伸到屋里或屋外。屋外的天空离得很远,材质的「受阴影」设为「不受」、「受灯光」设为 0%。

场景设置#

在「光与粒子」页点空白处,右栏就是这些;日月光的方向和高度也可以拿日月光工具(D)直接在舞台上 拖出来:箭头是光往哪照,拖得越长太阳越低、影子越长。

分组 设置 作用
— 视角 横版 / 俯视 / 斜俯视,见上面「选视角」
— 环境光、强度 没有灯的地方有多亮、是什么颜色
日月光 开、颜色、强度、方向、高度 从一个方向照亮整个画面,边缘有明暗;方向是光从哪边来
日月光 投影、柔和 被墙体和物体挡住;柔和是影子边缘的宽度(度)
天光 颜色、强度 从天上来的光:横版加在朝上的边缘上,俯视照亮整个地面
画面效果 曝光 整体亮度
画面效果 泛光 比白色更亮的地方向外溢出的光
画面效果 光晕 灯照到的空气也微微发亮
画面效果 暗角 四角压暗
画面效果 立体感 所有物体立体感的总倍数
画面效果 电影感 换成电影式的色调映射:暗部更深,中间调更亮,亮部过渡更柔和
调色 饱和度、对比度、色温 最后一步的调色
— 画质 光照计算的分辨率:省电 1/4、均衡 1/2、精细与画面相同

设置存在舞台上,一个场景一份,改了立刻生效。

同一时刻关闭与打开光照

积木#

积木改的都是临时的:按下停止之后,回到面板里的设置。

积木 作用
光照 [开/关] 总开关
画面风格设为 [ ] 换成一种风格
环境光设为 [颜色] 强度 [ ]%
环境光在 [ ] 秒内变为 [颜色] 强度 [ ]% 渐变,等变完再往下走;做昼夜交替
日月光 [开/关] 颜色 [ ] 强度 [ ]% 方向 [ ]
把画面的 [ ] 设为 [ ]、增加 [ ]、画面的 [ ] 曝光、泛光、光晕、暗角、调色等场景设置
这里能显示光照? 浏览器不支持时为假
让我的灯 [ ] [开/关] 等六块 改这一个角色身上的灯,按灯的名字选,「全部」是所有灯
把我的 [ ] 设为 [ ]%、我的 [ ] 受光、立体感、自发光、受灯光、法线强度
我的投影设为 [ ]、我受阴影的方式设为 [ ] 自动 / 墙体 / 物体 / 不投影;逐像素 / 整体 / 不受阴影
我离后墙或地面的距离设为 [ ]、我的高度设为 [ ] 横版里走到前景、退到墙边;俯视里跳起来、飞起来
我这里的亮度 角色所在位置被照得多亮,100 相当于白色环境光;做潜行玩法
在 x [ ] y [ ] 放一盏灯 [名字] … 不属于任何角色的场景灯,按名字改、删;编辑器里摆在场景里的灯也按名字改、关,停止时恢复

细节#

  • 一个场景最多 512 盏灯,屏幕外的灯不参与计算;一帧里最多 64 盏灯投影,多出来的照常发光、不投影。
  • 实测 1270×953 的舞台:300 多盏不投影的灯同时在画,整帧绘制约 5 毫秒;43 盏投影的灯加 70 个 挡光物体,整帧约 8.5 毫秒;斜俯视的小镇、俯视的夜营两个演示(带法线贴图)整帧都在 5 毫秒以内。
  • 物体的影子按外轮廓算,凹进去的地方(比如 L 形)会被填平;需要准确时拆成几个凸的碰撞体。
  • 斜俯视里立着的物体按一片有厚度的剪影投影,侧面来的光下影子也有宽度;估出来的厚度不对时 (长篱笆、薄木牌)在材质里填「厚度」。
  • 法线贴图存成 WebP,一张 256×256 的大约几十 KB;「导入」的图边长超过 1024 会先缩小。
  • 没有背景造型的地方(新作品的空白舞台)底色也受光:跟着环境光变暗,被灯照亮。
  • 舞台背景没有立体感;对话气泡不受光;画笔的笔迹受光,但没有立体感。
  • 粒子、Spine 骨骼动画和物理软体按原样画出,不受光,但会参与泛光和调色。
  • 需要浏览器支持 WebGL 2 和浮点渲染目标。不支持时画面照常显示,只是没有光照效果。
  • 旧版光照扩展的积木、玻璃、视频、烘焙和光照区域都已移除;用旧版做的作品里那些积木不再生效。

相关#