Unity Shader Graph实战:复刻《原神》角色特效的能量流动与边缘光晕
1. 项目概述与核心思路最近在Unity社区里看到不少朋友对《原神》里那些华丽又独特的角色特效很感兴趣想自己动手复刻一下。确实从刻晴的雷楔到胡桃的蝶引来生这些特效不仅视觉冲击力强其背后的Shader逻辑也很有意思。很多人觉得这需要写复杂的Shader代码门槛太高。其实不然借助Unity 2022.3 LTS版本中已经非常成熟的Shader Graph可视化工具配合URP通用渲染管线我们完全可以从零开始用“连连看”的方式搭建出效果不俗的复刻版特效。这个项目我们就来一起拆解一个典型的《原神》风格角色特效——比如一个带有元素能量流动、边缘光晕和粒子消散感的“元素附着”效果。我的目标不是一比一完美还原那涉及美术资源和技术细节太多而是抓住其核心视觉特征色彩渐变、能量流动感、柔和的边缘光以及与角色模型的动态交互。我们将完全在Shader Graph中完成不写一行ShaderLab代码最终我会给出完整的节点连接图你可以直接导入工程参考。为什么选择Unity 2022.3 LTS和URP2022.3是长期支持版本稳定性有保障对Shader Graph的支持也最完善。URP则是Unity现在主推的渲染管线它内置了对Shader Graph的原生支持性能优化更好跨平台也更友好。对于特效Shader来说URP提供的许多内置节点如摄像机深度、屏幕空间UV能让我们更方便地实现一些高级效果。2. 环境准备与Shader Graph基础配置2.1 项目初始化与URP设置首先你需要在Unity Hub中创建一个新的3D项目URP模板。如果创建的是核心模板则需要通过Package Manager手动安装“Universal RP”包。确保你的Unity版本是2022.3.x LTS系列。安装完成后你需要创建一个URP Asset资源文件。在Project窗口右键 - Create - Rendering - URP Asset (with Universal Renderer)。我通常将其命名为“CustomURPAsset”。创建后需要将它分配给项目菜单栏 Edit - Project Settings - Graphics在Scriptable Render Pipeline Settings字段中拖入你刚创建的URP Asset。接下来创建一个用于特效的Shader Graph。在Project窗口右键 - Create - Shader - Universal Render Pipeline - Shader Graph。为了更清晰地管理我建议先创建一个“Shaders”文件夹在里面再创建Shader Graph命名为“MHY_CharacterFX_Example”。双击打开这个Shader Graph文件会进入Shader Graph编辑器窗口。这是我们接下来主要的工作区。2.2 Shader Graph编辑器界面与核心概念第一次打开可能会觉得节点繁多别慌我们先把几个核心区域搞清楚。主图Master Stack位于编辑器下方或右侧取决于布局。这是Shader的输出终端决定了最终像素的颜色Base Color、是否透明Alpha、表面如何对光反应Normal, Metallic, Smoothness等。对于特效我们最常打交道的是Base Color和Alpha。Blackboard黑板位于左侧。这里用于定义和管理Shader的属性Properties比如颜色、纹理、浮点数等。这些属性会暴露在材质球Material的Inspector面板上方便我们在运行时或编辑时动态调整效果。节点库通过右键在主图区域点击可以搜索添加各种功能节点。节点是Shader Graph的基本构建块每个节点完成一个特定功能如数学运算、纹理采样、向量处理等。对于特效Shader我们通常将Shader类型设置为“Unlit”无光照。因为很多特效是自发光体其亮度不应受场景灯光影响。在Graph Inspector通常在主图旁边中找到“Graph Settings”将“Material”下的“Surface Type”改为“Transparent”透明这样我们才能处理Alpha通道。“Blending Mode”可以选择“Alpha Blend”来实现半透明叠加这是特效最常用的混合模式。注意在Graph Settings中还有一个关键选项“Alpha Clipping”。如果开启它会根据Alpha值进行裁剪类似镂空适用于硬边效果。我们这次做的柔和流动特效不需要保持关闭即可。3. 核心视觉特征拆解与节点实现《原神》的角色特效尤其是元素附着类有几个共通的视觉特征我们将其分解为具体的Shader功能模块来实现。3.1 基础色彩与纹理采样特效通常有一个基础色并且带有纹理细节。我们首先从Blackboard创建两个属性BaseColor(Color): 用于控制特效的主色调。MainTex(Texture2D): 一张基础纹理可以是噪声图、渐变图或自定义图案。将MainTex拖入主图区域会自动创建一个Sample Texture 2D节点。将其RGB输出连接到Master Stack的Base Color上暂时将Alpha输出连接到Alpha上。此时将BaseColor属性也拖进来用一个Multiply乘法节点将纹理采样结果与基础色相乘再输出给Base Color。这样我们就得到了一个受基础色着色的纹理显示。// 节点逻辑等价代码示意 float4 texColor SAMPLE_TEXTURE2D(MainTex, sampler_MainTex, UV); float3 finalColor texColor.rgb * BaseColor.rgb; float finalAlpha texColor.a;这里UV直接使用了模型的原始UV坐标。但对于流动效果静态UV是不够的。3.2 模拟能量流动效果流动感的核心在于让纹理“动起来”。这需要通过修改UV坐标来实现。创建流动属性在Blackboard创建FlowSpeed(Vector2) 和FlowDirection(Vector2 可归一化为方向向量)。构建UV动画添加一个Time节点获取游戏运行时间。将其与FlowSpeed相乘再与FlowDirection点乘使用Dot Product节点得到一个标量的时间偏移量。将这个偏移量打包成一个新的Vector2例如X和Y分量都使用这个偏移量或者分别与方向向量的X、Y分量相乘然后与原始的UV坐标使用Add节点相加。使用平铺与偏移在Sample Texture 2D节点上我们可以直接使用Tiling和Offset输入。更灵活的方式是添加一个Tiling And Offset节点。将原始UV输入其UV端口将流动处理后的向量输入Offset端口。这样纹理就会沿着指定方向持续滚动形成流动效果。为了让流动更自然我通常会使用两张不同速度、不同方向的噪声图进行叠加混合。用一张低频噪声控制主流动的强度变化用一张高频噪声增加细节扰动。这可以通过两个独立的UV动画流采样两张噪声图然后用Add或Multiply节点混合来实现。实操心得流动速度FlowSpeed的值不宜过大通常在(0, 0.5)范围内微调否则会显得不自然。FlowDirection可以简单设为(1,0)或(0,1)表示水平或垂直流动也可以用正弦余弦函数生成旋转流动。3.3 实现边缘光晕Fresnel效应很多特效在模型的边缘会有更亮的光晕这可以利用菲涅尔Fresnel效应来模拟。菲涅尔效应的基本原理是视线方向与表面法线夹角越大即看边缘反射或我们这里设定的发光强度越强。获取必要向量添加一个Normal Vector节点获取表面法线和一个View Direction节点获取视线方向。注意在Shader Graph中可能需要将View Direction转换为物体空间使用Transform Node以便与物体空间法线进行计算或者确保两者在同一坐标系下。一个更简单的方法是使用Fresnel Effect节点。使用Fresnel Effect节点这是最快捷的方式。将该节点拖入其默认输入是法线Normal和视图方向View Dir输出一个边缘强、中心弱的灰度值Power值控制衰减强度。将这个输出称为FresnelFactor。应用光晕将FresnelFactor与之前计算好的颜色进行乘法或加法混合。例如finalColor finalColor FresnelFactor * EdgeGlowColor。你可以在Blackboard创建一个EdgeColor和EdgeIntensity属性来控制边缘光晕的颜色和强度。通过调整Fresnel节点的Power参数你可以控制光晕的“软硬”程度。Power值越小光晕范围越大、越柔和值越大光晕越集中在极边缘。3.4 添加粒子消散与透明度变化特效的消散感通常体现在Alpha通道的不规则变化上模拟能量逐渐衰减、破碎的感觉。使用噪声图驱动Alpha单独采样一张噪声纹理可以是和主纹理不同的图。对这张噪声图的UV也进行流动动画处理速度可以和主纹理不同。创建消散遮罩将采样到的噪声值与一个由FresnelFactor或另一个自定义遮罩如基于模型顶点位置计算出的值进行混合。例如用Multiply节点将噪声与Fresnel因子结合这样边缘的消散感会和光晕结合效果更有机。控制整体透明度在Blackboard创建一个AlphaScale属性。将上一步得到的复杂Alpha遮罩与AlphaScale相乘最终输出给Master Stack的Alpha。这样通过动画系统或脚本在运行时减小AlphaScale就能实现整个特效的淡出消散。扰动顶点为了增加体积感和动态我们还可以轻微扰动模型顶点。添加一个Vertex Position节点将其输出到Master Stack的Position端口前先加上一个由噪声和时间控制的微小偏移量Vector3类型。这一步能让特效表面有轻微的波动更像流动的能量场而非硬邦邦的片。4. 完整节点图搭建与参数详解经过上面的拆解我们现在可以将所有模块组合起来。下面描述一个简化的、但功能完整的节点图连接逻辑你可以据此在Shader Graph中搭建。第一步输入与属性定义BlackboardBaseColor(Color): (0.5, 0.8, 1.0, 1.0) // 青蓝色调EdgeColor(Color): (1.0, 0.9, 0.3, 1.0) // 金色边缘MainTex(Texture2D): 一张蓝白渐变的噪声图NoiseTex(Texture2D): 一张黑白云雾状噪声图FlowSpeed(Vector2): (0.1, 0.2)FlowDirection(Vector2): (1.0, 0.5) // 非归一化方向FresnelPower(Float): 3.0EdgeIntensity(Float): 0.8AlphaScale(Float): 1.0VertexOffsetStrength(Float): 0.02第二步主色彩流Base Color Flow创建UV节点。创建Time节点输出Time的Sine Time或Time端口。将Time与FlowSpeed相乘再与归一化后的FlowDirection进行分量式相乘使用Multiply节点输入A为时间速度标量B为方向向量需要先将标量转换为Vector2或使用Scale节点思路得到UV_Offset。将UV与UV_Offset相加得到Animated_UV_Main。用Animated_UV_Main采样MainTex输出颜色TexColor。将TexColor与BaseColor相乘得到BaseTintedColor。第三步边缘光晕Fresnel Edge添加Fresnel Effect节点。将Normal Vector节点连接到其Normal输入View Direction节点选择物体空间连接到其View Dir输入。将FresnelPower属性连接到其Power输入。输出为FresnelFactor。将FresnelFactor与EdgeIntensity相乘再与EdgeColor相乘得到EdgeGlow。将BaseTintedColor与EdgeGlow使用Add节点相加得到ColorWithEdge。第四步透明度与消散Alpha Dissolve用另一套UV动画流可以复用FlowSpeed和FlowDirection但乘以一个不同的系数如0.7来改变速度采样NoiseTex输出值记为NoiseValue。将NoiseValue与FresnelFactor使用Multiply节点混合增强边缘的破碎感得到DissolveMask。将DissolveMask与AlphaScale属性相乘得到最终的FinalAlpha。将其连接到 Master Stack 的Alpha端口。将上一步得到的ColorWithEdge连接到 Master Stack 的Base Color端口。第五步顶点动画Vertex Offset可选但推荐用第三套UV动画速度更慢采样NoiseTex得到VertexNoise。将VertexNoise的RGB通道通过Split节点拆开取R通道作为强度因子。添加Normal Vector节点物体空间。将Normal Vector与 (VertexNoise.r*VertexOffsetStrength) 相乘得到顶点偏移向量OffsetVector。添加Position节点选择物体空间。将Position与OffsetVector使用Add节点相加。将相加后的结果连接到Master Stack的Position端口前的Object Space Position可能需要一个Transform节点转换回物体空间取决于你的节点版本和设置。至此一个包含流动、边缘光、消散感和顶点动画的特效Shader Graph就搭建完成了。你可以将这个Shader赋给一个材质球然后将材质球赋给一个简单的几何体如Sphere或Quad来预览效果。通过实时调整Blackboard上的属性你可以立即看到变化这是Shader Graph最大的魅力所在。5. 材质与粒子系统集成技巧Shader写好了但要让它在游戏中动起来还需要和材质、粒子系统甚至动画控制器配合。5.1 材质参数动画化在Unity中你可以通过Animation Clip或脚本来动态修改材质属性驱动特效的变化。使用Animation动画为带有该材质的GameObject添加Animator组件。在Animation窗口中创建动画直接录制对材质属性如AlphaScale从1到0EdgeIntensity从0.8到0的修改就可以制作出淡入淡出、强度变化的动画。使用脚本控制更灵活的方式是编写C#脚本。你可以通过MaterialPropertyBlock来高效修改材质属性避免创建新的材质实例。// 示例脚本控制特效消散 using UnityEngine; public class CharacterFXController : MonoBehaviour { private Renderer _renderer; private MaterialPropertyBlock _propBlock; void Start() { _renderer GetComponentRenderer(); _propBlock new MaterialPropertyBlock(); _renderer.GetPropertyBlock(_propBlock); // 获取现有的属性块 } public void StartDissolve(float duration) { StartCoroutine(DissolveRoutine(duration)); } System.Collections.IEnumerator DissolveRoutine(float dur) { float timer 0f; while (timer dur) { timer Time.deltaTime; float t timer / dur; float currentAlphaScale Mathf.Lerp(1f, 0f, t); // 从1渐变到0 _propBlock.SetFloat(_AlphaScale, currentAlphaScale); _renderer.SetPropertyBlock(_propBlock); yield return null; } } }5.2 与粒子系统VFX Graph结合对于更复杂的、由大量粒子组成的特效如爆发、溅射Shader Graph可以用于渲染每个粒子。在URP中VFX Graph是制作视觉特效的强力工具。创建VFX Graph右键Create - Visual Effects - Visual Effect Graph。指定输出材质在VFX Graph的Output节点如Quad Output上你可以指定一个Material。这里就使用我们刚才用Shader Graph创建的材质。在VFX中驱动属性VFX Graph可以通过GPU事件和属性绑定Attribute来驱动材质的属性。例如你可以将粒子的“年龄”age映射到材质的AlphaScale上这样粒子就会随着生命周期自然消散。也可以在Spawn阶段随机化粒子的BaseColor实现多彩的效果。这种结合方式非常强大VFX Graph负责粒子的生成、运动、生命周期等逻辑而Shader Graph负责每个粒子最终的“长相”。你可以用同一个Shader Graph材质通过VFX赋予不同的参数创造出千变万化的粒子效果。5.3 性能考量与优化建议特效虽美但不能成为性能杀手。在移动平台或低端设备上尤其要注意。复杂度控制节点不是越多越好。评估每个节点的必要性。例如如果顶点动画对整体视觉效果贡献不大可以考虑关闭。纹理压缩与尺寸用于流动和噪声的纹理尽量使用小尺寸如128x128或256x256并启用合适的压缩格式如ASTC。渲染队列与Overdraw透明物体渲染顺序靠后且容易产生Overdraw一个像素被绘制多次。尽量减少单个特效的覆盖面积并利用粒子的裁剪culling和LODLevel of Detail功能。在Shader Graph的Graph Settings中可以尝试调整“Priority”来改变渲染顺序但需谨慎。避免全屏后处理本文所述方法都是基于物体表面的Shader。如果想过量使用全屏后处理来实现特效如全屏泛光开销会很大。URP提供了可配置的后处理堆栈要按需启用。6. 常见问题排查与调试心得在实际连接节点和预览效果时你肯定会遇到各种预期之外的情况。这里记录几个我踩过的坑和解决方法。问题一特效全黑或颜色不对检查Master Stack连接首先确认Base Color和Alpha端口是否都有正确的连线。有时节点线虚连了实际并未连接上。检查纹理采样确保Sample Texture 2D节点的Texture属性已赋值并且UV输入端口有正确的UV坐标流入默认是UV0。可以暂时将UV端口断开观察纹理是否显示为纯色以判断问题是否出在UV动画逻辑上。检查颜色空间确保你的BaseColor是在线性颜色空间下选择的。在Unity编辑器中颜色拾取器默认是sRGBGamma空间但对于基于物理渲染的URP颜色运算在线性空间进行。虽然Shader Graph内部会处理转换但如果你从外部输入颜色值最好心里有数。一个简单的验证方法是将颜色值设得比预期更亮一些。问题二没有透明效果或者透明排序错误确认Surface Type在Graph Settings中必须将“Surface Type”设置为“Transparent”。如果是“Opaque”Alpha通道将被忽略。检查混合模式“Blending Mode”选择“Alpha Blend”适用于大多数半透明特效。检查Alpha输出值确保最终连接到Master Stack Alpha端口的数值在0到1之间。可以使用Clamp节点限制范围。一个常见的错误是用于计算Alpha的噪声图值域不在[0,1]导致Alpha大于1显示为不透明。渲染顺序问题如果多个透明物体交错可能出现排序错乱。这通常不是Shader本身的问题需要调整物体在场景中的位置或考虑使用独立的渲染队列。对于非常复杂的透明物体这是一个经典的图形学难题。问题三流动动画太快或方向不对检查时间与速度Time节点输出的是自游戏开始以来的秒数数值增长很快。FlowSpeed作为乘数值应该非常小如0.1。可以先将其设为0观察静态纹理是否正确再慢慢增加速度。检查方向向量FlowDirection向量(1,0)表示沿U水平方向正方向流动。如果你想要斜向流动可以设为(1,1)。但注意向量的长度会影响速度如果你希望速度只由FlowSpeed控制最好将方向向量归一化Normalize节点。问题四在Game视图看不到特效或特效闪烁检查摄像机设置URP摄像机需要渲染透明层。确保你的特效物体所在的图层Layer没有被摄像机的Culling Mask排除。检查光照设置由于我们使用的是Unlit Shader场景灯光不会影响它。但如果场景过暗自发光效果也可能不明显。可以尝试在场景中添加一个简单的环境光。闪烁问题Z-fighting当两个透明面片距离非常近时会因为深度缓冲精度问题产生闪烁。可以轻微调整其中一个物体的位置或者使用Shader Graph中的“Depth Offset”节点给物体的渲染深度一个微小的偏移使其强制位于其他物体之前或之后。调试Shader Graph的一个宝贵工具是“Main Preview”窗口和“Blackboard”的预览功能。你可以将任何一个节点的输出端口拖到Main Preview窗口实时查看该端口输出的数据显示为灰度图或颜色图。这对于理解数据流、定位错误节点至关重要。例如当流动效果不对时你可以将动画后的UV值拖到预览窗口看看它是否真的在规律地变化。最后复刻商业游戏特效是一个学习和练习的绝佳过程但更重要的是理解其背后的原理并能够灵活运用这些原理创造出属于自己的视觉效果。Shader Graph降低了图形编程的门槛让我们可以更直观地探索渲染的乐趣。希望这份详细的节点图思路和实操指南能帮你打开这扇门。

