3D Gaussian Splatting for Real-Time Radiance Field Rendering——文章方法精解

news2025/5/24 9:03:22

SfM → Point-NeRF → 3D Gaussian Splatting 

🟦SfM

Structure-from-Motion(运动恢复结构,简称 SfM)是一种计算机视觉技术,可以:

利用多张从不同角度拍摄的图像,恢复出场景的三维结构和相机的位置。

举个例子:

你拿着手机从不同角度拍一座雕像,然后用 SfM 工具(如 COLMAP)处理这些图片,结果是:

  1. 相机每个拍摄位置的三维坐标(相机轨迹);

  2. 场景中每个被识别出来的点在三维空间中的坐标(称为 SFM points);

  3. 这些点与哪些图片对应(点和图像的关系);

这些恢复出来的三维点,就叫做 SfM点云(或简称 SfM points)。

🟦 Point-NeRF

Point-NeRF 是一种 基于点云的神经辐射场(Neural Radiance Field)渲染方法

它的目标是:

在已有三维点云的基础上,通过神经网络对这些点进行增强,实现高质量的新视角图像合成

这项工作是由 Xu et al., 2022 提出的,论文标题为:

Point-NeRF: Point-based Neural Radiance Fields

你可以这样理解 Point-NeRF:

把点云(比如从 SfM 或深度相机得到的)看作是“粗糙的模型骨架”,然后用神经网络“涂上颜色和光照”,让它从任意角度看起来都非常真实。

🟧 Point-NeRF 的核心流程如下:

1. 输入稀疏点云

  • 可以是通过 SfM、深度相机等方式得到的;

  • 每个点有位置、颜色、可选法向量等属性;

2. 点特征学习

  • 每个点会被加上 learnable 的特征向量;

  • 这些特征会输入到一个神经网络里,学习如何从不同角度“看”这些点;

3. 体积渲染(Volume Rendering)

  • 和 NeRF 类似,它也用体积渲染;

  • 从相机角度发射光线,在光线上采样点;

  • 使用附近的点云点和其特征,通过网络预测颜色和密度;

  • 混合出最终像素值。

🔵 与 3D Gaussian Splatting 有什么不同?

特征Point-NeRF3D Gaussian Splatting
点云来源预先计算的稀疏点云SfM + 优化后的高斯点
渲染方式神经网络 + 体积渲染显式几何 + 高斯渲染
是否训练是(要训练网络)渲染无需网络,训练是为了优化点的参数
实时性不是实时(需推理)支持实时(直接渲染高斯)
易复现性相对复杂,需要训练更容易测试,尤其是预训练模型

✅ 总结一段话

Point-NeRF 是一种将稀疏点云与 NeRF 结合起来的方法,通过给点添加神经特征,并利用体积渲染完成新视角合成;而 3D Gaussian Splatting 则是用可渲染的高斯分布表示场景点,摆脱了神经网络渲染的成本,实现了更高效的实时效果。

🟦 Plenoxels

Plenoxels 是 “Plenoptic Voxels” 的缩写,是一种:

不依赖神经网络、用稀疏体素网格直接存储和优化颜色与密度 的快速 NeRF 替代方法。

它的全名是:

Plenoxels: Radiance Fields without Neural Networks
论文链接:[2112.05131] Plenoxels: Radiance Fields without Neural Networks

Alex Yu 等人于 2022 年 提出。

🟩 用大白话来说:

如果我们把 NeRF 比作用神经网络“慢慢画出照片”的艺术家,
Plenoxels 就是一个“预先把颜色和密度填在三维格子里”的像素工程师。

它不再用神经网络来学习,而是:

直接在一个稀疏的三维体素网格中,把每一个小格子(voxel)里的颜色和体积密度当作参数来优化。

🟨 核心思想:

步骤描述
1. 初始化稀疏体素网格用稀疏数据结构(哈希表)存储有效体素
2. 每个体素里存颜色+密度+SH系数颜色用球谐函数(Spherical Harmonics)建模,提升角度表现力
3. 光线投射 & 渲染和 NeRF 一样,光线穿过场景,在体素网格上采样
4. 反向传播优化参数直接优化每个体素里的值(不用训练神经网络)

🟧 优势与局限

