我遇到的问题是我使用ninjaripper(用于从游戏中提取3d模型的脚本)从游戏中导入的极大对象(在物理尺寸方面而非多数等)。当我打开包含这些大对象的文件时,对象仅在左侧正交视口中呈现。无论我在所述视口上选择了哪种渲染模式(线框,边缘面等),所有其他视口/视图都不显示几何体。在透视图中也看不到对象。当我取消隐藏单个对象(正常大小)之外的所有项目时,我能够在所有视口中看到对象,包括透视视口。当我再次取消隐藏时,之前可以看到的物体消失了。当切换到透视图时,当存在这些极大的物体时,'viewcube'会因未知原因消失。放大或缩小透视视口也会导致视图消失。这是我到目前为止唯一一个显示这些问题的场景,我的所有图形驱动程序都是最新的(下面列出的规格)。场景包含3602个对象,有1,957,286个多边形和1,508,550个顶点。
我尝试用手移除所有非常大的物体,之后可以在2个视口中看到剩余的(正常尺寸)物体(左上角和右上角视口确实正确渲染)。 删除所有超大型对象后的视口:
我尝试重置场景,之后我将包含所有“正常大小的对象”的场景合并到一个空场景中。这导致所有视口正确渲染对象。但是,在保存文件并重新打开保存的文件后,4个视口中的2个没有像删除除“正常大小”对象之外的所有对象一样呈现对象。
我的问题是:我应该如何处理这些非常大的导入对象,以修复它们导致的视口渲染问题?
我写了一个简单的maxscript代码来打印出场景中最大对象的最大大小,导致值为2.6 * 10 ^ 38 [通用单位],根据我的计算对应一个值6.6 * 10 ^ 36 [米],总结:极大。 (我怀疑ninjaripper脚本或将ninjaripper生成的文件导入3ds max的脚本有某种错误导致某些顶点具有极大的位置值)。当我切换到'实用程序'中的度量点击并按 Ctrl + A 来选择场景中的所有对象(包含所有对象的场景,包括极大的对象), 3ds max因大对象大小而崩溃(错误消息:“应用程序错误 - 发生错误,应用程序现在将关闭。自上次保存以来没有发生任何场景更改。”)。
我可以编写一些maxscript代码,删除所有大于特定大小的对象(例如:10 ^ 5 [米])。然而,正如前面提到的,由于某种原因,这并没有完全解决问题(在仅使用“正常大小”对象保存场景并重新打开场景后,4个视口中只有2个正确渲染对象。我运行了测量代码在删除了所有非常大的对象以检查我是否确实没有跳过其中一个大对象之后,场景中最大对象的最大大小,结果是值:121.28 [通用单位](对应于对象: “Mesh_3598”)这是一个相对正常的大小,但是我的4个视口中有2个甚至在删除大对象后也没有渲染我的对象(仅当选择左正交视图时,它们才能在2个视口中看不到渲染部分当时)。
检查最大对象的代码(也打印出此对象的最大大小):
global_max=0
largest_obj=undefined
for obj in geometry do(
obj_max_x = (obj.max.x-obj.min.x)
obj_max_y = (obj.max.y-obj.min.y)
obj_max_z = (obj.max.z-obj.min.z)
local_max = amax(#(obj_max_x, obj_max_y, obj_max_z ))
if local_max > global_max do
global_max = local_max ; largest_obj = obj
)
messagebox ("global max = " + global_max as string)
messagebox ("largest obj = " + largest_obj as string)
请参阅以下链接,了解我提到的3ds max场景文件: https://drive.google.com/open?id=1bAilmaHAXDr4WuD8gGS4piQfPzzJM9MH
非常感谢任何建议/帮助。非常感谢你!
系统规格:
-Autodesk 3ds max 2018 x64
-Windows 10 PRO x64
-i5 6600k @ 3.5ghz
-msi z170a game m7 - socket 1151 - atx
-coolermaster g750m -750watt
-msi radeon r9-390x games -8gb
-noctua NH-D15
-kingston hyper-x fury black 16gb-pc-21300-dimm-4x4gb @ 2666mhz
答案 0 :(得分:1)
事实证明,极大的对象确实导致了视口渲染错误。删除最大尺寸为100000 [通用单位]的所有对象后,视口渲染错误消失了。我怀疑这个问题是由于对象大小非常大而导致对象不在视口的远和近平面之间。