LAB
研究室
デモプログラム
視神経モデル網膜シミュレーション – Retina simulation of Human Visual System -
久々に技術デモを掲載してみようと思います。
今までもコンピュータグラフィックス以外の他の分野にも目を向けながら技術デモを紹介してきていますが、
今回は医学の分野に少し触れてから、その切り口でゲームCGを考えてみようと思います。
写実的なリアリティを目指していこうとすると、最終的に行き着くのは「本物の再現」になります。
今後DirectX11世代からはその考えがゲームCGでも加速していくのは間違いないと思いますが。そうなってくると、シーンの計算が終わった後、最終的な画面への反映の方法も重要になってきます。
現実世界には光を受けて映像化するデバイスは数あれど、主に次のどれかに分類できると思います。
◆フィルム
◆センサー
◆肉眼
感光フィルムは昔ながらのスチルカメラで感光剤を塗布したフィルムを感光させる方式です。
感光センサーはCCDセンサーなどの光の強さを数値化することができるもののことです。
肉眼は普段日常で皆さんが目で見ている景色がまさにそれです。
カメラ的な表現はゲームCGの中でもToneMappingとしてすでに多くの作品がHDR表現として取り入れていますが、今回は人体に備わっている感光センサー「網膜」にフォーカスしてみたいと思います。
そんなわけで「網膜シミュレーション」を今回のお題にしたいと思います。
…と、その前に、原理の解説が長くなるためにまず先にデモを紹介します。
ダウンロードして実際に実行することができます。
このデモは以下からダウンロードすることができます。
今回もWindowsXPでも閲覧実行可能にするためにDirectX9でデモを作成しました。
実際にはDirectX11で実装することで実行効率を上げ、さらに速度を向上させることができるようになります。
動作可能な環境
<動作条件>
Windows XP/Vista/7 DirectX9.0c
ShaderModel 3.0 以降
※注意※ 今回のデモは大変複雑なシェーダーになっています。
ShaderModel 3.0 以降対応でもドライバの問題などで動作しない場合があります。
なるべく最新版のグラフィックドライバをご利用ください。
尚、デモの中でfp16浮動小数点バッファを使用していますので、SM3.0対応GPUでもfp16に非対応のGPUでは起動できません。
Download
HexaRetina.zip (約5.9MB)
【動作確認済ハードウェア】
・NVIDIA GeForce GT 520
・AMD Radeon HD 7750
【操作方法】
左マウスクリック+ドラッグ…視点を回転
このデモでは、残像現象を主に表現しています。
その効果がわかりやすいように残像を2倍強調されて出るようにしています。
(実際にはこの半分の残像量になります)
今後網膜上の明順応暗順応が実装されれば、一般的なTonemappingとは少し違った見え方で表現できそうです。
見え方をよりそれらしくするために次の技法も併用しています。
◆散乱グレア
◆周辺減光
◆HDRモーションブラー(カメラを回した時に効果が確認できます)
網膜(Retina:レチナ)は眼球の一番奥の部分(眼底)に広がっている膜状に視細胞が広がっている部分を指します。
光を取り入れて網膜で焦点を合わせることで受光しているわけですが、この表面で起きている現象自体を今回シェーダーでシミュレートしてみたいと思います。
あちこちで医学系の資料やシェーダー表現向けの資料を探してみて自分なりに解釈してまとめてみました。
そのため、必ずしも厳密にシミュレートしているわけではなく、少し語弊を含む表現もあるかもしれません。
参考にした資料はこのあとで紹介します。
感光センサーにあたる部分の視細胞感覚器は「錐体細胞」と「桿体細胞」の2つのタイプに分類されます。
両者それぞれに長所と短所があり、その短所を補い合うことで機能しています。
■錐体細胞 (Cone cell)
CGの世界もおなじみの赤・緑・青の色です。
それぞれの色を感知できる細胞です。明所でしか機能しません。
赤専用、緑専用、青専用の錐体細胞が存在していて、それぞれが独立して機能しています。
この中でも緑が最も感度が高いと言われています。
解像度が高く、昼間の人間の視界はこの細胞が担っています。
それぞれに対応する波長の長さから L(Long)・M(Middle)・S(Short)という記号が付いています。
錐体細胞 (Wikipedia)
http://ja.wikipedia.org/wiki/%E9%8C%90%E4%BD%93%E7%B4%B0%E8%83%9E
【長所】
・赤青緑の色を色彩豊かに感知することができる
・明るい場所での応答が早い
・視野の中心部に密集していて非常に高い解像度が得られる。
【短所】
・暗い場所では機能しない(真っ暗)
■桿体細胞 (Rod cell)
赤青緑のほかにこの桿体(かんたい)細胞と呼ばれる細胞は暗い場所で機能する視細胞です。
色は青系のあたりに感度のピークがあり、暗いところでは視界が青み掛かるのはこの細胞の影響によるものです。
人体に備わる暗視スコープです。
太古の昔に夜に視界を確保し、外敵から逃れるために備わった能力といわれています。
名前には桿体(Rod)から「R」という記号が割り当てられています。
桿体細胞 (Wikipedia)
http://ja.wikipedia.org/wiki/%E6%A1%BF%E4%BD%93%E7%B4%B0%E8%83%9E
【長所】
・高感度で暗所に強い
・視野に広範囲に分布している。
【短所】
・色が単色(青色系)のみ
・応答速度が錐体細胞に比べると遅い
・解像度は低い(広くまばらに分布)
今回のデモではこの二種類の視細胞を別々にシミュレートしています。
■感度曲線
それぞれの細胞の感度曲線はおよそ次のようになっているそうです。
得意とする波長レンジに違いがあり、お互いをカバーしあう存在ということがわかります。
暗いところではたらく桿体細胞が青色?緑色のレンジをカバーしています。
■化学反応の仕組み
網膜表面の反応は化学物質が影響しています。今回のシミュレートではこの化学物質の表面濃度の増減を擬似的に表現しています。
網膜の錐体細胞に存在する光感受性タンパク質と呼ばれる「フォトプシン(Photopsin)」はオプシン、レチナールと言われる物質からできています。一方、桿体細胞ではフォトプシンに似た特性を持つ「ロドプシン(Rhodopsin)」があり、スコトプシン、レチナールが関与しています。
ここで面白いお話が出てきます。最近ではカテキンなど健康のために話題に上る化学物質は沢山ありますが、ここでも3つの物質が出てきます。それは「亜鉛」と「βカロチン(ビタミンA)」と「アントシアニン」です。
ビタミンAは人参などの野菜に多く、アントシアニンとは、ブルーベリーなどに含まれている紫色の色素でどちらも目に良いとされています。
ここで出てきたレチナールという物質はビタミンAから生成されます。そのためビタミンA(βカロチン)の摂取が不足するとそもそも回転に使われる原材料が不足し、夜盲症になり夜に弱くなると言われています。
健康のためにも日々の生活で物質の原材料は摂取しなければいけませんネ!
上の図で言うところの回転の量が多いと刺激が多く伝達し、「明るく見える」ということになります。
■網膜上での濃度変化
光を浴びると上図で言うところの光分解が進みます。
分解された物質はレチナールへの変化し、すぐに再び元のロドプシンに再合成されてて戻ってくることにはなりますが、明るい箇所は変化が激しいためロドプシンに戻ってくる勢いも増加します。
自転車のペダルを漕いで回すように回転の原動力となるものが網膜上では「光エネルギー」です。
今回のデモではこの化学物質の量をテクスチャ内のRGBAピクセルに格納して再現しています。
LSMRそれぞれの濃度をRGBAに格納しています。
■サッケード / 微細眼球運動
眼球は一箇所を凝視していても細かく視線の先が無意識のうちに動いています。
又、動くことによって時間軸方向の変化を刺激として取り入れているようです。
このデモでは微細なブラーで見え方に変化を付けています。
■プルキンエ現象(プルキンエ効果)
チェコのプルキニェ(Purkinje)氏が発見したことからプルキニェ現象またはプルキンエ現象と呼ばれるそうです。
暗所の桿体細胞が青色系の色覚を持つことから、暗い場所では色味が青色に傾きます。
もし眩しい光がパッと消えた時、錐体細胞が瞬時に退色して赤色が早く消えて行くような現象が置きます。
今回のデモでは、この表現によってランプの消灯時の残像が色変化を起こしながら退色していくようになっています。
この色の変化が肉眼で見た時の特徴的な現象の一つになります。
「なるほど!確かに現実でもこんな感じだった!」と感じられる一つかな、と思います。
■ これから拡張していくこと ■
今回は残像現象が主な表現の主体になっていますが、今後まだまだリアルさを出していくことが可能です。
技術デモということで、実装にあまり時間をかけていませんでしたが、これからは以下に挙げるような内容を強化していくことで更に本物らしさが加わっていきます。
このデモで表現されている桿体細胞の反応についてはまだほんの少しだけです。これからも拡張していきたいところです。
■明順応・暗順応
今回、この現象をシミュレートするまでに至らず、残像のみのシミュレーションになっていますが、
原理的には次のような原理になります。この仕組みを上手く濃度で処理できれば順応も完全に再現できるかもしれません。
明順応
1.暗所から急に明所にでると眩しく感じます(目が眩む)
2.やがてロドプシンが減少して眩しくなくなります。
(過分解で光分解用の弾切れで再合成装填が間に合わない)
桿体細胞ではロドプシンが完全に分解されてしまうと細胞は休止状態のようになります。
そのため、明るい場所では錐体細胞に切り替わるような挙動を示します。
暗順応
1.明るい場所から急に暗所へ入ると最初は暗くて見えにくい
2.やがてロドプシンが増加して物が見えるようになります。
(光分解用の弾が装填されて弱い光で桿体細胞で物質が回転するようになる)
非常に暗い場所では錐体細胞は暗所では機能を失い、代わりに桿体細胞が活性化してきますが、
その時の暗順応は、錐体細胞が順応した後に桿体細胞が順応してくる2段階の速度変化があります。
■錐体細胞と桿体細胞の分布
それぞれの視細胞の分布範囲が異なるようです。
これによって、明るい時と暗い時の見え方が変化します。
明るいところは視界中心部が強く反応し、暗いところでは満遍なく見えるようになります。
今回のデモでは細胞の分布はシミュレートしていませんが、個体差によるばらつきと微細な斑をノイズで表現しています。
■参考にした資料
WEB上でgoogle経由で幾つか参考にした資料がありますのでご紹介します。
■眼の構造
http://y-ok.com/eye/structure/structure.html
予備知識として知っておくと良い内容がありました。
■網膜
http://www.med.teikyo-u.ac.jp/~ortho/med/ana/ana104.htm
帝京大学の研究資料のようです。かなり詳細に書かれていて今回の実装にとても役に立ちました。
■A photon accurate model of the human eye
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.86.9269&rep=rep1&type=pdf
網膜の錐体の分布についてのお話。
http://syoyo.wordpress.com/2005/10/04/a-photon-accurate-model-of-the-human-eye/ (SYOYO FUJITA’S BLOG)
こちらの記事にも紹介されていました。
■A computational model of afterimages
http://www.mpi-inf.mpg.de/~ritschel/Afterimages/
今回のポストエフェクトフィルタとしての実装に参考になりました。
より実践的な内容で、レンダリングフローも解説されています。実装の取っ掛かりはここから入ると良いかもしれません。
完全な網膜シミュレートは今回の段階ではまだすべてが入っているわけではありません。特に桿体細胞の部分はまだこれから拡張して行けます。これからもこの技法は発展させる伸び代がありそうな予感がします。
カメラ的な表現の他に肉眼視の選択肢が増えることでFPS系のゲームやホラー系の一人称視点のゲームには、より一層リアリティを持たせることができるようになります。
ヘキサドライブはゲームエンジン開発だけでなく、ゲームソフトウェア開発も行なっています。
技術力で表現の幅を広げてより良い作品を世に送り出していきます!
CATEGORY
- 製品事例 (7)
- デモプログラム (18)
- プログラムTIPS (41)
- C言語 (5)
- C++ (6)
- C++cording (4)
- Ruby (8)
- VisualStudioの使い方 (3)
- 最適化Tips (5)
- ゲーム開発テクニック (2)
- その他 (7)