UE5在光照质量控制上的BaseLightmass.ini文件源码解读分析

Unreal Engine 5(UE5)中,BaseLightmass.ini文件承担着配置全局静态光照解算器和导出设置的重要任务。该文件的设定直接影响着光照构建的质量、速度以及内存占用,是影响UE5项目光照表现的核心配置之一。
 

BaseLightmass.ini文件

; 这些是各种Lightmass解算器和导出设置的调整后的默认值
; 面向艺术家的Lightmass设置位于编辑器UI中
; 所有这些的文档都在UnrealLightmass / Public / SceneExport.h中
; 每次启动光照构建时,这个ini文件都会被重新加载,无需重启编辑器

; 警告:用旧版本覆盖此文件会导致编辑器崩溃。此文件必须与编辑器可执行文件同步。
; 相反,在你的项目中创建一个DefaultLightmass.ini,并仅覆盖你需要的值,然后这些覆盖在版本升级时仍将继续工作。
; https://docs.unrealengine.com/latest/INT/Programming/Basics/ConfigurationFiles/
;
; 例如,在你项目的Config/DefaultLightmass.ini中:
; [DevOptions.PrecomputedDynamicObjectLighting]
; SurfaceLightSampleSpacing=400

[DevOptions.StaticLighting]
bAllowMultiThreadedStaticLighting=True ; 允许多线程静态光照,以提高处理速度。
ViewSingleBounceNumber=-1 ; 视图单次反射编号(-1表示不限制)。
bUseBilinearFilterLightmaps=True ; 使用双线性滤波光照图,以平滑光照效果。
bCompressLightmaps=True ; 压缩光照图以减少内存使用。
bUseConservativeTexelRasterization=True ; 使用保守的像素栅格化,以确保覆盖。
bAccountForTexelSize=True ; 考虑到像素大小进行光照计算。
bUseMaxWeight=True ; 使用最大权重来改善光照效果。
MaxTriangleLightingSamples=8 ; 每个三角形的最大光照采样数。
MaxTriangleIrradiancePhotonCacheSamples=4 ; 每个三角形辐照度光子缓存的最大采样数。
bAllow64bitProcess=True ; 允许使用64位进程,以处理更大的数据集。
DefaultStaticMeshLightingRes=32 ; 默认静态网格光照分辨率。
bAllowCropping=False ; 不允许裁剪光照图。
bGarbageCollectAfterExport=True ; 导出后进行垃圾收集。
bRebuildDirtyGeometryForLighting=True ; 为光照重建脏几何体。
bUseEmbree=true ; 使用Embree加速光线追踪。
bVerifyEmbree=false ; 不验证Embree的正确性。
bUseEmbreePacketTracing=false ; 不使用Embree的包追踪功能。
bUseFastVoxelization=false ; 不使用快速体素化加速体积光照图的体素化。
bUseEmbreeInstancing=false ; 不使用Embree的实例化功能来减少内存消耗。
bUseFilteredCubemapForSkylight=true ; 使用过滤的立方体贴图为天空光提供更平滑的阴影。
MappingSurfaceCacheDownsampleFactor=2 ; 映射表面缓存下采样因子。

[DevOptions.StaticLightingSceneConstants]
StaticLightingLevelScale=1 ; 静态光照级别缩放。
VisibilityRayOffsetDistance=.1 ; 可见性射线偏移距离。
VisibilityNormalOffsetDistance=3 ; 可见性法线偏移距离。
VisibilityNormalOffsetSampleRadiusScale=.5 ; 可见性法线偏移采样半径比例。
VisibilityTangentOffsetSampleRadiusScale=.8 ; 可见性切线偏移采样半径比例。
SmallestTexelRadius=.1 ; 最小像素半径。
LightGridSize=100 ; 光网格大小。
AutomaticImportanceVolumeExpandBy=500 ; 自动重要性体积扩展量。
MinimumImportanceVolumeExtentWithoutWarning=10000.0 ; 无警告的最小重要性体积范围。

