-
Notifications
You must be signed in to change notification settings - Fork 0
/
nk_threadrender.py
35 lines (31 loc) · 1.03 KB
/
nk_threadrender.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import nuke
import threading
def nk_multithreadedRender():
"""
Multithreaded Render
"""
threads = nuke.env['threads']-2
c = nuke.getInput("Number of threads (default %i)" % threads)
if c: threads = int(c)
THREADCOUNT = threads
nuke.scriptSave()
renderNode = nuke.selectedNode()
use_limit = renderNode['use_limit'].value()
first = renderNode['first'].value() if use_limit else nuke.root().firstFrame()
last = renderNode['last'].value() if use_limit else nuke.root().lastFrame()
frames = [i for i in range(first,last+1)]
threads = [[] for i in range(0,THREADCOUNT)]
[threads[i%THREADCOUNT].append(frame) for (i,frame) in enumerate(frames)]
THREAD_FRAMES = {}
def render(frameList):
_maxCache = str(max(nuke.memory("max_usage") / 1097152, 16)*4) + "M"
try:
t = nuke.executeBackgroundNuke(nuke.EXE_PATH,
[renderNode],
nuke.FrameRanges(frameList),
nuke.views(),
{"maxThreads":1,"maxCache":_maxCache})
THREAD_FRAMES[t] = frameList
except Exception as e:
print e
[render(frameList) for frameList in threads]