Shader 勉強メモ 「シェーダーとは?」
Unityでのシェーダーの位置づけ「シェーダーで何ができる?」
グラフィックスパイプライン:一連の描画工程
CPU上でのドローコール |
|
バーテックスシェーダー |
頂点数の増減・プリミティブの変更を含まない頂点属性の変更 |
プリミティブアセンブリー |
|
テッセレーションシェーダー |
プリミティブの分割粒度を変更できる |
ジオメトリーシェーダー |
頂点数の増減・プリミティブの変更を含む頂点属性の変更 |
ラスタライゼーション |
|
フラグメントシェーダー |
テクスチャやオブジェクトの表面情報を用いた複雑な陰影処理 |
ROP処理 |
|
フレームバッファの出力 |
|
※バーテックス=頂点情報、フラグメント=色情報・深度情報、プリミティブ=点と直線と三角形からなる基本図形
グラフィックスパイプライン外でのシェーダーの利用
コンピュートシェーダー |
Unity のコンピュートシェーダーは DirectX 11 の DirectCompute テクノロジに非常に近いものです。コンピュートシェーダーを実行できるプラットホームは以下のとおりです。 ・DirectX 11 グラフィックス API と Shader Model 5.0 GPU を伴う Windows と Windows ストア ・現段階で一般的に使用されている OpenGL プラットフォーム (Linux か Windows 上の OpenGL 4.3、Android 上の OpenGL ES 3.1)。Mac OS X は OpenGL 4.3 に対応していないため、コンピュートシェーダーはまだ、利用することはできません。 |
ー『Unity - マニュアル: コンピュートシェーダー』より引用
Unityでのシェーダーの扱い「シェーダーをどうやって使う?」
Shader Labと呼ばれるUnity独自の形式。各種シェーディング言語で書かれたシェーダーをShader Labに埋め込むことでGPUに計算させることができる。以下のフォーマットで書かれる。
Shader “Tutorial/Test”{ Properties{ [UnityEditer上から編集できる変数やテクスチャの指定などの設定] } SubShader{ Pass{ [各種シェーディング言語で書かれたシェーダー] } } FallBack “Diffuse” } |
シェーディング言語の種類
GLSL (OpenGL Shading Language) |
C言語ライクなシェーディング言語 |
Cg (C for Graphics) |
NVIDIAが開発。2012年に開発終了。 |
HLSL (High Level Shading Language) |
Microsoftが開発。コンピュートシェーダーも書ける。 |
MSL (Metal Shading Language) |
シェーダー実行時の処理
Shader Labの形式にCg/HLSLで記述→実行時プラットフォーム毎にGLSLに変換される。
シェーダー関連の気になる記事
Unity - マニュアル: グラフィックスコマンドバッファ
Unity - マニュアル: DirectX 11 と OpenGL Core
Unity 上に自分で物理エンジンを実装したい - yuki-koyama's blog
Unityのシェーダーについて自分なりにまとめてみた - SSSSLIDE
Shader 勉強メモ 「はじめに」
Shader、ずっと前から勉強しようと思っていたが、手を出していなかった。今回は記録を残すことでモチベーションを保っていこうと思います。開発環境はもちろんUnityで。
学習教材/参考資料は「Unityのリファレンス」と「ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまで」と「CGWORLD (シージーワールド) 2013年 10月号 vol.182」、あとは凹みさんの記事や必要に応じて論文などを使っていこうかと。
勉強の進め方は
- 参考資料の内容をまとめて記事にする。
- 実際に使って確かめる。使った機能や関数などと画像を一緒にまとめて記事にする。
- 作ったコードをGithubに公開する。
主に2番でやっていくかと思います。次回から本格的にやっていきます。
CGWORLD (シージーワールド) 2013年 10月号 vol.182:「リアルタイムシェーダー入門」特集があり、p22-p37に歴史や用語がまとまっていたので買った。
あとshader関連の気になる記事や書籍など
VR/ARでの文字入力方法(キーボード)まとめ
概要
VR HMD(ヘッドマウントディスプレイ)のOculus Rift, HTC Vive, PSVR, Fove, Daydream, ハコスコ。AR HMDのHololens, meta。
現在、数多くのVR/ARのHMDが世の中に出回っています。これらHMDは周りを見渡したり動き回ったりして使用するため、マウスやキーボードのように机に置くようなデバイスは使い勝手が悪いことが多いです。ということで、その代わりとなるような文字入力方法が色々と考えられています。今回はそれらのデバイスで「どのような文字入力方法(キーボード)が考案/実装されているのか」についてまとめようと思います。
気が向いたら更新すると思います。「あれ、なんか足りなくない?」とかあれば、教えて頂ければうれしいです。
文字入力方法の種類
- 従来のキーボードを用いた方法:いつもの入力方法。
- 「ノート型デバイス」を用いた方法:研究
- 「コントローラー」を用いた方法 :Oculus Touch / Viveコン / PS Move / Daydreamコン
- 「ハンドモーションキャプチャ」を用いた方法:Leap Motion / Hololens?
- 「視線(頭)」を用いた方法:Fove / その他の vr/ar HMD
- 「音声」を用いた方法:全ての vr/ar HMD
- 「スマホ+HMD」を用いた方法:全ての vr/ar HMD?
ノート型デバイスを用いた方法
1.『Poupyrev, Ivan, Numada Tomokazu, and Suzanne Weghorst. "Virtual Notepad: handwriting in immersive VR." Virtual Reality Annual International Symposium, 1998. Proceedings., IEEE 1998. IEEE, 1998.』:ペンとノート型のデバイスを持って使う。現実で持っているノートがVR空間上に現れる。ペンでノートに文字を書けば、VR空間のノートにも同じように書かれる。
ドラムスティック方式
ドラムスティックで従来型キーボードのボタンを押す方式。ブラインドタッチはできなさそう。
1.Drum Keys - Google Daydream Lab:
2.Cutie Keys - Normal VR : https://github.com/NormalVR/CutieKeys/
ほとんど同じ。こちらはオープンソース。
てんちょー方式
立体方式(両手)・フリック方式(片手)でアルファベットも日本語も入力できる。キー配置の色んなアイデアがあって楽しい。
扇型方式
yutokun:ハンドコントローラーでVR日本語入力✏ - Qiita
手首をひねって扇形のUIから文字の選択。人差し指のトリガーで文字の決定。スティックの上下で濁音などに対応。文字選択時に振動のフィードバックあり。
『GitHub - yutokun/VR-Text-Input: VR Text Input Method for Japanese. 』
フリック方式
コントローラーで スマホのフリック入力をできるようにしたもの。
ハンドモーションキャプチャーを用いた方法
・ Leap Motionを用いた文字入力
1. Leap Motion で日本語の文字入力・文字認識 | Do Design Space
空中に指で文字を描き、手書き文字認識し、入力する。
2.『細野敬太, et al. "Leap Motion を用いたジェスチャ操作による文字入力方法の提案." 人工知能学会全国大会論文集 28 (2014): 1-4.』
3. 将来的に(oculusがPebbles Interfacesを買収してVRグローブを研究しているので、そちらもそのうち出てくると思います。)
視線(頭)を用いた方法
1. Fove:視線を動かしてポインティングする方式
『FOVE: The World's First Eye Tracking Virtual Reality Headset by FOVE — Kickstarter』
音声を用いた方法
音声認識用いることでマイクのついているHMDならどれでもできる。
スマホ+HMDを用いた方法
HoloKeyboard - @sumihiro(twitter):iPhoneからHoloLensに文字入力ができるというもの。このアプリはHolo専用ですが、技術的には他のHMDにも応用可能だと思います。
あとがき
今回は実例ばかりで論文や研究段階のものはあまり調べていません。今後時間があったらチェックしていこうかなと思います。また、情報が不足している部分も後で埋めていこうと思います。