接下来的部分详细配置了静态光照材质、网格区域光、预计算动态对象光照、体积光照映射、预计算可见性、体积距离场、静态阴影、重要性追踪、光子映射和辐照度缓存等高级光照效果的处理参数。这些参数涵盖了从基本的光照解析度到高级功能如体积光照映射、光子映射技术的配置,为UE5项目中的光照效果提供了极大的灵活性和控制力。通过调整这些参数,开发者可以根据项目的具体需求优化光照效果,平衡视觉质量和性能开销。
[DevOptions.StaticLightingMaterial]
bUseDebugMaterial=False ; 是否使用调试材质,通常用于开发过程中检查光照效果。
ShowMaterialAttribute=None ; 显示材质属性,用于调试。
EmissiveSampleSize=128 ; 发光采样大小,影响发光材质的光照质量。
DiffuseSampleSize=128 ; 漫反射采样大小。
SpecularSampleSize=128 ; 镜面反射采样大小。
TransmissionSampleSize=256 ; 透射采样大小,影响光通过透明或半透明物体时的效果。
NormalSampleSize=256 ; 法线采样大小,影响光照对物体表面细节的反应。
TerrainSampleScalar=4 ; 地形材质的采样缩放,因为地形材质通常覆盖较大区域。
DebugDiffuse=(R=0.500000,G=0.500000,B=0.500000) ; 调试用的漫反射颜色。
EnvironmentColor=(R=0.00000,G=0.00000,B=0.00000) ; 环境光颜色。

[DevOptions.MeshAreaLights]
bVisualizeMeshAreaLightPrimitives=False ; 是否可视化网格区域光源的基元。
EmissiveIntensityThreshold=.01 ; 创建网格区域光的发光强度阈值。
MeshAreaLightGridSize=100 ; 网格区域光的网格大小。
MeshAreaLightSimplifyNormalAngleThreshold=25 ; 网格区域光简化时的法线角度阈值。
MeshAreaLightSimplifyCornerDistanceThreshold=.5 ; 网格区域光简化时的角距离阈值。
MeshAreaLightSimplifyMeshBoundingRadiusFractionThreshold=.1 ; 网格区域光简化时的网格边界半径分数阈值。
MeshAreaLightGeneratedDynamicLightSurfaceOffset=30 ; 生成的动态光源表面偏移。

[DevOptions.PrecomputedDynamicObjectLighting]
bVisualizeVolumeLightSamples=False ; 是否可视化体积光采样。
bVisualizeVolumeLightInterpolation=False ; 是否可视化体积光插值。
NumHemisphereSamplesScale=2 ; 半球采样比例,影响光照计算的精度和性能。
SurfaceLightSampleSpacing=300 ; 表面光采样间距。
FirstSurfaceSampleLayerHeight=50 ; 第一层表面采样高度。
SurfaceSampleLayerHeightSpacing=250 ; 表面采样层高度间距。
NumSurfaceSampleLayers=2 ; 表面采样层数。
DetailVolumeSampleSpacing=300 ; 细节体积采样间距。
VolumeLightSampleSpacing=3000 ; 体积光采样间距。
MaxVolumeSamples=250000 ; 最大体积采样数,限制体积采样的内存占用。
bUseMaxSurfaceSampleNum=True ; 是否使用最大表面采样数限制。
MaxSurfaceLightSamples=500000 ; 最大表面光采样数。

[DevOptions.VolumetricLightmaps]
BrickSize=4 ; 体积光照映射的砖块大小。
MaxRefinementLevels=3 ; 最大细化级别。
VoxelizationCellExpansionForSurfaceGeometry=.1 ; 表面几何体素化单元扩展。
VoxelizationCellExpansionForVolumeGeometry=.25 ; 体积几何体素化单元扩展。
VoxelizationCellExpansionForLights=.1 ; 光源体素化单元扩展。
TargetNumVolumetricLightmapTasks=800 ; 目标体积光照映射任务数量。
MinBrickError=.01 ; 最小砖块误差。
SurfaceLightmapMinTexelsPerVoxelAxis=1.0 ; 表面光照图每体素轴的最小纹素数。
bCullBricksBelowLandscape=true ; 裁剪低于地形的砖块。
LightBrightnessSubdivideThreshold=.3 ; 光亮度细分阈值。