相关新闻

Swoole AOT编译PHP为Windows原生EXE实战指南

Swoole AOT编译PHP为Windows原生EXE实战指南

1. 项目概述:这不是“把PHP打包成exe”,而是让PHP真正长出原生肌肉“告别解释执行!用 Swoole AOT 编译你的第一个 PHP Windows 原生应用”——这个标题里藏着三个被长期误解的关键词:“告别解释执行”、“Swoole AOT”、“Windows…

2026/7/9 21:14:33阅读更多 →
零基础Linux运维实战:从虚拟机到Docker容器化部署

零基础Linux运维实战:从虚拟机到Docker容器化部署

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这次我们来看一套面向零基础小白的 Linux 运维实战教程。这套教程的目标非常直接:从完全不懂 Linux 开始,通过…

2026/7/9 21:09:33阅读更多 →
Unity集成AI音效生成:C++插件开发与AudioLDM-S本地化部署实战

Unity集成AI音效生成:C++插件开发与AudioLDM-S本地化部署实战

1. 项目概述:当Unity遇见AI音效生成 作为一名在游戏音频和引擎集成领域摸爬滚打了十多年的老手,我经历过太多“音效荒”的时刻。美术资源迭代了N版,程序逻辑跑得飞起,但到了需要声音填充世界的时候,要么是翻遍免费库找…