优势局限
不用神经网络,训练速度快(几分钟)占用内存较大(尤其是高分辨率场景)
实现简单,效果媲美NeRF对小物体/细节支持不如高容量神经模型
渲染速度也快(支持实时)需要稀疏数据结构支持和预处理点云

🔵 与 3D Gaussian Splatting 对比:

特征Plenoxels3D Gaussian Splatting
数据结构稀疏体素(Sparse Voxel Grid)3D 高斯点
表示方式每格有颜色密度 + SH每点有位置、朝向、颜色、协方差等
是否神经网络❌ 不用❌ 也不用
渲染方式类似体积渲染(沿光线采样)显式 splatting 渲染(可GPU并行)
实时性较快(可实时)真正实时(更快)
适合场景中等复杂场景动态、密集、真实场景

✅ 总结一段话

Plenoxels 是一种完全抛弃神经网络的 NeRF 变体,用稀疏体素网格表示场景,每个体素中保存颜色与密度等信息,训练和渲染都非常快。它是从“神经渲染”走向“直接优化”的关键过渡点之一,也为后来的 3D Gaussian Splatting 这种“完全可显式渲染”的方法铺平了道路。

 论文具体方法

1.可微的3D高斯splatting

✅ 每个高斯点都包含了哪些核心信息?

论文中,每个 3D 高斯点包含以下 五类信息

类别具体字段作用
几何信息位置 𝜇协方差矩阵 Σ决定点的在哪里形状和朝向
外观信息颜色(通过球谐函数表示)决定点的颜色随视角如何变化
透明度不透明度 α决定点的遮挡/透明程度
辐射函数球谐函数系数(SH)表示颜色的方向依赖性(类似 NeRF)
附加参数缩放因子、梯度优化量等用于训练阶段微调点属性

🟦 1. 点的位置 μ(Mu)

  • 就是这个高斯点在三维空间里的中心坐标

  • 表示的是:这个点在哪儿。

  • 数学形式:一个三维向量 (x, y, z)。

📌 作用:

  • 决定点投影到相机时在画面上的位置;

  • 决定光线经过它的可能性。

点云中的点是“没有体积、没有方向、没有属性的几何点”,而高斯点是“有形状、有方向、有颜色函数的可渲染单位”。


🟦 1. 定义上的区别

项目点云中的点(Point Cloud Point)高斯点(Gaussian Point)
本质一个空间中的三维坐标点一个有体积/形状的 3D 高斯分布
表示(x, y, z) 可能加颜色(位置, 协方差, α, 颜色SH)
形状没有形状,是一个数学点是一个模糊、椭球形的体积分布

🟨 2. 属性上的区别

属性点云中的点高斯点
位置✅ 有✅ 有
颜色可能有✅ 有(且是方向相关颜色)
形状/大小❌ 没有✅ 有(由协方差矩阵控制)
透明度❌ 没有✅ 有(α 参数)
视角依赖性❌ 没有✅ 有(球谐函数 SH)
可渲染性⛔️ 不可直接渲染✅ 可直接 GPU splatting 渲染

🟧 3. 数据来源和用途

项目点云中的点高斯点
来源SfM / 深度相机 / 激光雷达等初始化自点云 + 优化生成
用途建图、建模、几何分析实时渲染、新视角图像合成
优化通常静态,不参与优化可微优化,参数是可学习的
表达力稀疏且无纹理稠密且能模拟真实外观

🧠 更形象的理解:

类比点云点高斯点
类比为“点”像一颗小钉子像一个会发光、可调大小的彩色气泡
是否能直接用于图像合成?❌ 不行✅ 可以
是否能表示视角变化?❌ 不行✅ 可以(SH系数)
是否能学习优化?❌ 一般不行✅ 是可微优化的参数点

🔵 举个具体例子:

假设你用 COLMAP 重建了一个场景,有一万个 SfM 点(也就是点云):

  • 每个点只有位置 (x, y, z),加个平均颜色 (r, g, b)

  • 如果你把这些点直接画在屏幕上,就是一个稀稀疏疏的点状模型,没法真实地渲染。

