Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

実行時ライトベイクをShaderでやってみた

2016/10/30のUnity道場のLTで話した内容になります

  • Identifiez-vous pour voir les commentaires

実行時ライトベイクをShaderでやってみた

  1. 1. 実行時のライトベイクを Shaderでやってみる Unity Technologies Japan Developer Relation Manager / Engineer 黒河 優介
  2. 2. なぜそんな事をやろうと思った? • UnityのForward環境では 処理出来る光源に制限がある • DeferredはモバイルやVRだと重いので… • Editor上でBakeだと、ランダムマップ生成などが実現できない →そうだ、実行時にライトのベイクをしよう!!!
  3. 3. ランタイムベイクのアイディア 通常のモデル + → ライトの影響度 ライトの影響を 受けたモデル ※Unityちゃんを例にあげているが、背景など動かないオブジェクトでの利用を想定
  4. 4. 今回の話 + → 今回の話は、ここをShaderで作成してみる話
  5. 5. ライトの影響度を作るとは… 色々なアングルから見ても破たんしないようにする 必要がある
  6. 6. ライトの影響度を作るとは… Texture UV展開されたModel →ModelのUV座標を使って展開
  7. 7. ライトの影響度を作るとは… →ModelのUV座標を使って展開 今回作らなければならないのはこのTexture
  8. 8. まずは、Shaderのおさらいから Vertex Shader Fragment Shader 3D空間にある各頂点が2D 画面上のどの座標に位 置するかを計算する。 2D画面上で表示する色 を計算する 質感を出すなどは大体こ ちらで行われるため、 Shaderの話になるとコチラ がメインになりがち
  9. 9. どうやって、Textureを作るのか… 1.RenderTextureをProgramで作成して、それ に対して描画すれば出来そう 3.あとは オブジェクトの位置、ライトの情 報、法線情報を元にfragmentshaderで頑張 る 2.VertexShaderでUV情報のみ利用すれば展 開図は出来そう
  10. 10. 通常VertexShaderでやっている事をおさらい Modelの 各頂点座標一覧 Objectの位置情報 カメラの情報 Vertex Shader 各頂点が、画面上のドコに表示されるかは Vertex Shaderの計算で決定される
  11. 11. 今回のTexture生成でのVertexShader Modelの各頂点 ライトマップ用UV 座標 Vertex Shader ライトマップ用のUV座標のみを使う事で、もともとの UV展開用のTextureに各頂点をマッピングできる
  12. 12. どこがどの位ライトの影響を受けるかは FragmentShaderを頑張って書く!!
  13. 13. ベイクしている様子のイメージ 点光源のみ対応 プロジェクトはコチラ https://github.com/wotakuro/PrebakeSystem
  14. 14. 結局、何が言いたかったかというと… ・Shaderというと質感を出すためのものというイメージが強く fragmentshader(pixel shader)の話がメインになりがち ・VertexShaderを使う事で幅が広がるというのが今回のお話でし たかった

×