(
	try(destroyDialog Test)catch()
	rollout LayerMultiMatte "Layer MultiMattes" width:162 height:77
	(	
		button 'Create_Btn' "Button" pos:[10,16] width:142 height:43 align:#left
		
		fn GetUsedGBufferChannels sel =
		(   		
			MakeUniqueArray (for o in (if sel == false then objects else selection) where o.gbufferchannel != 0 collect o.gbufferchannel)
		)
		 
		fn GetLayerNameByGBufferChannel index =
		(
			local layer_name
			for o in objects while layer_name == undefined where o.gbufferChannel == index do layer_name = o.layer.name
			layer_name
		)
		 
		fn setLayerObjID ignoreEmptyLayers:on =
		(
			local getlayer = LayerManager.getlayer, layer, idx = 0
		
			if not ignoreEmptyLayers then
			(
				for i = 0 to layerManager.count-1 where ((layer = getlayer i).nodes &objs; objs).count > 0 do objs.gbufferChannel = i+1
		 
			)
				else
				(
					for i = 0 to layerManager.count-1 where ((layer = getlayer i).nodes &objs; objs).count > 0 do objs.gbufferChannel = (idx+=1)
				)
		)
			
		on Create_Btn pressed do
		(
			setLayerObjID() -- this will ignore empty layer (id order 1,2,3,4,5 ...)
				
			if matchpattern (renderers.current as string) pattern:"V-Ray*" == true then
			(
				re = maxOps.GetCurRenderElementMgr()
				 
				VRay_mask_elements = for i=0 to re.NumRenderElements() where classof (re.GetRenderElement i) == MultiMatteElement collect re.GetRenderElement i
				 
				for gbuffer_index in GetUsedGBufferChannels false do
				(
					exclude = false
					for m in VRay_mask_elements where m.R_gbufID == gbuffer_index do exclude = true
				 
					if not exclude then
					(				
						layer_name = GetLayerNameByGBufferChannel gbuffer_index
						mm = MultiMatteElement elementName:layer_name R_gbufIDOn:true R_gbufID:gbuffer_index G_gbufIDOn:false G_gbufID:0 B_gbufIDOn:false B_gbufID:0
						re.AddRenderElement mm
					)
				)	
			)
		)
	)
	createDialog LayerMultiMatte
)