프로그램 사용/Blender2026. 7. 13. 16:24

gpt 물어보니 별도로 깔지 말고

blender 내의 scripting 에서 바로 할 수 있다고 한다.

 

built in module로 bpy 가 있다고 뜬다.

 

카메라와 spotlight를 track to 로 cube에 연결하고,

 

 spot light를 옮겨서 렌더해봄.

그런데 아쉬운건.. 렌더를 for문 돌려서 하는데 blender 자체가 먹통이 된다는 점..

import bpy
import random
import os

# -------------------------
# 설정
# -------------------------
NUM_IMAGES = 10

cube = bpy.data.objects["Cube"]
light = bpy.data.objects["Spot"]

scene = bpy.context.scene

# 저장 폴더 (blend 파일 기준)
output_dir = bpy.path.abspath("//render_output")
os.makedirs(output_dir, exist_ok=True)

# PNG 저장
scene.render.image_settings.file_format = 'PNG'

# -------------------------
# 렌더링 루프
# -------------------------
for i in range(NUM_IMAGES):
    # Cube 랜덤 이동
    # cube.location.x = random.uniform(-2.0, 2.0)
    # cube.location.y = random.uniform(-2.0, 2.0)
    # cube.location.z = random.uniform(0.0, 2.0)
    # Spot Light 랜덤 이동
    light.location.x = random.uniform(-5.0, 5.0)
    light.location.y = random.uniform(-5.0, 5.0)
    light.location.z = random.uniform(3.0, 8.0)
    # 렌더 저장 경로
    scene.render.filepath = os.path.join(output_dir, f"image_{i:03d}.png")
    print(f"Rendering {scene.render.filepath}")
    bpy.ops.render.render(write_still=True)

print("Done.")

 

결과물 짜잔~

 

해상도를 줄이고, 렌더러를 eevee로 변경.

PYTHON INTERACTIVE CONSOLE 3.13.9 (main, Apr 25 2025, 12:39:20) [GCC 14.2.1 20250110 (Red Hat 14.2.1-7)]

Builtin Modules:       bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, bpy.utils, gpu, blf, mathutils
Convenience Imports:   from mathutils import *; from math import *
Convenience Variables: C = bpy.context, D = bpy.data

>>> import random
>>> import os
>>> 
>>> # -------------------------
>>> # 설정
>>> # -------------------------
>>> NUM_IMAGES = 10
>>> 
>>> cube = bpy.data.objects["Cube"]
>>> light = bpy.data.objects["Spot"]
>>> 
>>> scene = bpy.context.scene
>>> 
>>> scene.render.engine = 'BLENDER_EEVEE'
>>> scene.render.resolution_x = 640
>>> scene.render.resolution_y = 480
>>> scene.render.resolution_percentage = 100
>>> 
>>> # 저장 폴더 (blend 파일 기준)
>>> output_dir = bpy.path.abspath("//render_output")
>>> os.makedirs(output_dir, exist_ok=True)
>>> 
>>> # PNG 저장
>>> scene.render.image_settings.file_format = 'PNG'
>>> 
>>> # -------------------------
>>> # 렌더링 루프
>>> # -------------------------
>>> for i in range(NUM_IMAGES):
...     # Cube 랜덤 이동
...     # cube.location.x = random.uniform(-2.0, 2.0)
...     # cube.location.y = random.uniform(-2.0, 2.0)
...     # cube.location.z = random.uniform(0.0, 2.0)
...     # Spot Light 랜덤 이동
...     light.location.x = random.uniform(-5.0, 5.0)
...     light.location.y = random.uniform(-5.0, 5.0)
...     light.location.z = random.uniform(3.0, 8.0)
...     # 렌더 저장 경로
...     scene.render.filepath = os.path.join(output_dir, f"image_{i:03d}.png")
...     print(f"Rendering {scene.render.filepath}")
...     bpy.ops.render.render(write_still=True)
... 
Rendering /home/falinux/render_output/image_000.png
{'FINISHED'}
Rendering /home/falinux/render_output/image_001.png
{'FINISHED'}
Rendering /home/falinux/render_output/image_002.png
{'FINISHED'}
Rendering /home/falinux/render_output/image_003.png
{'FINISHED'}
Rendering /home/falinux/render_output/image_004.png
{'FINISHED'}
Rendering /home/falinux/render_output/image_005.png
{'FINISHED'}
Rendering /home/falinux/render_output/image_006.png
{'FINISHED'}
Rendering /home/falinux/render_output/image_007.png
{'FINISHED'}
Rendering /home/falinux/render_output/image_008.png
{'FINISHED'}
Rendering /home/falinux/render_output/image_009.png
{'FINISHED'}

