블렌더의 파이썬 스크립트 시작하기 _ 02

16349 단어 파이썬블렌더

계속을 3년 후에 쓴다고는…


  • 블렌더의 파이썬 스크립트 시작하기 _ 01

  • 3년 전에 Blender의 Python 콘솔을 터치하고 3년 만에 만날 수 있는 기회가 나왔으므로 계속 쓰고 싶습니다.

    블렌더 버전



    Blender2.8.1a: 대폭적인 UI와 API의 변경이 있었던 것 같습니다.

    블렌더의 디버그 환경



    다음과 같은 배치로 했습니다.



    그림 표시의 왼쪽 하단에 Text Editor 오른쪽 하단에 Python Editor를 배치했습니다.

    최소 점 데이터를 표시하십시오.



    스크립트는, 참고의 Blender + Python으로 포인트 클라우드 시각화 기사를 참고로 했습니다.
    import bpy
    import numpy as np
    
    def render(points):
        bpy.ops.object.select_all(action="SELECT")
        bpy.ops.object.delete(True)
    
        mat = bpy.data.materials.new("BLUE")
        mat.diffuse_color = (.33, .43, .95, 1)
    
        bpy.ops.mesh.primitive_plane_add(location=(0, 0, -1))
        plane = bpy.context.object
        plane.scale = (100, 100, 1)
    
        for x, y, z in points:
            bpy.ops.mesh.primitive_uv_sphere_add(location=(x, y, z))
            sphere = bpy.context.object
            sphere.scale = (0.02, 0.02, 0.02)
            sphere.data.materials.append(mat)
    
        for loc, rot in [[(0, -5, 5), (-np.pi * 1 / 4, 0, np.pi)],
                         [(0, 5, 5), (np.pi * 1 / 4, 0, -np.pi)],
                         [(-5, 0, 5), (-np.pi * 1 / 4, 0, np.pi / 2)],
                         [(5, 0, 5), (-np.pi * 1 / 4, 0, -np.pi / 2)]]:
            light_data = bpy.data.lights.new(name="light", type="AREA")
            light_data.energy = 500
            light_object = bpy.data.objects.new(name="light", object_data=light_data)
            bpy.context.collection.objects.link(light_object)
            bpy.context.view_layer.objects.active = light_object
            light_object.location = loc
            light_object.rotation_euler = rot
    
        bpy.ops.object.camera_add(location=(3.25, -2.48, 0.745))
        camera_rotations = (np.pi * 78 / 180, 0, 52.5 * np.pi / 180)
        bpy.data.objects["Camera"].rotation_euler = camera_rotations
    
        bpy.context.scene.render.resolution_x = 500
        bpy.context.scene.render.resolution_y = 500
        bpy.context.scene.render.resolution_percentage = 100
        bpy.context.scene.camera = bpy.context.object
        # bpy.context.scene.render.image_settings.file_format = "PNG"
        bpy.ops.render.render(write_still=True)
    
    if __name__ == "__main__":
        points = np.loadtxt("C:\\Blender_works\\min_sample.csv", delimiter=",")
        render(points)
    



    약 1000 개의 데이터를 시각화 해보십시오.



    데이터 작성 스크립트


    import numpy as np
    import pandas as pd
    N = 1000
    df =pd.DataFrame({
        "x": np.random.uniform(0.0, 10., N),
        "y": np.random.uniform(0.0, 10., N),
        "z": np.random.uniform(0.0, 10., N)
    })
    df.to_csv("./random_data.csv", header=False, index=False)
    



    다음 번에



    Jupyter notebook의 제휴 등을 조사해 나가려고 생각합니다.

    참고


  • Blender 2.81a Python API Documentation
  • Blender + Python으로 포인트 클라우드 시각화
  • 좋은 웹페이지 즐겨찾기