然后你把这些点转为 3D Gaussian points

  • 每个点会变成一个椭球体;

  • 会被赋予方向、大小、透明度;

  • 颜色也不再是固定的,而是跟视角相关;

  • 这些点还可以被训练优化,变成真实照片般的合成图像。

✅ 总结一句话:

点云点是原始几何信息,高斯点是带有可学习外观与空间结构的“可渲染光斑”,它把三维重建变成了一种实时图像生成方式。


🟨 2. 协方差矩阵 Σ(Sigma)

  • 决定这个高斯点的形状和方向

  • 是一个 3x3 对称正定矩阵,但论文中为了简化通常只优化一个对角矩阵或通过旋转矩阵和缩放矩阵表示。

📌 作用:

  • 控制这个点在空间中是像球一样、椭球一样,还是拉长的;

  • 决定它投影到图像上是小圆点还是长条形;

  • 实现方向感和空间覆盖,提升细节表达能力。


🟩 3. 不透明度 α(Alpha)

  • 表示该点的透明程度,0 = 完全透明,1 = 完全不透明。

  • 在渲染时用于 alpha blending(α混合)。

📌 作用:

  • 控制该点对最终图像的影响程度;

  • 表示遮挡、深度的“参与度”;

  • 用于模拟材质、边缘的模糊感。


🟧 4. 球谐函数系数(Spherical Harmonics, SH)

  • 用于模拟点的颜色如何随视角变化

  • 因为一个物体从不同角度看,颜色/亮度会变化(如镜面高光、阴影等);

  • 所以每个点不只是一个 RGB 颜色,而是一个 方向相关的颜色函数,用 球谐函数(SH) 来表达。

📌 作用:

  • 模拟视角依赖的外观

  • 替代 NeRF 中的 MLP 输出颜色;

  • 使得渲染时可以直接用 SH 快速计算颜色(比 MLP 快很多)。

数学形式:

  • 通常用 02 阶球谐函数,每个通道大概 916 个系数。


🔵 总结一下用类比帮助你记住:

参数像什么?决定什么?
位置 μ这个点在哪空间位置
协方差 Σ点长成啥样尺寸与方向(变成椭圆)
α 不透明度点有多实在遮挡与透明效果
SH 系数从哪个角度看变什么颜色模拟视角依赖的颜色
颜色函数RGB颜色被“编码”成一个方向函数快速渲染

🧠 总结一段话

在 3D Gaussian Splatting 中,每个点不是一个死板的小球,而是一个“活”的、高斯形状的、带有方向感和颜色变化规律的“发光斑点”。它包含位置、形状(协方差)、透明度、球谐函数颜色表达等参数,这些使得渲染过程可以高度并行且实时,同时保留丰富细节与真实感。

3D 高斯的公式

🟦 为什么用高斯?

论文的核心思想是:

用一个个 3D 高斯分布(椭球形状) 来表示场景中能“发光”的点,再将它们投影到图像上进行 快速渲染(splatting)

这个“高斯”其实不是指概率分布,而是作为一个模糊、可渲染的小体积单位,具有空间形状和方向。


🟩 高斯的核心公式概念(3D场景中的分布)

论文中使用的 3D 高斯是一个各向异性的三维分布(可以是椭球),它的密度函数如下:

✅ 高斯密度函数:

符号含义中文说明
x查询点坐标你想看看“某个位置”的值
μ高斯中心点的位置就是这个点的位置(中心)
Σ协方差矩阵控制高斯的大小、方向、拉伸形状
Σ−1协方差的逆控制点周围的“下降速度”
exp()指数函数构成了高斯“钟形”结构

这个函数值越大,表示离中心越近,点的贡献越大。

🟨 如何从 3D 高斯投影到 2D 图像?

论文做的事情不是在 3D 空间看高斯密度,而是把它 投影到图像平面,然后做“splatting 渲染”。

📌 步骤是这样的:

  1. 把 3D 高斯点的位置 μ 投影到图像上,得到 2D 中心坐标。

  2. 把协方差矩阵 Σ 也投影到图像上,得到图像平面上的椭圆大小与方向。

这个投影涉及一个公式:

✅ 投影协方差公式:

解释:

  • J:是相机投影的雅可比矩阵(Jacobian),描述 3D 到 2D 的变换;

  • Σ3D:原始高斯点的 3D 协方差;

  • Σ2D:高斯投影到图像后形成的椭圆外观。

