当前位置: 首页 > article >正文

URP 与 Built-in 渲染管线SubShader Pass 执行机制全解

01渲染管线总览Built-in vs URP/HDRPUnity 渲染管线历史上经历了两个重要时代。早期的Built-in Render Pipeline内置管线也称 Legacy Pipeline是随 Unity 3/4/5 时代共同成长的老一代渲染架构功能齐全但定制空间有限。2018 年起Unity 引入了基于Scriptable Render PipelineSRP的全新框架官方同时推出了面向移动/主机的轻量化方案 URPUniversal RP和面向高端机器的 HDRPHigh Definition RP。维度Built-in PipelineURPHDRP正式名称Legacy / Built-in RPUniversal Render PipelineHigh Definition RP主要定位全平台通用老项目移动、主机、PC 中低端PC、主机高端写实Shader 语言CG / HLSLSurface ShaderHLSLShaderLab URP库HLSLShaderLab HDRP库默认光照模型Forward / Deferred 可选ForwardURP 12 支持 DeferredDeferred 为主SRP Batcher不支持原生支持原生支持多 Pass Shader完整支持受限见第5章受限后处理系统Post Processing Stack v2独立包内置 Volume 框架内置 Volume 框架自定义渲染特性Camera Render / CommandBufferScriptableRendererFeatureCustom Pass更细粒度关键认知URP 和 HDRP 本质上是 SRP 框架的两种官方实现。SRP 框架允许开发者完全自定义 GPU 命令提交顺序而 Built-in 管线的渲染逻辑深埋在 C 引擎层可定制程度低。02架构差异Forward、Deferred 与 SRP Batcher2.1 Forward Rendering前向渲染前向渲染是最直白的渲染路径每个物体对每盏灯光都执行一次完整的顶点片元着色结果直接写入帧缓冲。复杂度是O(物体数 × 灯光数)灯光多时性能急剧下降。Built-in 的 Forward 路径通过ForwardAddPass 为每盏附加光再走一遍 ShaderURP 则将所有实时灯数据打包进常量缓冲CBUFFER使用UniversalForward单 Pass 一次性计算。2.2 Deferred Rendering延迟渲染延迟渲染先把几何信息写入多个G-Buffer几何缓冲区再在屏幕空间一次性完成所有光照计算彻底解耦了物体数与灯光数的性能耦合。复杂度降为O(物体数 灯光数)但无法支持 MSAA 且半透明物体仍需前向渲染。URP 12 开始支持 Deferred 路径HDRP 默认使用 Deferred。2.3 SRP Batcher渲染批次的革命Built-in 管线的一大性能瓶颈在于SetPass Call——每次切换材质CPU 都要重新上传 Shader 参数产生昂贵的 GPU 状态切换。SRP Batcher 通过以下机制彻底改变了这一现状⚡SRP Batcher 核心思想SRP Batcher 不减少 Draw Call 数量而是将所有使用同一 Shader Variant 的物体的材质属性Per-Material 数据和物体变换矩阵Per-Object 数据各自打包进专用的持久化 GPU 缓冲区CBUFFER。一旦数据已在 GPU 上后续帧无需重复上传大幅降低 CPU 开销。Shader Custom/SRPBatcherDemo { Properties { _BaseColor (Base Color, Color) (1,1,1,1) _BaseMap (Base Map, 2D) white {} } SubShader { HLSLPROGRAM // ✅ SRP Batcher 要求所有 per-material 属性必须在统一 CBUFFER 中声明 CBUFFER_START(UnityPerMaterial) float4 _BaseColor; float4 _BaseMap_ST; // 纹理 ST 也必须在此 CBUFFER 内 CBUFFER_END // ❌ 错误示例在 CBUFFER 外声明属性会破坏 SRP Batcher 兼容性 // float4 _SomeValue; ← 这行会让 SRP Batcher 标红 ENDHLSL } }特性Built-in Dynamic BatchingGPU InstancingSRP Batcher减少内容Draw CallDraw CallSetPass CallCPU 开销要求顶点数 900相同材质相同 Mesh 材质相同 Shader VariantCBUFFER 声明规范多 Pass 兼容受限受限第一个 Pass 才兼容动态合批是否是Shader 层面03SubShader 与多 Pass 执行顺序3.1 SubShader 选择机制当一个物体需要渲染时Unity 依次遍历 Shader 中所有SubShader块选中第一个满足当前平台硬件能力Tags LOD的 SubShader 执行。Shader Custom/PipelineSelect { // SubShader 0高端平台支持几何着色器 / SM5.0 SubShader { Tags { RenderPipelineUniversalPipeline RenderTypeOpaque } LOD 300 // URP Pass... } // SubShader 1Built-in 管线前向渲染 SubShader { Tags { RenderTypeOpaque } LOD 200 // Built-in Pass... } // Fallback最低要求任何平台均可执行 Fallback Diffuse } // Unity 从 SubShader 0 开始选中第一个满足平台能力和 LOD 要求的3.2 多 Pass 在 Built-in 中的执行顺序在 Built-in 管线中一个 SubShader 内的多个 Pass 按从上到下、顺序执行的原则运行。每个 Pass 会独立完成一次完整的绘制并可通过ZTest、Blend、Stencil等状态控制写入目标。Built-in 多 Pass 执行时序单物体Pass #0Vertex→Fragment→Write Depth ColorPass #1Vertex→Fragment→Blend over Pass#0Pass #2 …依序执行各自独立的渲染状态⚠️注意顺序影响结果Pass 的执行顺序直接影响Blend、Stencil的累积结果。例如先写深度再做描边是常见模式顺序颠倒会导致描边被遮挡。3.3 Pass 的 LightMode 如何影响执行时机除了物体渲染时顺序执行的逻辑每个 Pass 还通过Tags { LightMode ... }声明自己属于哪个渲染阶段。渲染管线会在特定阶段主动查找并调用对应 LightMode 的 Pass而不是简单从头跑到尾。SubShader { // Pass A主光照 —— 前向渲染阶段被调用 Pass { Tags { LightMode UniversalForward } // HLSL 光照计算... } // Pass B阴影投射 —— Shadow Map 阶段被调用与 A 独立 Pass { Tags { LightMode ShadowCaster } // 输出深度... } // Pass C深度预写 —— Depth Prepass 阶段被调用 Pass { Tags { LightMode DepthOnly } // 仅输出深度不写颜色... } } // 三个 Pass 分属不同渲染阶段由管线按需调用互不干扰04LightMode Tag 完全手册LightModeTag 是管线与 Shader Pass 之间的约定协议 管线在每个渲染阶段扫描场景中所有材质的 Pass只执行匹配当前阶段 LightMode 的那个 Pass。4.1 Built-in 管线常用 LightModeForwardBase前向基础 Pass处理场景中的主方向光Directional Light、环境光Ambient和所有 Baked 阴影。每个物体只执行一次。Built-in 专用ForwardAdd前向附加 Pass每盏实时点光、聚光灯都触发一次此 Pass叠加到 ForwardBase 结果上。灯越多Draw Call 越高。Built-in 专用ShadowCaster投影 Pass将物体深度信息写入 Shadow Map。Built-in 和 URP/HDRP 通用可在此 Pass 中实现 Alpha 裁剪阴影。通用Deferred延迟渲染 Pass将 Albedo / Normal / 金属度 / 粗糙度等信息写入 G-Buffer供后续 Lighting Pass 读取。Built-in DeferredPrepassBase旧式延迟遗留旧版 Legacy Deferred已废弃的法线/深度预处理 Pass仅在 Legacy Deferred 路径中使用。已废弃Always始终执行不受渲染路径影响无论何种管线都会执行。常用于特效、调试或需要无条件写入某 Buffer 的场景。通用4.2 URP 专属 LightMode TagUniversalForwardURP 主光照 PassURP 前向渲染阶段的核心 Pass处理所有实时灯光主平行光 多盏点光/聚光灯打包在一起。每个物体仅执行第一个带此 Tag 的 Pass。URP 专用UniversalForwardOnly仅前向执行URP 12 引入在 Deferred 路径下依然强制走前向渲染。适合不支持 G-Buffer 写入的特殊材质如半透明。URP 12ShadowCaster阴影投射 Pass同 Built-in写入 Shadow Map。在 URP 中可复用也支持 _ALPHATEST_ON 关键字驱动的 Alpha Cutout 阴影。通用DepthOnly深度预写 PassURP Depth Prepass 阶段使用仅写入深度缓冲不写颜色。为后续 SSAO、Depth of Field 等后处理提供 _CameraDepthTexture。URP 专用DepthNormalsOnly深度法线预写URP 14 新增同时写入深度和视空间法线到 _CameraDepthNormalsTexture供 SSAO 等使用比 DepthOnly 携带更多信息。URP 14Universal2D2D 渲染 Pass配合 2D Renderer 使用URP 2D 渲染器在 Sprite 渲染阶段调用此 Pass。3D 项目几乎用不到。URP 2DSubShader { Tags { RenderPipeline UniversalPipeline RenderType Opaque Queue Geometry } // ── Pass 1主渲染 ────────────────────────────── Pass { Name URPForward Tags { LightMode UniversalForward } // ✅ URP 主光照计算 } // ── Pass 2阴影投射 ──────────────────────────── Pass { Name ShadowCaster Tags { LightMode ShadowCaster } ZWrite On ZTest LEqual ColorMask 0 // 不写颜色 // 写深度到 Shadow Map } // ── Pass 3深度预写 ───────────────────────────── Pass { Name DepthOnly Tags { LightMode DepthOnly } ZWrite On ColorMask 0 // 仅写 _CameraDepthTexture后处理 SSAO/DOF 需要 } }✅LightMode 匹配规则当 Pass 没有声明 LightMode Tag 时默认值为Always。在 URP 中没有 LightMode 或 LightMode 不被识别的 Pass 会被直接忽略不会执行。05URP 多 Pass 限制与解决方案5.1 核心限制URP 默认只执行第一个 UniversalForward Pass这是 URP 与 Built-in 管线最容易踩坑的差异之一。在 Built-in 管线中一个 SubShader 中的多个 Pass 会依序全部执行而 URP 的渲染器ForwardRenderer / UniversalRenderer在处理不透明物体时只会为每个物体调用第一个标记为UniversalForward的 Pass。SubShader { Tags { RenderPipeline UniversalPipeline } // ✅ Pass #0 —— URP 会执行这个 Pass { Tags { LightMode UniversalForward } // 主渲染逻辑... } // ❌ Pass #1 —— URP 会直接跳过同类型第二个 Pass 不执行 Pass { Tags { LightMode UniversalForward } // 描边逻辑在 URP 中永远不会运行 Cull Front // ... } } // 解决方案使用 ScriptableRendererFeature 替代第二个 UniversalForward Pass为什么 URP 要这样设计URP 引入SRP Batcher时要求每个物体在一次 Draw Call 中处理完所有光照天然与多 Pass 分多次绘制相矛盾。 同时URP 的ScriptableRenderPass系统将附加效果的职责从 Shader Pass 转移到了ScriptableRendererFeature 让多 Pass 效果以 Render Feature 的形式由 CPU 侧调度而非硬塞在同一个 Shader 里。5.2 各 Pass 类型在 URP 中的执行情况Pass LightModeBuilt-in 中URP 中备注UniversalForward不识别执行仅第一个多个只执行 index0ShadowCaster执行执行阴影阶段独立调用DepthOnly不识别执行Depth Prepass 阶段DepthNormalsOnly不识别执行URP 14提供法线信息给 SSAOForwardBase执行忽略URP 不认 Built-in TagForwardAdd执行忽略URP 不使用逐灯 Pass无 Tag / Always执行忽略URP 严格按 LightMode 匹配5.3 解决方案如何在 URP 中实现多 Pass 效果方案一使用 ScriptableRendererFeature推荐将附加效果描边、X光、毛发 shell layer拆出为独立的ScriptableRenderPass 以ScriptableRendererFeature注入到 URP Renderer 的特定阶段BeforeRenderingOpaques、AfterRenderingOpaques 等。 这是 URP 官方推荐的扩展方式与 SRP Batcher 完全兼容。using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; // 1. 继承 ScriptableRendererFeature在 URP Asset 的 Renderer 上挂载 public class OutlineFeature : ScriptableRendererFeature { private OutlineRenderPass _pass; public override void Create() { _pass new OutlineRenderPass(); // 指定此 Pass 注入到哪个渲染阶段 _pass.renderPassEvent RenderPassEvent.AfterRenderingOpaques; } public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) { renderer.EnqueuePass(_pass); } } // 2. 继承 ScriptableRenderPass在 Execute 中用 CommandBuffer 绘制描边 public class OutlineRenderPass : ScriptableRenderPass { public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) { var cmd CommandBufferPool.Get(Outline Pass); // 在此使用 cmd.DrawRenderer / cmd.DrawMesh 绘制描边 context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); } }方案二Stencil Buffer 分帧实现描边等效果利用 Stencil 测试第一个UniversalForwardPass 写入 Stencil 值然后通过 Renderer Feature 对全屏 Stencil 区域做后处理实现类似多 Pass 的视觉效果。方案三使用 UsePass 引用其他 Shader 的 PassUsePass指令可以直接引用另一个 Shader 中特定名称的 Pass避免代码重复。注意 Pass 名称需要全大写。SubShader { Tags { RenderPipeline UniversalPipeline } Pass { Name MY_FORWARD // Pass 名称必须全大写才能被 UsePass 引用 Tags { LightMode UniversalForward } // ... } // 直接复用另一个 Shader 中名为 SHADOWCASTER 的 Pass UsePass Universal Render Pipeline/Lit/SHADOWCASTER UsePass Universal Render Pipeline/Lit/DEPTHONLY }方案四材质堆叠Multi-Material Renderer在MeshRenderer组件上挂载多个材质Materials 数组Unity 会为每个 Sub-Mesh 或使用第一个 Sub-Mesh 的情况下为每个材质分别执行 Draw Call等效于多 Pass 效果且完全兼容 SRP Batcher。06实战代码URP 多 Pass Shader 模板下面是一个在 URP 中正确实现不透明 PBR 深度预写 阴影投射三 Pass 组合的完整 Shader 模板 同时满足 SRP Batcher 兼容条件所有 per-material 属性在CBUFFER_START(UnityPerMaterial)中声明。Shader Custom/URPMultiPassTemplate { Properties { _BaseMap (Base Map, 2D) white {} _BaseColor (Base Color, Color) (1, 1, 1, 1) _Metallic (Metallic, Range(0,1)) 0.0 _Smoothness(Smoothness,Range(0,1)) 0.5 _Cutoff (Alpha Cutoff, Range(0,1)) 0.5 } SubShader { Tags { RenderPipeline UniversalPipeline RenderType Opaque Queue Geometry } // ════════════════════════════════════════════════ // PASS 1 —— UniversalForward主光照 // ════════════════════════════════════════════════ Pass { Name URPForward Tags { LightMode UniversalForward } ZWrite On ZTest LEqual Cull Back HLSLPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_fog #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE #include Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl #include Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl // ✅ SRP Batcher所有 per-material 属性必须在此 CBUFFER 内 CBUFFER_START(UnityPerMaterial) float4 _BaseColor; float4 _BaseMap_ST; float _Metallic; float _Smoothness; float _Cutoff; CBUFFER_END TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap); struct Attributes { float4 positionOS : POSITION; float3 normalOS : NORMAL; float2 uv : TEXCOORD0; }; struct Varyings { float4 positionCS : SV_POSITION; float3 normalWS : TEXCOORD0; float2 uv : TEXCOORD1; float3 positionWS : TEXCOORD2; }; Varyings vert(Attributes IN) { Varyings OUT; VertexPositionInputs posInputs GetVertexPositionInputs(IN.positionOS.xyz); VertexNormalInputs nrmInputs GetVertexNormalInputs(IN.normalOS); OUT.positionCS posInputs.positionCS; OUT.positionWS posInputs.positionWS; OUT.normalWS nrmInputs.normalWS; OUT.uv TRANSFORM_TEX(IN.uv, _BaseMap); return OUT; } half4 frag(Varyings IN) : SV_Target { half4 texColor SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, IN.uv); half4 baseColor texColor * _BaseColor; InputData inputData (InputData)0; inputData.normalWS normalize(IN.normalWS); inputData.positionWS IN.positionWS; inputData.viewDirectionWS GetWorldSpaceNormalizeViewDir(IN.positionWS); inputData.shadowCoord TransformWorldToShadowCoord(IN.positionWS); SurfaceData surfaceData (SurfaceData)0; surfaceData.albedo baseColor.rgb; surfaceData.metallic _Metallic; surfaceData.smoothness _Smoothness; surfaceData.alpha baseColor.a; surfaceData.normalTS half3(0,0,1); return UniversalFragmentPBR(inputData, surfaceData); } ENDHLSL } // ════════════════════════════════════════════════ // PASS 2 —— ShadowCaster阴影投射 // ════════════════════════════════════════════════ Pass { Name ShadowCaster Tags { LightMode ShadowCaster } ZWrite On ZTest LEqual ColorMask 0 Cull Back HLSLPROGRAM #pragma vertex ShadowPassVertex #pragma fragment ShadowPassFragment #include Packages/com.unity.render-pipelines.universal/Shaders/ShadowCasterPass.hlsl ENDHLSL } // ════════════════════════════════════════════════ // PASS 3 —— DepthOnly深度预写 // ════════════════════════════════════════════════ Pass { Name DepthOnly Tags { LightMode DepthOnly } ZWrite On ColorMask 0 Cull Back HLSLPROGRAM #pragma vertex DepthOnlyVertex #pragma fragment DepthOnlyFragment #include Packages/com.unity.render-pipelines.universal/Shaders/DepthOnlyPass.hlsl ENDHLSL } } FallBack Hidden/Universal Render Pipeline/FallbackError }SRP Batcher 兼容性检查在 Unity Editor 中选中 Shader 资产Inspector 面板最下方会显示SRP Batcher: compatible或列出不兼容原因通常是有属性未放入 UnityPerMaterial CBUFFER。07总结与迁移建议核心要点速查知识点Built-inURP多 Pass 执行全部顺序执行每类 LightMode 仅执行第一个主光照 Pass TagForwardBaseUniversalForward附加光 PassForwardAdd逐灯打包进 UniversalForward无 ForwardAddSRP Batcher不支持原生支持需 CBUFFER 声明规范描边等多 Pass 效果第二个 Pass 直接写改用 ScriptableRendererFeature无 LightMode Pass当作 Always 执行被忽略不执行深度纹理生成Camera DepthTextureModeDepthOnly Pass URP Asset 开启从 Built-in 迁移到 URP 的检查清单迁移 Shader 时需逐项确认① 将所有ForwardBase→UniversalForward删除ForwardAddPass② 所有 per-material 属性放入CBUFFER_START(UnityPerMaterial) ... CBUFFER_END③ 将UnityCG.cginc引用改为Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl④ Surface Shader 无法在 URP 中使用需改写为手写顶点/片元 Shader⑤ 多 Pass 描边/外发光效果改用ScriptableRendererFeature实现⑥ 检查GrabPass用法——URP 不支持改用_CameraOpaqueTexture

相关文章:

URP 与 Built-in 渲染管线SubShader Pass 执行机制全解

01渲染管线总览:Built-in vs URP/HDRPUnity 渲染管线历史上经历了两个重要时代。早期的 Built-in Render Pipeline(内置管线,也称 Legacy Pipeline)是随 Unity 3/4/5 时代共同成长的"老一代"渲染架构,功能齐…...

程序员接单工具搭配方案:月入5000到20000,我见过最实在的一套打法

程序员接单工具搭配方案:月入5000到20000,我见过最实在的一套打法 大家好,我是帅哥威,一个即将拥有九块腹肌的程序员。 先泼盆冷水。 网上那些"程序员接单月入五万"的帖子,80%是卖课的。 真正从接单子里一个…...

ERROR: invalid input syntax for type integer: “a“

文章目录环境症状问题原因解决方案环境 系统平台:银河麒麟 (鲲鹏) 版本:4.5 症状 执行下面SQL语句时,报 “无效的类型 integer 输入语法” 的错误,详细如下: db_test# select * from t1 whe…...

安全版V4.5版本docker容器license过期问题处理步骤

文章目录环境症状问题原因解决方案环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:4.5.10 症状 数据库容器无法启动,无明显错误提示,通过docker logs 容器名 无法确认明确的报错信息 [rootsecurity home]# dock…...

C++LeetCode数据结构基础详解

一、只出现一次的数字遍历一遍数组利用异或的特性来实现(相同为0,相异为1 )例如[4,1,2,1,2] 4和1异或为5 5和2异或为7 7和1异或为6 6和2异或为4 这样就能找出唯一的数字了1234567public int singleNumber(int[] nums) {int res0;for(int i0;i…...

Inter字体是什么?掌握这款现代无衬线字体,彻底解决屏幕阅读难题

Inter字体是什么?掌握这款现代无衬线字体,彻底解决屏幕阅读难题 【免费下载链接】inter The Inter font family 项目地址: https://gitcode.com/gh_mirrors/in/inter 你是否曾在浏览网页时觉得文字模糊不清?或者在设计界面时为字体在不…...

成年人最廉价的错觉:靠“好说话”换取尊重

上周三晚上快十一点,我在航天桥附近的一个烤串店,碰见了以前团队里的小林。 小林是个性格特温和的架构师,平时在组里出了名的“好说话”。那天他坐在角落里,面前摆着几瓶空啤酒,眼圈通红。 我坐过去陪他喝了两杯。他…...

告别虚拟机!实测WSL2下Ubuntu 18.04编译GAMIT 10.71完整流程(附避坑清单)

WSL2环境下高效编译GAMIT 10.71的完整实践指南 在GNSS数据处理领域,GAMIT作为经典的高精度解算软件,其安装配置一直是初学者的第一道门槛。传统虚拟机方案虽然可行,但存在资源占用高、系统隔离强、操作繁琐等痛点。本文将带你体验WSL2这一轻…...

ENVI5.3处理GF2数据时,FLAASH大气校正参数怎么设?手把手教你根据经纬度和日期选对模型

ENVI5.3处理GF2数据时FLAASH大气校正参数设置实战指南 当你在清晨打开ENVI软件,准备处理一批高分二号(GF2)卫星影像时,是否曾被FLAASH大气校正中那些令人眼花缭乱的参数选项所困扰?作为一名长期从事遥感影像处理的专业…...

C语言中常用的几个头文件及库函数

不完全统计&#xff0c;C语言标准库中的头文件有15个之多&#xff0c;所以我主要介绍常用的这四个头文件stdio.h,string.h,math.h,stdlib.h&#xff0c;以后用到其他的再做补充。下面上干货&#xff1a;1.<stdio.h>&#xff1a;定义了输入输出函数、类型以及宏&#xff0…...

【限时公开】某头部云厂商内部 Dev Containers 标准化模板(含预编译缓存、多阶段构建加速、离线依赖镜像包),仅开放72小时下载权限

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VS Code 远程容器开发环境 (Dev Containers) 优化 报错解决方法 常见启动失败原因与诊断流程 Dev Containers 启动失败常源于 Docker 权限、.devcontainer.json 配置错误或基础镜像缺失。建议首先运行…...

告别盲调!手把手教你用U-Boot fdt命令动态查看与验证设备树节点

告别盲调&#xff01;手把手教你用U-Boot fdt命令动态查看与验证设备树节点 在嵌入式开发中&#xff0c;设备树&#xff08;Device Tree&#xff09;作为硬件描述的标准方式&#xff0c;已经成为Linux内核不可或缺的一部分。然而&#xff0c;当我们在开发或调试设备驱动时&…...

DLSS Swapper:游戏DLSS版本管理与性能优化全攻略

DLSS Swapper&#xff1a;游戏DLSS版本管理与性能优化全攻略 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 对于追求极致游戏体验的PC玩家来说&#xff0c;DLSS&#xff08;深度学习超级采样&#xff09;技术已成为现…...

C++示例讲解观察者设计模式

引言用来解决两个不相关对象之间的一对一或者一对多的通信模型。什么是观察者设计模式观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系&#xff0c; 当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。在观察者模式中&…...

3步掌握微生物网络分析:microeco包快速构建生态关联网络指南

3步掌握微生物网络分析&#xff1a;microeco包快速构建生态关联网络指南 【免费下载链接】microeco An R package for downstream data analysis of microbiome omics data 项目地址: https://gitcode.com/gh_mirrors/mi/microeco 微生物群落中物种间的复杂相互作用关系…...

ThinkPad风扇控制神器:TPFanCtrl2让你的笔记本告别“直升机模式“[特殊字符]

ThinkPad风扇控制神器&#xff1a;TPFanCtrl2让你的笔记本告别"直升机模式"&#x1f680; 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否曾经被Think…...

5款降AI神器综合性价比盘点:速度+效果+售后哪款最值毕业生选?

降 AI 神器这个词被用得太泛&#xff0c;导致很多工具都自称神器但综合性价比一塌糊涂。 这次盘点用一个简单的标准——速度 效果 售后这三维度都不弱的才能上榜。综合性价比最高的三款是嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;、比话降AI&#xff08;www.bihu…...

到底什么资格,才算真正的资深 Java 开发专家

目录 前言 一、破除认知误区&#xff1a;绝大多数 Java 开发者&#xff0c;达不到资深专家门槛 1.1 初级 / 中级 / 高级 / 资深专家 核心能力差异 1.2 伪「资深 Java」典型特征 二、核心资质一&#xff1a;夯实底层根基&#xff0c;吃透 Java 基础与 JVM 底层原理 2.1 高…...

3分钟解决Axure RP界面难题:一键切换中文版的高效方案

3分钟解决Axure RP界面难题&#xff1a;一键切换中文版的高效方案 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure R…...

天音控股披露最新财报:拥抱AI融合趋势 数智化转型赋能新零售

近日&#xff0c;天音控股&#xff08;000829.SZ&#xff09;发布2025年年报以及2026年一季报&#xff0c;2025年公司实现营业总收入905.7亿元&#xff0c;同比上升7.77%&#xff0c;2026年一季度公司实现营业收入292.16亿元&#xff0c;同比30.41%。整体经营基本面保持稳健。2…...

为什么92%的Laravel项目在集成AI后6个月内遭遇Token泄露或Prompt注入?——基于OWASP Top 10 for AI的5步加固协议

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Laravel 12 AI集成安全危机的根源剖析 Laravel 12 引入了原生 AI 辅助能力&#xff08;如 Illuminate\AI 命名空间&#xff09;&#xff0c;支持无缝对接 OpenAI、Anthropic 及本地 LLM。然而&#xf…...

Django怎么实现数据可视化接口_Python利用Pandas处理模型数据

最快方式是 pd.DataFrame(list(Model.objects.all().values()))&#xff0c;但大表易OOM&#xff1b;小数据用分页或 django-pandas.read_frame()&#xff1b;可视化需 df.to_dict(orientrecords) JsonResponse&#xff0c;时间字段要 strftime&#xff0c;空值转 None。怎么把…...

JetBrains IDE试用期重置终极指南:3种高效方法告别30天限制

JetBrains IDE试用期重置终极指南&#xff1a;3种高效方法告别30天限制 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾经在紧张的开发工作中突然遭遇JetBrains IDE试用期到期&#xff0c;导致工作流程被…...

软件交互式查询化的即时反馈与探索

在数字化时代&#xff0c;软件交互式查询化的即时反馈与探索正成为提升用户体验和效率的关键技术。无论是数据分析工具、搜索引擎&#xff0c;还是智能客服系统&#xff0c;用户都期望通过快速、直观的交互获得精准的反馈。这种技术不仅缩短了信息获取的路径&#xff0c;还让复…...

Chapter 3:Spec 规范文件格式

Chapter 3:Spec 规范文件格式 学习目标 掌握 OpenSpec Spec 文件的标准结构 理解 YAML 前置元数据的作用 熟练编写 Requirement(需求项) 理解 OpenSpec 的 Markdown + YAML 混合格式 概念讲解(Why) 什么是 Spec 文件 在 SDD 范式中,Spec 文件是描述系统功能的"规…...

别死磕 Prompt 了:把 RAG 检索准确率拉满的 4 层工程架构拆解

在做 RAG&#xff08;检索增强生成&#xff09;系统时&#xff0c;很多新手最喜欢干的事就是天天调 LLM 的 Prompt&#xff1a;“你是一个资深专家……”、“请仔细阅读……” 调了半天&#xff0c;发现一旦问点偏门的问题&#xff0c;大模型还是在胡说八道。为什么&#xff1f…...

告别死记硬背:用一张图+三个实战案例搞定RocketMQ核心机制

图解RocketMQ&#xff1a;三场景实战拆解消息队列核心机制 消息队列技术早已成为分布式系统的标配基础设施&#xff0c;但真正掌握其精髓的开发者却不多。很多人在学习RocketMQ时陷入概念迷宫&#xff1a;Producer、Broker、Consumer、NameServer之间的关系像一团乱麻&#xff…...

2026浏览器指纹对抗技术演进史与未来十年发展路径预判

一、引言从互联网商业化普及开始&#xff0c;用户设备识别与隐私保护的技术博弈就从未停止。浏览器指纹技术凭借高唯一性、不可清除、隐蔽性强的特点&#xff0c;逐步取代传统 Cookie&#xff0c;成为互联网平台设备识别、用户追踪、风控管控的核心技术。与之对应的&#xff0c…...

2026年终极B站下载方案:BiliTools跨平台工具箱完整指南

2026年终极B站下载方案&#xff1a;BiliTools跨平台工具箱完整指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …...

Qwen3-4B-Thinking-Gemini-Distill实战教程:与Llama3/Qwen2对比的CoT质量评估

Qwen3-4B-Thinking-Gemini-Distill实战教程&#xff1a;与Llama3/Qwen2对比的CoT质量评估 1. 模型介绍 Qwen3-4B-Thinking-2507-Gemini-Distill是基于Qwen3-4B-Thinking-2507的社区蒸馏版本&#xff0c;由TeichAI使用Gemini 2.5 Flash生成的5440万tokens监督微调而成。这个推…...