>>> print("Done.")

 

파일로 저장하고 다음과 같이 옵션주면 명령줄에서 블렌더 gui 뜨지 않고 수행된다.

$ blender --background ./Untitled.blend  --python render.py 
Blender 5.1.2 (hash ec6e62d40fa9 built 2026-05-19 02:18:37)
Reloading external rigs...
Reloading external metarigs...
00:01.973  blend            | Read blend: "/home/falinux/Untitled.blend"
Rendering /home/falinux/render_output/image_000.png
00:03.747  render           | Saved: '/home/falinux/render_output/image_000.png'
Rendering /home/falinux/render_output/image_001.png
00:05.350  render           | Saved: '/home/falinux/render_output/image_001.png'
Rendering /home/falinux/render_output/image_002.png
00:06.877  render           | Saved: '/home/falinux/render_output/image_002.png'
Rendering /home/falinux/render_output/image_003.png
00:08.413  render           | Saved: '/home/falinux/render_output/image_003.png'
Rendering /home/falinux/render_output/image_004.png
00:10.050  render           | Saved: '/home/falinux/render_output/image_004.png'
Rendering /home/falinux/render_output/image_005.png
00:11.633  render           | Saved: '/home/falinux/render_output/image_005.png'
Rendering /home/falinux/render_output/image_006.png
00:13.181  render           | Saved: '/home/falinux/render_output/image_006.png'
Rendering /home/falinux/render_output/image_007.png
00:14.699  render           | Saved: '/home/falinux/render_output/image_007.png'
Rendering /home/falinux/render_output/image_008.png
00:16.263  render           | Saved: '/home/falinux/render_output/image_008.png'
Rendering /home/falinux/render_output/image_009.png
00:17.888  render           | Saved: '/home/falinux/render_output/image_009.png'
Done.

Blender quit

 

귀찮으면 -b -P

$ blender --help
Blender 5.1.2
Usage: blender [args ...] [file] [args ...]

Render Options:
-b or --background 
Run in background (often used for UI-less rendering).

The audio device is disabled in background-mode by default
and can be re-enabled by passing in '-setaudio Default' afterwards.

Python Options:

-P or --python <filepath>
Run the given Python script file.

 

+

gpu 가속 - eevee는 안되고 cycles만 된다고 하는데 확인 필요

$ cat ../fire_render.py 
import bpy
import random
import os

# -------------------------
# 설정
# -------------------------
NUM_IMAGES = 10

cube = bpy.data.objects["Node_1"]
light = bpy.data.objects["Spot"]

scene = bpy.context.scene

#scene.render.engine = 'BLENDER_EEVEE'
scene.render.engine = 'CYCLES'
scene.cycles.device = 'GPU'

scene.render.resolution_x = 640
scene.render.resolution_y = 480
scene.render.resolution_percentage = 100

prefs = bpy.context.preferences.addons["cycles"].preferences
prefs.compute_device_type = "CUDA"
prefs.refresh_devices()

for device in prefs.devices:
    device.use = True
    print(device.name, device.type)

# 저장 폴더 (blend 파일 기준)
output_dir = bpy.path.abspath("//render_output")
os.makedirs(output_dir, exist_ok=True)

# PNG 저장
scene.render.image_settings.file_format = 'PNG'

