Blender 모듈 빌드 및 설치(Windows)
bpy.ops.render.render()
가 떨어지는 건 bpy.pyd
(GUI가없는 python 모듈로 blender) 빌드 및 설치 방법.환경
준비
보통 블렌더 빌드
blender 빌드의 세세한 단계는
를 참조하십시오.
모듈로 블렌더 빌드
위의 기사까지 할 수 있었기 때문에 거기에서 변경하는 부분을 설명합니다.
CMake에서 옵션을 다음과 같이 변경
빌드가 작동하지 않는 원인이 되는 라이브러리를 제거합니다.
변경하고 configure하여 generate하고 cmake
install
대상을 실행합니다.빌드 만 있으면 (dll 복사 및
2.80
폴더 생성이 이루어지지 않습니다)빌드 할 수있는 bpy.pyd와 필요한 파일을 Python3에 설치하십시오.
아래 파일을 빌드 폴더에서 python37 폴더로 복사합니다.
단계를 파이썬 스크립트로 만들었습니다.
install.py
import os
import pathlib
import glob
import shutil
PY_DIR = pathlib.Path('C:/Python37')
BL_DIR = PY_DIR / 'Lib/site-packages/blender'
if __name__ == '__main__':
os.chdir('blender_build/bin/Release') # install.py実行パスからの相対パス
#os.chdir('blender_build/bin/RelWithDebInfo') # 実行パスからの相対パス
with (PY_DIR / 'Lib/site-packages/blender.pth').open('w') as w:
w.write("blender")
BL_DIR.mkdir(parents=True, exist_ok=True)
shutil.copy('bpy.pyd', BL_DIR)
for f in glob.glob('*.dll'):
print(f'{f} => {BL_DIR / f}')
shutil.copy(f, BL_DIR / f)
for f in glob.glob('*.pdb'):
print(f'{f} => {BL_DIR / f}')
shutil.copy(f, BL_DIR / f)
python37 = BL_DIR / 'python37.dll'
if python37.exists():
python37.unlink()
dst = PY_DIR / '2.80'
if dst.exists():
print(f'remove {dst}')
shutil.rmtree(dst)
print(f'copy {dst}')
shutil.copytree('2.80', dst)
실행하다
import bpy
print(bpy)
# <module 'bpy' from 'PYTHON_DIR\\lib\\site-packages\\blender\\bpy.pyd'>
이것이 파이썬에서 실행될 수 있다면 움직일 것이라고 생각합니다.
종료 시,
Error: Not freed memory blocks: 8, total unfreed memory 0.010223 MB
하지만 나오는 곳은 신경쓰지 않아도 되는 것이 아닌가.
사용법
주로, 배치 실행이나 addon 개발 용도가 된다고 생각한다.
import bpy
print(bpy)
# <module 'bpy' from 'PYTHON_DIR\\lib\\site-packages\\blender\\bpy.pyd'>
주로, 배치 실행이나 addon 개발 용도가 된다고 생각한다.
렌더링하다
CYCLES로 설정합니다.
import bpy
bpy.context.scene.render.engine = 'CYCLES' # デフォルトがEEVEEでOpenGLが無いので落ちる
bpy.ops.render.render()
bpy.data.images['Render Result'].save_render(filepath='image.png')
blend 파일을 열고 장면에 액세스
import bpy
import pathlib
here = pathlib.Path(__file__).absolute().parent
monkey = here / 'monkey.blend'
# open
bpy.ops.wm.open_mainfile(filepath=str(monkey))
# object
for o in bpy.context.scene.objects:
print(o)
<bpy_struct, Object("Suzanne")>
blend 파일을 열어 장면에 액세스 할 수있었습니다.
memo
# contextからobjectを得る
o = bpy.context.scene.objects[0]:
# objectからデータブロックを得る
data= o.data
print(isinstance(data, bpy.types.Mesh))
VSCode에서 인텔리센스를 사용하도록 설정
blender-2.80 용으로 생성해 보자.
빨리 오류 회피.
--- a/python_api/pypredef_gen.py
+++ b/python_api/pypredef_gen.py
@@ -999,7 +999,7 @@ def bpy2predef(BASEPATH, title):
structs, funcs, ops, props = rna_info.BuildRNAInfo()
#open the file:
filepath = os.path.join(BASEPATH, "bpy.py")
- file = open(filepath, "w")
+ file = open(filepath, "w", encoding='utf-8')
fw = file.write
#Start the file:
definition = doc2definition(title,"") #skip the leading spaces at the first line...
@@ -1093,9 +1093,9 @@ def rna2predef(BASEPATH):
import bgl as module
pymodule2predef(BASEPATH, "bgl", module, "Open GL functions (bgl)")
- if "aud" in INCLUDE_MODULES:
- import aud as module
- pymodule2predef(BASEPATH, "aud", module, "Audio System (aud)")
+ # if "aud" in INCLUDE_MODULES:
+ # import aud as module
+ # pymodule2predef(BASEPATH, "aud", module, "Audio System (aud)")
if "bmesh" in INCLUDE_MODULES:
import bmesh as module
나온 폴더를 vscode의 사용자 설정에 추가.
"python.autoComplete.extraPaths": ["path_to_pypredef"]
함수의 인수에 형 주석을 붙여 blender 의 형태의 인텔리센스가 나오게 되었다.
Debug한다(C++쪽을)
F5
작업 디렉토리는 hello.py 를 배치한 폴더입니다.
GHOST_C-api.cpp
// line:610
GHOST_TSuccess GHOST_ActivateOpenGLContext(GHOST_ContextHandle contexthandle)
{
GHOST_IContext *context = (GHOST_IContext *)contexthandle; // これが nullptr
return context->activateDrawingContext();
}
알 때도 있다.
Reference
이 문제에 관하여(Blender 모듈 빌드 및 설치(Windows)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ousttrue/items/db68f5a1939fd3a9d982텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)