解决URP后处理中Render Texture透明通道丢失问题
1. 项目概述当URP后处理遇上“消失”的透明通道在Unity的通用渲染管线URP里折腾后处理特别是想用Render Texture抓取带透明通道的画面时很多开发者都踩过同一个坑明明场景里有半透明的UI、粒子或者特效但渲染到Render Texture上之后背景是黑的透明部分也变成了实心色块Alpha通道信息完全丢失。这感觉就像你精心准备了一份透明的PNG图片结果保存时系统却自作主张给你填了个黑色背景所有半透效果瞬间“失效”。这个问题在需要将后处理效果应用于UI层、制作屏幕空间特效或者实现某些自定义的混合效果时会直接导致项目无法推进。我自己在做一个需要将游戏画面与动态UI进行复杂混合的项目时就遇到了它。场景中使用了URP的后处理堆栈Post-processing Stack当我想通过一个摄像机将处理后的画面渲染到Render Texture再交给另一个摄像机或Canvas进行叠加时得到的Render Texture完全没有透明信息。这不仅仅是视觉效果错误更意味着基于Alpha的混合、遮罩等后续操作全部无法进行。经过一番排查和实验我发现这并非代码bug而是URP管线默认的后处理着色器在输出时其渲染目标Render Target的格式配置与我们的预期不符所导致的。核心矛盾点在于URP默认的后处理通道特别是最后的合成通道输出到屏幕时并不关心Alpha通道而当我们要求它输出到一张Render Texture时这个“不关心”就导致了透明数据的缺失。2. 问题根源深度剖析管线、着色器与渲染目标要彻底解决这个问题我们不能停留在“有个办法能修好”的层面必须理解URP管线在处理后处理和渲染目标时的完整逻辑。这有助于我们在未来遇到类似问题时能快速定位到症结所在。2.1 URP渲染流程与后处理插入点URP的渲染流程可以简化为几个核心阶段不透明物体渲染、天空盒绘制、透明物体渲染以及后处理。后处理效果是在所有场景物体渲染到一个中间缓冲区通常是相机目标即屏幕或Render Texture之后再通过一系列全屏Pass施加的。关键在于URP的后处理效果如Bloom, Color Grading, Vignette等是通过一个叫FinalPostProcessPass的Pass执行的。这个Pass的输入是经过之前所有渲染的、包含RGBA信息的颜色缓冲区但其输出目标默认情况下被设计为直接写入到显示设备的帧缓冲区即屏幕。对于屏幕显示而言Alpha通道通常是无用的除非在特定混合模式下因此URP内置的后处理着色器尤其是负责最终合成的UberPost.shader在编写时其片段着色器Fragment Shader的输出结构可能只包含了RGB分量或者虽然声明了包含Alpha的half4但在计算过程中并未对Alpha通道进行正确的传递或处理。2.2 Render Texture的格式要求与不匹配当我们创建一个Render Texture并希望它存储透明信息时我们必须将其Format设置为支持Alpha通道的格式例如ARGB32、ARGBHalf或ARGBFloat。然而这只是一个必要条件而非充分条件。问题的核心在于着色器与渲染目标之间的契约。即使Render Texture准备好了接收Alpha格式正确负责写入它的着色器也必须明确地、正确地向该渲染目标的Alpha通道写入数据。URP默认的后处理着色器在最终输出时其输出语义绑定可能只关联了RGB目标或者其Alpha值被固定为了1.0不透明。当我们将相机Output设置为Render Texture时相机渲染的最终结果就是后处理Pass的输出。如果该着色器不输出有效的Alpha那么Render Texture的Alpha通道自然就是空的或全为1在显示时空Alpha通道通常表现为黑色值为0或白色值为1导致透明感丧失。2.3 默认后处理着色器的“盲区”通过分析网络上的解决方案如修改UberPost着色器我们可以反向推断出问题的具体技术细节。默认的UberPost着色器文件是URP包内置的其代码类似于// 简化示意非真实代码 half4 Frag(Varyings input) : SV_Target { // ... 复杂的后处理颜色计算仅针对RGB... half3 finalColor ...; // Alpha通道可能被忽略或设为固定值 return half4(finalColor, 1.0); // Alpha硬编码为1 }可以看到着色器最后返回的颜色值其Alpha分量是直接写死的1.0。这意味着无论原始场景的Alpha信息如何经过此后处理步骤后所有像素都会变成完全不透明。这就是为什么渲染到Render Texture后透明信息消失的根本原因。注意这里说的“默认着色器”通常指的是URP资源中Renderer所引用的PostProcessData文件里配置的着色器。直接修改引擎内置的.shader文件是危险且不可维护的因为更新URP包时会被覆盖。正确的做法是创建一份副本进行修改。3. 核心解决方案复制并修改后处理着色器理解了原理解决方案就清晰了我们需要一个能正确传递或处理Alpha通道的后处理着色器。以下是经过实践验证的详细步骤。3.1 定位并复制关键的UberPost着色器创建URP后处理数据资产如果尚未创建在Unity编辑器中通常我们通过Project Settings-Graphics-Scriptable Render Pipeline Settings分配一个URP Asset。在这个Asset或你使用的Renderer的Renderer Features列表里可能会关联一个PostProcessData文件。这个文件包含了后处理效果所需的着色器和纹理资源。进入Debug模式查找在Project窗口中找到这个PostProcessData资产选中它。在Inspector窗口的右上角将调试模式从Normal切换到Debug。这会展开所有隐藏的序列化字段。定位UberPostPS在Debug视图下你会找到一个名为shaders的数组列表其中包含诸如BloomPS、GradingPS、UberPostPS等条目。我们需要关注的是UberPostPS它正是负责最终颜色合成与输出的后处理着色器。点击它右侧的圆形对象字段可以定位到引擎资源包中的原始着色器文件路径通常类似于Packages/com.unity.render-pipelines.universal/...。复制到项目目录切勿直接修改包内的文件右键点击定位到的UberPostPS着色器文件选择Copy。然后在你项目的Assets文件夹下例如Assets/Shaders/PostProcessing右键选择Paste。这样就创建了一份该着色器的副本你可以安全地修改它。重命名是个好习惯比如UberPostWithAlpha.shader。3.2 修改着色器代码以传递Alpha用你喜欢的代码编辑器如VSCode, Rider打开刚刚复制的着色器文件。我们需要找到片段着色器函数通常名为Frag、Fragment或PS并确保它正确处理Alpha。查找与修改的关键点寻找输入结构首先找到着色器接收屏幕图像输入的地方。通常会有一个采样主纹理的语句例如half4 color SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv);。这个color变量很可能已经包含了来自上一个渲染步骤的RGBA信息其中A通道可能就是我们需要传递的Alpha。修改输出接着找到函数的返回值。它很可能长这样return half4(finalColor.rgb, 1.0);或return finalColor;但finalColor的a可能未被赋值。我们的目标是确保返回值的.a分量来自正确的源。情况A直接传递输入Alpha。如果后处理效果不需要改变透明度最简单的方式是直接传递输入纹理的Alpha。// 修改前可能类似 half3 processedRGB ... // 各种后处理计算 return half4(processedRGB, 1.0); // 修改后 half4 inputColor SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); half3 processedRGB ... // 基于inputColor.rgb的计算 return half4(processedRGB, inputColor.a); // 关键将inputColor.a作为输出Alpha情况B需要根据效果调整Alpha。某些后处理效果如某些风格的渐晕或屏幕扭曲可能也需要影响Alpha。这需要更复杂的逻辑但基本原则是不要将Alpha硬编码为1.0而是基于输入Alpha和效果需求进行计算。一个常见的、更稳健的修改示例在UberPost着色器中找到FragUberPost函数。在其内部通常会有对_MainTex的采样。我们可以在函数开头采样并保存完整的half4然后在最终返回时使用保存的Alpha。// 假设在FragUberPost函数内部 half4 color SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, uv); // ... 后续所有对颜色的计算可能基于color.rgb生成finalRGB ... // 在函数的最后返回结果处 // 将计算得到的finalRGB与原始输入的color.a组合 return half4(finalRGB, color.a);实操心得修改着色器时务必注意变量作用域和命名。有时原始的color变量可能在后续被重写。最安全的方法是在函数一开始采样_MainTex后立即将color.a存储到一个单独的变量中例如inputAlpha然后在最终返回时使用它。3.3 更新PostProcessData引用修改并保存着色器文件后回到Unity编辑器。选中你项目中的PostProcessData资产如果之前没有你可能需要从原始的URPPostProcessData复制一个到Assets目录下。在Inspector的Debug模式下找到shaders列表里的UberPostPS条目。将它的引用从原来的内置着色器拖拽或选择为你刚刚修改并保存的新着色器文件例如UberPostWithAlpha。现在当你的URP渲染器执行后处理时它将使用你修改过的、能够传递Alpha通道的着色器。3.4 配置相机与Render Texture创建Render Texture在Project中创建一张Render Texture。在Inspector中将其Format设置为包含Alpha的格式如ARGB 32 bit(8 bits per channel)。ARGBHalf(16 bits per channel) 能提供更高的精度适合HDR或需要更平滑透明度过渡的场景但消耗更多内存。配置相机将需要进行后处理的相机Output从Screen改为Render Texture并将上一步创建的Render Texture拖拽赋值。确保该相机的Post Processing选项是勾选的并且其Volume层叠设置正确。重要检查相机的Background Type。如果它是Skybox或Solid Color相机会清除颜色和深度缓冲区这可能会用不透明的背景色覆盖掉你期望的透明背景。对于需要捕获透明背景的相机通常将其Background Type设置为Don‘t Clear或Uninitialized但这需要与你的渲染顺序和场景管理配合。更常见的做法是如果场景本身有透明物体确保背景是透明的比如没有天空盒或者使用一个纯色背景但Alpha为0。4. 进阶方案与替代思路修改UberPost着色器是最直接的方案但并非唯一。根据项目具体需求可以考虑其他方法。4.1 使用Renderer Feature进行自定义后处理如果项目使用的后处理效果相对简单或高度定制可以绕过URP内置的后处理堆栈使用Scriptable Renderer Feature来实现自定义的后处理Pass。这样可以获得对渲染目标和着色器输出的完全控制。创建自定义Renderer Feature编写一个继承自ScriptableRendererFeature的类在其中添加一个继承自ScriptableRenderPass的Pass。在Pass中配置渲染目标在Configure方法中你可以使用ConfigureTarget明确指定一个带有Alpha通道的RenderTextureDescriptor来创建渲染目标。编写自定义后处理着色器在这个方案中你可以从头编写一个简单的后处理着色器确保其输出包含正确的Alpha值。这避免了修改复杂内置着色器的风险。执行渲染在Execute方法中使用Blitter或CommandBuffer.DrawProcedural来执行你的自定义着色器将源纹理相机颜色缓冲区渲染到目标Render Texture。这种方法更灵活适合将特定的后处理效果与透明通道需求解耦但实现复杂度较高。4.2 双相机渲染合成策略另一个思路是分离渲染层。使用两个相机相机A渲染不透明和透明物体不启用后处理输出到一张带Alpha的Render Texture A。相机B渲染一个全屏四边形使用一个自定义材质该材质先对Render Texture A进行采样然后在片元着色器中手动应用你所需的后处理效果如颜色校正、模糊等最后输出到最终的Render Texture B或直接到屏幕。这种方法将“场景渲染”和“后处理”分成了两个独立的步骤在第二步的着色器中你可以完全控制如何混合颜色和Alpha。缺点是性能开销可能稍大多一次绘制调用且需要手动实现所有后处理效果。4.3 检查与调整Color Space和Player Settings有时透明通道问题可能与更底层的设置有关。Color Space在Project Settings-Player-Other Settings中确保Color Space是Linear。在某些情况下Gamma空间下的混合和透明度处理可能表现异常。Alpha通道输出支持对于某些发布平台如WebGL可能需要检查播放器设置中是否完全支持透明通道。不过对于在编辑器内Render Texture显示异常的问题这通常不是主因。5. 调试技巧与常见问题排查即使按照上述步骤操作有时可能仍无法立即看到效果。以下是一些实用的调试技巧。5.1 可视化Alpha通道在Scene视图或一个RawImage UI元素上显示Render Texture时我们默认看到的是RGB合成后的效果。为了确认Alpha通道是否真的存在数据可以进行可视化调试在材质中分离显示创建一个简单的Unlit Shader或使用UI的Unlit/Transparent着色器。在片元着色器中直接输出Alpha值作为灰度图。// 简易示例 fixed4 frag (v2f i) : SV_Target { fixed4 col tex2D(_MainTex, i.uv); // 将Alpha通道作为灰度颜色输出 return fixed4(col.a, col.a, col.a, 1.0); }将这个材质赋给一个显示Render Texture的物体如果看到灰度变化说明Alpha通道有数据。使用Frame Debugger打开Window-Analysis-Frame Debugger。逐步查看渲染过程找到绘制到你Render Texture的那一帧。点击该Draw Call查看其输出的渲染目标Render Target。Frame Debugger有时可以切换查看渲染目标的R、G、B、A各个通道。5.2 常见问题检查清单问题现象可能原因排查步骤Render Texture全黑或全白相机没有正确渲染内容到RTRT格式不支持着色器输出错误。1. 检查相机Culling Mask、位置。2. 检查RT的Format是否为有效的颜色格式如ARGB32。3. 在Frame Debugger中查看对应Draw Call的输出。有颜色但无透明Alpha全为1后处理着色器输出Alpha固定为1。1. 确认修改的着色器副本是否正确赋值给PostProcessData。2. 在着色器代码中打断点或添加特殊颜色输出如return half4(0,1,0, inputAlpha);调试。透明区域显示为纯色如黑、白显示Render Texture的材质/着色器未使用Alpha进行混合。1. 检查用于显示RT的材质使用的Shader确保其渲染队列Queue是Transparent且启用了混合Blend SrcAlpha OneMinusSrcAlpha。修改着色器后无变化Shader未编译缓存问题PostProcessData未正确应用。1. 在Project窗口搜索栏输入t:shader找到你的着色器查看其Compile and show code确认修改已生效。2. 尝试重启Unity编辑器。3. 确认修改了正确Renderer所引用的PostProcessData。部分后处理效果导致Alpha异常某些后处理效果如Bloom会强烈影响高亮区域的颜色可能意外影响Alpha。1. 在修改的着色器中确保Alpha传递逻辑在所有后处理计算之后。2. 考虑是否需要在应用某些强效果如Bloom前保存Alpha最后再合并。5.3 性能与内存考量Render Texture尺寸与格式全屏的ARGBHalf格式RT会占用可观的内存和带宽。在移动端或性能敏感场景务必评估是否真的需要全分辨率和高精度Alpha。可以考虑降低RT分辨率或使用ARGB32。多相机渲染如果使用双相机方案注意额外的Draw Call和Overdraw带来的性能开销。Shader复杂度修改后的UberPost着色器因增加了Alpha传递逻辑理论上指令数会微增但对现代GPU影响通常微乎其微。解决URP后处理下Render Texture透明通道丢失的问题本质上是让渲染管线的最终输出环节与你自定义的渲染目标需求对齐。通过复制并修改后处理着色器这一方法直接而有效。在整个排查和解决过程中善用Frame Debugger、理解着色器代码的基础、以及清晰地区分“数据存在”和“数据显示”这两个环节是快速定位问题的关键。这个经验也提醒我们在使用任何高级渲染框架时当默认行为不符合预期时深入一层去理解其内部机制往往是解锁自定义渲染能力的必经之路。

