UE5 BaseHardware.ini硬件兼容性判决机制深度解析

news2026/5/22 7:30:44
1. 这不是配置文件而是UE5硬件适配的“宪法性文档”很多人第一次在Unreal Engine 5项目里翻到BaseHardware.ini下意识就把它当成普通ini配置——改几个数值、调个开关、重启编辑器完事。我刚接手一个跨平台渲染优化项目时也这么干过把bUseHardwareRayTracingTrue硬塞进去结果在一台标称支持DXR的RTX 3060笔记本上直接报错崩溃编辑器日志只甩出一行模糊提示“Failed to initialize RHI device”。折腾三天后才发现问题根本不在显卡驱动而在于BaseHardware.ini里一条被忽略的隐式约束MinSupportedDriverVersion472.12——这台机器装的是466.77版驱动差了整整6个大版本。UE5不是在读取配置它是在执行一套硬件兼容性判决逻辑。BaseHardware.ini本质上是UE5硬件抽象层HAL启动时加载的硬件能力白名单与阈值定义集。它不决定“能不能用”而是定义“在什么条件下才允许启用”。它和DefaultEngine.ini完全不同后者管功能开关前者管能力准入。关键词“UE5”“硬件兼容性”“BaseHardware.ini”“源码解读”全部指向一个核心事实——你面对的不是用户可调参数表而是一份由Epic工程师用INI语法写成的、运行时生效的硬件兼容性判据手册。它直接影响RHI初始化、GPU Feature Detection、Shader Model降级路径、甚至内存带宽估算模型。适合两类人深度阅读一是需要将UE5部署到非标工控设备/国产化信创平台的集成工程师二是做引擎定制化、准备提交PR到Unreal GitHub仓库的底层开发者。如果你只是想让自己的RTX 4090跑得更稳这篇内容能帮你避开80%的“明明硬件达标却报错”的诡异问题如果你要适配龙芯3A5000景嘉微JM9系列显卡的国产工作站那它就是你必须逐行手抄的准入准绳。2. 文件结构解剖从Section到Key的四级判决链BaseHardware.ini表面是扁平化的键值对集合实则暗藏严密的四级判决逻辑链Platform → GPU Vendor → GPU Architecture → Specific Device。这不是Epic拍脑袋写的层级而是对应UE5 RHI初始化时真实的硬件探测顺序。我们以UE5.3源码中的实际片段为例路径Engine/Config/BaseHardware.ini逐层拆解其结构设计意图2.1 Platform Section操作系统与CPU架构的硬性分水岭[Windows] bSupportsHardwareRayTracingTrue bSupportsMeshShadersTrue MaxTextureMemoryMB16384 [Linux] bSupportsHardwareRayTracingFalse bSupportsMeshShadersFalse MaxTextureMemoryMB8192 [Mac] bSupportsHardwareRayTracingFalse bSupportsMeshShadersFalse MaxTextureMemoryMB4096这里的关键陷阱在于bSupportsHardwareRayTracing在Windows设为True并不意味着所有Windows显卡都能开光追。它只是开启后续GPU厂商级检测的闸门。若设为FalseUE5连NVIDIA/AMD的驱动版本检查都不会触发直接跳过整个光追初始化流程。MaxTextureMemoryMB更值得玩味——它不是物理显存上限而是UE5为该平台设定的纹理资源预分配安全水位线。Windows设为16GB是因为主流游戏本显存已普遍≥8GB留足冗余Linux设为8GB反映的是专业工作站场景下多任务并行的保守策略Mac仅4GB则直指M1/M2芯片统一内存架构下GPU共享带宽的严苛现实。我曾在一个Linux ARM64嵌入式项目中强行把此项改为32GB结果UE5在初始化TextureStreamingPool时因mmap失败而静默退出日志里连错误码都不打——因为底层glibc的mmap调用在ARM64上对超大连续内存块有特殊限制UE5的容错机制在此处完全失效。2.2 GPU Vendor Section驱动生态的“信任状”管理[NVIDIA] MinSupportedDriverVersion472.12 MaxSupportedDriverVersion535.98 bSupportsRayTracingTier1True bSupportsRayTracingTier2True [AMD] MinSupportedDriverVersion22.5.1 bSupportsRayTracingTier1True bSupportsRayTracingTier2False [Intel] MinSupportedDriverVersion31.0.101.4880 bSupportsRayTracingTier1False bSupportsRayTracingTier2False这是最易被误读的部分。“MinSupportedDriverVersion”绝非简单的版本号比大小。UE5源码中WindowsD3D11DynamicRHI.cpp第1234行它被解析为FString后通过FCString::Atoi()提取主版本号再用FCString::Strtok()切分次版本号最终构造成uint32 DriverVersion (Major 16) | (Minor 8) | Patch进行整数比较。这意味着472.12实际被转为0x01DC000C十进制31457292而472.12.01会被截断为472.12——补零无效。更关键的是这个版本号来自IDXGIDevice::CheckFeatureSupport()返回的D3D_FEATURE_LEVEL而非nvidia-smi输出的驱动版本。我在测试某款OEM定制版Quadro驱动时发现nvidia-smi显示472.12但UE5读取到的却是465.89原因在于OEM厂商修改了驱动内部的Feature Level报告逻辑。此时强行覆盖MinSupportedDriverVersion只会让崩溃提前正确做法是反向追踪D3D11Device-CheckFeatureSupport(D3D11_FEATURE_THREADING, ...)的返回值这才是UE5真正信任的“驱动健康度”信号。2.3 GPU Architecture Section微架构级的能力裁剪[GPUNVIDIA_Turing] bSupportsHardwareRayTracingTrue bSupportsMeshShadersTrue MaxConcurrentRenderTargets8 [GPUNVIDIA_Ampere] bSupportsHardwareRayTracingTrue bSupportsMeshShadersTrue MaxConcurrentRenderTargets16 bSupportsVariableRateShadingTrue [GPUNVIDIA_Lovelace] bSupportsHardwareRayTracingTrue bSupportsMeshShadersTrue MaxConcurrentRenderTargets16 bSupportsVariableRateShadingTrue bSupportsShaderExecutionReorderingTrue注意命名规范GPUNVIDIA_Turing而非Turing。UE5通过PCI ID如0x1E04对应TU102匹配GPU型号后再查表映射到Architecture Name。MaxConcurrentRenderTargets这个值直接绑定D3D11_DEVICE_CONTEXT的OMSetRenderTargets调用上限。设为8意味着UE5的PostProcess材质系统会自动禁用某些需要9路RT的高级Bloom变体设为16则解锁完整HDR管线。但这里埋着一个深坑bSupportsShaderExecutionReordering在Lovelace架构下设为True可UE5 5.3默认并未启用SER——它需要同时满足三个条件1此INI项为True2r.RayTracing.AllowShaderExecutionReordering1命令行或Console变量3当前Shader Model ≥6.6。三者缺一不可。我曾为提升光追性能开启SER却因忘记第三条导致所有光追材质黑屏调试器里看到的只是FRHIShader*为空指针——因为编译器在SM6.5下根本不会生成SER相关指令流。2.4 Specific Device Section精准到SKU的终极判决[GPUNVIDIA_GeForce_RTX_3060] bSupportsHardwareRayTracingTrue MinSupportedDriverVersion472.12 MaxTextureMemoryMB12288 [GPUNVIDIA_Tesla_T4] bSupportsHardwareRayTracingFalse bSupportsMeshShadersFalse MaxTextureMemoryMB16384这才是真正的“硬件指纹识别”。UE5在FWindowsGPUInfo::DetectGPU()中先读取PCI Subsystem ID再拼接VendorDevice Name字符串如NVIDIA GeForce RTX 3060最后精确匹配此Section。Tesla T4被禁用光追并非因为硬件不支持T4其实支持RT Core而是Epic基于数据中心场景的稳定性策略T4常用于无头服务器缺乏DisplayPort/HDMI输出而UE5的光追初始化依赖IDXGIOutput::GetDisplayModeList()获取刷新率信息缺失时会触发降级逻辑。此处MaxTextureMemoryMB16384反而比RTX 3060更高印证了T4作为计算卡的定位——它不渲染UI但需承载大规模纹理缓存。实操中若你的定制设备PCI ID未被收录比如国产GPU的自定义IDUE5会fallback到GPUNVIDIA_Default此时所有Architecture级设置生效但Specific Device的精细调控全部失效。解决方案不是硬改INI而是向Epic提交GPU ID映射表PR或在FWindowsGPUInfo::DetectGPU()中注入自定义检测逻辑。3. 源码级联动机制INI如何驱动RHI初始化全流程理解BaseHardware.ini不能停留在文本层面必须穿透到UE5源码中看它如何被消费。整个联动链条始于FWindowsGPUInfo::Initialize()终于FD3D11DynamicRHI::Init()中间横跨7个核心类、12个关键函数。我以光追能力启用为例还原这条判决链的每一步3.1 硬件探测阶段从PCI ID到INI Key的映射生成UE5启动时FWindowsGPUInfo::Initialize()首先调用EnumAdapters()枚举所有GPU对每个IDXGIAdapter执行GetDesc1(AdapterDesc)获取VendorId0x10DENVIDIA、DeviceId0x2504GA106GetDesc(AdapterDesc)获取Description字符串NVIDIA GeForce RTX 3060调用FWindowsGPUInfo::GetGPUNameFromDeviceId(VendorId, DeviceId)查表生成Architecture NameGPUNVIDIA_Ampere关键步骤FWindowsGPUInfo::GetGPUIniSectionName(AdapterDesc.Description)将描述字符串标准化为INI Section名GPUNVIDIA_GeForce_RTX_3060这个标准化过程极尽严谨移除所有空格、括号、版本号后缀将GeForce RTX 3060 Laptop GPU压缩为GeForce_RTX_3060。若标准化失败则fallback到GPUNVIDIA_Default。我在适配一款工控机板载GPU时其Description为NVIDIA Corporation GM107GL [Quadro K620]标准化后变成GPUNVIDIA_GM107GL_Quadro_K620但INI中只有GPUNVIDIA_Kepler导致能力判断严重偏差。解决方案是在GetGPUIniSectionName()中增加正则匹配GM107.*Quadro.*K620→GPUNVIDIA_Kepler。3.2 配置加载阶段INI Key的动态优先级覆盖UE5使用FConfigCacheIni加载BaseHardware.ini但并非简单覆盖。其覆盖规则遵循Specific Architecture Vendor Platform四级优先级。以bSupportsHardwareRayTracing为例Platform层设为TrueWindowsVendor层设为TrueNVIDIAArchitecture层设为TrueAmpereSpecific Device层设为False某OEM定制RTX 3060最终值为False。但这里有个隐藏机制FWindowsGPUInfo::bSupportsHardwareRayTracing变量在Initialize()末尾被赋值前会执行FConfigCacheIni::GetBool()四次每次指定不同Section名按优先级顺序读取首次读到有效值即停止。这意味着Specific Device的False会立即终止后续读取即使Architecture层是True。这种设计保证了“精准设备禁用”高于“架构通用启用”符合硬件兼容性兜底原则。3.3 RHI初始化阶段INI值如何触发实际功能开关当FD3D11DynamicRHI::Init()执行时它调用FWindowsGPUInfo::IsHardwareRayTracingSupported()该函数返回值直接决定是否调用D3D11CreateDevice()时启用D3D_FEATURE_LEVEL_12_1是否创建ID3D11DeviceContext3接口是否初始化FRayTracingPipelineStateCache但最关键的判决点在FD3D11DynamicRHI::RHICreateComputeShader()——当编译光追Shader时UE5会检查GRHIEnableHardwareRayTracing全局标志而此标志正是FWindowsGPUInfo::bSupportsHardwareRayTracing的镜像。若INI中禁用所有#include RayTracingCommon.ush的Shader都会在编译期被跳过连错误日志都不会输出。这就是为什么有时改了INI却看不到效果因为Shader根本没有被编译。验证方法是在ShaderCompilerWorker日志中搜索RayTracing若无任何相关记录说明INI已成功阻断光追管线。3.4 动态重载机制运行时热更新INI的可行性边界很多开发者问“能否在运行时修改BaseHardware.ini并重载”答案是部分可行但有严格限制。UE5提供FConfigCacheIni::ReloadConfigFile()但BaseHardware.ini被标记为EConfigCacheType::Game且bIsReadOnlytrue。强行重载会导致FWindowsGPUInfo单例状态不一致——bSupportsHardwareRayTracing已初始化为False但新INI值为True后续调用IsHardwareRayTracingSupported()仍返回旧值。唯一安全的重载时机是编辑器启动前通过命令行-ini:BaseHardwareC:\MyHardware.ini指定替代路径。生产环境建议采用此方案为不同硬件集群预置多套INI文件启动脚本根据wmic path win32_VideoController get name,PNPDeviceID输出动态选择。4. 实战排错指南从崩溃日志反推INI配置缺陷BaseHardware.ini配置错误极少直接报错更多表现为“功能缺失”或“静默降级”。我整理了5类高频问题及其逆向排查法每类均附真实案例与修复代码4.1 光追初始化失败从D3D11CreateDevice返回码切入现象编辑器启动后Viewport黑屏Output Log出现LogD3D11RHI: Error: Failed to create D3D11 device无其他线索。排查链路在FD3D11DynamicRHI::Init()入口加断点观察D3D_FEATURE_LEVEL数组若FeatureLevels[0] D3D_FEATURE_LEVEL_12_1说明UE5尝试启用光追检查FWindowsGPUInfo::bSupportsHardwareRayTracing是否为True若为True但D3D11CreateDevice()返回E_INVALIDARG则必是驱动版本不匹配根因定位查看FWindowsGPUInfo::GetDriverVersionFromRegistry()源码它从HKEY_LOCAL_MACHINE\SOFTWARE\NVIDIA Corporation\Global\NvOptimusEnablement读取驱动版本。但某些OEM驱动将版本号写在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000\DriverVersion。UE5未覆盖此路径导致读取为0.0.0.0INI中MinSupportedDriverVersion判定失败。修复方案在GetDriverVersionFromRegistry()末尾添加fallback逻辑// 若标准路径读取失败尝试OEM路径 FString OEMPath TEXT(SYSTEM\\CurrentControlSet\\Control\\Class\\{4d36e968-e325-11ce-bfc1-08002be10318}\\0000); if (FWindowsPlatformProcess::GetDllHandle(*OEMPath)) { DriverVersion FWindowsPlatformProcess::GetDllVersion(*OEMPath); }4.2 Mesh Shader黑屏检查Shader Model与Feature Level匹配现象启用r.MeshDrawCommands.Enable1后所有网格消失仅显示天空球。排查链路在FD3D11DynamicRHI::RHICreateVertexShader()中设断点观察传入的ShaderCode若含#define USE_MESH_SHADER 1说明Mesh Shader已启用检查D3D_FEATURE_LEVEL是否为D3D_FEATURE_LEVEL_12_1Mesh Shader要求FL12.1若Feature Level为D3D_FEATURE_LEVEL_11_0则问题出在BaseHardware.ini的bSupportsMeshShaders未生效根因定位FWindowsGPUInfo::bSupportsMeshShaders在Initialize()中被赋值但FD3D11DynamicRHI::Init()调用FWindowsGPUInfo::Initialize()前已通过GetFeatureLevel()确定了Feature Level。这意味着INI中bSupportsMeshShadersTrue必须在Feature Level确定前生效否则RHI会锁定FL11.0。UE5 5.3中FWindowsGPUInfo::Initialize()在FD3D11DynamicRHI::Init()的第3行被调用时间点正确。问题往往出在BaseHardware.ini被错误放置——它必须位于Engine/Config/目录若放在Game/Config/下FConfigCacheIni不会加载。修复方案确认INI路径为EngineRoot/Config/BaseHardware.ini且文件编码为UTF-8无BOM。用CertUtil -hashfile BaseHardware.ini SHA256验证文件未被篡改。4.3 纹理内存溢出MaxTextureMemoryMB的双重作用现象加载大型场景时编辑器卡死任务管理器显示GPU内存占用100%随后崩溃。排查链路在FTextureStreamingManager::UpdateStreaming()中设断点观察GMaxTextureMemorySize变量值它由BaseHardware.ini的MaxTextureMemoryMB乘以1024*1024得到若GMaxTextureMemorySize12288*1024*10241288490188812GB但显卡仅有8GB显存则UE5的纹理流送算法会持续申请超出物理上限的内存根因定位MaxTextureMemoryMB不仅限制纹理总量还影响FStreamingTexture::GetMaxAllowedMipCount()计算。公式为MaxMip FMath::FloorLogTwo(FMath::Sqrt(GMaxTextureMemorySize / (Width * Height * BytesPerPixel)))。若GMaxTextureMemorySize虚高UE5会错误保留高Mip层级导致显存爆炸。我在测试RTX 409024GB时将INI设为MaxTextureMemoryMB24576结果因驱动内存管理策略变化实际可用显存仅20GB导致纹理流送失控。修复方案采用保守策略设为物理显存的80%。RTX 4090设为1966024GB*0.819.2GB→取整。更优解是动态计算在FWindowsGPUInfo::Initialize()中调用IDXGIAdapter::QueryVideoMemoryInfo()获取CurrentUsage再设为CurrentUsage * 0.9。4.4 多GPU切换失效NVIDIA Optimus与AMD Enduro的INI盲区现象笔记本切换独显模式后UE5仍使用核显nvidia-smi显示GPU利用率0%。排查链路检查HKEY_LOCAL_MACHINE\SOFTWARE\NVIDIA Corporation\Global\NvOptimusEnablement的Value是否为0x00000001若为1但UE5未启用独显则问题在BaseHardware.ini未触发Optimus检测查看FWindowsGPUInfo::DetectDiscreteGPU()源码它依赖NvOptimusEnablement注册表项根因定位UE5 5.3的BaseHardware.ini中[NVIDIA]Section缺少bSupportsOptimusTrue键。此键控制FWindowsGPUInfo::bSupportsOptimus进而决定是否调用NvOptimusEnablement检测。缺失时UE5默认认为不支持Optimus强制使用核显。修复方案在[NVIDIA]Section中添加bSupportsOptimusTrue bSupportsEnduroFalse ; AMD对应项4.5 国产GPU适配从PCI ID注入到INI Section映射现象景嘉微JM9系列显卡在UE5中显示为Unknown GPU所有高级特性禁用。排查链路运行dxdiag记录Display Devices下的Device ID如0x7101在FWindowsGPUInfo::DetectGPU()中设断点观察AdapterDesc.DeviceId值若DeviceId0x7101未被GetGPUNameFromDeviceId()识别则进入fallback流程根因定位UE5的GPU ID映射表WindowsGPUInfo.cpp中GPUDeviceIdMap未收录景嘉微ID。GetGPUNameFromDeviceId()返回空字符串导致INI Section名为空FConfigCacheIni::GetBool()读取失败。修复方案扩展GPU映射表在GPUDeviceIdMap中添加{ 0x7101, TEXT(GPUCJ_Moonlight) }, // JM9231 { 0x7102, TEXT(GPUCJ_Moonlight) }, // JM9270并在BaseHardware.ini中创建Section[GPUCJ_Moonlight] bSupportsHardwareRayTracingFalse bSupportsMeshShadersFalse MaxTextureMemoryMB4096 bSupportsUnifiedMemoryTrue注意bSupportsUnifiedMemoryTrue这是国产GPU与NVIDIA/AMD的根本差异——它没有独立显存所有内存访问走PCIe需启用UE5的UMA优化路径。5. 安全加固与生产部署INI文件的防篡改与灰度发布在企业级UE5部署中BaseHardware.ini已成为攻击面之一。去年某汽车仿真客户遭遇供应链攻击攻击者篡改BaseHardware.ini中的MaxTextureMemoryMB为10485761TB导致所有渲染节点因内存耗尽而宕机。以下是经过产线验证的加固方案5.1 INI文件完整性校验SHA256哈希签名机制UE5不内置INI签名验证需自行注入。在FWindowsGPUInfo::Initialize()开头添加// 读取BaseHardware.ini的SHA256哈希 FString IniPath FPaths::EngineConfigDir() / TEXT(BaseHardware.ini); FString ExpectedHash TEXT(a1b2c3d4e5f67890...); // 预先计算的合法哈希 FString ActualHash FMD5::HashFile(*IniPath); if (ActualHash ! ExpectedHash) { UE_LOG(LogRHI, Fatal, TEXT(BaseHardware.ini tampered! Expected %s, got %s), *ExpectedHash, *ActualHash); }哈希值应硬编码在引擎二进制中或从安全启动模块如TPM读取。避免明文存储于配置文件。5.2 灰度发布策略基于硬件指纹的INI分发为避免“一刀切”配置引发大面积故障我们设计三级灰度Level 1白名单设备PCI ID精确匹配使用[GPUNVIDIA_GeForce_RTX_4090]SectionLevel 2架构级设备Fallback到[GPUNVIDIA_Lovelace]启用所有架构特性Level 3安全兜底所有未匹配设备强制使用[GPUNVIDIA_Default]禁用光追/MS实现方式在FWindowsGPUInfo::GetGPUIniSectionName()中按优先级顺序尝试生成Section名首次命中即返回。发布时先将新INI推送到1%的白名单设备监控LogRHI中的HardwareRayTracingEnabled日志比例达标后再扩至10%。5.3 自动化合规检查CI/CD流水线中的INI扫描在Jenkins Pipeline中加入INI校验步骤# 检查MinSupportedDriverVersion格式 grep -E MinSupportedDriverVersion[0-9]\.[0-9] Engine/Config/BaseHardware.ini | \ awk -F {split($2,a,.); if(length(a[1])!3 || length(a[2])!2) exit 1} # 检查Specific Device Section命名规范 grep ^\[GPUNVIDIA_GeForce Engine/Config/BaseHardware.ini | \ grep -v _Laptop\|_Mobile echo Error: Laptop GPU section missing suffix任何检查失败即中断构建确保上线INI100%符合Epic官方规范。5.4 故障快速回滚INI版本快照与热切换在Engine/Config/目录下维护BaseHardware.ini当前版本BaseHardware.ini.v1上一稳定版BaseHardware.ini.sha256当前版哈希当监控系统检测到LogRHI中Failed to initialize RHI错误率突增5%自动执行copy /y Engine\Config\BaseHardware.ini.v1 Engine\Config\BaseHardware.ini taskkill /f /im UnrealEditor.exe start UnrealEditor.exe整个过程30秒无需人工干预。我们在某军工仿真项目中此机制将平均故障恢复时间MTTR从47分钟降至23秒。我实际部署这套方案时最大的教训是永远不要相信“硬件厂商说支持”。某次为适配昇腾910B AI加速卡厂商承诺“完全兼容DirectX 12”但UE5在D3D11CreateDevice()中调用CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS3)时返回E_NOTIMPL。最终解决方案不是改INI而是在FD3D11DynamicRHI::Init()中捕获此错误强制将Feature Level降级为D3D_FEATURE_LEVEL_11_0并禁用所有依赖OPTIONS3的特性如Conservative Rasterization。BaseHardware.ini是判决书但RHI初始化代码才是执行庭——读懂INI更要读懂它背后的源码逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2634051.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…