# -------------------------
# 렌더링 루프
# -------------------------
for i in range(NUM_IMAGES):
    # Cube 랜덤 이동
    cube.location.x = random.uniform(-2.0, 2.0)
    cube.location.y = random.uniform(-2.0, 2.0)
    cube.location.z = random.uniform(0.0, 2.0)
    # Spot Light 랜덤 이동
    light.location.x = random.uniform(-5.0, 5.0)
    light.location.y = random.uniform(-5.0, 5.0)
    light.location.z = random.uniform(3.0, 8.0)
    # 렌더 저장 경로
    scene.render.filepath = os.path.join(output_dir, f"image_{i:03d}.png")
    print(f"Rendering {scene.render.filepath}")
    bpy.ops.render.render(write_still=True)

print("Done.")

 

Intel(R) Core(TM) i7-10510U 뺘르다고 생각을 안했었는데..

$ time blender -b firefigher.blend -P fire_render.py 
Blender 5.1.2 (hash ec6e62d40fa9 built 2026-05-19 02:18:37)
 Reloading external rigs...
Reloading external metarigs...
00:03.094  blend            | Read blend: "/home/minimonk/20260713 render/firefigher.blend"
Rendering /home/minimonk/20260713 render/render_output/image_000.png
00:05.087  render           | Saved: '/home/minimonk/20260713 render/render_output/image_000.png'
Rendering /home/minimonk/20260713 render/render_output/image_001.png
00:06.989  render           | Saved: '/home/minimonk/20260713 render/render_output/image_001.png'
Rendering /home/minimonk/20260713 render/render_output/image_002.png
00:08.897  render           | Saved: '/home/minimonk/20260713 render/render_output/image_002.png'
Rendering /home/minimonk/20260713 render/render_output/image_003.png
00:10.778  render           | Saved: '/home/minimonk/20260713 render/render_output/image_003.png'
Rendering /home/minimonk/20260713 render/render_output/image_004.png
00:12.696  render           | Saved: '/home/minimonk/20260713 render/render_output/image_004.png'
Rendering /home/minimonk/20260713 render/render_output/image_005.png
00:14.746  render           | Saved: '/home/minimonk/20260713 render/render_output/image_005.png'
Rendering /home/minimonk/20260713 render/render_output/image_006.png
00:16.792  render           | Saved: '/home/minimonk/20260713 render/render_output/image_006.png'
Rendering /home/minimonk/20260713 render/render_output/image_007.png
00:18.709  render           | Saved: '/home/minimonk/20260713 render/render_output/image_007.png'
Rendering /home/minimonk/20260713 render/render_output/image_008.png
00:20.950  render           | Saved: '/home/minimonk/20260713 render/render_output/image_008.png'
Rendering /home/minimonk/20260713 render/render_output/image_009.png
00:22.887  render           | Saved: '/home/minimonk/20260713 render/render_output/image_009.png'
Done.

Blender quit

real 0m23.343s
user 0m10.385s
sys 0m5.169s


엥... 데탑 + 그래픽 카드인데 왜 노트북 만도 못하지?

일단 ssh -X 옵션으로 해서 그런가.. 이상하게 느림