🟧 渲染公式核心:颜色混合

每个高斯点投影到图像上后,会在其椭圆区域“撒”出颜色值,叠加形成最终图像。

论文中提出了一种基于 alpha blending(α 混合)的公式:

✅ 前向混合(Front-to-Back Compositing):

符号含义
ci第 i 个高斯的颜色(通过球谐函数计算)
αi不透明度,控制遮挡
Ti前面所有高斯点“没遮住”的透明传输量
C渲染出的最终像素颜色

它模拟了“雾”的效果:前面透明就继续看后面,前面不透明就遮住了。

🟦 球谐函数(SH)上场:

高斯点的颜色不是一个固定 RGB,而是一个 方向相关函数

成分含义
d观察方向
Ylm球谐基函数(方向函数)
alm系数,控制每个方向的颜色强度

👉 也就是说,从不同角度看,高斯点会呈现出不同的颜色,这就是为什么能产生立体真实感的原因。

🔵 整体流程回顾:

  1. 初始化一堆带位置/大小/颜色/透明度的高斯点;

  2. 把它们从 3D 空间投影到图像(2D)上,得到一个个椭圆;

  3. 每个点按不透明度 & 球谐颜色对图像贡献;

  4. 多个点用前向混合累加,得到最终图像。


✅ 最终一句总结

论文中使用了一个 可微、可投影的 3D 高斯模型,每个点具有形状(协方差)、透明度(α)和方向相关颜色(SH系数),渲染时投影成椭圆,用快速的 splatting 和前向混合方式生成图像,既能保真又能加速训练和推理。

2.优化与自适应密度控制

✅ (1)随机梯度下降(SGD)优化:训练方法

在训练过程中,3DGS 不使用神经网络权重,而是对 每个高斯点的参数(位置、协方差矩阵、颜色 SH、α等)直接进行优化。

优化目标:

  • 最小化训练图像与渲染图像之间的 重建损失,比如 MSE 或 PSNR loss。

被优化的参数:

  • 点的位置 μ

  • 协方差 Σ(变成缩放参数 + 旋转)

  • 不透明度 α

  • 颜色的球谐系数(SH)

优化方式:

使用 Adam 优化器(比 SGD 更平稳)——

optimizer = torch.optim.Adam(gaussian_params, lr=0.001)

每次迭代会:

  • 对一小批图像 patch 进行前向渲染;

  • 计算损失;

  • 对上述所有参数进行反向传播;

  • 用 Adam 更新。

✅ (2)CUDA 核心 & 快速光栅化(Fast Rasterization)

问题:

你可能会想:“渲染图像不是慢吗?”

论文提出了一个 专门用 CUDA 编写的、高度并行的 rasterizer(光栅器),来替代传统慢速渲染。

它做了什么:

  • 高斯点在图像上的投影 → 转换成屏幕上的椭圆

  • 每个像素仅处理那些覆盖它的高斯点(通过层级 bounding box + early Z-culling)

  • 在 CUDA 上用一个核心模块实现并行累加(类似光栅化)

🔧 这一部分关键优势是:

  • 所有操作都是 tensor 化的,可微分;

  • 实现极高的训练 & 渲染效率;

  • 每一步都可以 GPU 上做。

✅ (3)自适应密度控制(Adaptive Densification)

这是论文中最令人惊艳的机制之一。

问题:

刚开始初始化的点数量不够、太稀疏,会影响渲染质量。

解决办法:动态添加高斯点

论文提出了 在训练过程中自动新增点 的机制,称为:

Adaptive Densification(自适应加密)

机制逻辑如下:

  • 每隔 N 步检查一次点云中的点:

    • 如果某个点的梯度非常大 ➜ 说明它需要学习更多细节 ➜ 就从它周围复制出新点

    • 如果某个点的透明度 α 非常低 ➜ 没啥贡献 ➜ 就删除它

判据:

使用两个 激活函数(activation functions):

  • 用于 控制点的透明度 α 的优化行为

具体是:

  • 论文中使用了两个非线性函数:

    • softplus:用于保持透明度 α 始终为正值

  • sigmoidtanh:用于压缩协方差参数、尺度参数等到合理范围