相关新闻

HTML5语义化与性能优化实践指南

HTML5语义化与性能优化实践指南

1. HTML基础概念与核心价值超文本标记语言(HTML)作为万维网的基石语言,已经伴随互联网发展超过三十年。作为前端开发的入门技术,HTML的重要性不仅体现在其基础性,更在于它定义了内容与结构分离的现代网页设计理念。我在…

2026/7/14 5:19:01阅读更多 →
模板驱动型文档自动化:让专业文档生产变成结构化填空

模板驱动型文档自动化:让专业文档生产变成结构化填空

1. 项目概述:用模板把文档生产变成“填空题”你有没有过这种体验:每周要交三份客户方案,每份结构雷同——封面、目录、痛点分析、解决方案、报价单、服务承诺;但每次都要从零新建Word,手动调格式、插页码、对齐标题、更…

2026/7/14 5:19:01阅读更多 →
【真小白每天学习AD笔记(二)】AD26软件保姆级原理图操作

【真小白每天学习AD笔记(二)】AD26软件保姆级原理图操作

真的非常感谢大家的支持!!!博主上班和学业的双重buff在身&#xff0c;所以更新有点慢&#xff0c;希望大家能谅解哈~(*>﹏<*)′ 没想到真的能得到大家的点赞和评论&#xff0c;以后我会使用中就开始写笔记&#xff01;&#xff01;&#xff01; 这里放一个阿b的链接&…

