Unity Shader 深入理解 深度冲突

Unity半透明水面阴影实现:Shader双Pass与深度一致性实战 在实时渲染中,阴影映射(Shadow Mapping)是实现动态光影的核心技术,其原理是通过从光源视角生成深度贴图,再与相机视角的深度值进行比较,从而确定像素是否处于阴影中。对于不透明物体,Unity等引擎提供了默认的阴影处理流程,但当涉及半透明表面时,问题变得复杂——标准透明着色器往往无法正确处理阴影投射与接收,导致视觉失真。这背后的技术关键在于深度缓冲(Z-Buffer)与透明度混合(Alpha Blending)的冲突,以及阴影贴图生成时对几何体一致性的要求。为解决这一难题,开发者需要深入Shader 阅读详情

从深度缓冲的基本原理出发,系统解析 Z-Fighting 的成因,并提供 URP Shader 中的实用解决方案。

一、什么是深度

在 3D 渲染中,深度 描述的是物体表面上的某个点距离摄像机有多远。 想象你站在一条笔直的马路上,近处的路灯比远处的路灯"更浅",这个"深浅"就是深度。

Unity 使用 深度缓冲 来记录屏幕上每个像素的深度值。 它是一张与屏幕分辨率相同的"灰度图"——每个像素存储的不是颜色,而是一个 [0, 1] 范围的值: 0 代表最近(靠近近裁面),1 代表最远(接近远裁面)。

关键认知

深度缓冲本质上是一张逐像素的浮点纹理。URP 中默认使用 _CameraDepthTexture 来访问它,精度通常为 24 位或 32 位。


二、深度测试的工作原理

当 GPU 要绘制一个片元时,它不会直接覆盖屏幕上已有的颜色。它会先做一次深度测试:

  1. 读取目标像素当前深度缓冲中的值(已有值)
  2. 用当前片元的深度值与已有值比较
  3. 如果片元更近(默认是小于),则通过测试 → 更新颜色和深度缓冲
  4. 如果片元更远,则丢弃该片元

三、什么是深度冲突

深度冲突,英文叫 Z-Fighting,是 3D 渲染中最常见的视觉 bug 之一。 当两个(或多个)面在空间中几乎重叠时,深度缓冲的精度不足以区分它们谁在前、谁在后。 GPU 在不同像素上随机判定不同的面"获胜",结果就是两个面的纹理锯齿状地交错闪烁。

典型场景

深度冲突最常见于以下情况:① 两个面恰好重合(如墙壁和贴花);② 远处物体因为深度缓冲的非线性精度而"挤在一起";③ Shadow Map 中自阴影导致的阴影斑块(Shadow Acne)。


四、深度冲突的根本原因

要理解为什么深度缓冲"不够用",需要了解深度值的非线性分布。

4.1 透视投影下的深度非线性

经过透视投影矩阵变换后,深度值并不是均匀分布的。 近处的精度极高,远处则迅速降低。这个非线性关系可以表示为:

4.2 浮点精度问题

标准的 24 位深度缓冲有约 1677 万个离散深度级别。这听起来很多,但在非线性分布下:

  • 近裁面 0.1m、远裁面 1000m 时,在距离摄像机 900m 处,相邻两个深度级别之间可能相差 数米
  • 如果两个面在这个距离上间距小于这个级别差,GPU 就无法区分它们
深度缓冲格式精度适用范围备注
D16_UNorm65536 级移动端 / 低端精度最低,远距离易出问题
D24_UNorm_S8_UInt1677 万级桌面端常用带 8 位 Stencil,最通用的选择
D32_Float约 23 位尾数高端 / PC浮点格式,近处精度优于远处
D32_Float_S8_UInt约 23 位尾数高端 / 主机浮点 + Stencil,最佳选择

五、URP 中的解决方案

5.1 调整深度偏移 — Offset

HLSL/ShaderLab 提供了 Offset 命令,可以在光栅化阶段对深度值施加一个微小的偏移:

HLSL / ShaderLab
Pass {
    // Offset Factor, Units
    Offset -1, -1

    // Factor: 按斜率缩放的最大深度偏移
    // Units:  最小可分辨深度值的倍数
}

