PS Script JavaScript ZBrushのBPRレンダリングのコンポジット

function bpr_comp()
{
	otherDoc = [];
	var BprDoc;
	BprFlag = 0;
	if (app.documents.length > 1){
		for( i=0 ; i<app.documents.length ; i++ )
		{
			activeDocument=documents[i]
			if (app.documents[i].name.indexOf("_Render")!=-1)
			{
				BprDoc = app.documents[i];
				BprFlag ++;
			}else{
				otherDoc.push(app.documents[i]);
			}
		}
	}else{
		alert("2枚以上の画像を開いてください");
		return;
	}
	if (BprFlag == 0){
		alert("「_Render」 の名前が付いた画像を開いてください");
		return;
	}
	if (BprFlag>1){
		alert("「_Render」 の名前が付いた画像が2枚以上存在します");
		return;
	}
	
	activeDocument = BprDoc;
	docObj = activeDocument.artLayers;
	docObj[docObj.length-1].opacity = 100;
	
	for(i=0;i<otherDoc.length;i++)
	{
		activeDocument = otherDoc[i];
		if (activeDocument.name.split("_")[0] == BprDoc.name.split("_")[0]){
			activeDocument.selection.selectAll();
			activeDocument.selection.copy();
			
			LayerName = activeDocument.name.split("_")[1].split(".")[0];
			activeDocument.close(SaveOptions.DONOTSAVECHANGES);
			
			activeDocument = BprDoc;
			if (LayerName.indexOf("Depth")!=-1 || LayerName.indexOf("Mask")!=-1){
				activeDocument.channels.add();
				paste_inplace();
				select_rgb_channel();
				activeDocument.selection.deselect();
			}else{
				paste_inplace();
				newLayer = activeDocument.activeLayer;
				newLayer.name = LayerName;
				if (LayerName.indexOf("AO")!=-1 || LayerName.indexOf("Shadow")!=-1){
					newLayer.blendMode = BlendMode.MULTIPLY;
				}
				if (LayerName.indexOf("Spec")!=-1 || LayerName.indexOf("Light")!=-1 || LayerName.indexOf("Ref")!=-1){
					newLayer.blendMode = BlendMode.SCREEN;
					if (LayerName.indexOf("Ref")!=-1){
						newLayer.opacity = 20;
					}
				}
			}
		}else{
			activeDocument.close(SaveOptions.DONOTSAVECHANGES);
		}
	}
}
function paste_inplace()
{
	var idpast = charIDToTypeID( "past" );
	var desc3 = new ActionDescriptor();
	var idinPlace = stringIDToTypeID( "inPlace" );
	desc3.putBoolean( idinPlace, true );
	var idAntA = charIDToTypeID( "AntA" );
	var idAnnt = charIDToTypeID( "Annt" );
	var idAnno = charIDToTypeID( "Anno" );
	desc3.putEnumerated( idAntA, idAnnt, idAnno );
	executeAction( idpast, desc3, DialogModes.NO );
}
function select_rgb_channel()
{
	var idslct = charIDToTypeID( "slct" );
	var desc6 = new ActionDescriptor();
	var idnull = charIDToTypeID( "null" );
	var ref1 = new ActionReference();
	var idChnl = charIDToTypeID( "Chnl" );
	var idChnl = charIDToTypeID( "Chnl" );
	var idRGB = charIDToTypeID( "RGB " );
	ref1.putEnumerated( idChnl, idChnl, idRGB );
	desc6.putReference( idnull, ref1 );
	executeAction( idslct, desc6, DialogModes.NO );
}
bpr_comp()

相変わらず、唐突ですが、ZBrush用のフォトショップスクリプトです。
ファイルはBPRComp

 

ZBrushでBPRレンダリングすると、デフォルトで「BPR_Render.PSD」などのファイルが作られるかと思います。
それらのファイルに大して一括してコンポジット処理を行うスクリプトです。
処理するファイルをフォトショップで全て開いてからスクリプトを実行してください。
名前を見て判断しているので、命名規則があります。
拡張子は見ておりません。

 

まずメインファイルとなるファイル名は「○○○_Render.PSD」※○の文字数や文字の制限はありませんが、「_」(アンダーバー)は使わないでください。
重要なのは、アンダーバーのあとに「Render」と付くことです。
それ以外のファイルは○○○の名前とあわせてください。合わせていないと処理をしません。

 

それ以外のファイルでは、名前により特殊な処理を施します。
「○○○_Mask」や「○○○_Depth」であれば、それらの画像は「○○○_Render.PSD」のアルファチャンネルに追加されます。

 

「○○○_AO」、「○○○_Shadow」であれば、レイヤーとして追加され、ブレンドモードを「乗算」に変更し、名前をリネームします。
名前の最後に数字がついている場合、それもレイヤー名として設定されます。

 

「○○○_Spec」、「○○○_Light」、「○○○_Ref」の場合はブレンドモードを「スクリーン」にしてレイヤーを追加します。
「○○○_Ref」の場合は「不透明度」を「20%」に設定します。

 

処理が終わると、「○○○_Render.PSD」以外のファイルは勝手に閉じられます。
「○○○_Render.PSD」を開いた時に存在した「背景」レイヤーは「レイヤー0」に変更されます。

 

ちょっとだけ合成が楽になるかと思いますが、あくまでも土台作りの手助けなので後の合成は手でやってください。
因みにレイヤーの順番は手を付けておりません。
なので、それもちゃんとしないと意図したとおりになりません。
あくまでも最初の手助け程度です。
使いやすいように改造してください。

コメントする

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トラックバックする

トラックバック用URL:

アニメーションが親切に解説されております

レンダリング、ライティングの基本が分かります

図版が見やすい美術解剖書です