✅ 它们起到了两个作用:

  • 限制不合理值(如负值、过大数值);

  • 保持参数空间光滑可导,便于梯度传播。

✅ 4. 总结表格

机制用途技术细节优势
随机梯度下降优化点参数Adam 优化器,最小化渲染损失可微训练,无需 MLP
CUDA 光栅化快速渲染椭圆 bounding box + 并行累加GPU 加速,超快
自适应加密增加点密度梯度判据 + α 删除机制自动精细化、节省显存
激活函数控制数值范围softplus、sigmoid、tanh保持参数稳定可导

总结一句话:

论文提出了一种 无需神经网络,仅优化可微高斯点 的训练方法,配合 CUDA 加速和自动加密机制,使得整个系统能在训练初期迅速提升质量,在训练后期精雕细琢,真正实现了“即快又精”。

 🔧 核心目标:控制点云质量和密度

论文中指出,如果点云不加管理:

  • 会出现 冗余、高重叠、漂浮点(floaters)

  • 也会出现 某些区域采样不足、重建质量差

因此作者提出了一系列 周期性清理与重建补充机制,在训练过程中自动进行。

✅ 机制一:每 100 步迭代移除不透明度低的点

目的:剔除对图像贡献很小的无效点,释放内存 & 加快训练

做法

每隔 100 步,检查所有点的 α(不透明度),小于阈值(如 0.005)的点将被直接移除。

这种点通常:

  • 被 occlusion 遮挡

  • 或处于背景、没被用上

  • 或不再有优化价值

🔎 论文中原文描述(意译):

“We periodically remove Gaussians with low opacity (α < 0.005), typically every 100 steps.”


✅ 机制二:周期性将部分点的不透明度重置为 0 —— 去除 floaters(漂浮点)

目的:自动检测那些 似乎没用但还留在点云中 的点

做法

定期将一部分点的 α 设置为 0,让它们“失效”,观察是否还会通过训练自动恢复(即重新变为有效点)。

如果:

  • 某点在 reset 后又因 loss 梯度重新激活 ➜ 它就是有用的 ➜ 保留

  • 否则 ➜ 它可能是漂浮点 ➜ 后续会被清除

📌 这种机制是对不透明度的一种“软清理”,允许模型自我恢复真正有价值的点。


✅ 机制三:周期性移除“太大”的高斯点(避免重叠)

目的:控制协方差过大的点,避免大高斯“笼罩一大片”,导致视觉模糊 & 冗余重叠

做法

设定一个高斯尺度阈值(如 σ > max_threshold),定期清理掉过大的高斯点。

这些大点可能来源于:

  • 初始化时设置太宽

  • 或未被有效优化收缩

📌 太大的高斯点容易遮挡多个像素,降低图像清晰度,因此需要定期清理。


✅ 机制四:重建不足区域会有较大的梯度 —— 用于新点插入(densification)

目的:自动补充点云中“稀疏”的区域

做法

在每次训练中,记录每个点参数的梯度,如果某些区域的梯度大 ➜ 表示这些点想学更多内容 ➜ 从这些点复制出新点(克隆 + 添加扰动)

📌 梯度大 = 模型对这区域不满意 ➜ 自动 densify

这就是论文提出的:

gradient-based point splitting / cloning for adaptive densification


📋 总结

机制描述周期目的
✅ 删除低 α 点移除透明度很低的点每 100 步清理无用点
✅ α 重置机制周期性将部分 α 设为 0若干轮迭代检测漂浮点
✅ 移除超大高斯删除 σ 超过阈值的点周期性检查控制点形状合理
✅ 高梯度密度控制根据梯度增密点连续监控补足细节区域

🔧 技术背后价值:

这些机制共同实现了:

  • 结构紧凑:只保留最有用的点

  • 自我优化:通过梯度反馈判断区域是否需要更多点

  • 训练稳定性:避免 α 爆炸或协方差崩坏

  • 高效可视化:点少、图像清晰、渲染速度快

3.快速可微光栅化

✳️ 背景理解:什么是“光栅化”(Rasterization)?

