Skip to content

Instantly share code, notes, and snippets.

@KelSolaar
Last active October 12, 2018 19:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KelSolaar/44c865298dff09eb29ef620be4232383 to your computer and use it in GitHub Desktop.
Save KelSolaar/44c865298dff09eb29ef620be4232383 to your computer and use it in GitHub Desktop.
Mitsuba - Shader Balls
for name, spd in SPDS.items():
prefix = ''.join([token.title() for token in spd.name.split()])
prefix = prefix.replace('.', '_')
prefix = prefix.replace('(', '_')
prefix = prefix.replace(')', '_')
filename = '/Users/kelsolaar/Google Drive/Cinematic Color Update/Supporting Documents/Spectral/ShaderBalls/ColorChecker N Ohta/{0}.spd'.format(prefix)
colour.write_spds_to_csv_file({spd.name: spd}, filename, delimiter=' ')
with open(filename, 'r') as csv_file:
content = csv_file.readlines()
with open(filename, 'w') as csv_file:
csv_file.write(''.join(content[1:]))
import numpy as np
from pprint import pprint
import colour
colour.utilities.filter_warnings(True, False)
SPDS = colour.COLOURCHECKERS_SPDS['ColorChecker N Ohta']
colours = []
for name, spd in SPDS.items():
XYZ = colour.spectral_to_XYZ(spd, illuminant=colour.ILLUMINANTS_SPDS['D65']) / 100
RGB = colour.XYZ_to_sRGB(XYZ, apply_encoding_cctf=False)
colours.append([name, np.clip(RGB, 0, 1).tolist()])
colours.append(['primary red', [1, 0, 0]])
colours.append(['primary green', [0, 1, 0]])
colours.append(['primary blue', [0, 0, 1]])
colours.append(['secondary cyan', [0, 1, 1]])
colours.append(['secondary yellow', [1, 1, 0]])
colours.append(['secondary magenta', [1, 0, 1]])
pprint(colours)
import maya.mel as mel
RGB_SB = [['dark skin', [0.17617696530291507, 0.07822132260083833, 0.05032506899750089]],
['light skin', [0.5594328795645895, 0.30875671137126603, 0.22285091346161726]],
['blue sky', [0.11316214506216318, 0.19921852422245023, 0.3361607349326277]],
['foliage', [0.09458784896027883, 0.14840846139867916, 0.04989599110326941]],
['blue flower',
[0.23628620557030164, 0.22587072916909287, 0.4438448209744563]],
['bluish green',
[0.13384291490701555, 0.5170175543276965, 0.40288104497739974]],
['orange', [0.7014106185953032, 0.1992491388559501, 0.022933559165034298]],
['purplish blue',
[0.06838729250011971, 0.10599944049047783, 0.3771262399071645]],
['moderate red',
[0.5581203562872362, 0.09062503496062745, 0.1220116174910672]],
['purple', [0.10779322237528335, 0.044344460775229654, 0.1468393913197567]],
['yellow green',
[0.34888190209825176, 0.5019528920665907, 0.04775014381292557]],
['orange yellow',
[0.7916696847539647, 0.3650270333075217, 0.026798672766924728]],
['blue', [0.027222393439019416, 0.04781350704409153, 0.3091513803674785]],
['green', [0.06013352597415053, 0.3055824977198605, 0.060630091881502285]],
['red', [0.44611305856272276, 0.02849647311734478, 0.04208168843836173]],
['yellow', [0.8518827559826488, 0.5796038063621572, 0.010545735768239112]],
['magenta', [0.5060904690743616, 0.08898493757835146, 0.29722993061114805]],
['cyan', [0.0, 0.24880349721261302, 0.3854279975808073]],
['white 9.5 (.05 D)',
[0.8868772127626505, 0.8886674336500244, 0.8746304765018855]],
['neutral 8 (.23 D)',
[0.5863770866533395, 0.5833045137651254, 0.582191463878761]],
['neutral 6.5 (.44 D)',
[0.3582762449470433, 0.3581030306723318, 0.35875520567042585]],
['neutral 5 (.70 D)',
[0.20316331067708157, 0.20298306400991062, 0.20355054141531276]],
['neutral 3.5 (1.05 D)',
[0.09106608362035784, 0.09287897443722942, 0.09425755150035042]],
['black 2 (1.5 D)',
[0.03266665140047427, 0.033639209396633146, 0.0352725214273234]],
['primary red', [1, 0, 0]],
['primary green', [0, 1, 0]],
['primary blue', [0, 0, 1]],
['secondary cyan', [0, 1, 1]],
['secondary yellow', [1, 1, 0]],
['secondary magenta', [1, 0, 1]]]
GROUPS = [
'ShaderBall__DarkSkin',
'ShaderBall__LightSkin',
'ShaderBall__BlueSky',
'ShaderBall__Foliage',
'ShaderBall__BlueFlower',
'ShaderBall__BluishGreen',
'ShaderBall__Orange',
'ShaderBall__PurplishBlue',
'ShaderBall__ModerateRed',
'ShaderBall__Purple',
'ShaderBall__YellowGreen',
'ShaderBall__OrangeYellow',
'ShaderBall__Blue',
'ShaderBall__Green',
'ShaderBall__Red',
'ShaderBall__Yellow',
'ShaderBall__Magenta',
'ShaderBall__Cyan',
'ShaderBall__White9_5__05D_',
'ShaderBall__Neutral8__23D_',
'ShaderBall__Neutral6_5__44D_',
'ShaderBall__Neutral5__70D_',
'ShaderBall__Neutral3_5_1_05D_',
'ShaderBall__Black2_1_5D_',
'ShaderBall__PrimaryRed',
'ShaderBall__PrimaryGreen',
'ShaderBall__PrimaryBlue',
'ShaderBall__SecondaryCyan',
'ShaderBall__SecondaryYellow',
'ShaderBall__SecondaryMagenta',
]
affixer = lambda x: ''.join([token.title() for token in RGB_SB[x][0].split()])
for element in cmds.ls(type='mesh'):
cmds.sets(element, e=True, forceElement='initialShadingGroup')
mel.eval('MLdeleteUnused();')
for i, group in enumerate(GROUPS):
affix = affixer(i)
# group = cmds.rename(group, 'ShaderBall__{0}'.format(affix))
if i < 24:
shader = cmds.shadingNode(
'MitsubaPlasticShader', name=affix, asShader=True)
cmds.setAttr(
'{0}.diffuseReflectance'.format(shader),
RGB_SB[i][1][0],
RGB_SB[i][1][1],
RGB_SB[i][1][2],
type='double3')
else:
shader = cmds.shadingNode(
'MitsubaConductorShader', name=affix, asShader=True)
cmds.setAttr(
'{0}.specularReflectance'.format(shader),
RGB_SB[i][1][0],
RGB_SB[i][1][1],
RGB_SB[i][1][2],
type='double3')
shading_engine = cmds.sets(
renderable=True,
name='{0}SG'.format(affix),
noSurfaceShader=True,
empty=True)
cmds.connectAttr('{0}.outColor'.format(shader),
'{0}.surfaceShader'.format(shading_engine))
cmds.sets(
'{0}|OuterSphere'.format(group), e=True, forceElement=shading_engine)
cmds.sets(
'{0}|Pedestal'.format(group), e=True, forceElement=shading_engine)
cmds.sets('{0}|Base'.format(group), e=True, forceElement=shading_engine)
cmds.sets('{0}|PitBase'.format(group), e=True, forceElement=shading_engine)
shader = cmds.shadingNode(
'MitsubaRoughPlasticShader',
name='{0}Rough'.format(affixer(21)),
asShader=True)
cmds.setAttr(
'{0}.diffuseReflectance'.format(shader),
RGB_SB[21][1][0],
RGB_SB[21][1][1],
RGB_SB[21][1][2],
type='double3')
shading_engine = cmds.sets(
renderable=True,
name='{0}RoughSG'.format(affixer(21)),
noSurfaceShader=True,
empty=True)
cmds.connectAttr('{0}.outColor'.format(shader),
'{0}.surfaceShader'.format(shading_engine))
cmds.sets('PitsFloor', e=True, forceElement=shading_engine)
for element in cmds.ls('InnerSphere'):
cmds.sets(element, e=True, forceElement=shading_engine)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment