AI 照片没有胶片颗粒:5 步还原真实摄影质感

照片 Prompt 输出干净得像 CG、完全没颗粒。根因是模型偏向干净渲染。用具体胶片型号、加权颗粒,再配保颗粒的放大或后期补救。

你写 35mm film photograph of a coffee shop,结果出来一张干净得离谱的图:渐变完美平滑、零颗粒、阴影区是大块纯色。看起来像”照片的 CG 渲染”,不是真照片。这是模型默认值的问题。SDXL、Flux(包括 FLUX.2)、Midjourney 全都偏向干净渲染,因为训练集里大量是修干净的图库照片和数字图像。真实的颗粒——卤化银晶体或高 ISO 传感器带来的随机亮度噪点——必须显式召唤出来。

最快修法: 锚定一种具体的胶片型号(别只写 “film”),加上带权重的颗粒词,再把 CFG/guidance 调低一档。Midjourney 上加 --style raw。如果这样之后图还是干净的,说明颗粒是在下游被吃掉了——要么是放大器,要么是低质量 JPEG 导出,直接跳到 Step 4-5。

先判断你属于哪一类

症状最可能的原因跳到
Prompt 写了 film 但没具体型号笼统的胶片词被平均成干净Step 1
1:1 放大看也是干净的干净渲染偏向,没给颗粒加权Step 1-3
预览有颗粒、放大后没了放大器把颗粒当噪点抹掉Step 4
编辑器里有颗粒、导出文件没了低质量 JPEG 把颗粒量化掉Step 5
Midjourney 把一切都自动美化默认 stylize 太强Step 1(--style raw

常见原因

按命中率从高到低排。

1. 只写了 “film” 或 “analog” 没给型号

film photoanalogvintage photograph 太宽。模型在”修干净的老照片扫描件”和”真带颗粒的负片”之间取平均,干净那边一般会赢。

如何判断:Prompt 里有 film,但没有 Kodak PortraFuji Pro 这种具体胶片名。

2. Guidance / CFG 太高

高 guidance 会把模型狠狠推向它以为你想要的”完美干净照片”,把微观纹理磨掉。截至 2026 年 6 月,对颗粒友好的范围大致是 SDXL 的 CFG 5-7、Flux 的 guidance 3.0-3.8。跑得更高,颗粒会第一个消失。

如何判断:SDXL CFG 高于 8,或 Flux guidance 高于 4。降一档重渲一次。

3. 渲染分辨率太低

768x768 及以下的渲染,颗粒细节会在 latent 压缩里丢掉。模型在这个尺寸下没法干净地表征噪声 pattern,干脆”四舍五入”掉了。

如何判断:同 Prompt 在 1024x1024 有颗粒,768x768 没有。

4. 后处理放大器把颗粒磨掉了

ESRGAN、4x-UltraSharp,尤其是 SwinIR_4x,放大时会激进抹平颗粒。它们被训练成把颗粒当噪点去除。SUPIR 这类扩散式修复器还可能在真颗粒上糊一层自己脑补的平滑纹理。

如何判断:放大前有颗粒、放大后没了。

5. JPEG 导出质量太低

Quality 75 以下保存 JPEG,颗粒会被量化成块状 8x8 伪影,视觉上读成”没纹理”。

如何判断:看文件大小。1024x1024 的照片 JPEG 小于 200KB,就是压得太狠了。

最短修复路径

Step 1:用具体的胶片型号

训练集里对具体型号有强关联。把 film photo 替换为下面其中一个:

Kodak Portra 400(暖肤色、柔颗粒、经典编辑风)
Kodak Tri-X 400(经典黑白、颗粒明显)
Fujifilm Pro 400H(冷调、细颗粒、婚礼摄影最爱)
Fujifilm Velvia 50(高饱和、极细颗粒、风光)
Cinestill 800T(钨丝灯白平衡、梦幻光晕、霓虹夜景)
Ilford HP5(黑白、粗砺、新闻摄影感)
Kodak Gold 200(暖调、轻颗粒、度假快照)

这些在训练集里都有各自鲜明的颗粒特征。在 Midjourney V7/V8.1 上再追加 --style raw,它会关掉自动美化那一遍,是保住纹理最有效的一根杠杆(V8.1 自 2026 年 6 月 10 日起为默认模型,V7 仍可在设置里选)。一个能跑的写法:kodak portra 400, 35mm, slight film grain, natural imperfections --style raw

Step 2:给 grain 加权重(SDXL / SD 系)

Prompt 里加:

(film grain:0.8), (visible grain:0.7), (analog noise:0.6),
35mm film, slight noise in shadows, organic grain pattern, ISO 800

权重 0.6-0.8 足以让模型注意到、又不会喧宾夺主。超过 1.0 颗粒会变成视觉伪影而不是纹理。

语法提示:(term:weight) 这种注意力加权是 SDXL / Automatic1111 / ComfyUI 的特性。Flux 会忽略带权重的括号,所以对 Flux 直接把颗粒词写成自然语言就行:35mm film, heavy organic film grain, ISO 800, visible noise in shadows

Step 3:负向 Prompt 拦”干净”(仅 SDXL)

digital, clean, smooth, noise-free, CGI, 3d render, ultra clean,
no grain, perfect smooth gradient, plastic, oversharpened

主动排斥”干净渲染”偏向。Flux 不像 SDXL 那样用负向 Prompt(它是 flow-matching 模型,不是 classifier-free guidance),所以这一步只适用于 SDXL / SD 系。对 Flux,改成降低 guidance(见 Step 2 的原因)并加载一个写实或胶片颗粒 LoRA。

Step 4:换掉激进放大器

ESRGAN 或 SwinIR 换成对颗粒友好的:

4x_NMKD-Siax(保颗粒效果更好)
4x_RealisticRescaler(专为写实照片设计、保纹理)
4x_foolhardy_Remacri(温和、保住微观细节)

这些可以在 OpenModelDB 上找到并下载。或者直接用 img2img 低 denoise(0.2-0.3)+ 同样 Prompt 做放大,相当于让扩散模型再过一遍,能重新引入颗粒而不是抹平。在 ComfyUI 里也可以放大后用 BetterFilmGrain 节点重新补颗粒,而不是跟放大器硬刚。

Step 5:实在不行后期补颗粒

都救不回来时,后期加上:

Photoshop:Filter > Camera Raw > Effects > Grain。Amount 25,Size 25,Roughness 50
Lightroom:Develop 模块 > Effects 面板 > Grain。Amount 25,Size 25,Roughness 50
Affinity Photo:Filters > Noise > Add Noise,2.5% Gaussian,单色
DaVinci Resolve(视频用):Effects > ResolveFX Texture > Film Grain

在 Lightroom 和 Camera Raw 里,Roughness 要大于等于 Size。Roughness 比 Size 小的时候,颗粒会显得块状、很假。免费的 GIMP HSV Noise 滤镜跑 5% 仅明度噪点也行。后期补颗粒,总比一张全干净的图当”胶片照片”出货强。

怎么确认修好了

  • 在中间调区域(皮肤、灰墙这种)放到 100%1:1 像素视图)。应该看到细密的随机亮度噪点,而不是一片平滑死面。
  • 看阴影:真颗粒在阴影里也看得到,不是只在高光。死平的纯黑阴影块说明颗粒丢了。
  • 导出最终文件后,重新打开导出的那个文件(不是编辑器里的预览)再放大看一遍。这能抓到 Step 5 / JPEG 那种”软件里有、一存就死”的情况。

