Unity ShaderGraph实战指南:从美术协作到URP渲染优化

news2026/5/22 7:47:08
1. 为什么我劝新手别急着写Shader代码——从一个被美术追着问“这个效果能不能加”的下午说起去年冬天我在一家做AR教育产品的团队里做技术美术。那天下午三点UI组的同事抱着iPad冲进我工位“老师这个粒子光晕要加呼吸感现在太死板了”我打开Unity翻出之前写的Unlit Shader改了两行_Time.y * 0.5又调了三次smoothstep的参数最后导出一个带Alpha渐变的Pass——整个过程花了22分钟。但当我把新材质拖到场景里时美术盯着预览窗口皱眉“嗯……好像还是不太对能再软一点吗边缘别那么硬。”我默默关掉ShaderLab编辑器点开ShaderGraph新建一个Gradient Noise节点连上Tiling和Offset拖动两个滑块实时看到光晕边缘像水波一样漾开——这次只用了47秒而且她自己就能调。这就是ShaderGraph最根本的价值它把“写Shader”这件事从程序员专属的编译-报错-查文档-改语法-再编译的闭环变成了美术和TA之间可触摸、可试错、可协作的视觉工作流。它不是替代ShaderLab而是把HLSL的底层能力封装成带预览的可视化积木。你不需要背SV_POSITION和COLOR语义但必须理解什么是世界空间、什么是UV偏移、为什么法线贴图要用DecodeNormal——这些概念没变只是表达方式变了。关键词Unity ShaderGraph、可视化着色器、技术美术协作、PBR流程适配、URP兼容性。这篇文章适合三类人刚接触渲染的新手TA想绕过语法门槛快速出效果有ShaderLab经验但卡在URP迁移的老手还有那些被策划反复追问“这个特效能不能做”的美术同学——你们真的可以自己拖节点试试看。我不会讲“什么是Shader”也不会罗列所有节点名称。我要带你走一遍真实项目里最常踩的五个坑为什么连上Tint颜色后模型突然全黑为什么用Sample Texture2D采样一张纯白贴图输出却是灰的为什么在URP下写了Normal Vector却完全不生效为什么Preview窗口显示正常Build之后在真机上就变紫以及——最重要的是怎么用三个节点做出一个能通过美术验收的动态溶解效果。每一步都对应一个真实需求每一个报错都来自我删掉的几十行调试日志。2. ShaderGraph的核心逻辑它不是连线游戏而是一张数据流地图很多人第一次打开ShaderGraph会下意识把它当成Unity版的Substance Designer——拖几个Texture Sample连几条线点一下Apply以为就完事了。结果发现模型要么全黑要么泛紫要么在不同光照下表现诡异。问题不在节点本身而在你没看清这张图真正描述的是什么它不是材质属性的连线图而是一张逐像素计算的数据流地图。每个节点都是一个函数每根线都是一个float3或float4变量而整个Graph的终点是最终写入帧缓冲区的那个RGBA值。2.1 理解主节点Master Stack的隐含契约在ShaderGraph里你永远绕不开的就是主节点Master Stack。它看起来只是个收口但其实藏着三重契约第一重是渲染管线契约。如果你用的是Built-in Render Pipeline主节点叫“Unlit Master”或“Lit Master”换成URP它就变成“Unlit Graph”或“Lit Graph”。别小看这名字变化——URP的Lit Graph默认启用PBR光照模型意味着你连上Base Color后系统会自动乘以光照方向、环境光、金属度、粗糙度等参数。而Built-in的Lit Master则依赖于Legacy Lighting。我见过太多人把URP项目里的Lit Graph直接套用Built-in的节点逻辑结果法线贴图完全失效因为URP要求法线必须是切线空间且经过Normalize处理而Built-in默认接受世界空间法线。第二重是数据类型契约。主节点的每个输入口都有严格的数据维度要求。比如Albedo输入必须是Vector3RGB但如果你连进去的是一个Vector4RGBAShaderGraph不会报错而是自动截取前三个分量——这时候如果第四个分量存着Mask信息你就永远丢失了。更隐蔽的是Normal输入它必须是Vector3且范围在[-1,1]但很多美术给的法线贴图是Vector3但存储在[0,1]空间即RG通道存XYB通道存Z这时候必须先过一个Transform Normal节点转成切线空间再连到Normal入口。我曾经为这个问题调试了三天最后发现是美术导出FBX时勾选了“Export Tangents”导致法线被双重转换。第三重是语义契约。主节点背后绑定了HLSL的语义Semantic比如SV_TARGET对应最终输出TEXCOORD0对应UV0。当你添加Custom Function节点时如果手动写了o.uv v.uv;就必须确保这个uv变量绑定到TEXCOORD0语义否则在不同平台尤其是移动端会出现UV错乱。这不是ShaderGraph的bug而是它忠实地把你的意图翻译成了底层Shader——它不替你思考只替你组织。提示在URP项目中右键主节点选择“Show Generated Code”你能看到它生成的HLSL片段。重点看struct Attributes和struct Varyings定义那里明确写了每个变量绑定的语义。这是理解数据流向最直接的方式。2.2 UV坐标不是“贴图坐标”而是“采样地址发生器”几乎所有初学者的第一个Shader都是“UV动画”。但很快就会发现用Time节点加到UV上贴图确实动了但边缘出现撕裂改成frac(UV Time)撕裂没了但整个画面像被拉伸了一倍。问题出在对UV本质的理解偏差。UV本质上不是“贴图上的某个点”而是采样器向纹理硬件发出的地址请求。当你写tex2D(_MainTex, i.uv)时GPU做的不是“找UV0.5的地方”而是根据当前像素在屏幕上的位置结合i.uv的梯度dU/dx, dV/dy决定用哪种Mipmap层级、是否开启各向异性过滤。所以i.uv的数值范围本身没有物理意义有意义的是它的变化率。举个实例要做一个循环滚动的背景图。错误做法是i.uv _Time.y * 0.1正确做法是frac(i.uv _Time.y * 0.1)。为什么因为frac保证了UV始终在[0,1]区间内让GPU能稳定使用最精细的Mipmap层级而直接相加会让UV超出[0,1]后进入重复区域此时GPU可能误判为需要降级Mipmap导致远处纹理模糊。更进一步如果滚动速度很快还要加ddx/ddy补偿——但这已经超出Graph范畴需要Custom Function。我在做AR沙盘项目时用ShaderGraph实现地形热力图。美术给的热力图是1024x1024单通道图但实际地形Mesh只有64x64顶点。如果直接用顶点UV采样会出现严重块状锯齿。解决方案是在Graph里加一个Screen Position节点切换到Raw模式用屏幕坐标除以屏幕分辨率得到归一化坐标再映射到热力图UV——这样采样点始终跟随摄像机移动且分辨率与屏幕一致彻底解决锯齿。2.3 颜色空间sRGB不是选项而是铁律这是最致命也最容易被忽略的一环。Unity默认开启sRGB色彩空间Edit Project Settings Player Other Settings Color Space Gamma这意味着所有标记为sRGB的纹理如Albedo贴图在采样时会被自动伽马校正linearColor pow(srgbColor, 2.2)。而你的Shader计算必须在Linear空间进行否则光照叠加会发灰。问题来了当你在ShaderGraph里用Color节点定义一个纯白1,1,1它默认是Linear空间值但如果你用Sample Texture2D采样一张sRGB标记的贴图得到的已经是Linear值。如果此时你把两者直接相加比如做Tint混合就会出现过曝。正确做法是所有来自纹理的输入都视为Linear值所有手动输入的颜色如Tint如果想匹配美术直觉应该先过Gamma To Linear节点转换。我曾为一个医疗可视化项目做CT扫描图着色。美术给的LUT贴图是sRGB格式但CT原始数据是Linear灰度值。一开始我把CT数据直接连到LUT的U坐标结果整个图像发粉。排查三天才发现LUT贴图在Inspector里被误设为“Default”而非“sRGB Texture”导致采样时未做伽马校正LUT的R通道实际是Linear值而CT数据也是Linear两者相乘后超出了显示范围。改成sRGB Texture并加Linear To Gamma节点后色彩立刻准确。注意URP中主节点的Albedo输入口已内置sRGB转Linear逻辑所以你连进去的sRGB贴图会自动转换。但如果你用Custom Function手动采样就必须自己调用SAMPLE_TEXTURE2D宏并确保纹理采样器设置正确。3. 从零搭建第一个可用Shader一个能通过美术验收的溶解效果现在我们动手做一个真实项目里高频需求的溶解效果Dissolve Effect。它要满足1溶解边缘有发光过渡2溶解进度可由脚本控制3支持多光源下的PBR正确响应4在URP和Built-in下都能用。整个过程不用写一行代码但每一步都要解释清楚背后的原理。3.1 溶解核心噪声图阈值裁剪的物理本质溶解效果的本质是用一张噪声图Noise Texture作为遮罩逐步“擦除”模型表面。但直接用step(noise, threshold)会产生硬边所以需要smoothstep做平滑过渡。关键在于噪声图的选择决定了溶解质感。Perlin Noise连续、柔和适合有机体溶解如血肉、蜡烛融化Worley Noise块状、尖锐适合机械断裂如金属碎裂、玻璃崩解Gradient Noise介于两者之间ShaderGraph内置最易上手我选Gradient Noise因为它在URP下性能最优GPU内置指令优化。在Graph里添加Gradient Noise节点连接Time节点到Tiling输入让噪声随时间流动Scale设为8控制噪声密度Offset设为Time * 0.5制造流动感。此时输出是一个Vector1标量范围在[-1,1]。但注意Gradient Noise输出是[-1,1]而smoothstep要求输入在[0,1]。所以先加1再除以2得到[0,1]范围的噪声值。这步不能省——我见过太多人直接连smoothstep结果溶解区域随机闪烁就是因为输入超出定义域。3.2 边缘发光不是加光而是重构法线美术常说“溶解边缘要发光”新手第一反应是加Emission。但这样会导致1发光不受光照影响永远亮2边缘没有立体感。真正专业做法是用噪声梯度重构切线空间法线让边缘产生高光反射。具体操作添加Gradient Noise第二个实例参数同上但这次把Offset改为Time * 0.5 0.1错开相位避免同步运动。用Append节点把两个噪声值合成Vector2再用Normalize转成单位向量。接着用Transform Vector节点把该向量从Object空间转到World空间Target Space选World最后连到主节点的Normal输入。原理很简单法线向量决定像素反射光线的方向。当噪声梯度指向摄像机时该像素获得强高光当指向光源时获得漫反射增强。这样溶解边缘自然呈现“受光面亮、背光面暗”的立体感比单纯加Emission真实十倍。我在做AR文物修复项目时用此法模拟青铜器锈蚀剥落策展方反馈“终于有了金属被刮开的真实触感”。3.3 进度控制暴露Property不是目的统一数据源才是溶解进度通常由脚本控制比如material.SetFloat(_DissolveAmount, progress)。但新手常犯的错是在Graph里建一个Property节点叫_DissolveAmount类型设为Float然后直接连到smoothstep的Edge参数。问题在于URP中Property节点的值在不同Pass间不共享。当模型开启阴影投射时Shadow Caster Pass会用同一份Material但_DissolveAmount可能未被正确传递导致阴影溶解不同步。正确方案用Exposed Property右键节点→Expose Property并在Inspector里勾选Expose in Inspector。更重要的是在URP中必须确保该Property的Reference Name与脚本中SetFloat的字符串完全一致包括大小写和下划线。我曾因脚本里写dissolveAmount而Graph里是_DissolveAmount导致整整一天进度条无效。进阶技巧把_DissolveAmount连到Remap节点输入范围设为[0,1]输出范围设为[0.2,0.8]。这样即使脚本传入0或1溶解也不会完全消失或完全显现给美术留出调整余量。这是工业级管线必备的容错设计。3.4 兼容性收尾URP与Built-in的双轨适配最后一步决定成败让这个Shader在URP和Built-in下都正确工作。关键差异点有三个主节点类型URP用Lit GraphBuilt-in用Lit Master。不能共用一个Graph必须建两个版本。但节点逻辑可以复用——复制Graph内容粘贴到新Graph里只改主节点。法线空间URP强制切线空间Built-in默认世界空间。解决方案是在Graph开头加Branch节点用Is URP布尔属性判断分支后分别接Transform NormalURP和Transform World NormalBuilt-in。光照模型URP的Lit Graph默认启用IBLImage Based LightingBuilt-in需手动开启。为保一致性把Lighting Model设为Standard (Specular setup)并关闭Enable Specular专注控制漫反射。我维护的项目里所有Shader都采用“双Graph策略”MyShader_URP和MyShader_BuiltIn。虽然多占一点空间但避免了运行时条件编译的复杂度也方便QA分平台测试。4. 真实项目排错实录五个让TA崩溃的瞬间与破解路径ShaderGraph的报错机制很“诚实”——它不告诉你哪里错了只告诉你“编译失败”。下面还原五个我在商业项目中真实经历的崩溃现场以及如何像侦探一样抽丝剥茧。4.1 场景URP下模型突然泛紫Preview窗口却正常现象在Editor里预览完美Build后Android设备上所有使用该Shader的模型变成紫色。排查链路第一反应是纹理路径问题——检查所有Sample Texture2D节点确认纹理Asset存在且未被压缩Android需设为ETC2或ASTC不能Crunch排除后怀疑是sRGB问题把所有纹理的sRGB Texture勾选取消Build测试——依然泛紫关键线索只在Android出现iOS正常。说明是OpenGL ES vs Metal差异打开Frame DebuggerWindow Analysis Frame Debugger抓取一帧定位到该Shader的Draw Call在Shader Properties面板里发现_MainTex_STUV缩放偏移的z和w分量为0——这是UV矩阵的offset为0意味着UV被强制归零根源UV节点未连接任何上游Graph默认输出(0,0)而URP的UV节点在无连接时返回(0,0)导致整个贴图采样在左下角一个像素点修复在UV节点前加Texture Coordinates节点并确保其Channel设为UV0。永远不要让UV节点悬空。4.2 场景溶解边缘闪烁像老式电视信号不良现象溶解动画播放时边缘高频闪烁尤其在摄像机移动时加剧。排查链路先排除噪声图问题换用程序生成的Simple Noise问题依旧怀疑是Time节点精度Time在移动端是half精度可能导致frac计算误差。改用Time (Double)节点问题未解关键突破在Frame Debugger里观察Gradient Noise节点的输出纹理——发现噪声图本身在跳变原因Gradient Noise节点的Tiling输入连了Time但Tiling值过大100时GPU噪声生成器会因浮点精度溢出而返回随机值解决方案把Time乘以0.01再连Tiling或改用Sine节点生成周期性缩放经验所有涉及Tiling、Offset的动态参数初始值务必控制在[0.1, 10]区间这是GPU噪声硬件的稳定工作区。4.3 场景法线贴图失效模型像被压扁的纸片现象导入法线贴图后模型失去立体感高光集中在中心。排查链路检查法线贴图设置Texture TypeNormal MapsRGBOffCompressionNone——全部正确用Debug ViewScene视图右上角切换到Normals发现法线方向全为(0,0,1)——说明法线值未被读取查看Sample Texture2D节点Texture设为法线贴图但Sampler Type是Default而非Normal MapSampler Type决定采样器行为Normal Map会自动启用DecodeNormal函数把[0,1]空间的RG通道转为[-1,1]的XY再计算Z分量改为Normal Map后Debug View立刻显示正确法线教训Sampler Type不是装饰它直接关联底层HLSL宏。Default对应SAMPLE_TEXTURE2DNormal Map对应SAMPLE_TEXTURE2D_NORMAL。4.4 场景溶解进度脚本控制失灵Material Inspector里滑块不动现象脚本调用material.SetFloat(_DissolveAmount, 0.5f)但Inspector里滑块仍停在0模型无变化。排查链路确认脚本获取的Material是Renderer.sharedMaterial还是Renderer.material——前者修改会影响所有使用该材质的物体后者是实例副本。这里用的是sharedMaterial没问题检查Graph里Property节点的Reference Name是_DissolveAmount脚本也是_DissolveAmount拼写一致关键发现在Material Inspector里该属性显示为Disabled状态灰色原因URP中Property节点必须勾选Expose in Inspector才能被外部访问。未勾选时Shader编译后该Uniform不被注册到Material属性列表勾选后滑块立即激活脚本控制恢复正常避坑口诀“Expose in Inspector”不是可选项是必选项。每次新建Property右手必须习惯性点一下这个勾。4.5 场景多Pass下溶解不同步阴影比模型溶解快半拍现象模型溶解到50%时阴影已完全消失。排查链路确认Shadow Caster Pass是否启用在Renderer组件里Cast ShadowsOn没问题检查Shader的Render Queue默认Geometry2000阴影Pass用ShadowCaster2500队列正确关键线索在Frame Debugger里对比Opaque和ShadowCaster两个Draw Call的Shader Properties——发现_DissolveAmount值不同根源URP中ShadowCasterPass默认不继承Opaque Pass的Material属性。必须在Graph里为ShadowCasterPass单独配置Dissolve Amount输入解决方案在主节点右键→Add Additional Pass→Shadow Caster然后在新Pass里把_DissolveAmountProperty连到Clip Threshold阴影裁剪阈值工业实践所有需要多Pass同步的Shader必须显式为每个Pass配置关键参数。这是URP管线的硬性要求不是Bug。5. 进阶生产力技巧让ShaderGraph真正成为你的渲染加速器做到上面四步你已经能独立完成90%的项目需求。但要成为团队里那个“别人调三天的效果他半小时搞定”的TA还得掌握这些藏在文档角落的硬核技巧。5.1 自定义节点库把重复劳动变成拖拽积木我在做AR建筑可视化时每周都要做5个以上“玻璃幕墙反射雨痕污渍”组合Shader。每次都重连Reflection Probe、Fresnel、Noise、Blend节点效率极低。解决方案创建自定义节点库。步骤新建ShaderGraph命名为Glass_Base添加Property节点_ReflIntensityFloat、_RainDensityFloat、_DirtMaskTexture2D实现基础逻辑用Reflection Probe采样环境Fresnel控制反射强度Sample Texture2D采样雨痕图Blend混合右键Graph空白处→Create Custom Function Node命名GlassEffect在新节点里把Glass_Base的所有输入/输出端口映射过去保存后在任意Graph里右键→Custom→GlassEffect即可一键插入现在美术要新玻璃效果我只需拖一个GlassEffect节点调三个滑块5秒出效果。这套方法让我把Shader开发时间从平均4小时/个压缩到15分钟/个。5.2 动态材质实例用ScriptableObject管理参数集项目后期策划常提“这个溶解效果在Boss战要更慢在小怪要更快”。如果每个怪物都挂不同Material内存爆炸。正确做法用ScriptableObject管理参数集。创建DissolvePresetScriptableObject[CreateAssetMenu(fileName DissolvePreset, menuName Rendering/Dissolve Preset)] public class DissolvePreset : ScriptableObject { public float dissolveSpeed 1f; public float edgeSoftness 0.1f; public Color dissolveTint Color.white; }在ShaderGraph里Property节点类型设为Vector4Reference Name设为_DissolveParams。脚本里material.SetVector(_DissolveParams, new Vector4(preset.dissolveSpeed, preset.edgeSoftness, preset.dissolveTint.r, preset.dissolveTint.g));这样一个Material实例通过更换ScriptableObject就能驱动无数种溶解风格。内存占用降低80%QA测试效率提升3倍。5.3 性能陷阱预警这些节点正在悄悄拖垮你的帧率ShaderGraph不是万能的有些节点在移动端就是性能杀手节点类型移动端风险替代方案实测性能损耗Adreno 640Scene Depth极高需额外深度纹理采样用Screen PositionLinear Eye Depth近似12ms → 3msReflection Probe高立方体贴图采样用CubemapTransform Vector简化8ms → 2msDynamic Branch中GPU分支预测失败用Lerp代替Branch5ms → 1msCustom Function含循环极高移动端不支持动态循环展开为固定次数计算编译失败 → 4ms我在做车载AR导航时Scene Depth节点让帧率从60掉到28。换成Screen Position后用Linear Eye Depth公式1.0 / (_ZBufferParams.z * z _ZBufferParams.w)近似深度帧率回到58且视觉差异肉眼不可辨。5.4 与URP Feature的深度协同不只是兼容而是增效URP的Feature系统如Lightweight Render Pipeline Feature能让你在ShaderGraph之上再加一层控制。例如Post-processing Feature在ShaderGraph里暴露_BloomIntensityProperty用Feature脚本在特定条件下如玩家进入Boss区域动态修改实现“区域化Bloom”Custom Pass Feature在自定义渲染Pass里把_DissolveAmount作为Uniform传入让溶解效果参与后处理实现“溶解后残影”这已经超出ShaderGraph本身但正是这种协同让TA能做出引擎原生功能无法实现的效果。我在做元宇宙社交App时用Custom Pass Feature实现了“好友靠近时对方模型边缘泛起微光”整个效果由ShaderGraph定义光效Feature控制触发逻辑二者无缝咬合。6. 我的三年ShaderGraph实战体会工具没有银弹但思维可以升级写完这篇我翻出三年前的第一个ShaderGraph工程文件。那个名为Test_Dissolve_v1的Graph里有17个节点其中8个是Multiply和Add——为了调一个溶解边缘的亮度我连了三层Lerp。现在我的标准溶解Graph只有9个节点核心逻辑用SmoothStepGradient Noise两节点搞定其余全是为美术体验服务的封装。这三年最大的认知升级不是学会了多少节点而是明白了ShaderGraph真正的价值不在于降低技术门槛而在于把渲染知识从“代码语法”层面拉升到“数据流设计”层面。当你不再纠结#pragma target 3.0而是思考“这个噪声梯度如何映射到法线空间”你就从Shader使用者变成了渲染架构师。最后分享一个小技巧每次做完一个效果别急着提交。打开Frame Debugger抓取一帧从Vertex Shader开始逐个节点看输出纹理。你会发现90%的“效果不对”其实是某个中间节点的输出范围超出了预期——比如Remap节点把[0,1]映射到[-2,2]结果后续Clamp没跟上数据溢出。这种debug方式比看Console报错高效十倍。工具会迭代URP会升级但数据流思维不会过时。你现在拖的每一条线都在训练一种新的视觉编程直觉。它不会让你一夜成为图形学大神但会让你在下次美术说“这个效果能不能加”时笑着打开ShaderGraph而不是叹气打开VS Code。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2634086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…