AI 图片阴影方向不对:5 类原因 + 修光路径

阴影方向和光源对着干,或两个光源互相打架。根因是模型把光照线索做了平均。用显式方向、参考图和 IC-Light 重打光锁住。

你写 sunlight from the left, long shadow falling right,结果模型确实把太阳放在左边,但阴影也朝左拉。或者你要一束强主光,模型却塞给你两束方向相反的同等强度边缘光。眼睛会立刻识别出这种错,看着就是”哪里不对”,只是说不出来。原因是模型把训练集里的光照线索做了平均:大量照片用的是柔和多向的影棚光,所以”committed 的单向强光”在统计上反而是少数派,模型会自动往平均值靠。

最快的修法:在 Prompt 里加上 single light source + 明确方向(hard key light from upper-left at 45 degrees)+ 明确阴影方向(shadows fall down and to the right)。如果还锁不住,就喂一张参考图(Midjourney --sref,或 SDXL/Flux 里的 IP-Adapter)。如果你手里已经有一张成图、只是阴影错了,别从头重抽:用 IC-Light V2 重新打光,它能直接指定光照方向(Left / Right / Top / Bottom)。下面五步从最省事的(改 Prompt)排到最可控的(重打光)。

先对号入座

挑出和你看到的现象一致的那一行,直接跳到对应步骤。

现象最可能的原因跳到
光照对了,阴影方向反了没显式说阴影方向Step 1
两束同等强度、方向相反的光多光源没分主次Step 1、Step 4
怎么调都是平光/正面光用词含糊或模型默认倾向Step 1、Step 2
Prompt 很细但模型不理互相矛盾的光照线索打架Step 4
已经有一张满意的成图错误阴影已经画死了Step 5(重打光)

常见原因

按命中率从高到低:

1. 光照方向描述含糊

bright lightingdramatic lightingcinematic lighting 都是没方向的词。模型没有锚点就只能取平均——平均下来就是”正面柔光箱”或”环境日光”。

如何判断:扫一遍 Prompt 看有没有方向词。如果没有 from the leftkey light upper rightbacklit 之类,就是没方向。

2. Prompt 里有互相矛盾的光照线索

你写 sunset lighting from behind, golden hour glow 然后又加 studio lighting, soft fill。这俩打架,模型会挑训练集里更常见的那个(一般是影棚)。

如何判断:搜 Prompt 里有没有两个不同的光照描述词。sunsetstudio 同时出现就是冲突。

3. 没用物理摄影词汇

模型对摄影术语反应很好:Rembrandt lightingloop lightingsplit lightingrim light from camera left45-degree backlight。光用日常英语,模型根本定位不到光源位置。

如何判断:Prompt 里没有任何摄影教科书级的布光词。

4. 多个光源没分主次

key light, fill light, rim light 平铺写出来,模型就给你三盏一样亮的灯,看着不自然。真实摄影只有一盏主光,其余都是辅助。

如何判断:Prompt 里有 2+ 光源但没说相对强度。

5. 模型本身有强烈的默认布光倾向

截至 2026 年 6 月:Flux dev(包括 FLUX.2)偏向柔和均匀的正面光;SDXL 默认阴天式平光;Midjourney V7 默认电影感(常常是柔主光 + 边缘光),阴影几何还经常变形。你不重度引导,它就出默认。

如何判断:同一个 Prompt 在两个不同模型上跑,如果都出现同一类光照错误,说明是模型默认在作祟,而不是你的 Prompt 写错。

最短修复路径

Step 1:显式说方向 + 强调单一主光

把模糊的光照词换成具体方向 + 强度:

hard key light from upper-left at 45 degrees, single light source,
soft ambient fill 1/4 strength, shadows fall down and to the right,
long cast shadow, dramatic contrast, no rim light

single light source 这句是关键——告诉模型只能选一个方向。

Step 2:用摄影教科书的布光名

这些词在训练集里被重度标注过:

# 经典命名布光
Rembrandt lighting(暗侧脸颊的三角形光斑)
loop lighting(鼻影小、勾向嘴角)
split lighting(半张脸亮、半张脸暗)
butterfly lighting(主光在相机正上方)
rim lighting from behind, separating subject from background

直接扔一个进 Prompt,比你自己描述几何关系靠谱。

Step 3:参考图锁布光

Prompt 锁不住时上参考图:

  • Midjourney(V7)--sref [一张有目标布光的照片 URL] --sw 100--sw(风格权重)取值范围 01000,默认 100;布光还是带不过来就往 300-500 加,--sw 0 等于取消参考图。也可以用数字风格码代替 URL。
  • SDXL / Flux(ComfyUI):用 IPAdapter Advanced 节点,权重约 0.65weight_typestyle transfer,参考图用单向光的干净照片。
  • 想最大化布光迁移、又不让主体被参考图带跑:改用 IPAdapter Precise Style Transfer 节点。SDXL 上从 style_boost: 2、权重 ~0.7 起步。这样既保留参考图的布光,又让你的 Prompt 掌控主体和构图。