2026/7/9 21:09:33阅读更多 →
SLAM 将PCL点云转换成彩色的八叉树地图

SLAM 将PCL点云转换成彩色的八叉树地图

这个程序可以把PCL点云压缩成带颜色的八叉树地图。 先看一下输入数据&#xff0c;是一个咖啡厅的一小部分&#xff1a; 程序运行后会生成带颜色的八叉树地图&#xff0c;使用octovis查看&#xff1a; 把输出结果按高度染色&#xff1a; 输入&#xff1a;任意PCL点云 <poin…

2026/7/10 1:40:20阅读更多 →
PyTorch 模型保存与加载:单卡/多卡 4种场景完整避坑指南

PyTorch 模型保存与加载:单卡/多卡 4种场景完整避坑指南

PyTorch 模型保存与加载&#xff1a;单卡/多卡 4种场景完整避坑指南在深度学习项目的实际开发中&#xff0c;模型保存与加载看似简单&#xff0c;却隐藏着许多容易踩坑的细节。特别是当项目从单GPU开发环境迁移到多GPU训练环境&#xff0c;或者需要将多GPU训练的模型部署到单卡…

2026/7/10 1:40:20阅读更多 →
3种神奇方法解锁Navicat Premium无限试用:Mac用户必备的永久免费使用指南

