brunch

You can make anything
by writing

C.S.Lewis

by 배로만쌤 Mar 27. 2020

2. 블렌더 파이썬 환경 익히기

오픈 소스 3D 그래픽 도구 블렌더 Python으로 알아가는 수학의 맛

지난 글에서는 시작하기를 적어 보았고 이번에는 블렌더 안에 있는 파이썬 환경에 대해 알아보겠습니다.


지난 번 글에서 큐브를 생성하고 삭제하며 스크립트가 생성되는 것을 보았습니다. 이렇듯 그래픽편집기에서의 동작은 스크립트가 생성되고 그 스크립트를 파이썬 편집기로 가공하여 다양하게 프로그램 파일을 만들 수 있습니다. 


이번에는 그 스크립트를 정식 파이썬 파일로 만들어보는 것을 해보겠습니다.


지난 코드를 다시 살펴보면

큐브 생성코드는

bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, location=(000))

이고, 큐브 삭제코드는

bpy.ops.object.delete(use_global=False)

입니다.


Scripting UI를 메뉴에서 선택하면 가운데 아래와 같은 파이썬 편집기 창 상단부가 보입니다. 가운데 New버튼을 클릭하여 편집모드 상태로 만듭니다.

블렌더 파이썬 편집기 상단부


가운데 파이썬 편집기 창에 아래 코드를 입력하고 편집기 창 우측 상단의 “Run Script” 버튼을 클릭하면 큐브가 생성됩니다. 단, 삭제명령을 먼저 실행해야 변화가 보입니다. 삭제명령을 실행하지 않았다면 동일한 큐브가 두개가 같이 위치있기에 큐브 생성 확인이 어렵습니다.


import bpy


bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, location=(000))


블렌더 파이썬 편집기 코드 입력


이제 소스를 잠깐 설명드리면,


Import bpy


이 명령은 블렌더를 접근하기 위한 블렌더 모듈을 불러오는 명령입니다. 모듈이란 함수 라이브러리 모음으로 블렌더를 조작하기 위한 모든 함수들이 블렌더 개발자에 의해 만들어진 것입니다.


bpy패키지를 불러왔기 때문에 블렌더 함수인 bpy.ops.mesh...와 같은 명령을 실행할 수 있는 것입니다.


from bpy import * 


ops.mesh.primitive_cube_add(size=2, enter_editmode=False, location=(000))


위와 같이 입력하면 동일하게 Cube가 생성됩니다. 바뀐 부분은 “ from bpy import * ” 인데 bpy모듈에서 *(모든) 라이브러리를 불러오는 것입니다. 이렇게 하면 함수 맨앞의 bpy를 생략해도 되기에 타이핑이 줄어듭니다.


그리고 이 프로그램에서는 bpy.ops를 불러왔기에 “from bpy import ops”라고 입력하면 bpy.ops 라이브러리만 불러오게 되는 것입니다. 따라서 다음과 같이 모듈의 특정 라이브러리만 불러오게 됩니다.


from bpy import ops


ops.mesh.primitive_cube_add(size=2, enter_editmode=False, location=(000))


이렇게 설명드리면 왜 그냥 편하게 “from bpy import *라고 하면 한꺼번에 다 불러오면 편하다고 생각할 수 있습니다. 하지만 컴퓨터 자원을 많이 사용하는 프로그램을 작성하게 되는 것입니다. 가능하면 메모리와 CPU 동작을 적게 사용하도록 필요한 부분의 모듈만 불러온다면, 전체 프로그램이 더 빠르게 동작하게 됩니다. 


초기에 프로그램을 짤 때는 모든 모듈을 한꺼번에 불러와서 실행해도 무방할 수 있지만 나중에 프로그램을 최적화 할 때는 필요한 모듈만 호출하여 실행하는 것이 프로그램 최적화에 도움이 됩니다.


함수 primitive_cube_add()함수 안에는 3개의 파라미터가 있습니다. 우리말로는 파라미터를 "인자"라고 하는데 인자는 메인 루틴에서 함수 내의 루틴으로 값을 전달하는 변수입니다.


위의 함수에서 size=3이라고 값을 바꿔 실행하면 큐브의 크기가 2에서 3으로 크기가 다르게 생성됩니다.


그리고 location=(0,0,0)을 location =(10,10,10)으로 입력하면 생성되는 큐브의 위치값이 x=10, y=10, z=10인 좌표에 표시됩니다.


위의 설명을 파이썬 함수로 다시 설명하겠습니다.


def 함수명(매개변수):

    <수행할 문장1>

    <수행할 문장2>

    ...


이상은 파이썬 함수만들기 기본 구조입니다.


def add(a,b,c):

    result a+b+c

    return result

summa = add(1,2,3)

print(summa)


위와 같이 간단하게 함수를 만들수 있습니다. 그런데 일반 print문의 결과는 블렌더 편집기 상에 표시되지 않기에 블렌더를 커맨트 창 내에서 다시 실행해야 합니다.


맥의 경우에는 콘솔창에서

$ /Applications/Blender.app/Contents/MacOS/Blender


윈도우의 경우에는 cmd창에서

> "c:\Program Files\Blender Foundation\Blender 2.81\blender.exe"


이렇게 OS명령창에서 블렌더를 실행하면 앞의 파이썬 print문 실행결과가 OS명령창에 표시됩니다.


