Mayaのレイヤーにランダムカラーを割り当てよう

こんにちは!Rhinoです。
時々Blenderを使っているんですが、Mayaよりも便利なことってありますよね。
特にオブジェクトをランダムカラーで表示できる機能がモデリング時の視認性を上げてくれて便利だと思いました。
そこでMayaでも同じようなことができないかと思いまして、それっぽいものを作ってみました。
あくまでそれっぽいですよ。

HTMLカラーコード

ランダムカラーを割り当てる際にHTMLカラーコードを使ってみました。
Web検索すればたくさん出てきますので、好きな色を選んで下さい。
今回は次の12色にしてみました。

JSONで用意しました。リストでも良いと思いますが、将来色を増やしたりしたい場合はJSONの方が便利だと思います。

{
	"colors":[
		"#ff7f7f",
		"#ff7fbf",
		"#ff7fff",
		"#bf7fff",
		"#7f7fff",
		"#7fbfff",
		"#7fffff",
		"#7fffbf",
		"#7fff7f",
		"#bfff7f",
		"#ffff7f",
		"#ffbf7f"
	]
}

コード

HTMLカラーコードは16進数ですので、int()の第二引数に16を指定して10進数にします。
その後R、G、Bの各色の範囲で抽出しました。さらにMayaは0-1で色を表しますので255で割る必要があります。ここがちょっと迷ったとこでした。

JSONは適当な保存先を指定してロードして下さい。

import maya.cmds as cmds
import json
import random

def hexToRGB( hex ):
	result = tuple( float( int( hex[i:i+2], 16 ) ) / 255 for i in ( 0, 2, 4 ) )
	return( result )

def main():
	rgbZeroToOneList = []

	dispLayers = cmds.ls( type='displayLayer' )
	dispLayers.remove( 'defaultLayer' )
	
	if not dispLayers:
		return

	with open( 'C:/Users/***/Documents/maya/scripts/html_color_code.json', 'r' ) as f:
		jsn = json.load( f )
		randomColors = random.sample( jsn["colors"], len(dispLayers) )
		for c in randomColors:
			rgbZeroToOneList.append( hexToRGB( c.split("#")[-1] ) )

	for i, layer in enumerate( dispLayers ):
		cmds.setAttr( '{}.color'.format( layer ), True )
		cmds.setAttr( '{}.overrideColorRGB'.format( layer ), rgbZeroToOneList[i][0], rgbZeroToOneList[i][1], rgbZeroToOneList[i][2] )
		cmds.setAttr( '{}.overrideRGBColors'.format( layer ), True )
	
if __name__ == '__main__':
	main()

オブジェクトカラーをランダムで割り当てる機能はMayaにも欲しいですね。
では、また!

コメント

タイトルとURLをコピーしました