3种神奇方法解锁Navicat Premium无限试用:Mac用户必备的永久免费使用指南

3种神奇方法解锁Navicat Premium无限试用&#xff1a;Mac用户必备的永久免费使用指南 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_m…

2026/7/10 1:40:20阅读更多 →
嵌入式系统电源管理方案:MAX77654与STM32F415RG应用实践

嵌入式系统电源管理方案:MAX77654与STM32F415RG应用实践

1. 项目背景与核心器件选型在嵌入式系统开发中&#xff0c;电源管理一直是决定产品可靠性和续航能力的关键因素。最近我在一个物联网终端设备项目中&#xff0c;遇到了需要同时满足低功耗、多电压轨输出和智能充电管理的需求。经过多轮方案对比&#xff0c;最终选择了MAX77654电…

2026/7/10 1:40:20阅读更多 →
正点原子ZYNQ7020与7010核心板选型指南:85K vs 28K逻辑单元与1GB内存实测对比

正点原子ZYNQ7020与7010核心板选型指南:85K vs 28K逻辑单元与1GB内存实测对比

正点原子ZYNQ7020与7010核心板实战选型&#xff1a;从逻辑单元到应用场景的深度解析在嵌入式系统与可编程逻辑的交叉领域&#xff0c;Xilinx ZYNQ-7000系列SoC凭借其独特的ARMFPGA架构&#xff0c;已成为工业控制、机器视觉和通信处理的热门选择。作为国内知名的开发板提供商&a…

