想象你是一位城市营造大师,要在虚拟世界搭建一座“十亿细节之城”——每一栋砖楼上的裂缝、屋顶铁艺栏杆的曲线、墙面霓虹招牌的每一颗灯珠,都必须清晰可辨。用传统方法,你得像一个苦命的模型工坊主:把同一栋建筑做成三套模型——近距离精装版、中距离简装版、远距离轮廓版。城市越宏伟,这套“复制模型”的工作量就越绝望。 UE5 的 Nanite,就像一位拥有“按需建造”超能力的智慧营造师:他从不预先打磨所有模型,而是用一双洞察目光瞬间判断“人的视线此刻落在哪里”,只在目光聚焦处精雕细琢,视线之外则打包成轻量街区盒子。山远看是青色轮廓,走近才现出松石纹路——所有细节自然生长,无需你手工切换。这就是 Nanite 虚拟几何的魔法:把“建造”变成“感知”,把几何体交给智能聚类与剔除系统调度,让影视级资产以实时帧率走进游戏、元宇宙和数字孪生。
掌握 Nanite,等于掌握了实时渲染效率的钥匙:你可以在不牺牲艺术细节的前提下交付交互场景,这正是元宇宙时代 3D 内容生产者的核心竞争力。
可视化演示
动态展示Nanite网格聚类与可见性剔除技术:摄像机旋转时实时剔除不可见簇,仅渲染可见多边形,对比传统LOD全量渲染的优势。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Nanite虚拟几何体系统 可见簇 剔除簇 摄像机 LOD环 Clusters→Cull→Render 实时聚类剔除无需手动LOD
传统模型困境
想象你开了一家“建筑模型手工坊”,甲方递来一座古城的设计图,要求每一根梁柱都不能含糊。为了同时满足近看和远看,你不得不给每栋建筑做三套模型:近距离精装、中景简装、远视轮廓。古城有上千栋建筑,雕刻师们很快就累垮了。这就是传统实时渲染的 LOD(Level of Detail,细节层次)人工地狱。
过去,渲染引擎每一帧只能绘制有限数量的三角形。为了让远景不超预算,美术必须手工制作多档模型;而且模型切换时容易出现“跳变”,玩家走近一座塔,塔的轮廓会突然“抖”一下。更让人头疼的是,影视级资产动辄数千万三角形,直接塞进实时场景几乎不可能。面数限制与手调 LOD 的成本,成了高质量数字内容进入交互世界的两堵高墙。
传统 LOD 的做法是按摄像机距离分档:距离越近,使用越精细的模型。美术需要预先为每个网格制作 L₀、L₁、L₂ 等档位,再手动设置切换距离。这个过程既不精确,又难以维护——只要镜头参数或场景范围一变,所有阈值都要重新调。
手工坊老板每天最怕听到“甲方把镜头拉近了一点”,因为这意味着所有建筑要重新雕刻一版。Nanite 的到来,就是给这座手工坊送来一位智能营造师——他不再需要三套模型,而是用一套虚拟几何方案解决所有距离问题。
- L(d) 模型档位L(d) 是“距离 d 时使用哪一档模型”的选择函数,L₀ 最精细,L₂ 最粗略。
- d₀ 与 d₁ 切换阈值d₀ 是精装与简装的分界距离,d₁ 是简装与轮廓的分界;这两个值由美术手工设定。
- 分档规则距离小于 d₀ 时选择精装 L₀,距离超过 d₁ 时降为轮廓 L₂,中间区间使用简装 L₁。
虚拟几何概念
营造大师接手新任务,没有急着把整座城堆到工地上。他先铺开一张巨大的“虚拟蓝图”:城市拥有无限细节的设想,但真正的施工只发生在人的目光落点。远处的地块先用轻量标注,近处的街区才动工精建。这种“先有蓝图、按需实建”的思路,正是 Nanite 虚拟几何的哲学。
Nanite 是虚幻引擎 5 的虚拟几何体系统。传统方式里,场景中的网格体是一份份完整的三角形清单,必须一次性提交给 GPU;而 Nanite 将三角形组织成可以按需取用的虚拟资源,GPU 在渲染时只获取“视线当前需要的”那一小块几何,而不是把整座城市倾倒进显存。这从根本上突破了传统模型的面数限制。
虚拟网格体的核心是“流送”:几何数据像自来水一样,镜头转到哪里,水就流到哪里。场景可以包含上百亿三角形,但真正被 GPU 处理的可能只有几千万。这也意味着,ZBrush 里雕刻出来的数千万面高模,可以直接拖进引擎,而不用先减面、重拓扑、做 LOD。影视级资产与实时交互之间,第一次有了一座可以自由通行的桥。
物体在屏幕上占的面积越大,越值得用更多三角形描述;面积越小,越应该用简化几何代替。用屏幕覆盖面积可以表达这个直觉:
蓝图比实体工程轻得多——城市在“观念”里先完整存在,镜头走到哪里,实建到哪里。这就是虚拟几何的魔力:细节不必全部真实存在,只需要在需要时“恰好出现”。
- A_screen 屏幕覆盖面积物体投影到屏幕后占据的像素量,它决定了 GPU 需要投入多少几何细节。
- A_world 世界空间表面积物体在三维世界中的真实表面大小,等于构成它的所有三角形面积之和。
- k 投影常数由相机视野角、分辨率共同决定的缩放系数,它把世界单位换算成屏幕单位。
- d² 距离平方距离越远,覆盖面积按平方级迅速缩小,所以远处的簇可以用更粗的近似。
内部网格体聚类
营造大师把城市划分成“行政区包”:同一条街道上的建筑,用料和施工尺寸往往接近,直接打包成一个大型包裹。搬运时装车只算一件,到了现场开包才能看到里面的砖瓦。包裹越多,管理越高效——这就是 Nanite 内部网格体聚类(Cluster)的雏形。
Nanite 不把每个三角形当成独立个体,而是把空间上相邻的三角形组织成一个个簇(Cluster)。簇之间再按空间关系逐级合并成父簇,最终形成一棵“几何城市树”。渲染时以簇为检索单位,如果整簇可以被简化或剔除,GPU 就完全不需要关心簇内的几十万个三角形。
底层实现上,叶节点簇保存原始三角形,父簇保存合并后的包围球与中心坐标。当渲染请求到达一个父簇时,系统先估算“这簇在屏幕上能带来多少误差”:误差小,直接用父簇替代;误差大,就递归展开子簇。这套层次结构是 Nanite 全部优化动作的地基——可见性剔除和自动 LOD 都在这棵树上行走。
合并簇时需要保证父簇的包围球能完整包住子簇,避免“漏出边界”造成的渲染瑕疵:
包裹是否拆开,取决于客人离得多远——远时整包放下,近时逐件陈列。城市因此永远保持轻便,无论它藏着多少细节。
- R_p 父簇半径合并后新簇的包围球半径,它决定这一簇整体占据的空间范围。
- R_a 与 R_b 子簇半径两个子簇各自原有的包围半径,合并时要把它们都纳入新球。
- dist 中心距离子簇中心到父簇中心的距离,距离越大,所需的外扩半径越大。
可见性剔除
市政工程的最后一道工序是灯光亮化:不是全城每栋楼都亮灯,而是游客目光能看到的立面才亮。高楼背后的小巷、楼顶背面的排水管,根本不用装灯。聪明的营造师会把资源全部留给“看得见的立面”。
Nanite 在渲染前会做多层可见性剔除:视锥剔除(不在摄像机取景框内的簇直接丢弃)、遮挡剔除(被前面建筑挡住的簇不渲染)、背面剔除(背对镜头的三角形面不绘制)。这些技术传统引擎也有,但 Nanite 的特别之处在于剔除的单位是“簇”而非单个三角形——一次剔除就能丢掉数十万三角形,效率极高。
具体实现中,GPU 会先对每个簇的包围球做视锥测试,再利用上一帧的深度缓冲做硬件遮挡查询(HZB),快速判断簇是否被完全遮挡。在密集的几何环境中,场景里大部分簇其实都处于“看不见”的状态,提前剔除它们能让光栅化单元腾出大量算力给真正可见的几何。
最终进入绘制阶段的簇数可以用简单公式表达:
灯光师从不点亮看不见的死角——Nanite 也如此。它把所有算力都留给观众眼前的“街道立面”,让城市的每一份光都花在刀刃上。
- C_vis 可见簇数经过全部剔除后仍然需要绘制的簇数量,它直接决定 GPU 的负载。
- C_frustum 视锥外簇位于摄像机取景范围之外的簇,它们必然不可见。
- C_occluded 遮挡簇虽然位于视锥内,但被其他几何体完全挡住的簇。
- C_back 背面簇表面的法线方向背离摄像机的簇,光栅化时可以直接丢弃。
自动LOD细节
在茶馆里看城,整座城隔着一层细雨,看不清每片瓦,也无需看清。走近茶馆门口,石板路的裂纹、门环的铜绿便自动“生长”出来。这不需要你准备两套图纸——Nanite 会根据你的视线距离,自动决定该呈现多少细节。
传统 LOD 是“分档跳变”,Nanite 则是连续 LOD。它不再有固定档位,而是在渲染时按像素误差持续细分:一个簇在屏幕上占的像素太少、误差低于 1 像素时,就用父簇近似;否则递归进入子簇,直到误差满足要求。美术不需要为每块石头做多套模型,高精度扫描资产和雕刻资产可以直接进入项目。
这套机制由屏幕空间误差驱动。每个簇的合并误差是世界空间的一个数值(如包围球半径),乘以投影系数后转换为“屏幕上差了多少像素”。距离越远,同样的误差在屏幕上越小,于是可以放心使用简化簇;距离越近,误差变大,系统自动展开更细的子簇。
城市从高空俯瞰是一座灰色棋盘,脚踏实地才能见每一颗石子的纹理。Nanite 让“远看成岭侧成峰”自动发生,不再有人手工描画每一张图纸。
- ε_pixel 屏幕像素误差用简化簇代替真实三角形时,画面上最多会产生的像素偏移量。
- ρ 投影常数与像素密度、视野角相关的系数,负责把世界空间数值换算成屏幕空间数值。
- E_world 世界空间误差父簇合并子簇后保留的最大几何偏移,如包围球半径。
- d 相机距离分母上的距离说明误差随距离衰减,所以远处可以放心简化、近处必须精细。
渲染管线机制
营造大师有两支施工队:精工班擅长处理细小构件,但每个构件都要单独验收,成本高;机械班擅长整体浇筑,速度快但精度有限。大师的策略很简单:大构件交给机械班,细部构件交给精工班,两队同时开工,互不挤占。
Nanite 采用的正是混合光栅化管线。大三角形(屏幕覆盖面积较大)交给硬件光栅化单元处理,速度快;微小三角形(尤其是亚像素级)交给软件光栅化路径处理,避免硬件光栅化为它们付出过高的固定开销。这个分工让 GPU 的并行吞吐量大幅提升。
此外,Nanite 还是典型的 GPU Driven Rendering:GPU 直接生成绘制指令,CPU 不必逐个对象提交 DrawCall,瓶颈从 CPU 转移到 GPU,而 GPU 恰好擅长并行处理。纹理层面,Nanite 还会与虚拟纹理系统配合,只加载可见部分需要的贴图,进一步控制内存。
光栅化路径的选择可以根据三角形在屏幕上的覆盖面积决定:
施工队各司其职,大铸件与细构件同时推进,城市一夜之间拔地而起。引擎不再“一刀切”渲染,而是让每种三角形走最合适的高速通道。
- S 屏幕覆盖面积三角形投影到屏幕上占据的像素数,是路径选择的关键指标。
- τ 切换阈值经验调优得到的面积阈值,通常与硬件特性相关。
- HW/SW 路径选择S 较大时硬件光栅化更高效,S 极小时软件光栅化能避免固定开销。
项目应用实战
按需建造的魔法也有边界。营造师可以让整座古城瞬间立起来,但没法让街道上的舞者(动态角色)和旗帜(布料)也“原地施工”——它们需要物理反馈与动画形变,必须采用传统“活体工程”。
在实际项目中,Nanite 最适合静态网格:建筑、岩石、雕塑、遗迹,这些不变形的几何体可以放心开启。暂不适用或受限的场景包括:骨骼网格体角色、布料与毛发、透明材质、顶点动画网格。另外,Nanite 对全局位置变化(移动整体网格)和某些材质特性有限制,需要区分处理。
实践中建议把静态几何统一开启 Nanite,动态物体继续使用传统 LOD 管线;配合 World Partition 进行大世界分块加载,用虚拟纹理控制贴图流送。同时要为 GPU 划定预算,避免场景无限膨胀导致帧率失控。以下是一个常用的三角形预算公式:
营造师清楚城市里哪些部分可以“预制”,哪些必须“即时演出”。聪明的资源分配,才能让十亿细节之城真正跑起来,成为元宇宙中可供万人同游的数字世界。
- N_tri 三角形预算当前场景可提交给 Nanite 的最大三角形数量。
- T_frame 帧预算单帧 GPU 时间预算,60 FPS 对应约 16.6 毫秒。
- T_other 其他开销光照、阴影、后处理等特性占用的 GPU 时间,必须先从预算中扣除。
- C_tri 单三角形成本每个三角形的平均光栅化与着色成本,依据硬件性能评估得到。
AI 应用场景
开放世界游戏环境搭建
阶段:资产生产与场景优化
解决的问题:传统开放世界需要美术为每栋建筑、每座山体手工制作多套 LOD 模型,工作量巨大;Nanite 让美术直接把雕刻级资产放入场景,自动完成细节调度,大幅缩短场景搭建周期。
具体案例:某开放世界项目需要搭建一座包含数百栋中世纪建筑的主城。过去团队要花三周为建筑做减面与 LOD;启用 Nanite 后,ZBrush 高模直接导入,主城一周内完成,且远处建筑自动合并为轻量簇,近处建筑保持砖缝级细节。
数字孪生与元宇宙城市
阶段:三维数据集成与实时可视化
解决的问题:智慧城市项目使用摄影测量生成数亿三角形的真实建筑模型,传统引擎无法直接承载;Nanite 以聚类与剔除机制按需渲染,让整座城市的数字孪生体在网页端和 VR 中流畅运行。
具体案例:某元宇宙平台将一座 20 平方公里城区的倾斜摄影数据导入 UE5,总三角形量超过 20 亿。开启 Nanite 后,用户在街区漫游时帧率稳定在 60 FPS,只有视野内的建筑以高精度加载,其余部分自动以簇轮廓承载。
虚拟制片与影视预演
阶段:实时预演与镜头调度
解决的问题:影视预演需要导演在引擎中自由运镜,传统 LOD 在镜头快速推拉时会出现明显跳变;Nanite 的连续 LOD 让镜头从大全景推到角色特写时,场景细节平滑生长,无需美术预先准备多级模型。
具体案例:某科幻剧组在 LED 虚拟影棚拍摄,背景是精度极高的外星遗迹。美术将扫描资产直接放入 UE5 场景,摄像机运动时遗迹细节无缝过渡,LED 屏幕上始终呈现正确的视差与清晰度,省去了大量现场模型替换工作。
Python 演示
import mathimport random class Cluster: """Nanite式聚类:一个街区包""" def __init__(self, tris, center, radius, children=None): self.tris = tris self.center = center self.radius = radius self.children = children or [] @classmethod def merge(cls, a, b): """把两个邻近簇合成父簇""" cx = (a.center[0] + b.center[0]) / 2.0 cy = (a.center[1] + b.center[1]) / 2.0 r = max(a.radius + math.hypot(a.center[0] - cx, a.center[1] - cy), b.radius + math.hypot(b.center[0] - cx, b.center[1] - cy)) return cls(a.tris + b.tris, (cx, cy), r, [a, b]) class VirtualMesh: """简化版Nanite虚拟网格体:聚类树 + 自动LOD + 可见性剔除""" def __init__(self, size=64.0, count=100, seed=7): random.seed(seed) self.tris = [] for _ in range(count): x = random.uniform(0.0, size) y = random.uniform(0.0, size) self.tris.append((x, y, x + random.uniform(1.0, 3.0), y, x, y + random.uniform(1.0, 3.0))) self.root = self._build(sorted(self.tris, key=lambda t: t[0])) def _center(self, t): return ((t[0] + t[2] + t[4]) / 3.0, (t[1] + t[3] + t[5]) / 3.0) def _build(self, tris): if len(tris) <= 4: centers = [self._center(t) for t in tris] cx = sum(c[0] for c in centers) / len(centers) cy = sum(c[1] for c in centers) / len(centers) r = max([math.hypot(c[0] - cx, c[1] - cy) for c in centers] + [0.5]) return Cluster(tris, (cx, cy), r) mid = len(tris) // 2 return Cluster.merge(self._build(tris[:mid]), self._build(tris[mid:])) def collect(self, cam_x, cam_y, lod_d=40.0, max_d=90.0): """按镜头位置收集绘制指令:远处画包围盒,近处画真实三角形""" calls = [] self._walk(self.root, cam_x, cam_y, lod_d, max_d, calls) return calls def _walk(self, c, cam_x, cam_y, lod_d, max_d, calls): d = math.hypot(c.center[0] - cam_x, c.center[1] - cam_y) if d > max_d: # 可见性剔除:太远整簇丢弃 return if c.children and d > lod_d: # 自动LOD:远处直接用包围盒替代 calls.append(("bbox", c.center, c.radius)) return if not c.children: # 叶节点:输出真实三角形 calls.append(("tri", c.tris)) return for child in c.children: self._walk(child, cam_x, cam_y, lod_d, max_d, calls) def main(): mesh = VirtualMesh() for cam_x in (10.0, 32.0, 55.0): calls = mesh.collect(cam_x, 32.0) tris = sum(len(t) for kind, *rest in calls if kind == "tri") boxes = sum(1 for kind, *rest in calls if kind == "bbox") print("cam_x=%5.1f -> tris=%3d bboxes=%2d calls=%2d" % (cam_x, tris, boxes, len(calls))) if __name__ == "__main__": main()
self.root = self._build(sorted(self.tris, key=lambda t: t[0]))按 x 坐标排序后递归建树,让空间近的三角形自然落入同一分支。if len(tris) <= 4:叶节点最多 4 个三角形,达到阈值就停止细分,形成聚类基层。return Cluster.merge(self._build(tris[:mid]), self._build(tris[mid:]))左右子簇递归合并,构成“街区套街区”的层次树。if d > max_d: return距离超过视野范围,整簇直接剔除,模拟可见性剔除。if c.children and d > lod_d:有子簇且距离足够远时,用包围盒替代真实三角形,模拟自动 LOD。calls.append(("bbox", c.center, c.radius))只记录包围盒中心与半径,绘制成本远低于展开所有三角形。calls.append(("tri", c.tris))近处叶节点输出真实三角形列表,保证画面细节。mesh.collect(cam_x, 32.0)每次调用只返回当前镜头需要的绘制指令,体现“按需取用”的虚拟几何思想。
常见误区
误区“Nanite 不是能吃下几十亿三角形吗?那我随便往场景里堆模型,反正有它在兜底。”
正解Nanite 解决的是“几何调度”问题,而不是“凭空消除开销”。GPU 仍然需要处理大量簇的遍历、剔除和光栅化,占用显存与带宽。就像营造师再厉害,场地也不可能无限大——你依然需要控制场景规模、流送距离和预算。
为何常见:Nanite 的宣传语“数十亿多边形”让人误以为它是无限容量服务器,忽略了底层仍有硬件上限。
误区“既然 Nanite 自动生成 LOD,那我所有资产都用一个最高精度版本就行,不用再关心 LOD。”
正解Nanite 确实免手工 LOD,但它主要覆盖静态几何体。骨骼网格体、布料、毛发、顶点动画等仍走传统管线,仍然需要 LOD 或简化策略。此外,某些只支持 Nanite 静态渲染的资产一旦需要动态形变,就会失效。
为何常见:人们容易把“自动 LOD”等同于“所有 LOD 需求消失”,忽略了动态几何的物理与动画约束。
误区“Nanite 渲染的是普通网格,那透明材质、折射、顶点色、双面显示应该都能随便用。”
正解Nanite 目前对透明材质遮挡剔除支持有限,带某些材质特征的网格可能无法进入 Nanite 路径。项目实践中需要提前检查材质类型,为植被、玻璃、水波等效果保留传统管线。
为何常见:现代引擎功能高度集成,用户默认“新功能应该兼容一切旧特性”。
误区“我把角色的骨骼网格也勾上 Nanite,它是不是就能自动优化动画角色?”
正解Nanite 目前以静态网格为主,骨骼动画、布料模拟、肌肉形变等动态场景需要传统渲染管线。移动的箱子、门的开合可以支持,但大规模动态物体仍需使用传统 LOD 与骨骼网格优化方案。
为何常见:Nanite 名字听起来像“万能几何引擎”,加上演示视频里全是静态场景,新手容易忽略它的设计边界。
面试题
Q1. Nanite主要解决了实时渲染中的什么难题?
- A.动画播放卡顿抖动
- B.高模与手调LOD瓶颈← 正确答案
- C.AI寻路导航失准
- D.光照烘焙耗时过长
答案:B。Nanite 的诞生正是为了解决“高精度模型无法实时渲染”和“LOD 需要手工制作”两大痛点。动画卡顿、AI 寻路、光照烘焙都是其他系统的问题,与 Nanite 核心目标无关。
Q2. 内部网格体聚类的核心思想是?
- A.将三角形按邻近结簇← 正确答案
- B.将纹理按区域结块
- C.将音频按节奏打包
- D.将CPU指令预取缓存
答案:A。Nanite 聚类把空间相邻的三角形合并成簇,再用簇组成层次树。纹理分块、音频打包、CPU 缓存都是不同领域的概念,不属于网格聚类范畴。
Q3. Nanite的可见性剔除包含哪些?
- A.视锥剔除与遮挡剔除← 正确答案
- B.背面朝向的簇剔除← 正确答案
- C.距离剔除与包围盒剔除← 正确答案
- D.自定义材质颜色剔除
答案:ABC。视锥剔除去掉画面外簇,遮挡剔除去掉被挡住簇,背面剔除去掉背对相机方向的三角形,距离剔除配合包围盒合并处理远簇,共同组成可见性优化。材质颜色属于着色阶段,与几何剔除无关。
Q4. Nanite自动LOD主要依据什么来做细分决策?
- A.物体到屏幕的像素覆盖误差← 正确答案
- B.纹理贴图的压缩率
- C.顶点的颜色亮度
- D.物理碰撞体重叠率
答案:A。Nanite 以屏幕空间误差为标准——一个簇在屏幕上造成的像素偏差越小,越可以用简化表示。纹理压缩、顶点颜色、物理碰撞都不是几何细分决策的依据。
Q5. Nanite最适合处理哪类资产?
- A.静态建筑与岩石场景← 正确答案
- B.骨骼角色舞蹈动画
- C.布料披风飘动模拟
- D.毛发逐根物理模拟
答案:A。Nanite 面向静态网格体,建筑与岩石不会形变,非常适合。骨骼、布料、毛发都需要动画与物理形变,必须走传统管线。
Q6. Nanite中软件光栅化的主要作用是?
- A.高效绘制微小三角形← 正确答案
- B.烘焙全局光照阴影
- C.生成体积云雾噪声
- D.压缩贴图资源文件
答案:A。当三角形小到接近亚像素级别时,硬件光栅化固定开销不值得,软件光栅化反而更高效。全局光照、体积云、贴图压缩属于其他渲染环节。
Q7. 在Nanite混合光栅化中,硬件光栅化更适合?
- A.屏幕覆盖面积较大的三角形← 正确答案
- B.屏幕覆盖面积较小的三角形
- C.完全不覆盖屏幕的三角形
- D.仅覆盖单个像素的三角形
答案:A。大三角形在屏幕上覆盖大量像素,硬件光栅化单元能高效并行填充;微小三角形数量多且遍历开销大,适合交给软件光栅化处理。
Q8. Nanite目前存在哪些技术限制?
- A.对蒙皮网格体支持有限← 正确答案
- B.透明材质支持受限← 正确答案
- C.面数开销完全消失
- D.需要虚拟纹理配合← 正确答案
答案:ABD。蒙皮网格与透明材质仍需要用传统管线;虚拟纹理负责贴图的按需加载,是 Nanite 大场景流畅运行的重要搭档。面数开销不会“完全消失”,只是被智能调度管理起来。
Q9. 与传统LOD相比,Nanite自动LOD的特点有?
- A.传统LOD需要手工制作多档模型← 正确答案
- B.Nanite按屏幕误差连续细分← 正确答案
- C.传统LOD无需美术介入
- D.Nanite可完全替代所有优化
答案:AB。Nanite 的连续 LOD 让美术无需手工制作多档模型;传统 LOD 恰恰非常依赖美术介入。Nanite 也不能替代所有优化,动态物体和材质问题仍需处理。
Q10. 在项目中启用Nanite之前,应该考虑?
- A.场景是否以静态几何为主← 正确答案
- B.是否大量使用骨骼动画← 正确答案
- C.是否依赖透明材质效果← 正确答案
- D.是否需要无限制的面数预算
答案:ABC。Nanite 的优势建立在静态几何之上,动态骨骼和透明材质需要传统管线配合。面数预算不可能无限,项目仍要评估性能开销。