接下来的配置部分涉及预计算可见性、体积距离场、静态阴影、重要性追踪、光子映射和辐照度缓存等高级功能。这些配置为UE5提供了强大的光照和阴影效果的控制,允许开发者根据项目需求精细调整光照效果,以达到理想的视觉效果和性能平衡。通过调整这些高级参数,可以优化场景的光照质量,提升渲染效率,并针对特定场景需求定制光照解决方案。
[DevOptions.PrecomputedVisibility]
bVisualizePrecomputedVisibility=False ; 是否可视化预计算的可见性,有助于调试可见性问题。
bCompressVisibilityData=True ; 是否压缩预计算可见性数据,减少内存占用。
bPlaceCellsOnOpaqueOnly=True ; 是否只在不透明的表面放置可见性计算单元,提高计算效率。
NumCellDistributionBuckets=800 ; 可见性计算单元分布的桶数量。
CellRenderingBucketSize=5 ; 单个桶的渲染大小。
NumCellRenderingBuckets=5 ; 渲染桶的数量。
PlayAreaHeight=220 ; 玩家活动区域的高度,影响可见性计算的垂直范围。
MeshBoundsScale=1.2 ; 网格边界的缩放因子,影响可见性单元的覆盖范围。
VisibilitySpreadingIterations=1 ; 可见性传播的迭代次数。
MinMeshSamples=14 ; 最小网格样本数,影响可见性计算的精度。
MaxMeshSamples=40 ; 最大网格样本数。
NumCellSamples=24 ; 单元样本数量。
NumImportanceSamples=40 ; 重要性样本数量。

[DevOptions.PrecomputedVisibilityModeratelyAggressive]
MeshBoundsScale=1 ; 中等侵略性设置下的网格边界缩放因子。
VisibilitySpreadingIterations=1 ; 中等侵略性设置下的可见性传播迭代次数。

[DevOptions.PrecomputedVisibilityMostAggressive]
MeshBoundsScale=1 ; 最侵略性设置下的网格边界缩放因子。
VisibilitySpreadingIterations=0 ; 最侵略性设置下的可见性传播迭代次数,可能会牺牲一些可见性质量以获得更高的计算效率。

[DevOptions.VolumeDistanceField]
VoxelSize=75 ; 体积距离场的体素大小。
VolumeMaxDistance=900 ; 体积距离场的最大距离,影响体积阴影的覆盖范围。
NumVoxelDistanceSamples=800 ; 体素距离样本数量,影响体积距离场的精度。
MaxVoxels=3992160 ; 最大体素数量,限制体积距离场的内存占用。

[DevOptions.StaticShadows]
bUseZeroAreaLightmapSpaceFilteredLights=False ; 是否使用零区域光照贴图空间滤波的灯光,影响阴影的质量和性能。
NumShadowRays=8 ; 阴影射线数量,影响静态阴影的精度和性能。
NumPenumbraShadowRays=8 ; 半影阴影射线数量。
NumBounceShadowRays=1 ; 反弹阴影射线数量,影响间接光照阴影的计算。
bFilterShadowFactor=True ; 是否过滤阴影因子,平滑阴影边缘。
ShadowFactorGradientTolerance=0.5 ; 阴影因子梯度容忍度,影响阴影平滑度。
bAllowSignedDistanceFieldShadows=True ; 是否允许使用有符号距离场(SDF)阴影,提高阴影质量。
MaxTransitionDistanceWorldSpace=50 ; 阴影过渡的最大世界空间距离。
ApproximateHighResTexelsPerMaxTransitionDistance=50 ; 每个最大过渡距离的近似高分辨率纹理数。
MinDistanceFieldUpsampleFactor=3 ; 最小距离场上采样因子。
MinUnoccludedFraction=.0005 ; 最小未遮挡分数,影响阴影的可见性检测。
StaticShadowDepthMapTransitionSampleDistanceX=100 ; 静态阴影深度图在X方向上的过渡采样距离。
StaticShadowDepthMapTransitionSampleDistanceY=100 ; 静态阴影深度图在Y方向上的过渡采样距离。
StaticShadowDepthMapSuperSampleFactor=2 ; 静态阴影深度图的超采样因子,影响阴影边缘的平滑度。
StaticShadowDepthMapMaxSamples=4194304 ; 静态阴影深度图的最大采样数,限制阴影深度图的内存占用。

