Renderingレイトレーシングの概念を理解するためにUnityでレイトレしてみます。今回は球を表示して簡単なライティングを行うところまで実装します。自分の中でしっかり理解することを目的としてUnityで実装しなおしただけのものです。qiita.com上の記事の方がしっかり解説されていますのでUnityのコードが必要ない方は上の記事を読むことをお勧めします。視点からの経路をトレースすることで物体を描画するレンダリング方法です。レイトレーシングの概念として、まず視点の位置をスクリーンよりも後ろ側に定義して、それとは反対側にオブジェクトを定義します。次に視点からスクリーンの各ピクセルに向けてレイを飛ばします。これらのレイと、オブジェクトとの衝突判定を取ります。オブジェクトと衝突があった場合には、そのレイが通ったスクリーン上のピクセルにオブジェクトの色を描画します。これを繰り返すことでオブジェクトを描画できます。これがレイトレーシングの基本的な仕組みです。(本当はここからさらにレイを跳ね返らせて計算を続けたりしますが・・)以降、これをUnityで実装する方法を紹介していきます。準備まずは準備としてベースとなる仕組みを作ります。画面全体に対して効果を掛けるシェーダを書きたいので、Unityのポストエフェクトの仕組みを使います。ポストエフェクト用のスクリプトを作ります。}}このあたりの技術的詳細については以下の記事を参照してください。light11.hatenadiary.com次にシェーダのベースを作ります。}}頂点シェーダでは今回は何も行わず、処理は主にフラグメントシェーダで行います。レイトレーシングにはスクリーン座標を使うため、VPOSによりスクリーン座標を使えるようにしています。レイと球の構造体を追加して衝突判定関数を書く次にシェーダにレイと球の構造体を定義します。color;};レイは起点と方向を持ちます。球は半径と中心座標、そして色を持たせておきます。次にこれらの衝突判定を行う関数を追加します。i;}交差状況を表すIntersection構造体を定義し、衝突があった場合には衝突した点とその点における法線と色を返します。レイと球との衝突判定アルゴリズムは下記のサイトを参考にさせていただきました。marupeke296.comこれで準備は整いました。あとは例を飛ばすだけです。フラグメントシェーダでレイを飛ばすさてそれではいよいよレイを飛ばします。長くなりますが見やすいように、シェーダ全文を記載しておきます。前節からの変更点はフラグメントシェーダのみです。}}細かい説明はフラグメントシェーダのコメントとして記載しました。前節で定義した衝突判定を元に判定を行い、衝突があった場合には法線を使ってDiffuse色を計算しています。結果レンダリング結果は次のようになります。正常に描画されていることが確認できました。»プロフィールUnityエンジニア。グラフィックスへの興味が強めです。Blur(渦巻ブラー)のポストエフェクトを実装する月別アーカイブはてなブログをはじめよう!halya_11さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。