尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Vadere场景设置全指南:从障碍物到疏散仿真参数调优

Vadere场景设置全指南:从障碍物到疏散仿真参数调优 做人群仿真的人对Vadere这个名字应该不会陌生。作为一套开源的微观行人仿真工具它最大的价值在于把研究级的人群运动模型做成了开箱即用的GUI程序不用写一行代码就能模拟出疏散演练、地铁换乘通道、展览馆人流这类典型场景。前面几篇基础篇聊了安装部署和界面操作这一篇我单独把“场景设置”拎出来讲。原因很简单它是整个仿真流程里最容易被忽略、又最决定结果可信度的环节。翻过车的老手都知道仿真跑出来的结论不靠谱绝大多数不是模型算法的问题而是场景里的墙没画对、目标编号绑错、行人初始位置卡进了障碍物。这篇内容会围绕一个完整的疏散案例展开从新建场景、导入底图、画障碍物、放目标区、配置行人源一直到参数校验和常见问题排查每一步操作后面我都会解释为什么这么做以及哪些坑我已经替你踩过了。适合正在搭仿真环境的学生、需要做方案比选的设计师以及想用程序化方式批量生成场景的进阶用户。看完你就能独立搭出一个可复现、能校准、拿得出手的Vadere仿真场景。1. 先理解Vadere场景的三个核心变量1.1 场景在Vadere里到底是个什么结构很多人第一次打开Vadere就被界面左上角那棵树吓住了其实它的结构比想象中简单。一个Vadere场景Scenario本质上是一个JSON文件GUI里你做的所有画线、拖拽、配置操作最终都在生成结构化的JSON数据。文件顶层就三大块attributesModel、topography、simulationOptions。topography是地理层记录场景里所有几何元素的位置、形状、层级关系包括障碍物、目标区域、行人来源点、楼梯等。attributesModel是行为层决定行人怎么走路比如用的是改进的梯度人群模型GCM还是社会力模型SCM对应的参数都挂在这一层。simulationOptions是运行层控制时间步长、仿真时长、随机种子等全局设置。理解这个分层结构有一个实际好处当你在GUI里摆弄半天发现画布卡顿或者想批量生成大量场景时完全可以绕开界面直接用脚本修改JSON再导入Vadere运行。我在做多组对照实验时就是用Python批量生成几十个只有出口位置不同的场景JSON效率比手动画高一个数量级。所以下面讲场景设置时我会同时对照GUI操作和JSON结构方便你两种路子都能走。1.2 核心组件障碍物、目标区、行人来源从功能上看一个场景能不能跑起来取决于三样东西是否配置齐全障碍物Obstacles、目标区Targets、行人来源Sources。障碍物所有不可通过的固体边界包括墙体、柱子、展台、家具。Vadere的导航算法会把障碍物视为梯度场的边界行人不会穿越但会贴着边缘绕行。目标区行人的导航目的地。可以理解成“打卡点”行人规划路径时会朝着目标区的几何中心或边缘移动。一个场景可以有多个目标区行人来源可以指定分配给哪些目标区。行人来源行人在场景中的出生点。你可以把它想象成入场闸机它决定了行人在什么时间、以什么速率、总共生成多少人、生成后去往哪个目标区。我用一个生活化类比帮你串起来障碍物是“场地条件”目标区是“任务的终点”行人来源是“入场安排”。三者缺一个行人要么无处可走要么不知道该去哪儿要么压根没有行人出现。还有一个容易混淆的元素叫吸收区Absorbing Area它可以让行人到达某个区域时从仿真中消失。如果你只想观测行人通过某个断面的流量或者模拟行人离开建筑后不再纳入统计就用吸收区。注意它和目标区不一样目标区是导航目标行人要“想到达”那里吸收区是数据过滤器行人碰到就消失。简单场景里可以不用它。1.3 动手画图之前先问自己三件事场景设置最容易犯的错误是一上来就画墙画到一半才发现自己想要的结果根本测不出来。我建议动手前先回答三个问题第一个问题研究问题是什么是要测疏散总时间还是看某个通道的拥堵程度还是对比不同出口布置方案的效果问题不同场景的精细度要求完全不同。测疏散总时间时出口外3米外的区域也值得画出来只想分析通道内拥堵时大厅内部可以粗化为一个开阔矩形。第二个问题场景的物理尺度是多少Vadere内部单位是米画布上没有“像素”这个概念。如果你手里只有一张位图图纸必须先把图纸缩放到与实际尺寸一致再描边否则疏散距离、行人密度、门宽流量通通失真。一个2.5米宽的门你按5米画仿真结果直接差一倍。第三个问题人群规模和密度是多少这决定行人源的速率、人数上限和仿真时长。比如500人在一个2000平方米的大厅里密度只有0.25人/平方米属于舒适流动状态同样500人挤进200平方米的房间密度到了2.5人/平方米就会出现明显的拥堵和排队。场景设置时要把行人源放在人员实际进入的位置不要图方便随手放在角落。1.4 用一个案例贯穿全文为了下面实操步骤不空谈我给出一个固定的研究案例一个长40米、宽20米的展览大厅南墙右侧有一个5米宽的入口北墙有两个2米宽的疏散门门中心分别位于距左墙10米和30米处。模拟500名参观者在听到警报后向北侧两个出口疏散。这个案例包含一个入口、两个出口、四面墙、一个开阔大厅结构简单但足够覆盖Vadere场景设置的绝大部分功能点。后面第2章的所有操作都是在这个案例的框架下进行的。场景元素尺寸/位置说明大厅40m × 20m开阔无柱区域先不添加内部障碍物外墙四边闭合墙厚0.3m门洞位置预留缺口南侧入口宽5m位于南墙右侧作为行人来源的布置位置北侧出口1宽2m距左墙10m对应Target 1北侧出口2宽2m距左墙30m对应Target 2疏散人数500人来源总人数上限入流速约5人/秒模拟持续入场接近真实展览入场节奏这个案例你会看到障碍物如何开出门洞、目标区应该放在门内还是门外、行人来源如何同时分配两个出口、以及不同的目标分配比例会对疏散效率产生多大影响。2. 场景搭建实操从空白画布到可运行场景2.1 新建场景与导入底图打开Vadere后通过菜单或顶栏的New Scenario按钮创建新场景。界面上会出现一个空白地形视图同时右侧的Topography面板列出障碍物、目标、源等组件的空列表。如果你有CAD导出的平面图或手绘草图第一步先导入底图。Vadere支持加载PNG等常见图片格式作为背景参考操作位置在视图菜单或工具栏的地图图标。导入后调整图片的缩放和位置让图上的关键尺寸大致落在对应的坐标范围。注意Vadere的坐标原点默认在场景左下角画布网格单位为米。这里有一个关键实操习惯底图只是视觉参考不会参与碰撞计算。你需要参考底图用几何工具把墙体等障碍物重新描一遍。我的做法是先在CAD软件里量出关键点的坐标再直接按坐标在Vadere里输入多边形顶点而不是用鼠标在底图上“描”。鼠标描边看着省事实际画出来的墙体宽度不一致、角度偏几度后面仿真结果出偏差时你甚至不知道问题出在几何上。新建场景后建议第一时间保存在Scenario菜单中选择保存场景格式选择JSON。Vadere自带一个Scenario Database概念可以把多个场景存在本地数据库中但我不太推荐依赖它做版本管理。直接把JSON文件交给Git管理才是正道每次修改生成一个可对比的diff排查问题会轻松很多。2.2 障碍物添加与绘制技巧墙、门洞和柱子场景里的墙体需要使用障碍物工具绘制。在Topography面板中选中Obstacles点击添加按钮画布上会出现多边形绘制模式。沿着墙体中心线逐点单击添加完最后一个点后双击或按回车完成绘制。画出来的闭合多边形就是障碍物轮廓。我建议用Rectangle Obstacle这类预设工具画直墙。在添加障碍物时Vadere提供矩形障碍物快速生成方式输入左下角坐标、宽度、高度、旋转角就能生成一个标准矩形墙体。40m×20m大厅的外墙用四个矩形拼出来南墙、北墙、东墙、西墙各一个矩形其中南墙和北墙需要预留门洞所以不能一整个矩形铺过去要分成多段绘制。以案例中的北墙为例墙体总长40米需要开两个2米宽的门洞。从左侧开始画第一段墙长度9.7米留出2米门洞再画第二段墙从门洞右侧延伸到下一个门洞左侧长度约9.7米再留出2米门洞最后画第三段墙。为什么要留0.3米的“冗余”而不是精确等于墙长减去门宽因为门洞处的目标区会占据一定空间墙端点与目标区边缘留一点间隙可以避免碰撞检测时报重叠错误。墙厚也值得注意。Vadere的导航梯度场对障碍物厚度有一定要求我通常把墙厚设在0.2米到0.4米之间案例里统一用0.3米。太薄的墙会让导航场梯度在墙体两侧变化过于剧烈行人可能出现贴墙抖动太厚的墙会压缩可用疏散宽度门洞实际宽度失真。如果场景里有柱子或展台同样用矩形或多边形障碍物表示。柱子这类小尺寸障碍物在疏散仿真中会显著改变局部人群流建议按真实尺寸绘制不要简化成点。展台这类临时设施可以根据研究目的决定是否保留如果研究的是“最不利疏散条件”通常会删除展台只保留固定建筑结构。2.3 目标区域出口到底应该怎么圈障碍物画完接下来部署目标区。这里的坑最多值得多花点篇幅。目标区在Topography面板的Targets下添加支持圆、矩形、多边形等形状。大多数情况下我用矩形或圆形来标记出口位置。关键问题是目标区应该圈住哪里我见过太多新手把目标区直接放在出口门洞内部导致行人刚走到门口就算到达疏散时间统计偏短。正确的做法是把目标区放在门洞外侧靠近门外0.5到1米的位置中心对准门洞中线。这样行人必须完全踏出门口才算完成疏散符合实际疏散演练中“走出建筑物才算安全”的判定标准。以案例北侧出口1为例目标区可以设为一个宽2.5米、深1.5米的矩形中心坐标与门洞中心一致落在墙外0.75米处。多个出口对应多个目标区。Vadere的目标编号从0开始自动递增第一个添加的目标区是Target 0第二个是Target 1。这部分要格外留意当你删除一个目标区再重新添加时编号不会自动重排可能出现Target 2在前面、Target 1在后面这种错乱情况。目标编号直接关系到行人来源的targetIds配置所以我每次画完目标区都会在笔记里记录“出口名 → 目标编号”的对应关系防止后面绑错。关于目标区尺寸还有一个细节如果目标区太小行人会为了“精确到达”目标中心而放慢速度形成不自然的减速如果目标区太大行人到达边缘就停止可能与实际疏散速度不符。我习惯将目标区的宽度设置为出口宽度的1.2倍左右深度1到2米这样既不会形成不真实的目标点排队也不会过早判定疏散完成。2.4 行人来源人数、速率与目标分配行人来源Source是场景的“演员入场口”。在Topography面板的Sources下添加然后配置参数。你会在JSON中看到一个Source包含几个关键字段position、spawnAt、spawnFrequency、numberOfPedestrians、targetIds。position是源点坐标在案例中放在南墙入口外侧或内侧边缘。注意行人源产生的行人会首先出现在这个点所以这个点不能落在障碍物内部否则运行会直接报错或行人陷在墙里。spawnFrequency是每秒生成的行人数。案例中参观者以约5人/秒的速率进入大厅那么这个值就设置为5。如果模拟的是紧急疏散开始时所有人员已在建筑内就不需要在门口放源而是在室内划定一个矩形区域作为行人初始分布区并把spawnFrequency设成“一次性全部生成”Vadere中可以通过把频率设为一个很大的值比如1000人/秒来近似瞬时释放。numberOfPedestrians是总人数上限案例中设为500。每次仿真运行Vadere会从这个源生成最多500个行人。如果spawnFrequency太小或仿真时间不够部分行人可能没有生成完疏散总时间值就会偏低。我一般会把最大仿真时间设得充裕一些并在跑完后检查实际生成人数是否等于500。targetIds是源点对应的目标区编号数组。案例中入口处的参观者需要从两个北门疏散targetIds设为[0, 1]。当源点关联多个目标区时Vadere会给行人分配目标。分配逻辑有多种策略可选有的按比例随机分配有的根据距离最近目标分配。如果你希望模拟“就近疏散”选择距离最近策略会更接近真实如果想模拟“随机选择出口”则用随机分配。这部分选择会影响两个出口的流量分配在不同方案对比实验里要固定下来别在对比时悄悄改掉。补充一个经验源点的行人初始速度方向Vadere通常会按目标方向给出。若行人一出生就朝目标走会在入口处形成一条弧形队列这在大多数场景中符合直觉。如果你希望行人先在某区域自由游荡再疏散需要增加“waiting area”之类的机制或者用两个Source分阶段控制生成但这些属于进阶操作本次不讲太深。2.5 检查碰撞、保存JSON与首轮试跑所有几何元素摆放完毕先别急着调模型参数做两件事。第一件事运行碰撞检查。Vadere工具栏上有碰撞检查按钮它会自动扫描障碍物之间、障碍物与目标区、源点之间的重叠情况。重叠会导致导航场计算异常行人卡住或穿模。检查报告会在界面上列出冲突项按照提示逐个修复。这个操作非常快强烈建议在每次修改地形后都跑一遍。第二件事保存场景为JSON文件并打开看一眼。你不需要读懂每一行但需要确认几个关键值topography下有obstacles数组且有元素targets数组个数正确sources的numberOfPedestrians等于目标人数。如果以后要批量做参数扫描这一步也是你写脚本前必须熟悉的对象结构。然后直接运行一次仿真。看到行人从入口陆续出现、绕过大厅、走到两个出口并消失说明场景设置已经通了。首次试跑不要追求结果精确而是确认流程不报错、行为不穿模、人数生成正确。流程通了再进入第3章的参数精调。3. 不可跳过的仿真参数配置与模型选型3.1 时间步长、仿真时长与随机种子三个基础参数的逻辑场景能跑起来之后你需要回头审视运行层的三个基础参数它们决定了仿真的时间粒度和可复现性。第一个是timeStepLength时间步长Vadere默认值是0.4秒。在微观仿真里这个值是个平衡点步长太短会让计算机反复计算行人间的受力速度慢一个量级步长太长会让行人每个时间步位移过大容易出现穿入障碍物边缘或抖动。0.4秒对应的行人每步位移约半米出头对于疏散模拟已经够用。如果你的场景里行人密度很高拥堵状态下行人位移很小0.4秒仍然安全但如果你观测到行人抖动明显可以尝试调低到0.2秒代价是计算时间翻倍。第二个是仿真时长主要包括simTimeInSec和最大仿真时间上限。Vadere会让你设定期望仿真时长相当于给行人“多长时间完成任务”。案例中500人从40米长的大厅疏散正常情况下最多两三分钟足够但我建议把最大时长设到360秒以上宁可多算也不要让部分行人因为时间到而停在半路。疏散总时间的统计口径通常以最后一个人到达目标区为准仿真时间不够会直接截断尾部数据。第三个是随机种子。微观仿真里有大量随机因素行人速度波动、目标分配、初始位置的微小扰动。同一个场景每次跑出来的疏散时间曲线不会完全重合这是正常现象。要得到稳定结论必须固定随机种子或对多组种子取平均。我的实验流程是同一场景至少跑5个不同随机种子记录疏散总时间计算均值和标准差再把均值作为该场景的结果。这个做法在对比场景改造效果时尤其重要否则你可能把一个随机种子带来的波动误判成优化效果。3.2 三套模型怎么选GCM、SCM与OSM的适用边界Vadere内置多套行人运动模型最常用的是GCM、SCM和OSM。场景设置时选哪一套直接影响后续要调哪些参数。GCM是梯度导航模型基于空间中的导航场指导行人运动。它的最大优点是行人能自动绕开障碍物、保持间距整体行为稳定而且参数相对少适合大多数疏散场景和通道流量研究。Vadere的默认配置也倾向GCM我个人建议新手直接用GCM起步。SCM是社会力模型模拟行人受到“目标吸引力”和其他行人“排斥力”的合力作用。它对拥挤压力、人群推挤、恐慌行为的刻画更细腻但参数多、敏感度高稍微没调好就出现行人原地抖动或互相穿透。如果你是要研究“恐慌情绪下的拥挤踩踏风险”这类微观相互作用课题SCM值得深挖如果只是做工程评估用它反而增加不必要的调试成本。OSM是最优步进模型更偏离散化每一步从相邻网格中选代价最小的方向。它对空间栅格依赖较强适合教学演示实际研究应用相对少。给一个简单的选型对照表模型行为特点参数复杂度典型应用场景建议GCM平滑绕障、流线清晰中等疏散总时间、出口流量、路径规划首选尤其是工程评估SCM拥挤推挤、力交互高恐慌行为、高密度踩踏风险研究微观相互作用时选用OSM离散步进、网格化低教学演示、算法教学入门理解用案例中我们选GCM因为主要测的是疏散总时间关心的是宏观效率和出口瓶颈不是个体间的推挤力细节。3.3 关键行为参数速查与调参思路选好模型后行为参数集中在attributesModel里。我总结一份GCM默认参数表这是我在Vadere验证过的可起步配置参数建议值含义与作用行人半径0.2m行人占用的圆形半径影响密度与间距期望速度均值1.34 m/s自由流状态下的平均行走速度期望速度标准差0.26 m/s速度个体差异体现人群异质性障碍物斥力强度4.0行人偏离障碍物的趋势越大越远离墙障碍物斥力范围2.0m越过这个距离后墙壁不再影响行人导航场分辨率8.0梯度场栅格精度越高越精细但更慢这些值不是拍脑袋定的。期望速度均值1.34 m/s来自大量步行速度研究代表了成年人正常步速标准差0.26体现了人群中有人走得快有人走得慢。行人半径0.2米意味着两个人肩并肩时最小间距约0.4米对应高密度人群里每平方米最多约6人和实际观测基本吻合。调参我有一个原则一次只动一个参数。很多人喜欢同时调速度又调斥力又改分辨率结果结果变了也不知道是谁的功劳。我会先固定其他参数单独把obstacleRepulsionStrength从4调到6看疏散时间是否变长、行人是否更贴墙再单独把导航场分辨率从8调到12看行人过门洞时是否更顺滑。每个参数都按“改一档→跑三次→记录均值→回归原值”的流程来。当仿真结果和真实实验数据对比时优先校准速度分布参数其次校准障碍物斥力最后才动导航场分辨率。分辨率的改动对结果影响最不明显但计算开销最大放在最后试探最稳妥。4. 场景调试我踩过的坑和排查清单4.1 行人原地不动或随机乱跑场景搭好跑起来最常见的异常是行人站在源点附近不动或者像无头苍蝇一样来回打转。出现这种问题90%的原因是targetIds配置错误或者目标区不可达。先查targetIds在场景JSON里找到对应Source确认数组里的编号确实存在于targets列表中。Vadere不会因为你填了不存在的编号就报错行人会因为没有有效目标而原地发呆这种隐性错误最容易漏掉。再查可达性目标区是否真的和行人所在区域连通。比如你画北墙时忘了预留门洞或者门洞被一段看不见的墙边线挡住导航场会判定目标不可达行人会一直贴着墙寻找路径。检查方法很简单在Vadere视图里开启导航场可视化看目标区周围梯度场颜色是否连续。如果目标区附近出现明显的断裂带就说明有障碍物把路堵死了。最后一招把场景里所有障碍物暂时删除跑一次。如果行人能直接到达目标区说明问题一定在障碍物绘制上逐个加回障碍物就能定位。这个方法我用过好多次排查效率极高。4.2 行人抖动、穿墙和卡墙角行人走几步就抖一下、穿过墙缝走捷径、或者在墙角反复摩擦这些问题多集中在数值层面不是几何错误。排查优先级如下时间步长、墙厚、斥力参数。时间步长过大时行人每一步位移超过障碍物的薄壁厚度就可能“穿越”到墙的另一侧。碰到这种情况先把timeStepLength从0.4降到0.2试试抖动通常立竿见影地消失。代价是计算时间增加但总比数据作废强。墙太薄是另一个常见隐患。如果你画的墙只有0.05米厚而导航场分辨率又不够高梯度场在墙两侧几乎没有区分度行人对墙的“感知”很弱就会出现贴墙穿模。把墙厚加到0.2米以上能明显改善。至于墙角摩擦通常和障碍物斥力强度设置有关。斥力太小时行人会压着墙角挤过去斥力太大时行人会被弹开绕远路增加疏散时间。我的调法是从斥力强度4开始每次加0.5观察行人轨迹在墙角处是否平滑直到既不顶墙也不绕路为止。4.3 运行报错和崩溃Vadere在以下三种情况容易直接报错障碍物之间重叠、行人生成在障碍物内部、场景JSON版本不匹配。障碍物重叠是最低级的错误但画多边形时很容易留一条看不见的边。曾经画一个U形通道两段墙体端点离得太近放大到图层级才发现有0.02米的交点重叠结果行人跑到那个位置就直接报“Out of bounds”错误。解决办法还是那句话每次改完地形就跑Check Collision不要依赖眼睛。行人生成在障碍物内部常见于把Source放在了门框边界上。因为门框本身有多段墙Source坐标距离墙边不足一个行人半径时Vadere会在初始化的时侯报错。务必让Source中心与最近的障碍物边缘保持至少0.5米距离。案例中入口Source我放在南墙门洞外侧0.8米处既有实际意义也避开了碰撞。JSON版本问题多发生在不同版本Vadere之间传场景文件时。老版本创建的JSON用新版本打开可能导致模型参数缺失或默认值改变。我的建议是明确项目所用的Vadere版本并在场景文件名里标注版本号如果跨版本导入先在新版本里另存一遍再继续编辑。4.4 性能突然变差、跑一次要好几分钟场景没改多少仿真却越来越慢通常不是电脑问题是场景设计的细节在拖后腿。头号嫌疑是障碍物多边形顶点过多。CAD底图导入后如果你沿着弧线墙描了几十个顶点Vadere每一次导航场计算都要处理这些顶点性能就会出现断崖式下降。解决办法是把弧线用两三条折线近似把几十上百个装饰性顶点全部合并掉。第二个嫌疑是导航场分辨率设置过高。分辨率调到16确实让行人轨迹更细腻但计算量是分辨率8的四倍以上。如果只是看疏散总时间分辨率8完全够用。第三个嫌疑是仿真时间设得过大。最大仿真时间设到几千秒而实际300秒就疏散完了Vadere会继续空转到时间上限白白耗费算力。把最大时长压到预期的1.3倍左右即可。还有一个很实用的省算力技巧前期调试阶段把人数降一半。比如案例中先用250人跑通流程、调好参数再恢复到500人正式跑。反正问题排查靠的是参数和场景人数减半对排错没有影响但能让你在同样的时间内多试好几轮方案。4.5 仿真结果跟真实实验对不上最后也是最头疼的问题场景搭得没问题、参数也是文献值但结果就是和真实实验对不上。先别怀疑软件多数情况下是场景和实验的边界条件不一致。边界条件包括行人初始位置的分布方式、人群的年龄构成对应的速度分布、行人对出口的熟悉程度。案例里如果真实实验是“参观者在展厅均匀分布后听到警报”而你设置的是“所有参观者从南门鱼贯而入后再疏散”那两边的初始空间分布完全不同疏散时间当然对不上。调整方式是让行人初始位置尽可能贴近实验视频里的人群分布而不是让Source群从头生成。另一个常见问题是目标分配策略。真实人群在双出口疏散时靠近哪个门就往哪个门走的人占大多数。如果你在targetIds分配策略中选择了均匀随机分配两个门会同时承担250人而实际可能是左侧门320人、右侧门180人。对比实验时需要参考实验录像统计实际出口使用比例在Source分配策略里做相应设置。调模型的耐心也很重要。我见过很多同行花了大量时间调社会力模型参数想把每一步都拟合到分毫不差结果越调越偏。正确路径是先校准几何和边界条件再调速度分布最后才微调斥力参数。边界条件没对齐之前调模型参数就是在错误的道路上加速。最后分享一点我的体会场景设置这件事我做了这么多仿真项目下来最大的体会是它的工作量通常占整个仿真流程的七成以上但恰恰这七成决定了研究成果可信度的下限。模型再先进场景里的墙画歪了、目标区放错位置了、行人来源分组绑错了跑出来的结论都只能算是数字游戏。所以最后再分享一个小技巧画场景前先在文本编辑器里把目标区的布局规划好包括编号、位置、对应出口再切换到GUI里落点。我每次做双出口疏散实验都会在草稿纸上先写“Target 0北左门Target 1北右门”画完再打开JSON核对一次。这个小习惯看似多余但能避免至少80%的返工。如果你打算后续做真实的工程评估我强烈建议你养成把场景JSON当工程文件管理的习惯版本控制、修改注释、参数记录一个不落。Vadere的GUI可以让你快速上手但真正让你在复杂项目里游刃有余的永远是你能完全控制和追溯的场景数据。
返回列表