[DevOptions.ImportanceTracing]
bUseStratifiedSampling=True ; 是否使用分层采样,改善采样的均匀性和效率。
NumHemisphereSamples=16 ; 半球采样数量,影响光照计算的精度。
MaxHemisphereRayAngle=89 ; 半球射线的最大角度。
NumAdaptiveRefinementLevels=2 ; 自适应细化级别数,影响光照细节的捕捉。
AdaptiveBrightnessThreshold=1 ; 自适应亮度阈值,控制细化过程。
AdaptiveFirstBouncePhotonConeAngle=4 ; 自适应首次反弹光子的圆锥角度。
AdaptiveSkyVarianceThreshold=.5 ; 自适应天空方差阈值,影响天空光照的细化。
bUseRadiositySolverForSkylightMultibounce=True ; 是否使用辐射度求解器计算天空光多次反弹,提高天空光照质量。
bCacheFinalGatherHitPointsForRadiosity=False ; 是否缓存最终聚集命中点用于辐射度计算。
bUseRadiositySolverForLightMultibounce=False ; 是否使用辐射度求解器计算灯光多次反弹。

接下来的部分讨论了光子映射、辐射缓存、不同质量级别下的静态光照参数调整,如中、高、生产级别的质量设置,这些参数对于达到高质量的光照效果、平衡渲染性能和视觉效果的细粒度控制至关重要。通过精细调整这些参数,开发者可以根据具体的项目需求和目标平台的性能特点,优化场景的光照质量和渲染效率,实现更加逼真和高效的视觉表现。
[DevOptions.PhotonMapping]
bUsePhotonMapping=True ; 是否使用光子映射技术,这是一种高级的光照计算方法,可以模拟复杂的光照效果如间接照明和柔和阴影。
bUseFinalGathering=True ; 是否进行最终聚集步骤,用于提高光子映射的质量,通过在最终渲染前收集光子贡献来平滑光照。
bUsePhotonDirectLightingInFinalGather=False ; 在最终聚集过程中是否使用光子直接照明,这可以加快计算速度但可能牺牲一些光照质量。
bVisualizeCachedApproximateDirectLighting=False ; 是否可视化缓存的近似直接照明结果,有助于调试和优化光照效果。
bUseIrradiancePhotons=True ; 是否使用辐照度光子,这些光子存储了周围环境的平均光照信息,可以提高渲染效率和质量。
bCacheIrradiancePhotonsOnSurfaces=True ; 是否在表面上缓存辐照度光子,减少光照计算中的重复工作。
bVisualizePhotonPaths=False ; 是否可视化光子路径,有助于理解光子如何在场景中传播。
bVisualizePhotonGathers=True ; 是否可视化光子聚集过程,展示光子如何被用于计算场景中各点的光照。
bVisualizePhotonImportanceSamples=False ; 是否可视化光子重要性采样,这些采样指导了光子的发射方向,优化了光照效率。
bVisualizeIrradiancePhotonCalculation=False ; 是否可视化辐照度光子计算过程,帮助理解辐照度光子如何贡献于光照计算。
bEmitPhotonsOutsideImportanceVolume=False ; 是否在重要性体积外发射光子,通常关闭以优化性能。
ConeFilterConstant=1 ; 光子锥滤波常数,影响光子在最终聚集时的平滑度。
NumIrradianceCalculationPhotons=400 ; 用于辐照度计算的光子数量,影响计算的精度和质量。
FinalGatherImportanceSampleFraction=.6 ; 最终聚集中用于重要性采样的比例,提高光照计算的质量。
FinalGatherImportanceSampleConeAngle=10 ; 最终聚集的重要性采样锥角,影响采样的覆盖范围和质量。
IndirectPhotonEmitDiskRadius=200 ; 间接光子发射盘半径,影响间接光子的分布和范围。
IndirectPhotonEmitConeAngle=30 ; 间接光子发射锥角,控制光子发射的方向分布。
MaxImportancePhotonSearchDistance=2000 ; 最大重要性光子搜索距离,影响光子搜索的范围。
MinImportancePhotonSearchDistance=20 ; 最小重要性光子搜索距离,确保光子搜索的精确性。
NumImportanceSearchPhotons=10 ; 重要性搜索光子数量,影响光照计算的细节和质量。
OutsideImportanceVolumeDensityScale=.0005 ; 重要性体积外光子密度比例,调整以平衡性能和光照覆盖。
DirectPhotonDensity=350 ; 直接光子密度,影响直接光照效果的质量。
DirectIrradiancePhotonDensity=350 ; 直接辐照度光子密度,影响辐照度光子的分布和质量。
DirectPhotonSearchDistance=200 ; 直接光子搜索距离,影响直接光照计算的范围和精度。
IndirectPhotonPathDensity=5 ; 间接光子路径密度,影响间接光照效果的质量。
IndirectPhotonDensity=600 ; 间接光子密度,影响间接光照计算的细节和质量。
IndirectIrradiancePhotonDensity=300 ; 间接辐照度光子密度,优化间接光照的计算效率。
IndirectPhotonSearchDistance=200 ; 间接光子搜索距离,控制间接光照计算的搜索范围。
PhotonSearchAngleThreshold=.5 ; 光子搜索角度阈值,影响光子搜索的方向选择。
IrradiancePhotonSearchConeAngle=10 ; 辐照度光子搜索锥角,影响辐照度光子搜索的覆盖范围。
bUsePhotonSegmentsForVolumeLighting=true ; 是否使用光子段进行体积光照计算,提高体积光照的质量。
PhotonSegmentMaxLength=1000 ; 光子段的最大长度,影响体积光照计算的范围。
GeneratePhotonSegmentChance=.01 ; 生成光子段的概率,控制体积光照光子的分布。
[DevOptions.IrradianceCache]
bAllowIrradianceCaching=True ; 是否允许使用辐射缓存,可以大幅提高间接光照计算的效率。
bUseIrradianceGradients=False ; 是否使用辐射梯度,可以改善光照过渡的自然度,但可能增加计算成本。
bShowGradientsOnly=False ; 是否仅显示辐射梯度,用于调试和优化辐射缓存的使用。
bVisualizeIrradianceSamples=True ; 是否可视化辐射缓存样本,有助于理解辐射缓存在场景中的分布情况。
RecordRadiusScale=.8 ; 记录半径缩放,调整辐射缓存记录的影响范围,影响光照平滑度和细节保留。
InterpolationMaxAngle=20 ; 插值最大角度,限制辐射缓存插值时考虑的最大角度差异,影响光照过渡的平滑度。
PointBehindRecordMaxAngle=10 ; 记录点后方最大角度,控制辐射缓存记录背后区域的光照插值,影响光照一致性。
DistanceSmoothFactor=4 ; 距离平滑因子,增加插值过程中的距离权重,用于平滑光照而不丢失太多细节。
AngleSmoothFactor=4 ; 角度平滑因子,增加插值过程中的角度权重,提高光照过渡的自然度。
SkyOcclusionSmoothnessReduction=.5 ; 天空遮蔽平滑度降低,调整天空遮蔽计算中的平滑程度,以保留更多细节。
MaxRecordRadius=1024 ; 最大记录半径,设置辐射缓存记录的最大影响范围,影响光照覆盖和计算效率。
CacheTaskSize=64 ; 缓存任务大小,调整辐射缓存计算的任务分割大小,影响计算的并行度和性能。
InterpolateTaskSize=64 ; 插值任务大小,调整辐射缓存插值的任务分割大小,影响插值计算的并行度和效率。
[DevOptions.StaticLightingMediumQuality]
NumShadowRaysScale=2 ; 阴影射线数量的缩放因子,影响阴影的质量和计算成本。
NumPenumbraShadowRaysScale=4 ; 半阴影区域射线数量的缩放因子,提高了半阴影的质量。
ApproximateHighResTexelsPerMaxTransitionDistanceScale=3 ; 近似的高分辨率纹理元每最大过渡距离的缩放比例,影响光照过渡的平滑度。
MinDistanceFieldUpsampleFactor=3 ; 最小距离场上采样因子,决定了距离场阴影的精细程度。
NumHemisphereSamplesScale=2 ; 半球采样数量的缩放因子,影响间接光照的质量。
NumImportanceSearchPhotonsScale=1 ; 重要性搜索光子数量的缩放因子,调整间接光照计算的细节。
NumDirectPhotonsScale=2 ; 直接光子数量的缩放因子,影响直接光照效果的质量。
DirectPhotonSearchDistanceScale=.5 ; 直接光子搜索距离的缩放因子,调整直接光照计算的范围。
NumIndirectPhotonPathsScale=1 ; 间接光子路径数量的缩放因子,影响间接光照路径的多样性。
NumIndirectPhotonsScale=2 ; 间接光子数量的缩放因子,影响间接光照效果的质量。
NumIndirectIrradiancePhotonsScale=2 ; 间接辐照度光子数量的缩放因子,影响间接光照的平滑度。
RecordRadiusScaleScale=.75 ; 记录半径的缩放比例,影响辐射缓存记录的空间覆盖范围。
InterpolationMaxAngleScale=1 ; 插值最大角度的缩放比例,调整光照插值时的角度容忍度。
IrradianceCacheSmoothFactor=.75 ; 辐射缓存平滑因子,影响光照插值的平滑度。
NumAdaptiveRefinementLevels=3 ; 自适应细分级别数,影响光照计算的细节层次。
AdaptiveBrightnessThresholdScale=.5 ; 自适应亮度阈值的缩放比例,调整光照细分的敏感度。
AdaptiveFirstBouncePhotonConeAngleScale=1 ; 自适应首次反弹光子锥角的缩放比例,影响首次反弹光子的分布范围。
AdaptiveSkyVarianceThresholdScale=1 ; 自适应天空方差阈值的缩放比例,影响天空光照变化的敏感度。

BaseLightmass.ini文件为Unreal Engine 5中的静态光照计算提供了高度的可配置性,通过精细调整这些高级设置,开发者可以充分挖掘UE5的渲染潜力,实现既高效又美观的光照效果。这要求开发者对光照原理有深入的理解,并通过实验来找到最适合其项目的配置。正确的配置可以显著提高渲染效率,减少光照构建时间,同时保持或甚至提升光照质量,是优化项目渲染性能的关键步骤。通过对上述参数进行调整,开发者可以在不牺牲太多视觉效果的前提下,优化光照计算的性能,适用于需要较高性能要求的场景或是中等质量需求的项目。这些参数的调整应基于项目的具体需求和目标平台的性能特点,以达到最佳的平衡。

基础设定与多线程

[DevOptions.StaticLighting]
bAllowMultiThreadedStaticLighting=True 

这里开启了静态光照的多线程处理,允许UE5利用多核CPU加速光照计算过程,显著提高光照构建速度。

光照滤波与压缩

bUseBilinearFilterLightmaps=True
bCompressLightmaps=True 

通过启用双线性滤波和光照贴图压缩,旨在平衡视觉效果与性能开销。滤波可以减少光照贴图的锯齿和瑕疵,而压缩则能有效减少游戏包体积和运行时内存占用。