2026/7/10 1:40:20阅读更多 →
天地图WMTS服务2024年集成指南:ArcMap 10.8与QGIS 3.34 双平台5步配置

天地图WMTS服务2024年集成指南:ArcMap 10.8与QGIS 3.34 双平台5步配置

天地图WMTS服务2024年双平台集成实战&#xff1a;ArcMap 10.8与QGIS 3.34高效配置指南 当我们需要在GIS项目中快速调用权威的在线地图服务时&#xff0c;天地图WMTS服务凭借其稳定的数据更新和丰富的图层类型&#xff0c;成为国内GIS工作者的首选。本文将深入解析如何在ArcMap…

2026/7/10 1:35:20阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述&#xff1a;从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目&#xff0c;叫 skills4/skills &#xff0c;它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景&#xff1a;一个旨在展示或教授某种技能的仓库&#xff0c;本身却成了安…

2026/7/9 5:56:19阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示&#xff1a;因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战&#xff1a;从“黑箱预测”到“可信推理”2026年6月&#xff0c;第7届机器学习与趋势国际会议&#xff08;MLT 2026&#xff09;将在悉尼召开。会议议程中&#xff0c;“因果与可解释机器学习…

2026/7/9 9:45:20阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时&#xff0c;通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中&#xff0c;是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/9 2:47:07阅读更多 →
浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比

浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比

浏览器缓存行为深度解析&#xff1a;Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比当你在浏览器地址栏敲入一个网址时&#xff0c;背后可能隐藏着一场关于"要不要重新下载资源"的精密博弈。这场博弈的裁判是HTTP缓存机制&#xff0c;而304状态码则是这场博弈…

2026/7/10 0:00:01阅读更多 →
RoboWits:面向创造性问题求解的双臂机器人认知推理基准

RoboWits:面向创造性问题求解的双臂机器人认知推理基准

1. 项目概述&#xff1a;这不是又一个机器人抓取数据集&#xff0c;而是一次对“思考力”的压力测试 RoboWits——这个名字里藏着两个关键信号&#xff1a;“Robo”直指物理世界中的具身智能体&#xff0c;“Wits”则毫不掩饰地指向人类最核心的认知能力&#xff1a;机敏、判断…

2026/7/10 0:00:01阅读更多 →
5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能

5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能

5分钟完全指南&#xff1a;如何使用TegraRcmGUI图形化工具解锁Switch无限可能 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是一款专为Windows…

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

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

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

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

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

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

2026/7/9 15:50:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

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

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

2026/7/9 14:14:17阅读更多 →