$ time blender --background ./firefigher.blend --python fire_render.py --gpu-backend opengl
Blender 5.1.2 (hash ec6e62d40fa9 built 2026-05-19 02:18:37)
00:01.277  blend            | Read blend: "/home/minimonk/firefigher.blend"
00:01.360  cycles           | WARNING HIPEW initialization failed: Error opening HIP dynamic library
NVIDIA GeForce GTX 1080 Ti CUDA
NVIDIA GeForce GTX 1080 Ti CUDA
Intel Core i5-8500 CPU @ 3.00GHz CPU
NVIDIA GeForce GTX 1080 Ti OPTIX
NVIDIA GeForce GTX 1080 Ti OPTIX
Rendering /home/minimonk/render_output/image_000.png
00:08.547  render           | Saved: '/home/minimonk/render_output/image_000.png'
Rendering /home/minimonk/render_output/image_001.png
00:13.898  render           | Saved: '/home/minimonk/render_output/image_001.png'
Rendering /home/minimonk/render_output/image_002.png
00:19.551  render           | Saved: '/home/minimonk/render_output/image_002.png'
Rendering /home/minimonk/render_output/image_003.png
00:26.421  render           | Saved: '/home/minimonk/render_output/image_003.png'
Rendering /home/minimonk/render_output/image_004.png
00:33.915  render           | Saved: '/home/minimonk/render_output/image_004.png'
Rendering /home/minimonk/render_output/image_005.png
00:39.808  render           | Saved: '/home/minimonk/render_output/image_005.png'
Rendering /home/minimonk/render_output/image_006.png
00:45.484  render           | Saved: '/home/minimonk/render_output/image_006.png'
Rendering /home/minimonk/render_output/image_007.png
00:50.785  render           | Saved: '/home/minimonk/render_output/image_007.png'
Rendering /home/minimonk/render_output/image_008.png
00:56.725  render           | Saved: '/home/minimonk/render_output/image_008.png'
Rendering /home/minimonk/render_output/image_009.png
01:03.617  render           | Saved: '/home/minimonk/render_output/image_009.png'
Done.

Blender quit

real 1m3.925s
user 4m1.146s
sys 0m21.034s

 

i5-8500 에서 CPU 렌더 돌리는데 왜 이따구지?

$ time blender --background ./firefigher.blend --python cpu_render.py 
Blender 5.1.2 (hash ec6e62d40fa9 built 2026-05-19 02:18:37)
00:01.285  blend            | Read blend: "/home/minimonk/firefigher.blend"
Rendering /home/minimonk/render_output/image_000.png
00:24.717  render           | Saved: '/home/minimonk/render_output/image_000.png'
Rendering /home/minimonk/render_output/image_001.png
01:05.764  render           | Saved: '/home/minimonk/render_output/image_001.png'
Rendering /home/minimonk/render_output/image_002.png
01:47.330  render           | Saved: '/home/minimonk/render_output/image_002.png'
Rendering /home/minimonk/render_output/image_003.png
02:28.293  render           | Saved: '/home/minimonk/render_output/image_003.png'
Rendering /home/minimonk/render_output/image_004.png
03:15.950  render           | Saved: '/home/minimonk/render_output/image_004.png'
Rendering /home/minimonk/render_output/image_005.png
03:57.923  render           | Saved: '/home/minimonk/render_output/image_005.png'
Rendering /home/minimonk/render_output/image_006.png
04:40.469  render           | Saved: '/home/minimonk/render_output/image_006.png'
Rendering /home/minimonk/render_output/image_007.png
05:22.630  render           | Saved: '/home/minimonk/render_output/image_007.png'
Rendering /home/minimonk/render_output/image_008.png
06:11.436  render           | Saved: '/home/minimonk/render_output/image_008.png'
Rendering /home/minimonk/render_output/image_009.png
06:56.409  render           | Saved: '/home/minimonk/render_output/image_009.png'
Done.

Blender quit

real 6m56.760s
user 17m10.307s
sys 0m6.312s

 

키프레임이 27에 있었는데 그거 때문에 그런가.. 이상하게 느리네

0 프레임으로 옮기고

cpu only 20.902s

gpu use 1m 0.646s 아니 왜 더 느려?

 

+

ssh -X 빼고 했더니 빨라졌다(!) 머냐?

gpu
real 1m3.835s

cpu
real 0m19.610s

'프로그램 사용 > Blender' 카테고리의 다른 글

blender animation (keyframe)  (0) 2026.07.13
blender constraint "track to "  (0) 2026.07.13
bpy 설치 + 간단 테스트  (0) 2026.07.12
blender armature ik (각도 제한 등)  (0) 2026.07.10
bpy - Blender as a Python module  (0) 2026.07.10
Posted by 구차니