파이썬의 기본에 대해서 참고할 문서는 점프투파이썬 위키북을 참고하시면 좋습니다.


파이썬은 다른 프로그램과 달리 프로그램 시작을 위한 main(){}이라는 형식이 없어도 됩니다. 그리고 함수의 시작은 def 형식으로 시작하여 다음 문장부터 인덴트로 함수내 문장을 구분합니다. 함수 종료는 끝에 return문을 적거나 반환값 정의가 없으면 함수 밖이라고 컴파일러가 인지하고 실행됩니다.


위의 add함수 호출을 다음과 같이 바꿀 수 있습니다.

summa = add(a=1,b=2,c=3)


이렇게 변수값이 대응하는 식으로 해주어도 됩니다.


그리고 한가지 더 알아야 할 부분은 location=(0,0,0)인자입니다.


location 변수는 튜플형 변수입니다. 위키북의 튜플 항목을 참조하세요.  이 location의 각 튜플 값은 각각 위치값의 x,y,z값으로 블렌더 시스템에서 인지하여 큐브의 위치가 지정됩니다.


쉽게 설명드리자면  x=location[0], y=location[1], z=location[2] 같이 순서적으로 접근됩니다.


만약 위의 함수를 튜플 값으로 받는다고 가정한다면 함수는 다음과 같이 변형이 될 수 있습니다.


def tadd(k):

    result = k[0]+k[1]+k[2]

    return result

tu = (1,2,3)

su = tadd(tu)

print(su)


튜플과 리스트의 자료형 사용은 앞으로 그래픽과 데이터사이언스의 기본 데이터 구조이기에 중요합니다. 알고리즘 프로그래밍을 전문적으로 하려 한다면 기본적으로 “데이터구조와 알고리즘”이라는 과목이 필수입니다.


이러한 튜플과 리스트는 수학과 연관이 깊은 것이 Vector와 Matrix입니다.


이 내용은 머신러닝에서 알고리즘 설명에 많이 쓰이기도 하니 앞으로 수학개념을 익히며 천천히 살펴보겠습니다.


필자가 예전에 컴퓨터를 배울 때는 알고리즘이나 자료구조(데이터구조)를 왜 배워야 하는지 잘 이해하지 못했습니다. 하지만 요즘 그래픽스가 너무 일반화되고 데이터과학도 많이 필요한 시대라 학생들이 이런 학문의 기초를 알고 공부하면 수학적 개념을 컴퓨터와 연결하여 생각하는 것이 좋을 것 같습니다.


컴퓨터업에 종사하시는 분들도 어플리케이션 레벨에서 프로그래밍을 하다보면 수학적 개념이 명확하지않은 상태에서 코딩을 하게 되기 때문에 깊이가 없는 프로그래밍을 하게 될 수 있으니 참고하시면 좋을 것 같습니다.


독자 중에는 프로그래밍 문법의 기본이 전혀 없는 분들이 있을 수 있는데 앞에서 언급한 점프투파이선 위키북을 참고 하십시요  이런 기본서는 처음부터 읽어도 나쁘지는 않지만 잘 모르는 부분이 있을 때 그 부분을 참고하시면 됩니다. 앞으로의 연재에서 필요한 부분을 링크하며 설명드리겠습니다.


이번에 배운 것을 연습하는 것은 지난 번에 정리했던 각각의 객체를 Add명령으로 만들면서 생성되는 스크립트의 파라미터 값을 바꾸면서 코딩을 해보면 다양한 응용의 기초가 될 것입니다.


큐브의 파라미터 중 설명이 되지 않은 ”enter_editmode=False“은 객체를 생성하면 그 객체를 수정할 수 없는 상태가 되게 합입니다. 만약 값을 True로 하면 그래픽 에디터에서 객체의 모양이 편집가능한 상태가 되어 마우스로 모양을 변형할 수 있게 됩니다.


“객체”라는 용어는 물체를 구성하는 모든 것이라 생각하면 됩니다. 여기서는 3D모델링 도구이기에 물체이지만 일반적인 프로그래밍 언어에서는 명사형 단어를 프로그램으로 구현하게 되면 기본적으로 객체를 구성하게 됩니다. 프로그램이 객체지향적으로 코딩한다면 코드 구조화를 하여 관리가 용이하고 재사용성이 좋게 되는 중요한 소프트웨어 엔지니어링 개념입니다.


따라서 물체를 코드나 컴퓨터로 표현할 때는 객체라고 생각하면 됩니다. 보다 자세한 사항은 나중에 객체지향프로그래밍이 설명될 때 보강하겠습니다.


파이썬 개발환경에 대한 간단한 사항을 정리하였습니다. 블렌더의 파이썬을 통해 프로그래밍과 수학의 어려운 개념을 비주얼하게 표현하며 앞으로 계속 글을 작성하겠습니다. 그리고 필요하다면, 여러가지 다른 도구들과 연동하여 설명하겠습니다.


다음 글에서는 좌표계에 대한 내용을 설명하도록 하겠습니다.


배로만쌤(김인영)

“배푸와 로봇 만드는 선생님"


Ref.

점프투파이썬 위키북




작가의 이전글 1. 블렌더 파이썬 스크립트 시작하기
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari