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

Unity Shader 半透明物体为什么不能写入深度缓冲?

从 Depth Buffer 原理到 URP Shader 实战彻底搞懂半透明渲染的每一个环节Chapter 01半透明物体为什么不能写入深度缓冲要理解这个问题我们需要先回到 Depth Buffer深度缓冲也叫 Z-Buffer的基本工作原理。它是整个光栅化管线的核心组件之一负责解决「谁在前面、谁被遮挡」的问题。深度缓冲如何工作深度缓冲是一个与颜色缓冲同分辨率的二维数组每个像素存储一个浮点值表示当前最近的片元Fragment的深度即 z 坐标。绘制流程如下一个片元经过光栅化后携带自己的 z 值将该 z 值与深度缓冲中对应位置的值进行比较默认ZTest LEqual如果片元的 z 值 ≤ 缓冲中的 z 值则该片元可见同时更新深度缓冲如果片元的 z 值 缓冲中的 z 值则该片元被丢弃问题的本质半透明渲染需要使用Alpha Blending颜色混合它的公式是FinalColor SrcAlpha × SrcColor (1 - SrcAlpha) × DstColor 2// 即: 最终颜色 源透明度 × 源颜色 (1 - 源透明度) × 目标颜色这个公式的关键在于DstColor目标颜色——它需要知道这个像素位置上「已经绘制了什么」。因此半透明物体的绘制顺序极其重要必须从后往前Back-to-Front绘制每一层半透明物体都需要看到它后面的所有内容。核心矛盾如果半透明物体写入了深度缓冲那么更远的半透明物体或它后面的不透明物体会被深度测试直接丢弃根本无法参与混合计算。结果就是——该透过去看到的东西全被挡住了。举个具体例子假设有一扇红色玻璃窗半透明z0.3它后面有一面白墙不透明z0.5。如果红色玻璃窗先绘制并写入了深度值 0.3那么后续绘制白墙时z0.5 0.3深度测试失败白墙被丢弃——你看到的不是「红色玻璃后面的白墙」而是一面纯红色的不透明墙。Chapter 02ZWrite Off 的原理与必要性既然半透明物体写入深度会导致后方物体被错误丢弃解决方案就很自然了关闭深度写入。ZWrite Off 做了什么ZWrite Off是一条渲染状态指令它告诉 GPU只做深度测试ZTest不更新深度缓冲的值。渲染状态ZWrite On默认ZWrite Off深度测试ZTest✅ 执行✅ 执行仍然比较 z 值深度写入✅ 片元可见时更新 depthBuf❌不更新 depthBuf颜色写入✅ 正常✅ 正常典型用途不透明物体半透明物体、粒子、水面注意ZWrite Off 只是禁止写入深度并没有禁止读取ZTest。半透明物体仍然会与不透明物体的深度进行比较——这很重要它保证了半透明物体不会渲染到不透明物体「内部」。在 HLSL 中的声明Chapter 02 ZWrite Off 的原理与必要性 既然半透明物体写入深度会导致后方物体被错误丢弃解决方案就很自然了关闭深度写入。 ZWrite Off 做了什么 ZWrite Off 是一条渲染状态指令它告诉 GPU只做深度测试ZTest不更新深度缓冲的值。 渲染状态 ZWrite On默认 ZWrite Off 深度测试ZTest ✅ 执行 ✅ 执行仍然比较 z 值 深度写入 ✅ 片元可见时更新 depthBuf ❌ 不更新 depthBuf 颜色写入 ✅ 正常 ✅ 正常 典型用途 不透明物体 半透明物体、粒子、水面 注意ZWrite Off 只是禁止写入深度并没有禁止读取ZTest。半透明物体仍然会与不透明物体的深度进行比较——这很重要它保证了半透明物体不会渲染到不透明物体「内部」。 在 HLSL 中的声明 HLSL ShaderLab Pass 声明 Pass { // 关闭深度写入 — 半透明物体的核心渲染状态 ZWrite Off // 深度测试仍然开启 — 不会穿透不透明物体 ZTest LEqual // Alpha 混合模式 Blend SrcAlpha OneMinusSrcAlpha }Chapter 03渲染队列 Queue Transparent 的含义Unity 通过渲染队列Render Queue控制不同物体的绘制顺序。QueueTransparent不仅仅是一个标签它直接决定了 GPU 的执行管线。关键数值渲染队列名称Queue 值ZWrite说明Background1000LEqual最先绘制通常是天空盒Geometry2000On默认值所有不透明物体AlphaTest2450On使用 clip() 的物体介于不透明和半透明之间Transparent3000Off半透明物体Back-to-Front 排序Overlay4000Off最后绘制如镜头光晕、UI为什么 Transparent 默认 ZWrite Off因为 Unity 的 ShaderLab 在指定QueueTransparent时URP 的渲染管线会自动在对应 Pass 中应用 ZWrite Off Alpha Blend。这是约定俗成的渲染管线设计——Transparent 队列里的物体就是半透明的不该写深度。微调渲染顺序你可以通过加减数值来微调同一队列内的绘制顺序。比如你想让水面在普通半透明物体之后绘制确保水面总是在最前面ShaderLab渲染队列微调1QueueTransparent100 // 在普通透明物体之后绘制 2QueueTransparent-100 // 在普通透明物体之前绘制Chapter 04Alpha Blend 与 Alpha Test 的性能取舍这是两个截然不同的透明度处理策略各自适用不同的场景。选择错误不仅影响视觉效果还会带来严重的性能问题。Alpha Testclip / discardAlpha Test 在片元着色器中对 alpha 值做阈值判断低于阈值的片元直接discard丢弃高于阈值的完全保留。half4 Frag(Varyings input) : SV_Target { half4 col SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.uv); // alpha 值低于阈值直接丢弃整个片元 clip(col.a - _Cutoff); // 等价于: // if (col.a _Cutoff) discard; return col; }优势由于丢弃的片元不写颜色也不写深度ZWrite 可以保持开启。这意味着 GPU 的 Early-Z 优化仍然生效——被遮挡的片元在进入片元着色器之前就被深度测试丢弃了大幅减少计算量。劣势边缘锯齿Aliasing严重无法实现柔和的半透明效果。早期 GPU 上discard会导致 Early-Z 失效因为片元着色器执行前无法知道是否会 discard现代 GPU 已通过Conservative Z等技术缓解。Alpha Blend混合Alpha Blend 不丢弃任何片元而是将片元的颜色按透明度比例与已有颜色混合。half4 Frag(Varyings input) : SV_Target { half4 col SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.uv); // 直接返回混合由硬件 Blend 状态自动完成 // SrcAlpha × SrcColor (1 - SrcAlpha) × DstColor return col; }优势边缘柔和可实现玻璃、烟雾、水面等真正的半透明效果。劣势必须ZWrite Off导致 Early-Z 优化失效。GPU 无法在片元着色器之前做深度剔除——即使某个片元最终会被更近的半透明物体完全覆盖它仍然需要先执行片元着色器然后再排序混合。同时需要Back-to-Front 排序增加了 CPU 端的排序开销。性能对比总结特性Alpha Test (clip)Alpha BlendZWrite✅ 可以开启Early-Z 生效❌ 必须关闭Early-Z 失效边缘质量硬边缘有明显锯齿柔和渐变视觉效果好Overdraw低被遮挡片元提前丢弃高所有片元都执行着色器排序需求不需要特殊排序必须 Back-to-Front 排序典型用途树叶、草、栅栏、铁丝网玻璃、水、烟雾、粒子GPU Wave 影响Wave 内 divergent 分支可能降低占用率所有片元均执行无分支分歧但计算量大Chapter 05URP 中实现一个正确的半透明 Shader下面给出一个完整的 URP 半透明 Shader 实现涵盖所有核心要点。Shader Custom/URP/Transparent { Properties { // 基础贴图及其采样器 _BaseMap(Base Map, 2D) white {} _BaseColor(Base Color, Color) (1,1,1,1) // ★ 关键控制整体透明度的滑块 _Alpha(Alpha, Range(0,1)) 0.5 } SubShader { // ★ 关键设置渲染队列为 Transparent // Transparent 对应 Queue3000确保在不透明物体之后绘制 Tags { RenderPipeline UniversalPipeline RenderType Transparent Queue Transparent } Pass { Name Forward // ═══════════════════════════════════════════════ // ★ 渲染状态配置 — 半透明 Shader 的核心 // ═══════════════════════════════════════════════ // ★ 关键关闭深度写入 // 不关闭的话后方物体会被错误遮挡 ZWrite Off // 深度测试保持开启 — 不会被不透明物体遮挡时穿透 ZTest LEqual // ★ 关键Alpha 混合模式 // SrcAlpha × 新颜色 (1-SrcAlpha) × 旧颜色 Blend SrcAlpha OneMinusSrcAlpha // HLSL 代码块 HLSLPROGRAM #pragma vertex Vert #pragma fragment Frag #include Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl // ─── 资源声明 ─── CBUFFER_START(UnityPerMaterial) float4 _BaseMap_ST; half4 _BaseColor; half _Alpha; CBUFFER_END TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap); // ─── 数据结构 ─── struct Attributes { float4 positionOS : POSITION; float2 uv : TEXCOORD0; }; struct Varyings { float4 positionCS : SV_POSITION; float2 uv : TEXCOORD0; }; // ─── 顶点着色器 ─── Varyings Vert(Attributes input) { Varyings output; // 模型空间 → 裁剪空间 output.positionCS TransformObjectToHClip(input.positionOS.xyz); // UV 缩放与偏移基于 Inspector 中的 Tiling/Offset output.uv TRANSFORM_TEX(input.uv, _BaseMap); return output; } // ─── 片元着色器 ─── half4 Frag(Varyings input) : SV_Target { // 采样基础贴图 half4 col SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.uv); // 应用 Base Color col.rgb * _BaseColor.rgb; // ★ 关键设置最终 Alpha 值 // 贴图 Alpha × 材质面板上的 Alpha 滑块 col.a * _Alpha; return col; } ENDHLSL } } }三个关键配置缺一不可①ZWrite Off— 不写入深度允许后方物体可见②QueueTransparent— 确保在不透明物体之后绘制③Blend SrcAlpha OneMinusSrcAlpha— 启用标准 Alpha 混合渲染顺序验证把这个 Shader 赋给场景中的一个物体后通过 Frame DebuggerWindow → Analysis → Frame Debugger可以清楚地看到绘制顺序所有Geometry队列的不透明物体先绘制建立完整的深度缓冲你的半透明物体在Transparent队列中绘制ZWrite Off 不影响已有的深度缓冲GPU 将半透明物体的颜色与深度缓冲中已通过测试的像素进行 Alpha 混合Chapter 06OITOrder Independent Transparency方案概览Back-to-Front 排序有一个根本缺陷它只能处理物体级别的排序无法处理物体自身相交Self-Intersection或多个半透明物体交错重叠的情况。OIT 技术的目标就是彻底消除排序依赖。为什么大多数项目不用 OIT方案额外显存额外 Pass精确度移动端支持复杂度Back-to-Front传统无1物体级✅低Depth Peeling1-2 个深度纹理N层数像素级❌中Per-Pixel Linked ListsSSBO 缓冲区2像素级⚠️ Vulkan/DX12高Weighted Blended2 个累积纹理2近似⚠️ 需 MRT中实际建议对于大多数 Unity 项目传统的 Back-to-Front 排序 ZWrite Off 已经足够。OIT 主要在以下场景中才有必要考虑• 大量半透明粒子交错重叠如烟雾、火焰• 复杂的半透明模型自身相交如头发、 foliage• 医疗/科学可视化等对精度要求极高的场景URP 中的 OIT 可行性在 URP 中实现 OIT 需要通过ScriptableRenderFeature自定义渲染流程。大致步骤在 Transparent 队列之前插入一个自定义 RenderFeature使用CommandBuffer.Blit或 Compute Shader 分配额外缓冲区片元着色器中通过 UAVRWTexture2D写入链表节点或累积值最后用一个全屏 Pass 对累积结果做最终混合并输出注意URP 的 Forward 渲染路径对 MRT 和 UAV 的支持有限。如果项目需要完整的 OIT建议评估是否需要切换到 Deferred 渲染路径甚至考虑 HDRP。移动端 WebGL2 / GLES3.0 环境下 SSBO 和 Image Load Store 的支持也存在碎片化问题。Summary核心要点速查概念核心结论深度缓冲问题半透明物体写入深度会导致后方物体被 ZTest 丢弃无法参与混合ZWrite Off关闭深度写入但保留深度测试仍不会穿透不透明物体QueueTransparent值 3000在不透明物体之后绘制内部按距离 Back-to-Front 排序Alpha Testclip/discard可保持 ZWrite On适合树叶/草边缘硬Alpha Blend必须 ZWrite Off适合玻璃/水/烟边缘柔Overdraw 高OIT消除排序依赖精确但昂贵实际项目中 Back-to-Front 通常够用

相关文章:

Unity Shader 半透明物体为什么不能写入深度缓冲?

从 Depth Buffer 原理到 URP Shader 实战,彻底搞懂半透明渲染的每一个环节Chapter 01半透明物体为什么不能写入深度缓冲?要理解这个问题,我们需要先回到 Depth Buffer(深度缓冲,也叫 Z-Buffer)的基本工作原…...

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 …...