Создать модель с 50 миллионами сфер - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь создать 3d-модель из списка координатных данных xyz.Я создал скрипт 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) и попробовал этот подход, но он работал медленнее, чем копирование каждой сферы.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Никто не создает так много сфер, потому что ни один человеческий разум не может достаточно обработать информацию, содержащуюся в получающемся облаке.Достаточно упрощенного дисплея.

Чтобы построить его:

  1. Развивайте локации своих сфер, используя любую физику, которая вам нравится.
  2. Построить трехмерную матрицу с указанным размером ячейки, причем каждая ячейка имеет начальное значение, равное нулю (возможно, вам следует реализовать это как хеш-таблицу, чтобы избежать использования слишком большой матрицы).
  3. Определите, в какую ячейку попадает центр каждой сферы, и установите значение этой ячейки в число сфер, центры которых она содержит.
  4. Возьмите пороговое значение и удалите все ячейки, значения которых падают ниже этого порога.Превратите остальные ячейки в сферы.
  5. ИЛИ Создайте сферу для каждой ячейки, имеющей ненулевое значение (это предполагает, что сферы стремятся сгруппироваться в ячейки таким образом, что значительно уменьшает их количество).

Это дает вам O (N) время при переходе от вашей физики к вашему отображаемому представлению.Это не будет идеально, так как при тщательном рассмотрении сферы могут появляться и исчезать.Но это только начало.

0 голосов
/ 14 декабря 2018

Как анимационные компании создают огромные модели?Должен быть какой-то способ, верно?

Они, вероятно, не создают модели с таким количеством объектов.(50 миллионов сфер? Серьезно?)

И когда они это делают, они, вероятно, используют проприетарное программное обеспечение и методики, разработанные специалистами-программистами собственного производства ... и действительно мощные вычислительные ресурсы ... и это, вероятно, все еще требуетдолгое время.


Сказав это, я бы предложил исследовать следующее:

  1. Возникает ли проблема при построении модели или при ее экспорте?(Я предполагаю, что вы экспортируете модель, потому что хотите импортировать ее позже. Поэтому знание, в чем заключается проблема, также поможет вам, когда вы придете к , используйте модель.)

  2. Достаточно ли у вас (физической) памяти, чтобы создать модель в памяти?Если вы этого не сделаете, ваша проблема может заключаться в взаимодействии между сборщиком мусора и виртуальной памятью.

  3. Не могли бы вы сократить количество объектов до чего-то более удобного для отслеживания?

  4. Не могли бы вы настроить параметры копируемой УФ-сферы?Примитивная УФ сфера - это сетка с 32 сегментами и 16 кольцами по умолчанию.(32 x 16 x 50 миллионов будут действительно огромным количеством элементов сетки.)

...