在传统图形学中,光栅化是指将几何图元(如点、线、三角形)转换为图像像素的过程。NeRF 使用体积渲染(体积积分,慢),而3DGS则“抛弃了积分”,改为用 2D 椭圆 + 屏幕空间 splatting 实现显式投影。

这也是为什么3DGS 不再需要 ray marching,速度极快


🌟 Tile-based Rasterization 的五个关键步骤详解


✅ 步骤 1:将图像划分为 16×16 的 tiles(图像块)

目的:减少计算量 + 并行处理

整个图像被切割成许多小块(tiles),每个 tile 大小为 16×16 像素。

  • 每个 tile 单独处理 ➜ 易于 GPU 并行化

  • 每个 tile 只处理覆盖它的高斯点 ➜ 避免无关计算

🔧 类似 CUDA block/thread 的思想,一 tile 一批线程。


✅ 步骤 2:筛选置信度大于 99% 的高斯 + 按深度排序

目的:只处理“有效”的高斯点,并确保渲染顺序正确

✔️ 什么是“置信度”?

每个高斯点投影到图像空间后,会形成一个椭圆覆盖若干像素。论文中使用高斯分布函数(probability > 99%)裁剪椭圆边界范围,减少多余像素。

即:

高斯点在图像上只影响置信度 > 99% 的像素范围。

✔️ 为什么要按深度排序?

因为:

  • 多个点会“splat”在同一个像素上

  • 为了模拟遮挡关系,需要从 远 → 近 的顺序渲染(先画远处,再叠加近处)


✅ 步骤 3:每个 tile 中并行执行 splatting(点到像素渲染)

目的:GPU 并行投影高斯点

✔️ splatting 是什么?

Splat = “抛洒”:将一个 3D 高斯点投影成一个 2D 椭圆,并分布其 RGB/α 值到影响的像素上,按高斯核函数分权平均。

✔️ 如何实现?

每个像素接收多个高斯的颜色 + 不透明度,使用类似 alpha blending 的合成方法:

这种操作适合大规模并行,每个 tile 中线程可以独立执行。

✅ 步骤 4:早停机制(Early Termination)节省计算

目的:若像素已经完全不透明,就不再继续渲染更多高斯点

比如某个像素已经叠加了多个高斯的 α 值,达到完全遮挡(如 α ≈ 1.0),后面再画更多点其实是浪费计算。

所以采用:

  • 如果像素 α 累加 > 某阈值 ➜ 终止对应线程 ➜ 节省资源

这个类似于 NeRF 中的 ray early termination

✅ 步骤 5:反向传播(backward)——块索引 + 高效梯度计算

目的:训练时也要让高斯点支持梯度更新

  • 每个 tile 保留其影响的高斯点列表

  • 当需要计算损失对高斯点参数的梯度时,只需反向传播到这些点 ➜ 避免全图参与

  • 可以高效更新:

    • 点的位置(μ)

    • 协方差(控制椭圆形状)

    • 不透明度 α

    • 球谐系数(颜色)

这一过程也是 可微的,所以整个 pipeline 是“端到端训练友好”的。


🎯 可视化流程图(逻辑)

              全图划分为 tile(16×16)
                   ↓
   每 tile 找出覆盖它的高斯点(置信度 > 99%)
                   ↓
      对这些点按深度排序(远→近)
                   ↓
   并行 splatting 到像素(高斯投影、加权和)
                   ↓
       若某像素 α > 1.0,可提前停止渲染
                   ↓
          保存哪些高斯影响了哪些 tile
                   ↓
     训练时从这些 tile 反向传播,更新参数

🧠 总结

步骤技术关键词目的
1图像分块 tile加速并行处理
2高斯筛选 + 深度排序避免冗余、支持遮挡
3splatting 渲染显式可微、像素合成
4提前终止线程减少无效计算
5块索引梯度反传高效训练、可微优化

整体流程一览图

📸 多视角照片(输入)
   ↓
📌 SfM / COLMAP → 生成稀疏点云 + 相机位姿
   ↓
📌 初始化:将点云转为3D高斯点(位置、颜色、透明度、协方差等)
   ↓
🔁 训练阶段(优化高斯参数)
   - 每次从不同角度渲染(3D高斯 → 2D 图像)
   - 与真实照片进行比对(像素级 loss)
   - 反向传播优化高斯点参数

   ↓