2026/7/14 5:19:01阅读更多 →
3分钟快速搭建你的AI股票分析平台:TradingAgents-CN终极指南

3分钟快速搭建你的AI股票分析平台:TradingAgents-CN终极指南

3分钟快速搭建你的AI股票分析平台&#xff1a;TradingAgents-CN终极指南 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 还在为复杂的金融量化系…

2026/7/14 7:49:19阅读更多 →
CentOS yum源配置与优化全指南

CentOS yum源配置与优化全指南

1. CentOS yum源配置基础认知在CentOS系统中&#xff0c;yum&#xff08;Yellowdog Updater Modified&#xff09;是RPM包管理器的前端工具&#xff0c;它通过自动解决依赖关系来简化软件安装过程。而yum源则是包含大量RPM软件包的软件仓库&#xff0c;系统通过读取这些仓库的元…

2026/7/14 7:49:19阅读更多 →
3分钟掌握AI多智能体股票分析:TradingAgents-CN终极指南

3分钟掌握AI多智能体股票分析:TradingAgents-CN终极指南

3分钟掌握AI多智能体股票分析&#xff1a;TradingAgents-CN终极指南 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 还在为复杂的金融量化系统望…

2026/7/14 7:49:19阅读更多 →
Jboot核心功能解密:基于JFinal、Dubbo与Nacos的一站式微服务解决方案