光照精度与Embree加速

bUseEmbree=true 

Embree是英特尔开发的一套用于光线追踪的高性能核心库。UE5通过集成Embree,能够进一步提升静态光照的计算速度和质量,尤其在复杂场景中的表现更为突出。

高级光照质量控制

[DevOptions.StaticLightingHighQuality]
NumShadowRaysScale=4
NumHemisphereSamplesScale=4 

这部分设置针对光照质量的不同需求提供了细致的调整选项,包括阴影光线的采样率、半球采样的数量等。这些参数直接影响最终光照的细腻程度和真实感。

贴图分辨率与空间采样

DefaultStaticMeshLightingRes=32
SurfaceLightSampleSpacing=300 

默认的静态网格光照解析度设置为32,这决定了光照贴图的基础分辨率。同时,表面光采样间隔的设定影响光照计算的密集程度,进而影响光照质量和计算资源需求。

预计算可见性与体积光照映射

[DevOptions.PrecomputedVisibility]
bCompressVisibilityData=True 

预计算可见性是优化大型开放世界场景性能的关键技术,通过压缩可见性数据,可以有效减少内存占用,同时保持良好的运行效率。

[DevOptions.VolumetricLightmaps]
BrickSize=4
MaxRefinementLevels=3 

体积光照映射提供了对复杂场景间接光照的高质量模拟。通过调整砖块大小和细化级别,开发者可以在视觉效果和性能之间寻找最佳平衡点。

结论

BaseLightmass.ini文件为UE5项目中的静态光照质量提供了丰富的配置选项。通过对这些参数的深入理解和适当调整,开发者可以针对具体的项目需求,优化光照效果,达到既满足视觉表现又保持良好性能的目标。随着UE5的不断进化和优化,理解并合理配置这些参数将成为提升项目光照质量的重要手段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小宝哥Code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值