我正在尝试根据xyz坐标数据列表创建3d模型。我创建了一个Python脚本来创建一个小球体,然后将其复制到每个数据点。不幸的是,该程序花费了不合理的长时间。我计算过,最多可能需要8天才能完成模型的创建。我什至尝试使用Google Compute Engine运行该脚本,但仍然会花费太长时间。无论如何,有没有在合理的时间范围内建立这么大的模型?我愿意尝试Blender之外的其他程序。动画公司如何创建巨大的模型?必须有某种方法,对吧?
以下是用于创建模型的Python脚本:
import bpy
import os
radius = 0.0005
scale = 0.001
bpy.ops.object.select_all(action='DESELECT')
bpy.ops.mesh.primitive_uv_sphere_add(size=radius)
sphere = bpy.context.object
filename = 'points.xyz'
directory = 'C:\\Users\\User1\\Desktop'
fullpath = os.path.join(os.getcwd(), filename)
print("Creating OBJ file")
sphereCount = 1
def makeSphere(x,y,z):
global sphereCount
print("Creating Sphere #" + str(sphereCount))
ob = sphere.copy()
ob.location.x = x
ob.location.y = y
ob.location.z = z
bpy.context.scene.objects.link(ob)
sphereCount += 1
with open(fullpath,"r") as f:
for line in f:
values = line.split()
x = values[0]
y = values[1]
z = values[2]
makeSphere(scale*float(x),scale*float(y),scale*float(z))
bpy.context.scene.update()
#Export as OBJ file
filename = 'finalObject.obj'
directory = '/home/user1'
fullpath = os.path.join(os.getcwd(), filename)
print("Exporting OBJ");
bpy.ops.export_scene.obj(filepath=fullpath)
我在网上找到了这个问题(https://blender.stackexchange.com/questions/48161/object-made-of-large-number-of-spheres),并尝试了这种方法,但是它比复制每个领域要慢。
答案 0 :(得分:2)
动画公司如何创建巨大的模型?必须有某种方法,对吧?
他们可能不会创建具有这么多对象的模型。 (5000万个球体?认真吗?)
当他们这样做时,他们可能会使用内部专家软件工程师开发的专有软件和技术……以及真正强大的计算资源……而且可能还需要很长时间。
话虽如此,我建议调查以下内容:
在构建模型或导出模型时是否出现问题? (我假设您正在导出模型,是因为以后要导入它。因此,当您使用使用模型时,知道问题出在哪里也将对您有所帮助。)
您是否有足够的(物理)内存来在内存中创建模型?如果不这样做,那么问题可能出在垃圾回收器和虚拟内存之间。
可以将对象数量减少到更容易处理吗?
您可以在要复制的UV球上调整参数吗?原始UV球是默认情况下具有32个线段和16个环的网格。 (32 x 16 x 5000万将是数量巨大的网格元素。)
答案 1 :(得分:2)
没有人创造这么多领域,因为没有人的头脑可以充分处理包含在结果云中的信息。简化的显示就足够了。
要建立一个:
这使您 O(N)的时间从物理学转向显示形式。这不是完美的,因为在仔细检查后,球可能会突然出现或消失。但这是一个开始。