🎬 渲染阶段(inference)
   - 给定任意视角
   - 将优化好的3D高斯实时投影生成2D图像

✅ 最终输出:**任意视角下的2D图像(非常逼真、几乎是照片)**

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2384485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity实战笔记】第二十四 · 使用 SMB+Animator 实现基础战斗系统

转载请注明出处&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/details/146409453 作者&#xff1a;CSDN|Ringleader| 1 结构 1.1 状态机 1.2 SMB 2 代码实现 2.1 核心控制 Player_Base_SMB 继承 StateMachineBehaviour &#xff0c;控制变量初始…

【Java高阶面经:消息队列篇】22、消息队列核心应用:高并发场景下的解耦、异步与削峰

一、消息队列:分布式系统的核心枢纽 在分布式架构日益普及的今天,消息队列(Message Queue, MQ)已成为解决系统复杂性的核心组件。它通过异步通信、系统解耦和流量控制等能力,有效应对高并发场景下的数据流动挑战。 1.1 核心特性:异步、解耦与弹性 1.1.1 异步通信:释放…

软媒魔方——一款集合多种系统辅助组件的软件

停更4年&#xff0c;但依旧吊炸天&#xff01; 亲们&#xff0c;是不是觉得电脑用久了就像老牛拉车&#xff0c;慢得让人着急&#xff1f;别急&#xff0c;我今天要给大家安利一个超好用的电脑优化神器——软媒魔方&#xff01; 软件介绍 首先&#xff0c;这货真心是免费的&a…

多路径可靠传输协议(比如 MPTCP)为什么低效

可靠就不能多路径&#xff0c;多路径求可靠必然要多费劲。这不难理解&#xff0c;多路径必异步&#xff0c;这无疑增加了可靠性判断的难度。 前文 多路径传输(比如 MPTCP)对性能的意义 阐述了作为单连接的多子流 MPTCP 对传输性能的意义是无意义&#xff0c;本文接着阐述作为隧…

塔能高温冰蓄冷技术:工厂能耗精准节能的创新之路

在工厂的能耗构成中&#xff0c;制冷系统是重要的耗能环节。传统的水蓄冷和冰蓄冷技术在实际应用中存在一些局限性&#xff0c;难以满足工厂对节能和成本控制的更高要求。塔能科技的高温冰蓄冷技术&#xff0c;凭借其独特的优势&#xff0c;为工厂能耗精准节能提供了创新的解决…

内存优化笔记1

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 问题提出 在很多工业软件中&#xff0c;需要对对象进行微分细化&#xff0c;这样会产生很多&#xff08;几百万到几千万&#xff09;对象。随着业务的发展&#xff0c…

人脸识别,使用 deepface + api + flask, 改写 + 调试

1. 起因&#xff0c; 目的&#xff0c; 感受: github deepface 这个项目写的很好&#xff0c; 继续研究使用这个项目&#xff0c;改写 api。增加一个前端 flask app 2. 先看效果 3. 过程: 大力改写原始项目中 api 这部分的代码&#xff0c; 原始项目的文件结构太繁杂了: 我把…

代码管理平台Gitlab如何通过快解析实现远程访问?

一、Gitlab功能介绍 Gitlab是被广泛使用的基于git的开源代码管理平台&#xff0c;用于管理、存储开发人员代码&#xff0c;同时可以协同开发 二、外网试用Gitlab遇到的问题 运维人员将Gitlab服务器部署在总部机房&#xff0c;而分公司开发人员和出差运维人员就无法访问Gitlab…

基于SpringBoot+Vue的足球青训俱乐部管理后台系统的设计与开发

项目背景与概述 随着足球青训行业的快速发展&#xff0c;如何高效、规范地管理学员、教练以及课程等日常工作&#xff0c;成为了青训俱乐部运营的重要课题。为了提升俱乐部的管理效率与用户体验&#xff0c;基于 Spring Boot 和 Vue.js 开发了一个 足球青训俱乐部管理后台系统…

线程调度与单例模式:wait、notify与懒汉模式解析

