Archive for March, 2009

Environment light in Nuke

Friday, March 6th, 2009

Here’s a python script that translates Lighting Coefficients from the paper by Ravi Ramamoorthi to a expression node. Connect a normal pass to the expression node.

import nuke
import string

def LCoeff2Nuke():
	p = nuke.Panel("Paste Lighting Coefficients")
	p.addMultilineTextInput("Coefficients:", '')
	p.addButton("Cancel")
	p.addButton("OK")
	p.show()

	coeffVal= p.value("Coefficients:")

	#CONSTANTS
	c1 = '0.429043'
	c2 = '0.511664'
	c3 = '0.743125'
	c4 = '0.886227'
	c5 = '0.247708'

	Coefficients =[]

	i=0
	for line in coeffVal.split('\n'):
		if line.startswith('L_'):
			Coefficients.append(line.split()[1:4])
			print line
			i+=1

	expTemplate = 'c1*L22*(pow2(r)-pow2(g)) + (c3*L20*pow2(b)) + c4*L00-(c5*-L20) + 2*c1*((L2m2*r*g)+(L21*r*b)+(L2m1*g*b)) + 2*c2*((L11*r)+(L1m1*g) + (L10*b))'

	expressions = ['','','']
	for i in range(3):
		expressions[i] = expTemplate
		expressions[i] = expressions[i].replace('c1', c1) 	#
		expressions[i] = expressions[i].replace('c2', c2) 	#
		expressions[i] = expressions[i].replace('c3', c3) 	#
		expressions[i] = expressions[i].replace('c4', c4) 	#
		expressions[i] = expressions[i].replace('c5', c5) 	#
		expressions[i] = expressions[i].replace('L00', Coefficients[0][i]) #
		expressions[i] = expressions[i].replace('L1m1', Coefficients[1][i]) #
		expressions[i] = expressions[i].replace('L10', Coefficients[2][i]) #
		expressions[i] = expressions[i].replace('L11', Coefficients[3][i]) #
		expressions[i] = expressions[i].replace('L2m2', Coefficients[4][i])#
		expressions[i] = expressions[i].replace('L2m1', Coefficients[5][i])#
		expressions[i] = expressions[i].replace('L20', Coefficients[6][i]) #
		expressions[i] = expressions[i].replace('L21', Coefficients[7][i]) #
		expressions[i] = expressions[i].replace('L22', Coefficients[8][i]) #

	expNode = nuke.nodes.Expression(expr0=expressions[0],expr1=expressions[1],expr2=expressions[2])