まぐらぼ

Unity/Android、Microsoft系のWPFをやってます。

OpenRL/RayClass

感想:
OpenRLを勉強しています。Imaginationが普及を目指しているけど特定ベンダの色が強すぎると競合は採用しないから普及するかは微妙なところ。早期にKhronos移管されたら可能性あるのかも。

とりあえずサンプル読んでいてRayClassが直観的に理解出来なかったのでメモを記します。

メモ:
レイクラスはRayの目的や振る舞いによる分類・種類を表す。この分類はアプリ毎に定義する。
レイクラスの上限はRL_MAX_RAY_CLASSESで定義される。8以上が保障されている。

ドキュメントには変数配列形式で記述されているがSDKサンプルには[1]以上で使用している形式は無い。
setup(){
//rl_OutputRayCount = 9; // 1個だけなら変数
rl_OutputRayCount[0] = 9; // Normal
rl_OutputRayCount[1] = 2; // GI
}

f:id:o-maguro:20140407193555p:plain

tutorialのサンプル。rl_InRay.rayClass で分岐している。

rayattribute vec3 color;
uniform vec3 materialColor;
varying vec3 normal;
void main()
{
	if(rl_InRay.rayClass == 1)
	{
		// If this is a shadow ray from a surface, attenuate and accumulate
		float rayLength = rl_InRay.maxT;
		accumulate(materialColor*rl_InRay.color/(rayLength*rayLength));
	}
	else
	{
		// If this is from the camera just accumulate
		accumulate(materialColor);
	}
}