一.wait 和 notify&#xff08;等待 和 通知&#xff09; 引入 wait notify 就是为了能够从应用层面&#xff0c;干预到多个不同线程代码的执行顺序&#xff0c;可以让后执行的线程主动放弃被调度的机会&#xff0c;等先执行的线程完成后通知放弃调度的线程重新执行。 自助取…

MySQL中TCP和套接字SSL加密连接行为分析

目录 一、前言 二、背景 三、参数介绍 3.1、 have_openssl 3.2、have_ssl 3.3、require_secure_transport 四、--ssl-modemode 五、CREATE USER SSL/TLS选项 六、问题验证 6.1、使用套接字连接 6.2、使用TCP连接 七、分析与总结 一、前言 SSL&#xff08;Secure S…

php本地 curl 请求证书问题解决

错误: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for 解决方案 在php目录下创建证书文件夹, 执行下面生成命令, 然后在php.ini 文件中配置证书路径; 重启环境 curl --eta…

爱普生晶振赋能UWB汽车数字钥匙,解锁未来出行新方式

随着科技的发展&#xff0c;尤其是国产新能源汽车的崛起&#xff0c;相信大家对数字钥匙的概念已经不陌生了&#xff0c;通过手机、智能穿戴实现对汽车的多功能控制已经是很多汽车的标配。但是目前数字钥匙也有一定的局限性&#xff0c;比如定位不准、安全性不强等等&#xff0…

电子电路:深入理解电磁耦合的定义与应用

电场和磁场是独立存在的吗&#xff1f;&#xff0c;但实际上根据麦克斯韦理论&#xff0c;它们是同一现象的两个方面&#xff0c;通过变化相互产生。这时候需要强调时变场的重要性&#xff0c;以及静态场和动态场的区别。 通过电磁波的概念&#xff0c;说明电磁耦合如何导致电…

宝塔安装的 MySQL 无法连接的情况及解决方案

宝塔安装的 MySQL 无法连接的情况及解决方案 宝塔面板是一款流行的服务器管理工具&#xff0c;其中集成的 MySQL 数据库有时会出现连接问题。本文详细介绍两种最常见的 MySQL 连接错误&#xff1a;“1130 - Host is not allowed to connect” 和 “1045 - Access denied”&…

今日行情明日机会——20250523

上证指数缩量下跌&#xff0c;个股下跌超过4000个&#xff0c;总体跌多涨少&#xff0c;日线总体处于高位&#xff0c;注意风险。 深证60分钟级别下跌趋势线压制&#xff0c;总体日线转下跌的概率大&#xff0c;注意风险。 2025年5月23日涨停股主要行业方向分析 一、核心主…

微服务项目->在线oj系统(Java版 - 4)

相信自己,终会成功 目录 B端用户管理 C端用户代码 发送验证码: 验证验证码 退出登录 登录用户信息功能 用户详情与用户编辑 用户竞赛接口 用户报名竞赛 用户竞赛报名接口查询 用户信息列表 ThreadLocalUtil Hutool工具库 常用功能介绍 B端用户管理 进行列表显示与…

ReAct 与 CoAct:AI 代理的推理与行动之旅

引言 能推理又能行动的 AI 代理&#xff0c;是朝着构建更自主系统迈出的重要一步。传统上&#xff0c;语言模型在“思维链”提示方面表现得很出色&#xff0c;也就是通过文本逐步思考问题来解决像算术、常识问题或符号推理这类任务。但用思维链时&#xff0c;模型只依赖自身的…

uni-app使用大集

1、手动修改页面标题 uni.setNavigationBarTitle({title: 修改标题 }); 2、单选 不止有 radio-group&#xff0c;还有 uni-data-checkbox 数据选择器 <!-- html部分 --> <uni-data-checkbox v-model"sex" :localdata"checkboxList"></u…

零件剖切配置教学 | 玩转EasyTwin 工业产线第三期(上)课程回顾

-在工业数字孪生领域&#xff0c;工程施工模拟、车间产线运转、机械装置和零件配置等交互效果的呈现至关重要。通过EasyTwin&#xff0c;我们能够以更低成本、更高效率来构建数字孪生场景&#xff0c;但在搭建的过程中&#xff0c;也会因为复杂的场景交互配置产生一些疑问。该案…