상품 설명
【概要】
・オブジェクトの座標、姿勢をRenderTextureに書き込み、他のシェーダーからテクスチャ経由で読み込める機構です。
・一台のカメラで複数のオブジェクトの情報が取得可能です。
・本機構はphiさんのブログ記事(http://phi16.hatenablog.com/)を元に作りました。ありがとうございます。
・詳しくは中に色々コメントを書いているので解析するか、上記のブログを読むことをオススメします。
・(2枚目のスクショの数字表示シェーダーはわかりやすいように表示しているだけで同梱されません)
【使い方】
1. カメラレイヤーの設定
カメラにマーカーのみが映ってほしいので、MarkerCameraのCulling Maskの設定を行います。
通常のレイヤーのオブジェクトは映ってほしくなく、reserved2, 3, 4レイヤーは正常に動作しないので、自分でレイヤーを作ってMarkerCameraにそのレイヤーのみが映るよう設定してください。
また、マーカーはもとの状態だとY座標が0以下のカメラに入力する(張り付く)ようになっていますので、MarkerCameraのy座標は0以下になるようにしてください。
2. Marker配置
座標と姿勢を取得したいオブジェクトの子にMarkerを置きます。MarkerはサンプルシーンのMarker00などをコピーするなどして用意してください。
(MarkerのScaleを(1,1,1)以外にした時は姿勢行列部をシェーダー内で正規化してください)
3. 各マーカーのマテリアル設定
各マーカーに情報を入力したい番号(_Num)が設定されたマテリアルを設定します。
同じ番号には複数の情報を入力できないので、一つのマーカーに対して一つのマテリアルが必要です。
_Num=0~63のMarkerマテリアルは、MarkerMaterialsフォルダ内に作っておいたのでどうぞお使いください。
4. 各マーカーのレイヤー設定
各マーカーオブジェクトのLayerをMarkerCameraで設定したレイヤーに設定します。
5. データ読み込み
マーカーの位置、姿勢を読み込みたいシェーダー内で、RenderTextureを参照し、データに対応した位置から_Num番目のデータを読み込みます。
サンプルのDebugShowCoordAsRGB.shaderと、DebugMakeRedQuadGS.shader内でマーカーの位置、姿勢を読み込む関数があるので、コピペするか参考にしてください。
フラグメントシェーダー内で読み込む版とそれ以外の場所で読み込む版があります。
【処理の順序】
1. Markerオブジェクトのレンダリングが行われます。MarkerマテリアルはMarkerCameraに貼りつき、情報を入力します。MarkerCameraの描画結果がMarkerRenderTargetに出力されます。
ex)
_Num=0のMarkerマテリアルは(0, 0)~(0, 15)の16ピクセル、
_Num=1のMarkerマテリアルは(0, 16)~(0, 31)の16ピクセル…に情報を書き込みます。
2. MarkerRenderTargetから番号を指定して情報を読み取り、座標や姿勢を得ます。
【サンプル解説】
・PickupableCube
1. 子オブジェクトのMarker00が、RenderTextureの_Num=0に対応する場所に座標・姿勢を書き込みます。
2. DebugShowCoordAsRGB(Marker00)で_Num=0の情報を読み取り、座標をRGBとして表示します。
・PickapableCubeWithRedQuad
1. 子オブジェクトのMarker01が、RenderTextureの_Num=1に対応する場所に座標・姿勢を書き込みます。
2. DebugMakeRedQuadGS(Marker01)のシェーダー内でRenderTextureの_Num=1に対応する場所の情報を読み取り、Marker01の座標を取得し、その座標の少しずれたところに赤いQuadを生成します。
모든 리뷰
더보기리뷰 등록
리뷰를 작성하려면 로그인이 필요합니다.
로그인하고 리뷰 쓰기