Blog

Correzione bug AO pass nei Render Proxy

immagine conigli render proxy e ambient occlusion pass corretto

Scrivo questo articolo a completamento del precedente su come ottenere il depth pass con gli assembly di mental ray in Maya. Recentemente mi è infatti stato fatto notare che nemmeno il passo di Ambient Occlusion funziona correttamente.

Normalmente non usiamo questo passo perché non è fisicamente accurato, ma di sicuro per alcuni effetti ed in certe occasioni diventa fondamentale il suo corretto ottenimento.

Potete trovare qui l'articolo sul depth pass per una spiegazione completa del funzionamento degli Assembly, dei loro vantaggi e limiti.

La soluzione è identica a quella già utilizzata per il depth pass e cioè la modifica tramite editor di testo del file assembly esportato da maya. Fate riferimento all'articolo appena linkato per la procedura di esportazione ed individuazione del punto in cui modificare il file.

Cambia ovviamente il codice da inserire che sarà il seguente:

 "adskPassAmbientOcclusion" (
			"frameBufferNumber" 1,
			"encodingIndex" 1,
			"useShadingEngineThreshold" off,
			"transparencyThreshold" 0.,
			"useLocalSettings" on,
			"rays" 64,
			"brightColor" 1. 1. 1.,
			"darkColor" 0. 0. 0.,
			"spread" 0.,
			"spreadExponent" 1.,
			"maxDistance" 1.,
			"reflective" off,
			"cachePoints" 0,
			"occInAlpha" off,
			"outputMode" 0
		)

Sarà da immettere subito prima della linea shadow = ”nome_materiale”.

Il codice completo, inserito nella sezione shading group del mnostro materiale, sarà quindi:

material "nome_materiale_SG"
		"adskMayaShadingEngine" (
			"surfaceShader" = "nome_materiale.result",
			"cutAwayOpacity" 0.,
			"customShader" on
			)
			 "adskPassCameraDepth" (
			"frameBufferNumber" 0,
			"encodingIndex" 0,
			"holdout" off,
			"useShadingEngineThreshold" off,
			"transparencyThreshold" 0.,
			"remap" off,
			"znear" 0.,
			"zfar" 1000.,
			"minbuffer" 0.,
			"maxbuffer" 1.
	   )
	   "adskPassAmbientOcclusion" (
			"frameBufferNumber" 1,
			"encodingIndex" 1,
			"useShadingEngineThreshold" off,
			"transparencyThreshold" 0.,
			"useLocalSettings" on,
			"rays" 64,
			"brightColor" 1. 1. 1.,
			"darkColor" 0. 0. 0.,
			"spread" 0.,
			"spreadExponent" 1.,
			"maxDistance" 1.,
			"reflective" off,
			"cachePoints" 0,
			"occInAlpha" off,
			"outputMode" 0
		)
	shadow = "nome_materiale"
	photon = "nome_materiale"
end material

Notare che in questo includo anche le linee necessarie per far funzionare il depth pass

Naturalmente, dovrete sosituire il "nome_materiale" con il nome del materiale da voi creato.

Prestate particolare attenzione alla riga useLocalSettings che deve essere impostata su on per poter poi controllare il resto dei parametri sottostanti.

Per farlo tuttavia è necessario modificare a mano i valori di queste linee di codice. Non il massimo della vita, ma al momento non sono riuscito a trovare dei modi alternativi per risolvere il problema in maniera più rapida.

La mia ricerca continua e nel caso riuscissi a trovare una soluzione migliore la riporterò in queste pagine.

Spero di avere risparmiato qualche mal di testa a qualcuno!

Paolo Mazzoccato, fondatore Fisheye Studio

Paolo Mazzoccato

Fondatore di Fisheye Studio e appassionato di grafica 3d dal 1996. Quando la tecnologia mi volta le spalle trovo conforto nelle fusa dei miei gatti.

Linkedin

comments powered by Disqus