Offset factor, units 的实际偏移量为 factor × |dZ/dX| + units × r,其中 r 是深度缓冲的最小可分辨值。负值将片元"拉近"摄像机,正数推远。

实用建议

对于贴花类效果,常用 Offset -1, -1 让贴花略微浮在表面上方。对于轮廓描边,常用 Offset -1, -100 以确保描边始终可见。

5.2 调整近远裁面比例

近裁面和远裁面的比例直接决定了深度的均匀程度。增大 Near、减小 Far 可以显著改善远处精度:

C# / URP RenderPipelineAsset
// 在 URP Asset 中设置
// 或者通过代码:
var cameraData = renderingData.cameraData;
cameraData.camera.nearClipPlane = 0.3f;   // 不要设置得太小!
cameraData.camera.farClipPlane  = 500f;    // 按场景需要调整
  • Near = 0.01 会使 99% 的深度精度浪费在摄像机前 1 米内
  • 推荐 Near ≥ 0.1(VR 场景 ≥ 0.05),Far 按实际可见距离设置

5.3 使用 Reverse-Z

Reverse-Z 是近年来最重要的深度优化之一。它将深度值反转:近处 = 1,远处 = 0。 这样做的好处是让浮点精度在远处也能保持较高分辨率——因为浮点数在 [0, 0.5] 区间的精度远高于 [0.5, 1]。

URP 中的 Reverse-Z

URP 从 Unity 2020.3+ 开始默认启用 Reverse-Z。如果你的项目使用旧版 URP,可以在 URP Asset → Quality → 勾选 "Depth Texture" 来确保深度纹理格式正确。

5.4 分层渲染 & Render Queue

有时深度冲突并非精度问题,而是渲染顺序的问题。调整 Render Queue 确保正确的绘制顺序:

HLSL / ShaderLab
Tags {
    "Queue" = "Geometry"      // 不透明几何体: 2000
    "Queue" = "AlphaTest"     // Alpha测试:     2450
    "Queue" = "Transparent"  // 透明物体:      3000
    "Queue" = "Overlay"      // 覆盖层:        4000
}

// 自定义偏移:
"Queue" = "Geometry+50"  // 在不透明几何体之后渲染

5.5 使用深度偏移值 — DepthBias

在某些情况下(如 Shadow Map、自定义深度写入),可以在 Shader 中手动添加深度偏移:

HLSL / URP Shader
// 方法一:在顶点着色器中手动偏移
Varyings vert(Attributes input) {
    Varyings output;
    VertexPositionInputs vertexInput = GetVertexPositionInputs(input.positionOS.xyz);

    // 沿法线方向略微偏移顶点
    float3 normalWS = TransformObjectToWorldNormal(input.normalOS);
    float3 posWS = vertexInput.positionWS + normalWS * 0.001;

    output.positionCS = TransformWorldToHClip(posWS);
    return output;
}
HLSL / URP Shader
// 方法二:在片元着色器中修改深度输出
half4 frag(Varyings input, out float outDepth : SV_Depth) : SV_Target {
    half4 color = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv);

    // 获取当前深度并略微推远
    outDepth = input.positionCS.z / input.positionCS.w;
    outDepth += 0.00001;  // 小心!过大可能出现孔洞

    return color;
}

⚠ 注意

直接修改 SV_Depth 会禁用 Early-Z 优化,对性能有显著影响。仅在必要时使用,优先选择 Offset 命令或顶点偏移方案。


六、常见深度冲突场景实战

场景一:贴花 (Decal) 闪烁

在墙壁上放置弹孔贴花时,贴花面与墙面几乎共面。解决方案:

  1. 使用 Offset -1, -1 将贴花略微拉近
  2. 或将贴花面沿法线偏移 0.001-0.005 单位
  3. 使用 URP Decal Projector 或 DBuffer Decal(如果已启用)
HLSL — Decal Shader Pass
Pass {
    Name "Decal"
    Tags { "LightMode" = "UniversalForward" }

    ZWrite Off
    ZTest LEqual
    Offset -1, -1      // 核心:轻微拉近贴花

    Blend SrcAlpha OneMinusSrcAlpha
}

场景二:两个平面重叠

