[suDLS.mel]3Delight渲染shave自动化工具



项目接下来要开始大量使用Shave&3DL,而现有的破解版本9.0.0在配置渲染时是异常繁琐的,正好之前写过一个小工具可以自动化执行这些重复的操作,但是有些小bug,今天拿出来修改了一下已经可以使用。上图就是使用此工具设置的Shave的预设grass渲染的结果,原本繁琐的步骤可以在半分钟内搞定了。

使用方法秉承极简主义,界面语言响应Maya中文化的大潮流。

                                  

三步走:在打算使用3Delight渲染shave的场景里面执行此mel,会弹出如图的弱智界面;

  1. 点1初始化
    (建立render pass,自动选择渲染相机)

  2. 选择照明灯光,点2
    (为灯光建立set和相应delightAttr节点,调整deep阴影选项以及灯光自身bias值)

  3. 框选所有投影、遮挡物体,包括shave,点3
    (为物体建立delightAttr节点,接受指定灯光光照,并设置物体Matte属性为true以遮挡shave)

可选步骤:点阴影分辨率来设置阴影贴图的分辨率,以适应不同尺度的场景。

正如前面所说,使用方法是极其简单的,但是很方便实用,适合厌倦重复或者不熟悉设置的孩子,三步就可以渲染出Renderman规格的纯毛发。

完善后暂时没发现其他问题,如果有问题欢迎反馈。
 
 
 
*注意* 此MEL只针对9.0.0版本的3Delight。

Source:
/* 	suDLS.mel  cuckons[at]163.com
*	Make shave renderable by 3DLFM automatically.
	2011.7.8
*/


int $suDLS_res = 512;
print $suDLS_res;

//Get the renderable camera
proc string suGetRenderCam(){
	string $renderCam;
	string $cams[] = `ls -type camera`;
	for ($each in $cams){
		if (`getAttr ($each+".renderable")`){
			$renderCam = $each;
			break;
		}
	}
	return $each;
			
}

proc suSetShave(){
	DL_createSurfaceShader("C:/Program Files/3Delight/shaders/Shave.sdl", 0);

	string $shave[] =`ls -typ shaveHair`;
	DL_setObjectAttrib("Shave1","surface",$shave);	
	setAttr "Shave1.SHAVEselfshad" 0.6; 

	print "Shave OK.\n";
}

//Setup the lightSet
global proc suDLS_SetLight(){
	global int $suDLS_res;
	string $lights[] = `ls -sl`;
		
	sets -n "lightSet";
	
	DLA_create();
	//Assign
	DL_setObjectAttrib("delightLightAttribs1","delightLightAttribs",$lights);
	setAttr "delightLightAttribs1.generateShadowMaps" 1;
	setAttr "delightLightAttribs1.shadowMapResolutionX" $suDLS_res;
	setAttr "delightLightAttribs1.shadowMapResolutionY" $suDLS_res;
	setAttr delightLightAttribs1.shadowMapType 1;

	for ($each in $lights) {
			string $shape[] = `listRelatives -s $each`;
			setAttr ($shape[0]+".useDepthMapShadows") 1;
			setAttr  ($shape[0]+".dmapBias") 0.2;
	}
	print "Light OK.\n";
	
}

global proc suDLS_SetObj(){
	string $objs[] = `ls -sl -l`;
	
	//Check over the objs and group if shavenode have no parent
	for ($i = 0; $i<size($objs);$i++){
		string $foo[] = `listRelatives -s -f $objs[$i]`;
		if (size($foo) == 0)
			continue;
		if (nodeType($foo[0])=="shaveHair"){
			string $grp =`group -n "shave_grp" $objs[$i]`;
			$objs[$i] = $grp;
		}
	}
	//<-------------
	//create the Matte objects
	//
	
	sets -n "objSet" $objs;
		
	DGA_create();
	
	//Assign
	DL_setObjectAttrib("delightGeoAttribs1","delightGeoAttribs",$objs);
	
	//Illumination from
	addAttr -ln "illuminationFrom" -at message delightGeoAttribs1;
	//Matte Object
	DGA_matteObjectCreateAttr delightGeoAttribs1;
	setAttr "delightGeoAttribs1.matteObject" 1;
	
	//lightSet
	DL_disconnectNode( "delightGeoAttribs1.illuminationFrom" );
	DL_connectNodeToMessagePlug( "lightSet", "delightGeoAttribs1.illuminationFrom" );
	
	DL_disconnectNode( "delightLightAttribs1.shadowObjects" );
	DL_connectNodeToMessagePlug( "objSet", "delightLightAttribs1.shadowObjects" );
	//----------------->
	
	
	//<----------------
	//create the anti Matte objects
	//
	string $shaveShape[] =`ls -typ shaveHair`;
	for ($i=0;$i<size($shaveShape);$i++) { 
		 string $foo[] = `listRelatives -p $shaveShape[$i]`;
		 $shaveShape[$i] = $foo[0];
	}

	
	DGA_create();
	
	//Assign
	setAttr "delightGeoAttribs2.inheritDAGParentAttributes" 0;
	DL_setObjectAttrib("delightGeoAttribs2","delightGeoAttribs",$shaveShape);
	
	//Illumination from
	addAttr -ln "illuminationFrom" -at message delightGeoAttribs2;
	//Matte Object
	DGA_matteObjectCreateAttr delightGeoAttribs2;
	setAttr "delightGeoAttribs2.matteObject" 0;
	
	//lightSet
	DL_disconnectNode( "delightGeoAttribs2.illuminationFrom" );
	DL_connectNodeToMessagePlug( "lightSet", "delightGeoAttribs2.illuminationFrom" );

	suSetShave();
	
	print "Objects OK.\n";
		
}



//Start setup
//
global proc suDLS_Init() {
	source DL_aeCommon.mel;
	source DL_attribsNodeManager.mel;
	source DL_globals.mel;
	source DL_lightAttribsNode;
	source DL_geoAttribsNode.mel;



	int $sample = 3;

	string $rpn = `DL_createRenderPassNode`;

	//Sample
	setAttr ($rpn+".pixelSamplesX") $sample;
	setAttr ($rpn+".pixelSamplesY") $sample;


	//Set the renderable camera
	AE_setConnectedNodeFromMenu delightRenderPass1.camera AE_updateAE `suGetRenderCam`;

	print "Initialized OK.\n";
}

global proc suDLS_SetRes() {
	global int $suDLS_res;
	string $text;
	string $result = `promptDialog
		-title "分辨率"
		-message "设置阴影贴图的分辨率,\n越高越清晰,但渲染时间越长.\n建议512 - 1024\n\n*注意* 此选项只影响以后设置的灯光,\n已经设置好的灯光不受影响!\n"
		-button "OK" -button "Cancel"
		-defaultButton "OK" -cancelButton "Cancel"
		-dismissString "Cancel"`;

	if ($result == "OK") {
		$text = `promptDialog -query -text`;
		$suDLS_res = int($text);
	}
}
	

// Delight Setup UI
global proc suDLS() {
	global int $suDLS_res = 512;
	string $win_name = "suDLS_UI";
	if (`window -q -exists $win_name`)
		deleteUI $win_name;

	window -t "3Delight&Shave Setup" -wh 200 126 $win_name;
	columnLayout -adj 1;
	button -l "1. 初始化" -c "suDLS_Init";
	button -l "2. 设置灯光" -c "suDLS_SetLight";
	button -l "3. 设置物体" -c "suDLS_SetObj";
	button -l "阴影分辨率.." -c "suDLS_SetRes";
	showWindow();
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值