简介:围绕Creator与3dsmax协同完成不规则建筑体场景仿真建模的文档资料,面向虚拟现实、场景仿真及三维建模学习者,重点解决Creator在多边形建模基础上难以处理复杂曲面与异形结构的问题。压缩包仅含1个docx文件,约21KB,篇幅精简,便于快速查阅与归档。已有196人学习浏览,具备一定参考热度。内容围绕对象几何特征分析、3dsmax系统单位与显示单位设置、基础几何体与复合物体构建、材质纹理处理、模型简化及3ds格式导出后导入Creator修正为flt文件等环节展开,并结合数字火箭系统模拟等应用场景说明协同建模流程,可帮助读者理解复杂模型的数据控制、实时性取舍以及Vega驱动所需的成果组织方式,适合需要兼顾建模灵活性与场景仿真标准格式的中级学习者参考。
1. 不规则建筑体建模:Creator 拼不出的曲面,为什么要靠 3ds Max 接力
上个月帮一个做园区场景仿真的团队收拾烂尾模型:曲面屋面加双曲面幕墙,在 Creator 里用多边形一块块拼了两周,面数冲到八万多,挂到驱动端帧率掉到个位数。问题不在手上功夫,在于工具分工。Creator 的长处是层级组织、实例化、LOD 和 FLT 输出,捏自由曲面不是它的强项;3ds Max 反过来,异形建模快,但产物不能直接喂给 Vega。这套 Creator 加 3ds Max 的接力做法,核心就一句话:不规则建筑体在 3ds Max 里建,拓扑、层级和简化回 Creator 里收,最后以 FLT 交给场景驱动。适合做视景仿真、场景仿真、数字园区大屏的同行,尤其是被异形结构卡住、又不想推翻现有 FLT 管线的人。
2. 先判断再动手:哪些不规则体交给 3ds Max,哪些留在 Creator
接手项目先别急着开软件,花半天做对象拆解,后面能省掉反复返工。拆解要回答两个问题:这个构件用哪把刀切,切完的单位怎么对齐。选错了工具,后面所有简化手段都是在给错误买单;单位没锁死,导入那一刻就注定了比例翻车。
2.1 三条建模路线的取舍:为什么不是图形库也不是 VRML
场景仿真里的模型来源,业内常见三条路。第一条是图形库加高级语言,OpenGL 或 DirectX 配 C++,自由度最高,什么怪形状都能画,但开发者得同时懂图形学和渲染管线,改一个造型要动代码,资产和逻辑搅在一起。第二条是 VRML 这类文本描述语言,写起来快、便于浏览,但绘制效率是硬伤,大场景很难跑到实时。第三条是专业建模软件,Creator、3ds Max 这一类,把造型和驱动分开,资产是资产,代码是代码。
| 路线 | 典型做法 | 自由度 | 上手成本 | 大场景实时性 | 后期改型 |
|---|---|---|---|---|---|
| 图形库 + 高级语言 | OpenGL/DirectX + C++ | 最高 | 高,要懂图形学 | 看自己写得好不好 | 改一处动代码,回归成本高 |
| VRML 类文本建模 | 节点文本描述场景 | 中 | 低 | 差,面数一上来就掉帧 | 文件好读,工具链弱 |
| 专业建模软件 | Creator / 3ds Max | 中高 | 中 | 好,有 LOD 和实例 | 资产独立,改完重导即可 |
选第三条的现实理由很直接:下游 Vega 认 FLT,而 FLT 是 Creator 的原生格式,层级、材质、LOD 节点都是现成结构,不用自己写解析器。Creator 在多边形建模上是够用的,箱体、圆柱、锥体、旋转体、带面、文字这些工具能覆盖大部分规则体量,地形模块也成熟。它的短板集中在两处:一是自由曲面,二是带内圆角、倒角、切角的复杂结构。这两类恰好是 3ds Max 的舒适区,而且 3ds 格式能直接进 Creator,不需要第三方转换器,少一道数据损失。
2.2 拆件判定:五个信号说明该切软件
我一般按下面这张表过一遍构件清单,判错了后面全是坑。
| 对象特征 | 首选工具 | 判断理由 |
|---|---|---|
| 双曲面屋面、异形幕墙、自由曲面 | 3ds Max | Creator 的多边形工具拼不出连续曲面,硬拼面数失控 |
| 箱体、圆柱、规则阵列、标准门窗 | Creator | 原生图元直接出,少一次格式转换就少一次丢面风险 |
| 带内圆角、倒角、切角的设备舱 | 3ds Max | Creator 里只能手调顶点,工作量随细节线性增长 |
| 大片地形、地表纹理 | Creator | 地形模块和地形 LOD 是现成的,换软件反而麻烦 |
| 重复小构件(栏杆、灯具、支架) | 3ds Max 建一个 + Creator 实例化 | 造型在 Max 里做细,复制靠实例,内存只留一份 |
具体到判定信号,有五条经验:曲面无法用平面片逼近到肉眼可接受;构件不能拆成箱体、球体、圆柱的组合;需要沿曲线倒角或开异形洞;同一造型要出多个细节等级;方案阶段需要先看效果再定结构。命中两条以上,就归到 3ds Max 那边。
拆件粒度也要定规矩:一个构件一个 3ds 文件,文件名带类型前缀,原点统一放在底面中心。原点放中心不是为了好看,是为了导入 Creator 后按坐标摆放时不用反复试偏移量。命名前缀建议BLD_建筑体、PIPE_管线、EQP_设备、TER_地形,后面重建层级全靠它。
2.3 单位制统一:系统单位才是真实尺寸,显示单位只是安慰
3ds Max 里有两套单位,新手最容易混。显示单位只影响视口里数字怎么标,系统单位才决定几何体的实际大小。默认系统单位是英寸,场景里画一个 3000 的盒子,你以为它是 3000 毫米,实际是 3000 英寸。导入 Creator 后模型大出二十多倍,很多人第一反应是导入比例设错,其实是源头单位没改。
做法是在建任何几何体之前,先把系统单位和显示单位都锁到毫米,Creator 那边也设毫米,两边才对得上。
-- 建模前第一件事:锁死单位,别等导入后返工 units.SystemType = #Millimeters units.DisplayType = #Metric units.MetricType = #Millimeters -- 打印当前单位状态,导出前再核对一次 format "SystemType = %\n" units.SystemType format "SystemScale = %\n" units.SystemScale format "DisplayType = %\n" units.DisplayType这段脚本改的是场景级设置,SystemType决定几何体的真实尺寸基准,DisplayType和MetricType只影响界面标注,SystemScale是系统单位相对英寸的换算因子,打印出来核对,毫米制下它应该是一个小于 1 的换算值而不是 1。脚本放在建模模板文件里,每次新建场景先跑一遍,比事后量尺寸靠谱。
导入 Creator 后还要做一次标定:在模型里找一个已知尺寸的参照,比如 3000 毫米宽的门洞,用 Creator 的测量工具量一遍,偏差超过百分之一就回头查单位链,别在 Creator 里用缩放硬掰,缩放会把材质坐标和 LOD 距离一起带偏。
3. 3ds Max 侧的建模规范:异形捏得出来,还得导得出去
3ds Max 里能建出好看的模型,和能导出干净的 3ds,是两件事。前者靠造型能力,后者靠规范:几何组织模式要统一、布尔要少碰、材质纹理要降级到 Creator 认得的样子。这一章按导出链路倒着讲,先讲哪些东西存不进 3ds,再讲怎么绕开。
3.1 三种组织模式:Mesh、Patch、NURBS 与 3ds 只存网格
3ds Max 组织几何体有三种模式:网格、面片、NURBS。界面里可以混着用,但 3ds 文件格式只认网格,所有面片和 NURBS 在写文件时都要塌陷成三角网格。问题在于塌陷不是无损的:NURBS 的控制点曲线存成 3ds 会丢,面片的连续性在转换后可能出现裂缝,曲面细分密度也会和你眼前看到的不一样。
我的做法是导出前统一转成可编辑多边形,把修改器堆栈清掉,再检查三样东西:面数、法线朝向、孤立顶点。
-- 导出前统一塌陷为可编辑多边形,并输出面数报告 ( local report = #() for obj in selection where superClassOf obj == GeometryClass do ( convertToPoly obj local fc = polyop.getFaceCount obj -- 四边形按 2 个三角形粗算,纯三角面按 1 算 local tri = fc * 2 append report (obj.name + "," + (tri as string)) -- 法线统一朝外,避免导入后黑面 polyop.unifyNormals obj 0 ) report )convertToPoly会塌陷堆栈,执行前先存副本,这是后悔药。polyop.getFaceCount拿的是多边形面数,按四边形折两个三角形粗算,只用于估算量级,精确三角形数在 Creator 里看。polyop.unifyNormals第二个参数 0 表示处理整个对象,法线不统一是导入后出现黑面的头号原因。报告输出成 CSV 粘到表格里,就是后面的简化基线。
3.2 布尔是黑匣子:用样条挤出和子对象编辑替代
布尔减在薄壁、共面、法线反向的位置特别容易出事:模型扭曲、面丢失、多出一堆无用面,而且报错不告诉你哪一步坏了,纯黑匣子。我的原则是能不用就不用,用两个替代方案。
第一个是样条挤出。在墙面上画封闭轮廓,加挤出修改器给厚度,转多边形后和目标体Attach到一起,再用顶点焊接把接缝合上,焊接阈值给 0.1 毫米,别给大,给大了会把相邻的细节顶点也吞掉。第二个是在可编辑多边形里用切割工具:Cut或QuickSlice切出洞口轮廓,删掉洞口面,再用Bridge把两边边线连起来。切圆形物体也一样,用切片平面切,不要用圆柱去减。
管线构件还有个专门技巧。很多管路不需要看到内壁,那就用实心体代替,面数直接省一半。两种做法:圆柱加壳修改器,或者直接用样条渲染成管。前者面数翻倍,后者更划算——样条管的弯曲处插补边数少,移动控制点时形状好调。参数上,渲染卷展栏里勾选视口和渲染可见,Thickness按管径给,Sides给 6 到 8 就够,插值步数 3 到 5,再高肉眼也看不出差别。
3.3 材质与纹理:只留位图,统一 RGBA
材质这块的坑比几何还多。3ds Max 的材质类型很多,大部分标准材质能正确进 Creator,多重/子对象材质要小心处理。导入后材质不会占原来的槽位,而是排在缺省的 0 到 63 之后,从 64 往后接。所以合并进已有数据库之前,先把原工程的材质列表导出来备份,避免编号撞车。
更关键的是纹理的语义差异。3ds Max 里纹理只是材质的一个属性,Creator 里纹理和材质是并列关系,互不从属。两边都只存图片的路径和尺寸信息,不存图片本体,所以贴图必须跟着文件一起走,统一放在同级textures目录。3ds Max 的贴图通道类型很多,凹凸、不透明度、反射都能挂,但只有位图能进 Creator,其他通道导过去就没了。细节要么在 Max 里烘焙进漫反射位图,要么到 Creator 里重建。
还有一条硬限制:Vega 只认 RGBA 格式的图。RGB 图能显示但可能出问题,索引色、灰度更不行。导出前统一转一遍,顺手把超大贴图缩下来。
from pathlib import Path from PIL import Image SRC = Path("./textures") MAX_EDGE = 512 # 单边上限,超过的等比缩 ALLOW = {".png", ".tga", ".bmp", ".jpg", ".jpeg"} for p in SRC.rglob("*"): if p.suffix.lower() not in ALLOW: continue im = Image.open(p) if max(im.size) > MAX_EDGE: im.thumbnail((MAX_EDGE, MAX_EDGE)) # 保持宽高比 im = im.convert("RGBA") # Vega 只认 RGBA out = p.with_suffix(".png") im.save(out) print(f"{out} {im.size} {im.mode}")MAX_EDGE按视角定:近景主立面给 512,中景 256,远景构件 64 到 128 就够。thumbnail是原地等比缩放,不会拉变形。convert("RGBA")是给 Vega 兜底,输出统一 PNG 避免格式歧义。原图保留不删,改尺寸前先备份一份,这是习惯。
3.4 导出脚本:命名就是唯一线索
3ds 文件不存组信息,3ds Max 里的组只是选择用的,导出后全丢。所以命名是导入 Creator 后重建层级的唯一线索,必须在下笔建模时就定好。导出前还要清理:空物体、隐藏物体、冻结物体、辅助线全部排除,只选要导的几何体。
-- 先查本机导出器类名:getExportFileType() -- 按命名前缀逐个导出,一个构件一个 3ds ( local outDir = "D:/proj/export/" local prefix = "BLD_" for obj in selection where superClassOf obj == GeometryClass do ( select obj local f = outDir + prefix + obj.name + ".3ds" exportFile f #noPrompt selectedOnly:true using:ThreeDSExport ) )using:后面的类名随版本不同,可能是3DSExport也可能是ThreeDSExport,先跑一次getExportFileType()看列表里 3ds 对应的名字再填。#noPrompt关掉弹窗,selectedOnly:true只导选中对象。逐个导出而不是整场景一次导,是为了后面某个构件出问题时能单独重导,不用连带返工。
4. 3ds 进 Creator:坐标、层级、材质三处返工与简化收口
导入这一步,很多人以为点完确定就完事,其实真正的活在后头。3ds 进 Creator 有两种走法:直接导入,转换过程会丢面或置换面,需要用转换和复制工具校正;或者先在 3ds Max 里塌陷成纯网格再导,把转换错误压到最低。我一般走第二条,代价是丢了修改能力,换来的是导入结果可预期。
4.1 坐标轴与轨迹平面:导入前先对齐朝向
Creator 的坐标系是 x 水平、y 与 x 正交、z 垂直向上。3ds Max 默认也是 z 向上,但导出 3ds 时轴转换选项不同,导入后模型躺倒的情况很常见。处理办法有两个:在导入对话框里确认轴映射,或者在 3ds Max 里先把模型旋到目标朝向再导出。前者干净,后者粗暴但有效,赶时间时我用后者。
轨迹平面是放置元件的地方,分两部分:三维数据库空间里的平面,和叠在上面的二维网格。左键在轨迹平面上放置元件,网格可显示可隐藏。摆放顺序建议先在顶视图定平面位置,再切到侧视图调高度,比在透视图里拖准确得多。模型原点放在底面中心的好处这时候就体现出来了:位置坐标直接就是落地点,不用心算偏移。
4.2 OpenFlight 层级:3ds 的组信息不会跟过来
FLT 是层次化结构,从根节点往下是组节点、体节点、面节点,点节点在最底层,不出现在层级视图里。这套结构定义了节点之间的树状关系,也决定了遍历效率。3ds 文件没有对应概念,导入后所有东西挂在缺省的 g2 组节点下面,节点名就是模型名,一层平铺。
| 层级节点 | 放什么 | 命名建议 | 是否挂 LOD |
|---|---|---|---|
| 组节点(Group) | 同一栋建筑或同一系统 | GRP_+ 建筑编号 | 否 |
| 体节点(Object) | 单个构件,面合并后一个体 | BLD_/EQP_+ 名称 | 是,LOD 挂在体节点下 |
| 面节点(Face) | 构件的一个面或一组面 | 自动命名,导入后批量改 | 否 |
| 点节点(Vertex) | 顶点,层级视图不显示 | 不单独命名 | 否 |
导入后的第一件事就是重建层级:按命名前缀建组节点,把体节点拖进去;同一构件的多个碎面合并成一个体节点,节点数太多会拖慢遍历;LOD 用专门的 LOD 节点包住同一物体的几个细节版本。第二件事是查材质槽,导入的材质从 64 往后排,确认没有覆盖原有材质。第三件事才是修面:丢失的面用转换工具补,置换的面删掉重连,法线翻转的批量翻回来。
4.3 材质与纹理修复:调色板替换文件是常规操作
3ds 导入 Creator 后纹理不显示是常态,因为路径信息在转换时丢了,只剩下文件名和尺寸的文本记录。修复办法是打开纹理调色板,在列表里找到丢图的条目,点替换文件,指到textures目录下的同名图。批量丢图时按文件名匹配着换,别一条条点,几十个材质能点到手酸。
还有一种兜底方案,适合纹理关系复杂但视角固定的远景建筑:在 3ds Max 里把材质和纹理直接渲染成一张图,回 Creator 里当纹理贴在模型上。代价是丢了 UV 细节,好处是一次搞定,不用逐个修。近景构件别这么干,远看还行,走近就糊。
材质编号也要盯。合并进已有数据库前,先把目标工程的材质列表导出备份,导入后核对新增材质的起始编号,撞车了在 Creator 里改编号,别指望它自动避让。
4.4 简化:九种手段挑一到三种,别全上
实时性是场景仿真的硬指标,交互行走要维持每秒 20 帧以上才不卡顿,面数和纹理尺寸是主要矛盾。简化手段分两边:3ds Max 侧六种,Creator 侧三种。听着多,实际一个模型挑一到三种就够,全上会把视觉质量削穿。
3ds Max 侧:忽略看不见的细节,内壁不必显示就做实心体;忽略视觉影响小的细节,机械件上的内圆角建模成本高、看起来几乎没差别,直接删;用纹理表现细节,铆钉、硬边这类占面的小结构渲染成位图贴上去;用简单模型替代复杂模型,圆柱换三棱柱或四棱柱;在不失精度的前提下缩减段数;删掉对场景效果影响甚微的子对象。
Creator 侧:实例化,屏幕上显示多个相同模型、内存只留一份;纹理降尺寸,128×128 换 16×16;LOD,按视距切换细节等级。
| 指标 | 简化前 | 简化后 | 降幅 |
|---|---|---|---|
| 三角形数量 | 8076 | 1096 | 86% |
| 文件大小 | 1130 KB | 131 KB | 89% |
这组数据是同时用了「忽略细节」和「缩减段数」两种手段的结果,不是九种全上。LOD 切换距离按场景尺度定,参考值如下。
| LOD 级别 | 可见距离 | 面数比例 | 说明 |
|---|---|---|---|
| LOD0 | 0 到 50 米 | 100% | 近景全细节,含倒角和装饰构件 |
| LOD1 | 50 到 200 米 | 40% 到 50% | 去掉装饰件,保留主体轮廓 |
| LOD2 | 200 米以上 | 10% 以下 | 低模或单面片,只保剪影 |
距离阈值不是拍脑袋,按模型在屏幕上的像素高度反推:小于 20 像素的构件,细节已经看不出来,就该切。切换时还要留重叠区间,避免在阈值附近来回跳导致闪烁,重叠给 10% 左右。
简化完要出报告,别靠眼睛估。把 Creator 的统计导出成 CSV,用脚本汇总,超阈值的单独拎出来。
import csv from pathlib import Path LIMIT_TRI = 5000 # 单构件三角形上限 LIMIT_KB = 500 # 单文件大小上限 rows = [] for p in Path("./stats").glob("*.csv"): with p.open(encoding="utf-8") as f: for r in csv.DictReader(f): tri = int(r["triangles"]) # 列名按 Creator 报告实际字段改 kb = int(r["size_kb"]) flag = "OVER" if tri > LIMIT_TRI or kb > LIMIT_KB else "OK" rows.append((r["name"], tri, kb, flag)) rows.sort(key=lambda x: -x[1]) # 按三角形数从大到小排 for name, tri, kb, flag in rows: print(f"{flag:4} {name:30} tri={tri:6} size={kb:5}KB") print("total tri =", sum(r[1] for r in rows))LIMIT_TRI和LIMIT_KB按项目定,园区场景单构件给 5000 三角、500 KB 是偏严的线,主机底盘或主入口可以放宽。排序是为了先看大户,百分之八十的面数通常集中在两三个构件上。字段名要按你导出的报告列名改,别照抄。
5. 常见问题排查:单位、丢面、贴图、布尔、帧率五个翻车现场
这一章是我自己踩过的坑,按出现频率排。每条都按现象、原因、解决三步写,照着查能省不少时间。
5.1 导入后模型大 25.4 倍,或者小得看不见
现象:3ds Max 里量着 3 米高的墙,进 Creator 后变成 76 米,或者反过来缩成巴掌大。
原因:系统单位没改,默认英寸直接建模,导出时又按毫米解释,中间差了 25.4 倍。显示单位改过不代表系统单位改了,这是最容易骗过眼睛的地方。
解决:建模前跑一遍单位脚本,把units.SystemType设成毫米。已经建完的模型,在 3ds Max 里用units.SystemScale核对换算因子,再整体缩放到正确尺寸后塌陷。导入 Creator 后拿已知尺寸的参照物量一遍,偏差超过百分之一就回头查,别在 Creator 里缩放硬掰。
5.2 NURBS 或面片转 3ds 后缺面、破洞、法线翻转
现象:3ds Max 里看是完整曲面,导入 Creator 后缺一块,或者一片漆黑。
原因:3ds 只存网格,NURBS 控制点曲线和面片连续性在塌陷时丢失;法线不统一也会让面朝内,渲染出来就是黑的。
解决:导出前统一convertToPoly,跑polyop.unifyNormals统一法线,再用polyop.getFaceCount核对面数有没有异常减少。曲面上有裂缝的,在 Max 里用顶点焊接补,阈值 0.1 毫米。导入 Creator 后丢的面用转换和复制工具补,别手动一个个连。
5.3 贴图全丢,材质变成纯色
现象:模型导进来是灰的,纹理调色板里全是丢失标记。
原因:3ds 只存图片路径文本,不存图片本体,换台机器或者挪个目录,路径就断了。另外 Vega 只认 RGBA,RGB 图即使找回来也可能不显示。
解决:贴图统一放同级textures目录,跟着模型文件一起走;导出前跑批量转 RGBA 的脚本;导入后在纹理调色板里按文件名批量替换。远景构件实在修不动,就在 Max 里渲染一张贴图回 Creator 贴。
5.4 布尔之后的模型有黑面、破面、面数暴涨
现象:布尔减切完,洞口边缘出现黑面,模型里多出一堆看不见的碎面,面数是切之前的两三倍。
原因:布尔在薄壁、共面、法线反向的位置算法容易出错,出错后不报错,只留下烂面。这类问题排查起来像黑匣子,很难定位是哪一步坏的。
解决:改用样条挤出加子对象编辑,或者用切割工具切洞口再 Bridge。必须用布尔时,先给薄壁加厚,切完立刻焊接顶点、统一法线、删孤立面,别留到导入后再修。
5.5 面数降了帧率没涨,或者远处模型闪烁
现象:简化报告显示面数降了八成,挂到驱动端帧率只涨了一点;或者视距拉远拉近时,模型在某个距离反复闪。
原因:重复构件没做实例化,内存里还是 N 份;纹理尺寸没降,显存带宽先撑不住;LOD 切换距离没有重叠区,在阈值附近来回跳。
解决:重复构件在 Creator 里用实例化,内存只留一份;纹理按视距分级降到 16×16 到 64×64;LOD 切换距离留百分之十的重叠。透明面太多的场景还要控制透明材质数量,排序开销比面数更伤帧率。
6. 交付前跑一遍:三关检查和一条我固定走的流水线
这套流程走到现在,我把检查拆成三关,每关都有硬指标,不达标不往下走。第一关在 3ds Max 导出前:系统单位是不是毫米、几何体是不是全部塌陷成多边形、贴图是不是统一转成 RGBA 并缩到边长上限以内、命名前缀是不是齐全。第二关在 Creator 导入后:层级有没有按前缀重建、材质编号有没有撞车、单构件三角形数和文件大小有没有超线、法线朝向对不对。第三关在挂 Vega 之前:LOD 切换距离有没有重叠、重复构件有没有实例化、ADF 里引用的 FLT 路径是不是相对路径。
# 关卡一:贴图统一转 RGBA 并限尺寸 python check_textures.py --dir ./textures --max-edge 512 # 关卡二:汇总 Creator 统计报告,超阈值报警 python sum_stats.py --dir ./stats --limit-tri 5000 --limit-kb 500 # 关卡三:交付目录里不该出现的临时文件 find ./deliver -type f \( -name "*.max" -o -name "*.3ds" -o -name "*.bak" \) -print三条命令一条条跑,第一条管贴图格式和尺寸,第二条管面数和体积,第三条防止源文件混进交付包。参数里的阈值按项目定,我一般把单构件三角形上限定在 5000,主入口和地标放宽到 8000,超了就回去简化,不讨价还价。
| 关卡 | 检查项 | 通过线 |
|---|---|---|
| 导出前 | 系统单位 / 塌陷 / 贴图格式 | 毫米制,全多边形,全 RGBA |
| 导入后 | 层级 / 材质编号 / 单件面数 | 按前缀分组,无撞号,单件不超线 |
| 挂驱动前 | LOD 重叠 / 实例化 / 路径 | 重叠 10%,重复件实例化,相对路径 |
从那以后我每次导 FLT 前都强制把这三关走一遍,哪怕只改了一个构件。血泪经验是:返工最贵的从来不是建模,是导入之后发现单位错了、贴图丢了、层级平了,然后从头再来一遍。希望帮到你。
本文还有配套的精品资源,点击获取