预防建议

  • 维护一份 5 种常用胶片型号清单,按情绪轮换。
  • 人像 preset 里默认带颗粒:(film grain:0.7)(SDXL),或者胶片颗粒 LoRA 挂 0.4-0.6(Flux)。
  • 想要颗粒感的图永远别用 ESRGAN 或 SwinIR 放大,换 NMKD-SiaxRemacri
  • 照片类 Prompt 最低 1024x1024 起渲染,不要再低。
  • 最终 JPEG 质量 92+,或者带颗粒的图直接存 PNG,避免被压扁。

常见问题

Prompt 里明明写了 “film grain”,为什么 AI 照片还是干净的? 光一个 film 会和训练集里数百万张干净数字图被平均掉。把它锚到具体型号(Kodak Portra 400),在 SDXL 上给颗粒词加权((film grain:0.8)),Midjourney 上加 --style raw。笼统的词几乎总是输给干净渲染偏向。

Flux 上负向 Prompt 能拦颗粒缺失吗? 不能。Flux 是 flow-matching 模型,不像 SDXL 那样支持 classifier-free 负向 Prompt。对 Flux,把 guidance 降到大约 3.0-3.8,颗粒词写成自然语言,再加载一个写实或胶片颗粒 LoRA。负向 Prompt 只在 SDXL / SD 系上有用。

Midjourney 哪个版本、哪个参数颗粒最足? 在 V7 或 V8.1 上用 --style raw 关掉自动美化那一遍,再写上胶片型号和 ISO。截至 2026 年 6 月 10 日 V8.1 是默认模型;V7 仍可在设置里选,喜欢它的纹理也可以继续用。

放大之后颗粒就没了,为什么? 大多数放大器(ESRGAN、4x-UltraSharpSwinIR_4x)被训练成把颗粒当噪点去除。换成对颗粒友好的型号(4x_NMKD-Siax4x_foolhardy_Remacri),用 img2img 在 denoise 0.2-0.3 下放大,或者放大后再补颗粒(ComfyUI BetterFilmGrain 或后期一步)。

颗粒权重多大算太多? SDXL 上权重超过 1.0,颗粒就从纹理变成可见伪影(点状、扎眼),保持在 0.6-0.8。Lightroom / Camera Raw 里 Amount 大约 25 是自然胶片感,50+ 就开始像刻意的风格化了。

相关阅读

标签: #ai-image #排查 #texture #postprocess