当地形与水面、或两层地面材质重叠时:

  1. 增大层间距(最简单的方案)
  2. 使用 ZTest GEqual + ZWrite Off 确保仅在不透明物体之后渲染
  3. 调整 Render Queue 控制渲染顺序

场景三:Shadow Map 自阴影斑块

这不是典型的深度冲突,但本质同样是深度精度不足。URP 通过 ShadowCaster Pass 中的 normalBias 和 depthBias 来处理。 你可以在 URP Asset → Shadows 中调整这些参数。

C# — Light Inspector
// URP Asset → Shadows:
// Depth Bias:    控制阴影深度偏移量
// Normal Bias:   沿法线方向偏移采样位置
// Soft Shadows:  启用后叠加 PCF 滤波

// 或者通过脚本调整定向光:
Light light = GetComponent<Light>();
light.shadowBias = 0.05f;
light.shadowNormalBias = 0.4f;

七、排查清单 & 总结

当你在 URP 项目中遇到视觉闪烁/锯齿交错时,按以下顺序排查:

  1. 确认是深度冲突:移动摄像机时,闪烁是否持续?两个面的纹理是否交替出现?
  2. 检查面间距:在场景编辑器中拉近查看,两个面是否几乎重合?
  3. 调整 Near/Far:Near 是否设置得过小(< 0.05)?
  4. 尝试 Offset:在 Shader 中加 Offset -1, -1
  5. 调整 Render Queue:确保渲染顺序符合预期
  6. 检查深度格式:是否使用了 16 位深度?换用 24 位或 32 位
  7. 考虑 Reverse-Z:新版 URP 默认启用,确认未被意外禁用
解决方案适用场景成本效果
Offset 命令贴花、描边、UI 叠加几乎为零★★★★★
增大 Near / 减小 Far大场景、远处物体零★★★★☆
Reverse-Z所有场景(URP 默认)零★★★★★
顶点法线偏移双层平面、墙面覆盖低★★★★☆
Render Queue 调整同位置多层物体零★★★☆☆
升级深度格式 (32-bit)整体精度不足带宽增加★★★★☆
SV_Depth 手动偏移复杂自定义需求高(禁用 Early-Z)★★★☆☆

深度冲突本质上是深度缓冲的精度与场景需求之间的资源竞争。 理解深度值的非线性分布,合理设置近远裁面,利用 Offset 和 Reverse-Z 等工具,大多数深度冲突都能在不牺牲性能的前提下优雅解决。

Unity引擎升级实战:从2019.4到2021.3的Shader兼容性避坑指南 在游戏开发与计算机图形学领域,Shader作为连接应用逻辑与GPU硬件的关键桥梁,其本质是一段用于控制渲染管线各阶段行为的程序。其工作原理是将开发者编写的高级着色语言(如HLSL/GLSL)代码,通过特定平台的Shader编译器转换为GPU可执行的机器指令。这一过程的技术价值在于,它实现了复杂光照、材质和视觉效果的实时计算,是决定最终画面表现力与性能的核心。然而,在引擎或图形API升级时,Shader编译器版本的迭代、语法支持度的变化以及对内置语义的重新解释,往往会引发兼容性问题,导致编译错误、渲染异常或性 阅读详情

相关推荐

深度冲突与Reversed-Z:解决Unity远处物体闪烁的浮点数精度陷阱

在计算机图形学中,深度缓冲是解决三维物体遮挡关系的关键技术,它通过存储每个像素的深度值来决定渲染顺序。其核心原理基于深度测试,即比较新片段与缓冲中已有片段的深度。然而,这一过程受限于IEEE 754浮点数规范的精度分布特性——精度在靠近0的区域最高,远离0则急剧下降。在传统的透视投影映射下,大量精度被分配给近处,导致远处深度值因精度不足而无法区分,从而引发深度冲突,表现为远处物体边缘的闪烁与抖动。这一问题的技术价值在于,它直接影响了大规模场景渲染的视觉稳定性与画面质量。为解决此问题,Reversed-Z技术

weixin_30271335的博客 372

Unity Shader开发指南:Surface、V&F与Shader Graph核心解析