Jboot核心功能解密:基于JFinal、Dubbo与Nacos的一站式微服务解决方案

Jboot核心功能解密&#xff1a;基于JFinal、Dubbo与Nacos的一站式微服务解决方案 【免费下载链接】jboot 一个优雅的微服务框架&#xff0c;SpringCloud 之外的另一个选择&#xff0c;已经使用在用户量过亿的商业产品上&#xff0c;有超过1000家公司在使用Jboot做极速开发... …

2026/7/14 7:49:19阅读更多 →
PDF字体乱码终极解决方案:三步搞定PDF补丁丁字体嵌入完整指南

PDF字体乱码终极解决方案:三步搞定PDF补丁丁字体嵌入完整指南

PDF字体乱码终极解决方案&#xff1a;三步搞定PDF补丁丁字体嵌入完整指南 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱&#xff0c;可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档&#xff0c;探查文档结构&#xff0c;提取图片、转成图片等等 项目地址: htt…

2026/7/14 7:49:19阅读更多 →
Unity脚本开发实战:20个核心技巧从入门到精通

Unity脚本开发实战:20个核心技巧从入门到精通

1. 项目概述&#xff1a;为什么Unity脚本是游戏开发的灵魂如果你刚接触Unity&#xff0c;可能会被它强大的编辑器界面和丰富的资源商店所吸引&#xff0c;觉得拖拖拽拽就能做出游戏。但当你真正想实现一个“按下空格键让角色跳跃”的功能时&#xff0c;你会发现&#xff0c;离开…

