第 27/60 天
引言
光影是漫画的「隐形主角」。同一张分镜,加上逆光轮廓、舞台聚光或黄昏斜阳,情绪可以瞬间从平淡变得戏剧化。传统漫画中,光影全靠作者手绘——打网点纸、留白高光、涂黑阴影,一张复杂光影的画面往往要耗费数小时。而 AI 漫画生成时,很多人会遇到两类典型痛点:一是关键词里写了 backlight、dramatic lighting,生成结果却依然「平光平影」;二是光影风格不稳定,同一角色在不同格子里光源方向对不上,导致画面割裂。
本文覆盖三块内容:漫画光影的基础概念与常见类型、用提示词与 ControlNet 精确控制 AI 生成的光影、以及后期合成阶段的光影增强工作流。读完你将能稳定产出「有电影感」的 AI 漫画分镜。
核心概念
漫画光影的语言
漫画光影本质上是用「黑、白、灰」三种层级讲故事:
| 光影类型 | 特征 | 常见用途 |
|---|---|---|
| 硬光(Hard Light) | 明暗交界清晰、阴影边缘锐利 | 戏剧冲突、战斗、恐怖 |
| 软光(Soft Light) | 过渡柔和、几乎无投影 | 温馨日常、回忆杀 |
| 背光/轮廓光(Backlight/Rim Light) | 主体边缘发亮、面部压暗 | 英雄登场、神秘感 |
| 舞台/聚光(Spotlight) | 中心亮、四周暗 | 焦点强调、演讲场景 |
| 月光/冷光(Moonlight/Cool Light) | 蓝紫色调、高对比 | 夜晚、悬疑 |
| 黄昏/暖光(Golden Hour) | 橙黄色调、长阴影 | 浪漫、离别的情绪 |
AI 控制光影的四层手段
- 提示词层:用
lighting、light source相关词直接描述,改动成本最低,但不可控性最高。 - 参考图/ControlNet 层:通过 Depth(深度图)、Lineart(线稿)约束光影明暗关系,控制力显著提升。
- 模型层:使用光影风格 LoRA 或光影增强脚本(如 SD WebUI 的
lighting动态提示词、Regional Prompter),稳定复现同一风格。 - 后期合成层:AI 生成素图后,用 PS/脚本叠加高光、阴影、渐变,达到电影调色效果。
关键提示词词汇表
硬光:harsh lighting, strong contrast, hard shadows
软光:soft lighting, diffused light, gentle shadows
背光:backlighting, rim light, silhouette, strong back light
聚光:spotlight, stage lighting, dark background
月光:moonlight, cool tones, blue hour, high contrast
黄昏:golden hour, warm sunlight, long shadows, orange glow
反光:reflected light, bounce light, subsurface scattering
实战步骤
第 1 步:搭建环境(Shell)
推荐使用 Stable Diffusion WebUI + ControlNet 组合,也可以用 Python 的 diffusers 库做脚本化生成。以下命令在 Ubuntu 22.04 上验证通过:
# 创建虚拟环境并安装 diffusers(GPU 版本)
python3 -m venv ~/manga_light && source ~/manga_light/bin/activate
pip install --upgrade pip
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
pip install diffusers transformers accelerate safetensors opencv-python pillow
# 下载 ControlNet Depth 模型(用于光影方向控制)
mkdir -p ~/models/controlnet
wget -O ~/models/controlnet/control_v11f1p_sd15_depth.pth
https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11f1p_sd15_depth.pth
第 2 步:建立光影提示词库(JSON)
把常用光影描述做成可复用的 JSON 词库,配合脚本实现「一键换光」:
{
"lighting_presets": {
"dramatic_backlight": {
"prompt": "backlighting, rim light, character silhouette, cinematic, high contrast, dramatic atmosphere",
"negative": "flat lighting, soft light, overexposed, washed out, low contrast",
"controlnet_depth_weight": 0.9
},
"golden_hour": {
"prompt": "golden hour, warm orange sunlight, long soft shadows, glowing rim light, nostalgic mood",
"negative": "cold tones, blue light, harsh shadow, underexposed",
"controlnet_depth_weight": 0.7
},
"moonlight_scene": {
"prompt": "moonlight, cool blue tones, strong contrast, crisp shadows, night atmosphere, stars",
"negative": "sunlight, warm colors, bright daylight, flat lighting",
"controlnet_depth_weight": 0.8
},
"spotlight_focus": {
"prompt": "spotlight from above, stage lighting, dark vignette background, focused subject",
"negative": "even lighting, bright background, ambient light",
"controlnet_depth_weight": 0.85
}
}
}
第 3 步:用 ControlNet Depth 控制光影方向(Python)
光影本质上依赖光源位置与物体遮挡关系,Depth 图正好编码了这些空间信息。用下面的脚本把角色与「虚拟光源」的深度关系喂给 ControlNet:
import json
from PIL import Image
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, DPMSolverMultistepScheduler
import torch
# 载入预设
with open("lighting_presets.json", "r", encoding="utf-8") as f:
presets = json.load(f)["lighting_presets"]
preset = presets["dramatic_backlight"]
controlnet = ControlNetModel.from_pretrained(
"lllyasviel/control_v11f1p_sd15_depth", torch_dtype=torch.float16
)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"digiplay/majicMIX_realistic_v7", # 换成你的漫画底模
controlnet=controlnet, torch_dtype=torch.float16
).to("cuda")
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
depth_map = Image.open("panel_depth.png").convert("RGB") # 由 Depth Estimator 生成
image = pipe(
prompt=preset["prompt"] + ", 1girl, manga panel, black and white screentone",
negative_prompt=preset["negative"],
image=depth_map,
num_inference_steps=28,
guidance_scale=7.5,
controlnet_conditioning_scale=preset["controlnet_depth_weight"],
).images[0]
image.save("panel_backlight.png")
print("OK: panel_backlight.png saved")
第 4 步:ComfyUI 光影工作流(JSON 节点片段)
在 ComfyUI 中,把「提示词 → ControlNet Depth → KSampler」串成可复用的工作流。核心节点 JSON 如下(导入 ComfyUI 后填充模型路径即可):
{
"nodes": [
{
"id": 1,
"type": "CheckpointLoaderSimple",
"inputs": {"ckpt_name": "majicmixRealistic_v7.safetensors"}
},
{
"id": 2,
"type": "ControlNetLoader",
"inputs": {"control_net_name": "control_v11f1p_sd15_depth.pth"}
},
{
"id": 3,
"type": "LoadImage",
"inputs": {"image": "panel_depth.png"}
},
{
"id": 4,
"type": "ControlNetApply",
"inputs": {
"strength": 0.9,
"positive": [5, 0],
"negative": [5, 1],
"control_net": [2, 0],
"image": [3, 0]
}
},
{
"id": 5,
"type": "CLIPTextEncode",
"inputs": {
"text": "backlighting, rim light, cinematic, 1girl, manga panel",
"clip": [1, 1]
}
},
{
"id": 6,
"type": "KSampler",
"inputs": {
"seed": 42, "steps": 28, "cfg": 7.5,
"sampler_name": "dpmpp_2m", "scheduler": "karras",
"denoise": 1.0,
"model": [1, 0], "positive": [4, 0], "negative": [4, 1], "latent_image": [7, 0]
}
}
]
}
第 5 步:后期光影增强(Python + ImageMagick)
AI 生成的光影往往「半吊子」,用脚本在后期强化高光与暗角,是专业漫画家常用的方式:
# 先用 Python 提取高光通道
python3 - << 'EOF'
from PIL import Image, ImageEnhance, ImageOps
img = Image.open("panel_backlight.png").convert("L")
# 1. 提亮高光区域(阈值 200 以上的像素压白)
import numpy as np
arr = np.array(img)
highlights = np.where(arr > 200, 255, arr).astype("uint8")
Image.fromarray(highlights).save("highlights_mask.png")
# 2. 压暗暗部,增强明暗对比
enhancer = ImageEnhance.Contrast(img)
contrast = enhancer.enhance(1.25)
contrast.save("panel_contrast.png")
print("highlight mask and contrast done")
EOF
# 3. 叠加暗角(vignette)提升电影感
convert panel_contrast.png
( -size 832x1216 radial-gradient:black-white -negate )
-compose multiply -composite panel_vignette.png
# 4. 最后转网点风格(可选)
convert panel_vignette.png -colorspace Gray -threshold 55% panel_final.png
第 6 步:整页批处理(Shell)
分镜通常一页 4–6 格,写个循环批量应用同一光影预设,保证整页光源方向一致:
#!/usr/bin/env bash
# batch_light.sh —— 对 panels/ 目录下所有分镜应用背光预设
set -euo pipefail
for panel in panels/*.png; do
base=$(basename "$panel" .png)
python3 render_backlight.py "$panel" "out/${base}_backlight.png"
convert "out/${base}_backlight.png"
( -size 832x1216 radial-gradient:black-white -negate )
-compose multiply -composite "out/${base}_final.png"
echo "done: ${base}"
done
echo "ALL_PANELS_DONE"
提示:在 SD WebUI 中也可以使用「动态提示词(Dynamic Prompts)」插件,把
{backlighting|golden hour|moonlight}做成随机骰子,批量产出不同光影的候选图再人工筛选。
常见问题
Q1:提示词写了 dramatic lighting,为什么生成结果还是平光?
模型对单个 lighting 词的响应很弱。需要「效果词 + 来源词 + 对比词」组合,例如 backlighting, rim light on hair, strong contrast, dark background;同时把 flat lighting, soft light, even lighting 写进负面提示词。也可以用 ControlNet Depth 提高结构性控制。
Q2:怎么保证同一角色在多个分镜中光源方向一致?
把光源方向固化到词库中(如统一用 light source from upper left),并在生成后脚本里统一叠加同一方向的渐变高光。另外可用「参考图 + IP-Adapter + 固定 seed」的方式,让每格都参照第一格的明暗关系。
Q3:彩色漫和黑白漫的光影控制有什么不同?
黑白漫靠「网点密度」表达亮度层级,控制重点是高光留白与阴影面积;彩色漫还要控制色温(暖光偏橙、冷光偏蓝)。建议黑白漫用 black and white, screentone, halftone 提示词,彩色漫则把色温词(warm orange / cool blue)视为第一优先。
Q4:阴影边缘出现噪点或涂抹感怎么办?
放大(Hi-res Fix / 4x Upscaler)后再做二值化,或用 ImageMagick 的 -threshold 收紧边缘;也可以在 img2img 阶段以 0.4–0.5 的 denoise 重绘一次,让阴影更干净。
Q5:可以不加 ControlNet 只靠后期调出光影吗?
可以,但效果有限。后期只能增强「已有」的光影关系,无法凭空创造光源逻辑。正确流程是:生成阶段用提示词 + ControlNet 打好光影骨架,后期只做对比度、暗角、色温等锦上添花的增强。
总结
- 光影是漫画情绪的核心媒介:硬光/背光/月光等不同光影类型承担不同叙事功能,选对类型比堆砌形容词更重要。
- 四层控制法:提示词定方向、ControlNet Depth 定结构、LoRA/预设定风格、后期合成定质感,层层叠加才能稳定复现。
- 词库 + 预设 + 批处理:把光影方案沉淀为 JSON 预设和 Shell 脚本,整页、整部作品的光源一致性不再是难题。
- 负面提示词同样关键:
flat lighting、overexposed等负面词能有效阻止模型「偷懒出平光」。 - 后期增强公式:高光提取 → 对比度 → 暗角 → 风格化,是成本最低的「电影感」加成路径。
下期预告
第 28 天:AI漫画特效——速度线、集中线与闪光
战斗场景的速度线、情绪爆发的集中线、剧情关键格的闪光效果——这些漫画「特效语言」如何用 AI 高效生成?下期将从提示词、LoRA 与后期叠加三方面拆解。
📚 系列目录(持续更新中)
- 第 1 天:AI漫剧制是什么?从概念到行业全景
- 第 2 天:AI漫画生成工具全景对比
- 第 3 天:从小说到漫画:AI漫剧制完整工作流
- 第 4 天:提示词工程:AI漫画分镜的基石
- 第 5 天:角色一致性:AI漫画最难攻克的技术
- 第 6 天:画面构图:用AI控制镜头语言
- 第 7 天:AI漫画的版权问题与法律边界
- 第 8 天:漫剧制 vs 传统漫画——效率与艺术的平衡
- 第 9 天:漫画脚本自动生成——AI编剧入门
- 第 10 天:Stable Diffusion WebUI 漫画工作流搭建
- 第 11 天:ComfyUI 节点式漫画工作流入门
- 第 12 天:ControlNet 在漫画中的应用——姿态控制与构图
- 第 13 天:LoRA 训练——打造专属漫画角色
- 第 14 天:IP-Adapter 实现角色一致性
- 第 15 天:AI漫画上色工作流:从线稿到彩色
- 第 16 天:AI漫画文字处理——气泡、拟声词与排版
- 第 17 天:AI漫画背景生成——场景与特效
- 第 18 天:AI漫画的叙事结构——如何让AI讲好故事
- 第 19 天:漫画分镜自动化——AI辅助页面布局
- 第 20 天:AI漫画风格迁移——从日漫到美漫
- 第 21 天:多角色AI漫画——多人场景的控制技巧
- 第 22 天:AI漫画短篇创作实战——4页故事从零到成品
- 第 23 天:AI漫画长篇连载规划方法
- 第 24 天:漫画角色的表情库建设
- 第 25 天:AI漫画动作场景——战斗与动态效果
- 第 26 天:AI漫画色彩风格统一
- 第 27 天:漫画光影——AI生成的光影效果控制 ← 本篇
- 第 28 天:AI漫画特效——速度线、集中线与闪光 🔜
- 第 29 天:漫画分镜脚本:AI辅助的故事板 🔜
- 第 30 天:AI漫画的对话框与文字布局 🔜
- 第 31 天:AI漫画平台对比:国内外平台分析 🔜
- 第 32 天:用AI创作条漫(Webtoon风格) 🔜
- 第 33 天:AI漫画的字体选择与排版艺术 🔜
- 第 34 天:漫画封面设计:AI生成吸引眼球的封面 🔜
- 第 35 天:AI漫画的社交媒体推广策略 🔜
- 第 36 天:AI漫画的SEO优化与搜索引擎收录 🔜
- 第 37 天:漫画翻译与本地化:AI辅助多语言发布 🔜
- 第 38 天:AI漫画的印刷与出版准备 🔜
- 第 39 天:漫画定价策略:数字版 vs 实体版 🔜
- 第 40 天:AI漫画社区运营指南 🔜
- 第 41 天:AI漫画的商业模式:订阅、广告与IP授权 🔜
- 第 42 天:AI漫画NFT:区块链与数字收藏品 🔜
- 第 43 天:AI漫画比赛与投稿指南 🔜
- 第 44 天:从AI漫画到动画:AI视频生成技术 🔜
- 第 45 天:AI漫画角色IP孵化 🔜
- 第 46 天:AI漫画的跨界合作:游戏、小说、影视 🔜
- 第 47 天:AI漫画的数据分析:读者偏好与内容优化 🔜
- 第 48 天:AI漫画的A/B测试:封面与标题优化 🔜
- 第 49 天:AI漫画的粉丝互动策略 🔜
- 第 50 天:AI漫画的创作伦理与行业规范 🔜
- 第 51 天:从零开始创建AI漫画系列(实操案例) 🔜
- 第 52 天:AI漫画的协作工具:团队工作流 🔜
- 第 53 天:AI漫画的版本管理与素材库建设 🔜
- 第 54 天:AI漫画的时间管理与创作计划 🔜
- 第 55 天:AI漫画的用户反馈与迭代优化 🔜
- 第 56 天:AI漫画的辅助工具生态(PS插件、自动化脚本) 🔜
- 第 57 天:AI漫画的未来:技术趋势与行业预测 🔜
- 第 58 天:AI漫画与传统漫画的融合创作 🔜
- 第 59 天:AI漫画大师访谈与案例研究 🔜
- 第 60 天:AI漫剧制终极指南:完整创作路线图 🔜















暂无评论内容