Godot引擎VRM插件全解析:从导入到高级应用实践

news2026/5/3 7:11:25
1. 项目概述在Godot引擎中实现VRM生态如果你正在用Godot引擎开发涉及3D虚拟角色的项目无论是VR社交应用、虚拟直播工具还是独立游戏那么“如何导入和使用那些精美的VRM模型”很可能就是你当前面临的核心技术瓶颈。传统的glTF导入虽然通用但面对VRM这种专为虚拟化身设计的、承载了丰富元数据和特殊着色器如MToon的格式时往往力不从心。godot-vrm这个插件正是为了解决这个问题而生。它不是一个简单的格式转换器而是一个在Godot内部完整实现了VRM 1.0规范并兼容0.x的生态系统工具让你能像处理原生资源一样无缝地导入、编辑、甚至重新导出VRM模型。简单来说这个插件为Godot补上了虚拟角色工作流中缺失的关键一环。它适合所有需要在Godot项目中集成高质量、可交互3D人形角色的开发者无论你是刚接触Godot和3D资产的新手还是正在为复杂项目寻找标准化角色解决方案的资深工程师。通过它你可以直接利用庞大的VRM模型社区资源将创作重心从繁琐的格式适配转移到真正的玩法与交互实现上。2. 核心功能与规范支持深度解析godot-vrm插件的核心价值在于其对VRM规范的深度、准确实现。VRM本身基于glTF 2.0但增加了一系列针对虚拟角色的扩展。该插件不仅处理了模型网格和骨骼更完整地实现了这些扩展确保了角色在Godot中的行为与在其他支持VRM的平台如某些VR社交应用中保持一致。2.1 完整的导入与导出支持插件支持VRM 0.x和1.0版本的模型导入。一个非常实用的细节是导入VRM 0.x模型时插件会自动将其内部命名和数据结构转换为与VRM 1.0兼容的形式这避免了因版本差异导致的后续处理错误保证了项目内资源规范的一致性。在导出方面插件支持两种格式标准的.vrm文件导出这是最完整的导出方式会将所有VRM扩展数据包括SpringBone物理骨骼打包进单个.vrm文件中。带有VRM扩展的.gltf文件导出这允许你将模型以glTF格式导出同时保留部分VRM扩展数据如VRMC_node_constraint节点约束、VRMC_materials_mtoon材质。这对于需要与其他glTF工具链交互的场景很有用。重要警告当选择导出为.gltf格式时由于Godot引擎底层的某些导出操作是“破坏性”的例如会直接修改材质资源可能导致当前场景中的材质被损坏。务必在导出前保存项目并在导出后使用版本控制或手动回滚到保存的状态。这是一个源自引擎层面的限制插件也无能为力养成“导出前先保存”的习惯至关重要。2.2 核心VRM扩展功能实现状况以下是插件对VRM 1.0核心扩展的具体支持情况了解这些能帮助你评估插件是否能满足你的项目需求扩展名称支持状态说明与注意事项VRMC_materials_mtoon✅ 完全实现完整移植了MToon着色器这是VRM角色的标志性卡通渲染风格。插件包含一个独立的MToon着色器实现确保了渲染效果与原规范一致。VRMC_springBone✅ 已实现用于模拟头发、尾巴、衣物等部位的物理摆动效果。目前功能完整但性能尚有优化空间在角色数量非常多时需留意性能开销。VRMC_node_constraint⚠️ 存在已知问题用于实现骨骼间的约束关系如眼睛跟随头部旋转。目前已实现但与Godot的骨骼重定向Retargeting系统同时使用时可能出现异常需要谨慎测试。VRMC_vrm✅ 大部分实现这是VRM元数据的容器包含以下子功能-firstPerson(第一人称视角)⚠️ 部分实现头部隐藏功能已作为导入选项实现。但实际应用时需要开发者通过设置摄像机的cull_mask剔除遮罩层或编写运行时脚本来切换显示/隐藏。插件提供了多种隐藏策略后文详述。-lookAt(视线控制)⚠️ 基础支持插件会创建相应的动画轨道Animation Tracks但你需要自己创建一个BlendSpace2D节点并编写逻辑根据输入如鼠标位置来驱动这些轨道才能实现视线跟随。-expressions(表情系统)✅ 已实现支持形变Blend Shapes和材质属性动画。所有表情数据都会被转换为Godot的动画轨道方便你接入自己的动画混合树如AnimationTree中的BlendTree节点进行控制。-humanoid(人形骨骼)✅ 已实现使用Godot 4的SkeletonProfileHumanoid进行骨骼映射和重定向确保了角色动画在不同骨架间的兼容性。2.3 关于Godot 4.3的SkeletonModifier3D说明从Godot 4.3开始引擎对骨骼修改器SkeletonModifier3D的处理逻辑有所变更。godot-vrm插件内部会创建一个辅助节点来处理VRM的SpringBone和节点约束。需要注意的是在4.3及以上版本中update_secondary_fixed这一更新模式不再被支持。取而代之的是由Skeleton3D节点自身来决定是在物理进程_physics_process中更新还是在空闲进程_process中更新。虽然插件已做适配但如果你在4.3版本中遇到骨骼物理更新时序问题可能需要检查Skeleton3D节点的相关处理模式设置。3. 插件安装与项目配置详解正确的安装是避免后续一系列诡异问题的第一步。godot-vrm的安装有明确的路径要求不能随意更改。3.1 获取与放置插件文件首先你需要从GitHub仓库https://github.com/V-Sekai/godot-vrm克隆或下载项目。解压后你会看到两个核心目录godot-vrm/(主插件)Godot-MToon-Shader/(MToon着色器实现)关键操作步骤在你的Godot项目根目录下找到或创建addons/文件夹。将下载的godot-vrm文件夹整个复制到addons/目录下。最终路径必须是your_project/addons/godot-vrm/。同样地将Godot-MToon-Shader文件夹整个复制到addons/目录下。最终路径必须是your_project/addons/Godot-MToon-Shader/。绝对禁止重命名插件和着色器在运行时其生成的脚本和资源会通过硬编码路径引用彼此。如果文件夹名称被更改导入VRM模型时将无法正确创建材质和元数据脚本导致模型显示为紫红色材质丢失或功能不全。3.2 在Godot编辑器中启用插件完成文件放置后启动你的Godot项目。进入顶部菜单项目(Project) - 项目设置(Project Settings...)。在项目设置窗口中切换到插件(Plugins)标签页。你应该能在列表中找到两个新插件“VRM”和“Godot-MToon-Shader”。分别点击它们旁边的“状态(Status)”列从“未启用(Inactive)”切换为“启用(Active)”。启用成功后你可能会在编辑器底部看到相关日志。此时Godot就已经具备了识别和处理.vrm文件的能力。3.3 验证安装与首次导入为了验证安装是否成功建议进行一个简单的测试准备一个.vrm格式的模型文件可以从一些开放的VRM模型网站获取测试用模型。在Godot的“文件系统(FileSystem)”面板中直接将.vrm文件拖入你的项目资源目录例如res://models/。Godot会自动触发导入进程。如果一切正常你会看到导入进度条结束后该文件会变成一个可识别的场景资源图标是一个小三维场景。将该场景拖入你的主场景或单独打开。如果模型能正常显示且材质不是紫红色说明插件和着色器安装成功。4. VRM模型导入流程与高级设置成功安装后导入VRM模型变得非常简单但理解导入设置背后的选项能让你更好地控制资源在项目中的形态。4.1 基础导入操作最直接的方式如上所述拖拽.vrm文件到文件系统面板。Godot会使用插件提供的导入器进行处理。导入完成后该文件会生成三个主要部分.tscn场景文件这是可直接实例化的场景包含了整个角色的节点树Skeleton3D, MeshInstance3D等。.tres或.res资源文件如材质、动画等子资源。一个以模型命名的目录里面可能包含一些生成的脚本和额外数据。双击.tscn文件即可在编辑器中查看和编辑该角色。4.2 关键导入选项解析在文件系统面板中选中一个.vrm文件在右侧的“导入(Import)”面板中你可以看到插件提供的特定选项。这些选项决定了模型被导入后的具体状态。1. 头部隐藏模式 (Head Hiding)这是处理VRM中“第一人称视角”定义的核心。VRM规范允许模型定义哪些网格在第一人称视角下应该被隐藏比如自己的头部。插件提供了多种策略IgnoreHeadHiding忽略VRM中的第一人称设置所有网格正常导入。适用于纯第三人称项目。FirstPersonOnly/ThirdPersonOnly为第一人称或第三人称单独优化。插件会直接删除另一视角下应隐藏的网格。这能节省资源但角色只能用于一种视角。BothLayers最灵活的方案。它将不同视角的网格分配到不同的渲染层layer。你需要创建两个摄像机一个的cull_mask只包含第一人称层另一个只包含第三人称层通过脚本切换摄像机来实现视角切换。所有网格都保留。BothLayersWithShadow/FirstPersonOnlyWithShadow在“BothLayers”或“FirstPersonOnly”的基础上为被隐藏的头部网格创建一个仅投射阴影ShadowsOnly的副本。这样在第一人称时你看不到自己的头但你的影子仍然是完整的增强了场景的真实感。如果你的项目使用动态光源和阴影强烈推荐此选项。实操心得对于需要同时支持第一和第三人称的项目比如某些VR游戏BothLayersWithShadow是最佳选择。虽然它增加了少量绘制调用多了一个阴影网格但换来了视觉完整性和灵活性。设置时记住需要在代码中动态调整摄像机的cull_mask。例如# 切换到第一人称 $FirstPersonCamera.cull_mask first_person_layers_bitmask $ThirdPersonCamera.cull_mask 0 # 切换到第三人称 $FirstPersonCamera.cull_mask 0 $ThirdPersonCamera.cull_mask third_person_layers_bitmask具体的层位掩码first_person_layers,third_person_layers可以在导入后通过检查GLTFState的vrm/前缀的额外属性找到或直接查看生成的场景根节点的脚本变量。2. 其他导入选项创建碰撞体 (Create Colliders)是否为骨骼创建简单的碰撞体如CollisionShape3D。这对于需要物理交互如射线检测拾取的功能很有用但会增加节点复杂度。导入动画 (Import Animations)是否导入VRM文件中可能包含的动画数据如表情动画。骨骼重定向配置插件默认使用SkeletonProfileHumanoid。高级用户可以在这里指定自定义的骨骼映射配置以适配非标准的动画资源。5. 在项目中使用导入的VRM角色将VRM角色导入并配置好后下一步就是让它在你游戏中“活”起来。这涉及到动画、表情控制、物理模拟等多个方面。5.1 动画系统集成导入的VRM角色自带一个完整的Skeleton3D。你可以像控制任何其他Godot骨骼动画一样控制它。使用AnimationPlayer如果VRM文件内嵌了动画比如一些表情序列它们会被导入到场景内的一个AnimationPlayer节点中。你可以直接播放这些动画。外部动画重定向这是更常见的用法。你可以利用Godot 4强大的动画重定向功能将为SkeletonProfileHumanoid制作的通用动画例如从Mixamo下载的FBX动画应用到你的VRM角色上。为你的角色场景添加一个AnimationTree节点。在AnimationTree中创建一个AnimationNodeStateMachine或AnimationNodeBlendTree。将你的外部动画库AnimationLibrary加载进来并分配给AnimationTree的animations属性。由于VRM角色使用了标准的人形骨骼配置Godot通常能自动完成重定向。如果出现姿势错位可以在Skeleton3D的“骨骼重定向(Bone Retargeting)”设置中微调骨骼映射。5.2 表情系统控制VRM的表情Blend Shapes被导入为MeshInstance3D上的形变键Morph Keys并通过动画轨道暴露出来。控制它们有两种主流方法方法一通过AnimationTree和BlendTree控制这是最符合Godot设计哲学的方式。插件生成的表情动画轨道其路径指向了网格形变的属性。在角色的AnimationTree中创建一个AnimationNodeBlendTree。添加一个AnimationNodeAnimation节点指向插件生成的那个包含所有表情轨道的动画通常叫Expression之类的。使用AnimationNodeBlendSpace2D用于二维混合如高兴-悲伤-生气或AnimationNodeBlendTree配合多个AnimationNodeAdd2节点用于叠加多个表情来混合这些轨道。通过代码控制混合位置或权重。例如控制“微笑”表情$AnimationTree.set(parameters/ExpressionBlend/blend_position, Vector2(0.8, 0.0)) # 假设blend_position.x控制微笑程度 # 或者使用直接权重设置 $AnimationTree[parameters/Smile/add_amount] 0.8方法二直接通过脚本设置形变值你也可以绕过动画系统直接操作MeshInstance3D的形变属性。这更直接但失去了动画系统提供的混合和过渡能力。var mesh_instance $Armature/Skeleton3D/BodyMesh # 假设“微笑”形变的索引是0 mesh_instance.set_blend_shape_value(0, 0.8) # 设置为80%的微笑5.3 SpringBone物理骨骼的运行时控制SpringBone弹簧骨骼系统在导入时已自动设置好。在运行时它由插件内部的一个处理系统驱动。你通常不需要直接干预其计算但可能需要控制其开关或参数。全局启用/禁用SpringBone系统通常附加在Skeleton3D节点上。你可以在代码中通过获取该节点并设置其process_mode或一个自定义的active属性如果插件暴露了的话来开关物理模拟。在性能紧张时如远处角色、暂停菜单禁用它可以节省资源。参数调整某些插件实现可能允许你在运行时调整弹簧的刚度Stiffness、重力Gravity等参数。这需要查阅插件生成的脚本或文档。一个常见的需求是当角色处于强风环境时临时增加风力影响参数。5.4 视线跟随实现如前所述插件只创建了视线控制的动画轨道逻辑需要你自己实现。一个简单的鼠标视线跟随示例extends Node3D # 假设这个脚本挂在角色场景的根节点 export var head_bone_name: String Head export var look_at_weight_speed: float 5.0 var skeleton: Skeleton3D var look_at_weight: float 0.0 func _ready(): # 找到骨架 skeleton $Armature/Skeleton3D func _process(delta): # 获取鼠标在3D世界中的目标位置这里简化处理实际可能需要从摄像机发射射线 var camera get_viewport().get_camera_3d() var mouse_pos get_viewport().get_mouse_position() var ray_length 100 var from camera.project_ray_origin(mouse_pos) var to from camera.project_ray_normal(mouse_pos) * ray_length # 计算头部骨骼应看向的目标方向在骨骼局部空间 var head_bone_idx skeleton.find_bone(head_bone_name) var head_global_pose skeleton.get_bone_global_pose(head_bone_idx) var head_global_pos head_global_pose.origin # 简化计算一个看向目标点的旋转这里需要四元数插值略复杂 # 假设我们通过AnimationTree控制一个BlendSpace2D其参数名为LookAt # 我们需要将目标方向转换为BlendSpace2D的blend_position (Vector2) # 这里是一个概念性代码实际转换取决于你的动画设置 # var target_direction_local ... 计算过程省略 # var blend_pos Vector2(target_direction_local.x, target_direction_local.y) * sensitivity # 平滑过渡权重 look_at_weight move_toward(look_at_weight, 1.0, look_at_weight_speed * delta) # $AnimationTree.set(parameters/LookAt/blend_position, blend_pos) # $AnimationTree.set(parameters/LookAtWeight/add_amount, look_at_weight)这段代码只是思路展示。完整的视线跟随需要处理3D空间变换、骨骼约束以及与你设置的BlendSpace2D动画节点的参数映射。6. 常见问题、故障排查与性能优化在实际使用中你难免会遇到各种问题。以下是一些常见情况的排查思路和解决方案。6.1 导入与显示问题问题现象可能原因解决方案模型导入后显示为紫红色1. MToon着色器插件未启用或安装路径错误。2. 显卡驱动不支持着色器特性。1. 检查addons/Godot-MToon-Shader文件夹是否存在且名称正确并在项目设置中确认插件已启用。2. 更新显卡驱动。在Godot渲染设置中尝试兼容性更强的后端如Vulkan兼容性模式。导入时Godot崩溃或无响应1. VRM文件损坏或不规范。2. 模型过于复杂超出当前设备内存。1. 尝试用其他VRM查看器如VRM QuickLook检查该文件是否正常。2. 尝试导入一个简单的测试模型。如果成功说明是原模型问题可能需要用Blender等工具重新导出或简化。骨骼姿势错乱T-Pose异常导入时骨骼重定向失败。1. 检查导入设置中的骨骼映射配置。2. 在场景中选中Skeleton3D节点尝试使用其菜单中的“重置所有骨骼姿势”选项。3. 确保VRM模型本身在导出时是标准的T-Pose。SpringBone头发、衣物不动1. 物理模拟未启用或未更新。2. 骨骼节点未正确设置。1. 确保场景正在运行_process或_physics_process被调用。2. 检查Skeleton3D节点的处理模式在Godot 4.3中尤其重要。3. 在编辑器中选中角色查看SpringBone辅助节点是否正常生成且属性不为空。6.2 运行时与性能问题问题多个VRM角色导致帧率严重下降。分析性能瓶颈通常来自三个方面绘制调用Draw Calls、骨骼计算尤其是SpringBone、以及MToon着色器复杂度。优化策略细节层次LOD为VRM模型创建多个简化版本的网格根据距离切换。Godot 4有LOD节点但需要手动设置。裁剪Culling确保摄像机的far距离设置合理并使用遮挡裁剪Occlusion Culling技术。控制SpringBone对于远离摄像机的角色或非活动角色通过脚本禁用其SpringBone模拟。可以创建一个管理类根据距离动态开关物理模拟。合并绘制调用如果场景中有多个相同的VRM角色如NPC考虑使用MultiMeshInstance3D进行实例化渲染但这要求所有实例共享相同的网格和材质且动画需通过AnimationTree和统一脚本控制实现较复杂。简化MToon材质MToon的某些特性如轮廓线、多层阴影开销较大。在项目设置或每个材质中可以考虑禁用轮廓线Rim Light或减少阴影计算的采样质量。问题表情动画不流畅或不同步。分析可能是动画混合树设置不当或是在_process中更新权重时帧率不稳定导致的。解决确保在AnimationTree中使用了正确的混合节点如Add2用于叠加Blend2用于线性混合。更新表情权重时使用delta时间进行平滑插值lerp或move_toward避免权重的跳变。考虑将表情更新逻辑放在_physics_process中以获得更稳定的时间间隔。6.3 导出功能相关问题问题导出为.gltf后原场景材质损坏。重申这是Godot引擎glTF导出器的已知行为。务必在导出前保存项目。导出操作应在一个专用于导出的项目副本或临时场景中进行。问题导出的.vrm文件在其他软件中打开异常。检查首先使用标准的VRM验证工具如VRM Validator检查导出的文件是否符合规范。排查尝试导出一个最简单的、未经修改的导入模型看是否正常。如果正常问题可能出在你对场景所做的修改上例如替换了非标准的材质修改了骨骼结构导致不符合VRM人体规范。注意插件导出时会将所有模型强制转换为VRM 1.0格式。确保你的修改符合VRM 1.0规范。7. 进阶技巧与项目实践建议在基本功能跑通之后以下技巧可以帮助你更好地在项目中驾驭VRM角色。7.1 自定义材质与MToon参数调整虽然MToon着色器是预设的但你仍然可以在Godot的材质编辑器中调整其绝大部分参数。在导入的VRM场景中找到角色的材质通常在MeshInstance3DSurface Material Override或Material Override中。双击材质进入编辑。你可以调整颜色、纹理、轮廓线宽度、阴影梯度等所有MToon特性。重要如果你修改了基础材质并希望导出后保留请确保将修改后的材质另存为独立的.tres资源文件然后在网格实例中引用它。否则在导出时插件可能会重新生成默认材质覆盖你的修改。7.2 与Godot 4新特性结合SkeletonModifier3D与自定义插件你可以为VRM角色的Skeleton3D编写自己的SkeletonModifier3D插件来实现更复杂的骨骼IK、扭曲或动态物理效果与VRM自带的SpringBone协同工作。AnimationTree高级用法利用AnimationNodeStateMachine管理角色的不同状态闲置、行走、奔跑、跳跃每个状态可以连接一个包含基础动作和表情混合的AnimationNodeBlendTree。这样可以构建出非常复杂的角色行为树。资源后处理通过编写Godot的EditorImportPlugin编辑器导入插件或EditorExportPlugin编辑器导出插件你可以自动化一些流程比如在导入每个VRM时自动生成特定的碰撞体、附加特定的脚本或者在导出前批量检查模型规范。7.3 网络同步与多人游戏考量在多人游戏中同步VRM角色是一个挑战尤其是SpringBone物理状态。状态同步只同步关键的骨骼变换根节点位置、旋转以及主要肢体骨骼的旋转而不是每一根骨头。客户端根据这些关键数据通过IK进行姿态重建。物理同步SpringBone的物理模拟不建议进行逐帧同步因为计算量大且难以保证确定性。通常的做法是所有客户端基于相同的初始状态和物理参数进行本地模拟。只需同步可能影响物理的外部事件如角色被击中产生的力、风速变化等。表情同步同步表情混合权重值通常是几个浮点数而不是具体的顶点形变数据。权重值通过网络传输接收方在本地驱动相同的混合树。7.4 构建角色自定义系统一个完整的角色系统往往允许玩家自定义外观。结合godot-vrm你可以模块化网格将身体、头发、衣服等拆分成独立的VRM或glTF网格。在Godot中使用脚本动态地将这些网格附加到同一个Skeleton3D上使用MeshInstance3D的skeleton属性指向主骨架。材质换色通过脚本动态修改角色材质的albedo_color基础色等属性实现换肤、换装色。动态加载根据玩家选择在运行时异步加载ResourceLoader.load_threaded_request不同的发型、服装VRM网格并即时附加到角色身上。这个过程需要对Godot的骨骼皮肤系统有较深理解确保附加的网格与主骨架的骨骼权重和命名正确匹配。godot-vrm导入的标准化骨骼为此提供了良好的基础。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…