2026/7/14 7:44:19阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比&#xff1a;全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时&#xff0c;第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/14 4:56:14阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件&#xff1a;5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/14 2:55:05阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL&#xff1a;跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/14 6:17:41阅读更多 →
【Cursor数据库安全红线】:自动执行SQL前必须校验的6项权限策略,金融级项目已强制落地

【Cursor数据库安全红线】:自动执行SQL前必须校验的6项权限策略,金融级项目已强制落地

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Cursor数据库安全红线概览 Cursor 作为一款基于 AI 的智能编程助手&#xff0c;其本地数据库&#xff08;SQLite 存储&#xff09;承载着用户代码片段、会话历史、自定义规则及敏感上下文信息。理解其安…

2026/7/14 0:03:18阅读更多 →
【Notion AI写作避坑白皮书】:基于127份真实用户失败案例,总结6大致命误用陷阱

【Notion AI写作避坑白皮书】:基于127份真实用户失败案例,总结6大致命误用陷阱

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Notion AI写作辅助的底层能力边界认知 Notion AI 并非通用大语言模型的直接封装&#xff0c;而是基于 Llama 系列与自研微调模型构建的轻量化推理服务&#xff0c;其输入上下文窗口严格限制在 8192 token&…

2026/7/14 0:03:18阅读更多 →
AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;AI Agent数据越界行为的合规性挑战与溯源必要性 AI Agent在自主执行任务过程中&#xff0c;可能因提示注入、上下文污染或权限配置缺陷&#xff0c;无意或有意访问、缓存、传输受保护数据&#xff08;如PII、G…

2026/7/14 0:03:18阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/13 4:21:17阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/14 4:45:36阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/14 2:42:17阅读更多 →