参考图必须是单光源很明显的图,不能再放多光源混乱的图。黑白经典人像往往是最干净的参考,因为没有色彩噪音把 adapter 带偏。

Step 4:负向 Prompt 拦住”打架”(仅 SD 系)

如果一直出现双光源,负向 Prompt 里加:

multiple light sources, two key lights, ring light, softbox lighting,
flat lighting, ambient overhead light, conflicting shadows,
shadows going in different directions

权重保持常规,超过 1.3 通常是把图整变形,而不是修好布光。

Step 5:用 IC-Light 给成图重打光

如果你已经有一张满意的图、只是阴影错了,不用重抽。IC-Light V2(lllyasviel 出品)是一个重打光模型,它拿你的成图、按你指定的方向重新打光,正好补上基础模型给不了的那种控制。

  1. 把图导入 ComfyUI 里的 IC-Light V2 工作流(或某个在线 IC-Light 前端)
  2. 设定初始光照方向预设:LeftRightTopBottom
  3. 加一句文本描述光源,例如 sunshine from window, left sidewarm key light from upper right
  4. denoise 调低(约 0.4-0.5)可以只重打光、不重画主体;想让几何也跟着变就调高

因为 IC-Light 把布光和内容分开决策,投射阴影会跟着你设的方向走,而不是跟着模型的平均默认走。阴影方向必须精确时,这是最可靠的修法。

Step 6:先出布光图,再叠主体

从零生成、且商业活儿对阴影方向有硬要求时:

  1. 先用一束单向硬光生成一张只表达几何关系的灰调”布光研究”图
  2. 把它作为 ControlNet 的 depthnormal 参考
  3. 再用真实主体 Prompt + ControlNet 权重 0.8 重新生成

这样布光决策和主体决策就分离开来,模型没法把两者揉成平均值。

预防建议

  • 维护一份”5-10 个已知好用的布光方向短语”清单(Rembrandt45 degree key 等)
  • 想要单向光时永远加上 single light sourcedominant key light
  • IP-Adapter / --sref 库里常备 2-3 张方向干净的参考照片
  • 先出小图缩略图核对布光,再去跑高分辨率
  • 看缩略图时眯眼检查阴影方向,对不上立刻在 Prompt 层修,别留到后期

怎么确认修好了

正式跑高清前,花 30 秒做这个检查:

  1. 追一条阴影。挑最明显的一条投射阴影顺着追回去,它应该正对着你设定的主光反方向。你写了”key from upper-left”,阴影就必须朝右下落。
  2. 数方向。画面里所有投射阴影应该大致平行。出现朝两个方向的阴影,说明你的 Prompt 里还残留着两束打架的光。
  3. 看明暗交界线。脸或球体上,从亮到暗的过渡线(terminator)应该落在背光那一侧。交界线跑到正面,说明模型还是出了平光/正面光。
  4. 眯眼测试。缩略图尺寸下,布光应该一眼能看出是从某一侧来的。如果看着”均匀打亮”,方向就没生效,升级到 Step 3(参考图)或 Step 5(IC-Light)。

常见问题

为什么光看着对,阴影却往反方向走? 模型按你的 Prompt 画对了高光方向,但阴影是它自己脑补的,因为你压根没说阴影该往哪落。加一句明确的阴影描述:shadows fall down and to the right。大多数情况这一句就修好了。

我 Prompt 写得很细,模型还是不理,为什么? 基本可以肯定是矛盾线索(原因 2)。模型没法同时满足 golden hour from behindstudio softbox,于是挑统计上更常见的那个、丢掉另一个。把”输家”删掉,或用负向 Prompt 拦掉(Step 4)。

能在出图后修阴影方向、不重新生成吗? 能。用 IC-Light V2(Step 5)。它给成图按 Left/Right/Top/Bottom 显式方向重打光、重新推导投射阴影,主体还是你已经满意的那个。

最有用的一句话是哪句? single light source。它逼模型只锁定一个主导方向,而不是把好几束光取平均,而取平均正是阴影对着干、双边缘光的根因。

Midjourney、SDXL、Flux 之间有区别吗? 根因一样(光照被平均),但工具不同。Midjourney V7 靠 Prompt 措辞 + --sref;SDXL 和 Flux 多了 IP-Adapter 和 ControlNet 做更硬的控制,而且只有 SD/Flux 这一侧能跑 IC-Light 做真正的重打光。

相关阅读

外部参考

标签: #ai-image #排查 #lighting #ip-adapter