在计算机图形学中,着色器(Shader)是控制渲染管线中顶点和像素处理的核心程序,其原理在于通过GPU并行计算,将3D模型的几何与材质信息转换为屏幕上的2D图像。这项技术是实现游戏画面、影视特效和实时可视化等数字内容的关键。对于Unity开发者而言,掌握不同的Shader编写方式能极大提升渲染效果开发效率与灵活性。表面着色器(Surface Shader)作为Unity封装的高级抽象层,通过声明式编程快速实现基于物理的光照模型,适合标准材质开发;顶点片元着色器(Vertex & Fragment Shade

weixin_30385925的博客 416

Unity 2023 URP Shader Graph环境配置与避坑指南

在Unity游戏开发中,着色器(Shader)是实现视觉效果的核心技术之一,它决定了物体表面的颜色、光照和纹理表现。其原理是通过GPU执行的程序,控制渲染管线的各个阶段,从而生成最终的像素颜色。对于开发者而言,掌握着色器技术能够极大地提升游戏的视觉表现力和艺术自由度,广泛应用于角色渲染、场景特效、UI动画等场景。而Unity的Shader Graph作为可视化着色器编辑工具,通过节点化操作降低了着色器开发的门槛,让美术和程序员都能高效协作。然而,在实际工程实践中,环境配置的兼容性问题,尤其是URP(通用渲染

a359798678的博客 343

UnityShader 深度遮罩

Shader "Masked/Mask" { SubShader { // Render the mask after regular geometry, but before masked geometry and // transparent things. Tags {"Queue" = "Geometry+10" } // D

YanSl 2179

Unity URP屏幕扭曲效果实现:从Shader到Renderer Feature全解析

屏幕扭曲是一种通过修改像素采样坐标实现画面变形的后期处理技术,其核心原理在于片段着色器中对UV坐标进行扰动。在游戏开发中,这项技术常用于模拟水下波动、热浪扭曲或技能特效,能显著增强视觉冲击力和沉浸感。随着Unity渲染管线从内置管线过渡到Universal Render Pipeline(URP),传统的后处理实现方式面临流程割裂和性能损耗等挑战。URP引入了可编程渲染器和Renderer Feature等现代架构,要求开发者深入理解渲染纹理管理和渲染器特性集成。通过创建自定义Render Pass并在合适

weixin_30876945的博客 352

Unity像素风格Shader实现:从原理到实战的完整指南

Shader(着色器)是运行在GPU上的核心渲染程序,它通过控制每个像素的颜色、光照和纹理,实现了从基础图形到复杂视觉效果的跨越。其工作原理基于图形渲染管线,通过顶点和片元着色器对几何与像素数据进行并行处理,从而高效生成最终图像。这一技术为游戏开发和实时图形应用带来了巨大的灵活性与表现力,尤其在风格化渲染领域价值显著。在复古像素艺术、独立游戏和特定UI设计等应用场景中,像素风格Shader通过降低空间分辨率和颜色深度,模拟早期显示设备的独特美感。本文聚焦于像素风格Shader的实现,深入解析其坐标量化与颜色

weixin_30820077的博客 394

Unity卡通水体渲染全解析:从Shader到后处理实现塞尔达风格水域

在实时渲染领域,水体渲染是塑造游戏世界沉浸感的关键技术之一。其核心原理是通过模拟光线与水的交互,如折射、反射和吸收,来表现水的视觉特性。对于追求艺术表达而非物理拟真的项目,风格化渲染技术提供了一条高效且富有表现力的路径。它通过提炼和夸张现实水体中最具辨识度的视觉特征,如深度渐变、边缘泡沫和动态焦散,来实现独特的艺术风格。这种技术方案在独立游戏和移动平台开发中具有重要价值,能够以较低的性能开销换取出色的视觉表现。本文以《塞尔达传说》系列中标志性的卡通水体为具体目标,深入拆解其实现流程。内容将涵盖使用Unity

weixin_30859423的博客 442

Unity URP风格化水面Shader全流程实现与性能优化指南

在游戏开发中,Shader是实现特定视觉风格的核心技术,它通过编写在GPU上运行的程序,控制模型每个像素的最终颜色与光照表现。其原理在于对顶点位置、纹理坐标、光照信息及深度等数据进行一系列数学运算与插值。这项技术的价值在于能够以极高的自由度创造从写实到卡通的各种渲染效果,同时通过算法优化实现对硬件资源的精准控制。在移动游戏、独立游戏等对性能与风格化有强烈需求的场景中,自定义Shader尤为重要。本文聚焦于使用Unity URP渲染管线,从零构建一个高效的风格化水面Shader,详细拆解了深度色、波浪动画、边

weixin_34320724的博客 371

Shader全局光照实现:从原理到Unity实战的完整指南

全局光照是计算机图形学中模拟光线在场景中多次反弹、相互影响的渲染技术,它通过计算直接光照与间接光照,解决了传统局部光照模型下物体孤立、缺乏真实感的问题。其核心原理遵循物理光学,旨在实现色彩渗透、柔和阴影等逼真视觉效果。在实时渲染领域,该技术价值巨大,是提升游戏、影视等数字内容视觉沉浸感的关键。常见的应用场景包括游戏场景光照、建筑可视化以及影视特效制作。本文聚焦于在Shader中实现全局光照,深入探讨了环境光、球谐光照、光照贴图与光照探针等核心实现路径,并结合Unity的Shader Graph可视化工具,解

weixin_34189116的博客 304

Unity水面渲染全解析:从Water组件到Shader实现

在实时渲染领域,水面效果是提升场景真实感的关键技术之一。其核心原理基于对自然界光学现象的模拟,主要包括反射、折射和法线扰动。反射通过平面反射或屏幕空间反射技术生成环境倒影,折射则利用屏幕坐标偏移模拟光线在水中的扭曲。法线贴图通过存储表面法线信息,在低面数模型上创造出丰富的波浪细节。这些技术的组合应用,使得在性能受限的实时环境中也能呈现出灵动的水体效果。从技术价值看,掌握水面渲染不仅能够提升视觉表现力,更是理解Shader编程、渲染管线及性能优化的重要实践。在游戏开发、虚拟现实和模拟仿真等应用场景中,高质量的

weixin_30843605的博客 329

Unity模型线框渲染:基于重心坐标的Shader实现与优化

在计算机图形学中,线框渲染是一种基础且关键的视觉调试技术,它通过绘制模型的网格边线来揭示其几何结构。其核心原理在于利用GPU光栅化过程中的顶点插值信息,判断像素是否位于三角形边缘。这项技术的价值在于为模型检查、动画调试和算法可视化提供了直观的透视窗口,广泛应用于游戏开发、工业仿真和建筑可视化等领域。本文聚焦于Unity引擎中的高效实现方案,深入剖析了基于重心坐标的Shader编写方法,并探讨了其在性能优化与工程实践中的应用,特别是针对模型线框显示和Shader开发中的常见问题提供了解决方案。

weixin_30410119的博客 363

Unity实现Arc System Works动漫风格Shader:从原理到实战

卡通渲染(Toon Shading)是一种将3D模型渲染成2D手绘动漫风格的技术,其核心原理是通过修改光照模型和渲染管线,将连续的光影过渡转化为分明的色块。该技术通过使用渐变纹理(Ramp Texture)进行阈值化采样来实现硬边阴影,并结合风格化高光与边缘光(Rim Light)增强画面表现力。在游戏开发,特别是独立游戏和日式动漫风格项目中,卡通渲染能大幅提升艺术表现力与制作效率。本文聚焦于复现Arc System Works(代表作《罪恶装备》)的标志性视觉风格,深入探讨了其着色器管线中动态描边、色调分

weixin_33794672的博客 341

Unity实时流体模拟实战:基于SPH与Compute Shader的完整实现

流体模拟是计算机图形学与物理仿真领域的核心技术,它通过数学模型模拟液体、气体等流体的运动规律。其核心原理基于纳维-斯托克斯方程,通过离散化方法求解。在实时应用场景中,该技术具有极高的技术价值,能够为游戏、VR/AR、交互式媒体带来极具沉浸感的动态视觉效果,例如逼真的水流、烟雾和熔岩特效。实现实时流体模拟的关键在于平衡计算精度与性能开销。平滑粒子流体动力学(SPH)作为一种无网格的拉格朗日方法,因其自适应性和并行友好性,成为实时模拟的理想选择。同时,GPU通用计算(GPGPU)通过大规模并行处理能力,为海量粒

weixin_30326741的博客 407

Unity Shader入门:从核心概念到URP实战编写

Shader是计算机图形渲染的核心程序,它直接控制GPU如何绘制屏幕上的每个像素,决定了从基础颜色到复杂特效的最终视觉效果。其工作原理基于可编程渲染管线,通过顶点着色器和片元着色器两大核心阶段,分别处理几何变换与像素着色,实现了光照、纹理、材质等关键渲染技术。掌握Shader编程对于优化渲染性能、实现定制化美术效果、提升项目视觉质量具有重要价值,广泛应用于游戏开发、影视特效、模拟仿真及交互式媒体等领域。本文聚焦于Unity引擎中的Shader开发,特别是基于现代通用渲染管线(URP),通过解析ShaderL

weixin_33762130的博客 367

Unity二次元角色渲染进阶:从NPR原理到《星穹铁道》风格Shader实战

非真实感渲染(NPR)是计算机图形学中用于模拟艺术化风格的关键技术,其核心在于通过特定的光照模型和渲染管线,舍弃物理准确性以追求风格化的视觉表达。在实时渲染领域,NPR技术常被用于实现卡通、水墨等风格,其技术价值在于能够高效地塑造独特的视觉语言,增强作品的艺术表现力与辨识度。该技术广泛应用于游戏角色渲染、动画制作及独立游戏开发等场景。本文聚焦于二次元卡通渲染这一热门应用方向,深入探讨了如何通过自定义Shader在Unity的URP(通用渲染管线)中实现类似《崩坏:星穹铁道》的高级渲染效果,其中涉及**阶调纹

chutisun0039的博客 407

Unity UI抗锯齿实战:MSAA、后处理与自定义Shader方案全解析

在计算机图形学中,走样是屏幕像素离散化采样连续几何边缘时产生的视觉瑕疵,表现为令人不快的锯齿感。其核心原理在于采样不足导致信号失真。抗锯齿技术通过超采样、后处理滤波或自定义算法,在像素级别混合颜色信息,重建平滑边缘,对于提升应用视觉品质和用户体验具有关键价值。在游戏开发、UI设计和高保真渲染等应用场景中,抗锯齿是保证画面精致度的基础技术。本文聚焦Unity引擎,深入探讨多重采样抗锯齿、后处理抗锯齿等主流方案,并结合性能优化与移动端适配,为开发者提供从原理到实践的完整指南。

weixin_33739646的博客 407

Unity水体Shader实战:从渲染优化到交互实现全解析

在实时图形渲染中,Shader是实现复杂视觉效果的核心技术,它通过编程方式控制GPU的渲染管线,决定了物体表面的颜色、光照和纹理表现。其原理在于将数学计算与图形学算法结合,逐像素或逐顶点处理视觉数据。从技术价值看,高效的Shader不仅能提升视觉沉浸感,更是优化性能、保障多平台兼容性的关键。在游戏开发、模拟仿真等应用场景中,水体渲染是Shader技术的典型挑战,涉及抗锯齿、反射折射、动态波纹等复杂效果。本文聚焦Unity引擎中的水体Shader实战,针对水面闪烁、性能卡顿等常见问题,提供从渲染队列调整、法线

weixin_29535577的博客 290

Unity描边Shader实战:从法线外扩到屏幕空间优化的完整实现

在计算机图形学中,描边(Outline)是一种基础且重要的视觉增强技术,其核心原理是通过算法识别并突出模型或场景的边缘轮廓。从实现机制上,主要分为基于几何的法线外扩、基于屏幕空间的后处理以及基于几何着色器的轮廓检测三大类。法线外扩法因其实现简单、性能可控,成为游戏开发中最常用的方案,但其在模型非均匀缩放和硬边处易出现描边不均匀的问题。通过将计算从模型空间转换到观察空间或裁剪空间,并引入法线归一化处理,可有效解决这一问题,提升描边效果的视觉一致性。在工程实践中,结合屏幕空间自适应宽度、抗锯齿优化及多Pass渲

weixin_33738578的博客 302
上一篇: Unity CommandBuffer 如何告诉 GPU“这块内存不用读/不用写”
下一篇: Unity Shader URP 什么是early-z 什么是hi-z 什么是层级深度缓冲
mxwin
博客等级 码龄19年 22粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值