フォト

Google AdSense

  • AdSense
無料ブログはココログ

« 2013年6月 | トップページ | 2013年8月 »

2013.07.31

SIGGRAPH 2013でのUnreal Engine 4の物理ベースシェーディングの話

SIGGRAPH 2013の"Physically Based Shading in Theory and Practice"のコースで"Real Shading in Unreal Engine 4"というセッションがありました。UE 4は物理ベースという話は聞いていたのですが、実際にどういうことなのかというのが解説されたセッションでした。

SIGGRAPH 2013 Course: Physically Based Shading in Theory and Practice
http://blog.selfshadow.com/publications/s2013-shading-course/

スライド
http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_slides.pdf

コースノート(より詳細なドキュメント。HLSLのコードも書かれてる)
http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes.pdf

Epic Gamesの話による(スライドやコースノートに書いてる)とSIGGRAPH 2012のDisneyのセッションを結構参考に為てるみたいですね。これはずばり"Physically-Based Shading at Disney"と言うセッションですね。

SIGGRAPH 2012: Practical Physically Based Shading in Film and Game Production
http://blog.selfshadow.com/publications/s2012-shading-course/

DisneyはこのセッションでBRDF Explolerというインハウスのツールをオープンソースで公開したのですが、OpenGL + GLSLで書かれているので比較的ゲームなどのGPUでレンダリングをやる環境に持って行きやすそうですね。

http://www.disneyanimation.com/technology/brdf.html

こうして、映画業界のやり方をゲームのシェーディングでも取り入れていけると最終的にはゲームと映画でかなりアセットを共通化できそうですし、エンジニアの行き来もしやすくなりそうですね。

そういや、HPG 2013のパネルディスカッションの"High-Performance Graphics in Film"などを聞いてたら使ってる技術がちょっとずつ近づいて来てるなという印象でした。

ノートPCについてるトラックパッドをバーチャル化する

Intelがタッチパネル向けのサンプルでノートPCについてるトラックパッドをバーチャルジョイスティックみたいな感じで表示するサンプルを公開してるけど、これはどうなんだろうなぁ。

Virtual Trackpad
http://software.intel.com/en-us/blogs/2013/07/17/virtual-trackpad

ちょっと家にあるタッチパネルな端末で試してみようかな。

Screen-space ambient obscuranceの話題

Unity 4.2がScreen Space Ambient Obscuranceをサポートしてたのでテスト。

Screen Space Ambient Obscurance
http://docs.unity3d.com/Documentation/Components/script-AmbientObscurance.html

元はHPG 2013でScreen-Space Far-Field Ambient Obscuranceの発表でScreen-space Ambient Occlusionはダメだ、って話でAmbient Obscuranceが気になってたところUnity 4.2に入ったのでちょい実験。

http://masafumi.cocolog-nifty.com/masafumis_diary/2013/07/hpg-2013-screen.html

なお、Unityの場合、Pro用の「Image Effect」アセットに入ってます。

UnityのAmbientObscurance.jsのソースの頭に元ネタになった論文の情報がコメントに書かれていて、ソースが公開されています(BSDライセンス)。

Scalable Ambient Obscurance
http://graphics.cs.williams.edu/papers/SAOHPG12/

HLSLがあるので、自作プログラムに持って行くとかにも良さそうですね。

Ssao

2013.07.29

製品版Leap Motion

そういや日本を留守にしてる間にLeap Motionの製品版が届きました。

左が、以前からあった開発者向け版で、右が製品版。

Leap


明日から

明日から通常業務に戻ります。

とは言え、出張残務があるけど。

2013.07.27

帰国

無事に帰国&帰宅しました。

2013.07.26

帰国準備

とりあえず、帰国日になったので帰国準備中。

SIGGRAPH終了

無事、SIGGRAPH終わりました。

明日、帰国便乗ります。

2013.07.25

9日目

こっち滞在、9日目。

SIGGRAPH 2013の会期としては5日目ということで最終日になります。

本日は、"Physically Based Shading in Theory and Practice"のコースと"Rendering Massive Virtual Worlds"を予定。

帰国便には明日乗ります。

SIGGRAPH 2013のCourseやTalksの資料やサイトをまとめてくれてるページ

SIGGRAPH 2013のCourseやTalksの資料やサイトをまとめてくれてるページがありました。

http://blog.selfshadow.com/2013/07/24/siggraph-2013-links/

これはありがたいですね。

8日目

SIGGRAPH 2013会期は4日目。

昨日は、”Advances in Real-time Rendering in Games”をなんとか完走。

本日は、いろいろなセッションをはしご。

2013.07.23

7日目

SIGGRAPH 2013会期3日目。

今日は、”Advances in Real-time Rendering in Games”を中心に見る。

http://advances.realtimerendering.com/s2013/index.html

Unity 4.2でScreen Space Ambient Obscuranceサポート

そういえば、Unity 4.2 ProでImage EffectのアセットにScreen Space Ambient Obscuranceが入るようになったんですね。

http://docs.unity3d.com/Documentation/Components/script-SSAOEffect.html

OpenGL ES 2.0から使えるようなのでSSAOに変わってこちらを使うというのはアリかもしれませんね。

2013.07.22

6日目

今日はアメリカ滞在 6日目。

こちらは、朝6時半過ぎたぐらい。SIGGRAPHは会期2日目です。

OpenGL 4.4やOpenCL 2.0が発表になりましたが、そちらはShader.jpに書いています。

http://www.shader.jp/?page_id=15

AMDとNVIDIAのGPUの固有機能だったものが融合しつつある感じですね。

Unity 4.2がでた

Unity 4.2が出たみたいですね。

Windows Store対応とOpenGL ES 3.0対応はうれしいところ。

http://blogs.unity3d.com/2013/07/22/unity-4-2-has-arrived/

あとは、有料版限定機能が制限付きだけど一部、無料版に来てる。

2013.07.21

アメリカ滞在5日目

アメリカ滞在5日目。HPG 2013は最終日、SIGGRAPH 2013スタート。

今日はHPGは早めに終わるので、そのあとSIGGRAPHの受付してくるかな。

2013.07.20

滞在4日目

アナハイム滞在4日目。HPG 2013は会期2日目の中日。

SIGGRAPH 2013(こちらの時間で21日-25日)は明日から開催ですが、明日は受付だけですね。

HPG 2013: Theory and Analysis of Higher-Order Motion Blur Rasterization

HPG 2013の初日に見たセッションの話題もう一本は、"Theory and Analysis of Higher-Order Motion Blur Rasterization"。

これはIntelの人が絡んでるので論文が下記にあります。残念ながらデモやサンプルはないですが、そのうち出てくるかもしれませんね。

Theory and Analysis of Higher-Order Motion Blur Rasterization概要と論文PDF
http://software.intel.com/en-us/articles/theory-and-analysis-of-higher-order-motion-blur-rasterization

これは、モーションブラーの話なんですが、VertexベースのブラーなんですがLinearではないのでカーブ状のブラーを高品質に出せるみたいですね。

カーブ内のコントロールポイントは、ブラー前頂点とブラー後頂点のカーブの軌道から打つみたいですがタイルベースで頂点やエッジを見てやるみたいですね。

論文のFigure 11なんかのSPONZA Camera rotationってのを見てるとカメラが回転した時に起きる円形なブラーとかはうまく出せるみたいですね。これもわりと現実的に使えそうな感じですね。

HPG 2013: Screen-Space Far-Field Ambient Obscurance

最近は、生存報告ばかりでしたがようやくこちらで発表を聞いたりしてるので、そこからの話。

今日は、HPG 2013で5つの論文発表を聞いていたのですが、ゲームですぐに検討してみてもよさそうだったのが、"Screen-Space Far-Field Ambient Obscurance"。

Screen-Space Far-Field Ambient Obscurance(Reference implementationにBSDライセンスのソース有)
http://wili.cc/research/ffao/

SSAOは、広い空間の時に問題が大きかったり、深度マップベースだと深度マップに描かれない複雑な構造のものの遮蔽の問題とかあるわけで、そのあたりの問題を解消したより良い手法の話。

ソースが公開されているので試すには良さそうですね。

滞在3日目

アメリカ滞在3日目。

本日は、写真のところで開催のHPG 2013。

R0000496

2013.07.19

明日から

日本時間とこちらの時間のずれがあってややこしいですが、明日からいろいろと学会参加で話を聞く展開です。

初日は昼から半日なので、まずは慣らしてく。

幸い時差ぼけの影響は少ないです。うまく移行できてるようです。

2013.07.18

滞在2日目

無事にホテルチェックインして一晩あけて滞在2日目です。

ホテルの前の通りから見えるSIGGRAPH会場のコンベンションセンター。

まだ会期は先だけども。

R0000495

2013.07.17

数日留守にします

月末まで海外に出るので留守にします。

面白いネタを色々と聞いてこないと。

ジオメトリシェーダとStream Output

個人的にはジオメトリシェーダとStream Outputは使いにくいので、アレのやめる方向性として描画シェーダでUAVで書き込んだり、Compute Shaderを使ったりと言うことを考えているのでパフォーマンス面の評価はやらんとなぁ。

わりと個人的予測で、ジオメトリシェーダとStream Outputはレガシーな機能になるんじゃないかと思ってるんですよね。

Direct3D11.1 UAVを使ったStream Output的テクニックの実験

Vaio Pro 11のGPUがIntel HD 4400なのでDirect3D11.1対応ということで全シェーダステージUAVアクセスの実験をしてみました。

ソース(要FBX SDK。そのうちシンプルなサンプル書きます)
https://dl.dropboxusercontent.com/u/10225794/FBXLoaderUAV.zip

やっつけなのでこの前のPerfume FBXの上に適当にやってます。関数名変数名気にしないでください。

とりあえず、FBXLoaderSample.cppのRender()関数だけ見てもらえば、流れがつかめるかな?

・第1パス
頂点シェーダだけバインド、ピクセルシェーダはNULL。

vsUAVTest.hlslが頂点シェーダで動くのですが、このシェーダはu1レジスタにセットされたRWByteAddressBufferに頂点バッファのうちPositionをStoreします。

・第2パス
頂点シェーダとピクセルシェーダをバインド。simpleRenderVS.hlslが頂点シェーダで走るのですが、このシェーダはu1レジスタにセットされたRWByteAddressBufferからPositionを読み出して描画に使います。

ここまで見るとわかりますが、従来のジオメトリシェーダで行うStream outputを頂点シェーダでやってみたという話ですね。

ジオメトリシェーダを走らせないので、OpenGLのTransformfeedback的ですね。速度的な優位性はまだ評価していないので追々やっていきます。

2013.07.15

Vaio Pro 11に増設バッテリー

ここ数年はモバイル用のPCはMacbook Airだったんですが今年のMacbook Airはあんまり更新意欲がわかないアップデートだったのでVaio Pro 11を購入しました。

一応、バッテリーは公称で11時間ということだったのですが、SIGGRAPHとHPGに持って行く上で実際に11時間使えるのか不安だったのでシートバッテリーを購入。このバッテリー自体の重量は290gということで、足してもMacbook Air + HyperJuiceよりはぜんぜん軽いのでOKですね。

http://www.sony.jp/vaio/products/VGP-BPSE38/

そんなわけで、取り付け。

Dsc02915

とりあえず裏側に接続端子があるので蓋を取る。

Dsc02916

蓋取ったらこんな感じ、しかし、この蓋外したらなくしそうなので困った...と思ったのですが。

Dsc02917

シートバッテリーを見てみてるとこの蓋を収納する場所が用意されてました。こういうのはありがたいですね。

Dsc02918

蓋セット。

2013.07.11

頂点シェーダでのUAV使用

Intel GPUですが、ようやくWin 8とDX11.1 GPUの2つが揃った(自宅デスクトップはMac ProでブートキャンプWin 8 + DX11.0 GPU)のでかねてからアイデアとしてやろうと思ってたネタをやろうかと考え中。

まずは、頂点シェーダでUAVを使用してGPUのメモリに書き出すネタ。ひとまず、やりたいシェーダはコンパイル通ったのでC++のAPI側のコードを書かないと。

DX10以降のHLSLのhalfの挙動の話メモ

ちょうどTwitterで出た話題のメモ。

HLSLにhalf型という変数型があるわけですが、DX9世代だと16bit浮動小数点値なわけで、GPUによってはこれで演算処理が速くなったりするんですがDX10以降だとちょいと事情が変わります。

Scalar Types(英語、最新情報)
http://msdn.microsoft.com/en-us/library/windows/desktop/bb509646(v=vs.85).aspx

スカラー型(日本語、古い。halfの記述はあってるけど、後述の低精度変数の話は無い)
http://msdn.microsoft.com/ja-jp/library/ee418354(v=vs.85).aspx

このデータ型は、言語互換性を維持するためにのみ提供されています。Direct3D 10 シェーダー ターゲットは、すべての half データ型を float データ型にマップします。half データ型は、均一グローバル変数では使用できません (この機能が必要な場合は /Gec フラグを使用します)。

・・・というわけで、DX10以降のSM4.0以降だとhalfを使ってもfloatになるので最適化目的でのhalf型の使用はできません。

一方で、英語のドキュメントを読むと下記のような見慣れない変数があります。

min16float - minimum 16-bit floating point value.
min10float - minimum 10-bit floating point value.
min16int - minimum 16-bit signed integer.
min12int - minimum 12-bit signed integer.
min16uint - minimum 16-bit unsigned integer.

DX11はWindows RTやWindows Phone 8などのモバイルOSでも使用できるわけですが、これらの端末のGPUは
OpenGL ES 2.0を使ったiOSやAndroidでおなじみですが、それらの低精度で実行するのと同じような感じですね。消費電力や速度のために変数の精度を下げるって感じですね。

GPUとドライバによって実際に効果があるかはまちまち(32bitで実行される場合も)ですが、精度を下げて速度を稼ぐという場合にはこちらの記述を使った方が良さそうですね。

2013.07.09

渡米準備

日本時間で17日からアメリカに行くのですが、全然準備ができてないなぁ。

週末の3連休になんとかしないと。

2013.07.08

FBXの読み込みで学ぶべきソース

FBX SDKのサンプルで見るべきサンプルはやっぱりViewSceneサンプルかなぁ。

http://usa.autodesk.com/adsk/servlet/pc/item?siteID=123112&id=10775847

OpenGLでスキンアニメーションまで再生する描画サンプルなので一通りの機能が入ってるんですよね。ソースは大きめですが、これで一通り対応できる。

ただ、基本的には固定機能的な実装なのでGPU対応はちょっとアレンジがいるかな。

Viewscene

次のネタ

FBXのスキニングを実行するためのコードを書いてる。

そろそろ解説記事を残しておきたい。

CEDECのこと

まだまだCEDEC資料片付いてないのですが、コンピュートシェーダで読み書きできるものは、その後のグラフィックスの処理にどう受け渡しができるのかという基本的なところから確認しつつ事例をどれだけ紹介できるかというところかと思っております。

DX9だとGPUはピクセルシェーダでテクスチャに演算結果を書き出しができて...
DX10だとジオメトリシェーダが登場して、ストリームアウトプットで入力したものとは別な頂点バッファに処理結果を書き出せて...(OpenGLのTransform feedbackだとGSじゃなくてもいいけど)

では、DX11では?

・・・と言った話ですね。わりと海外の事例では、ピクセルシェーダをコンピュートシェーダに移して、コンピュートシェーダ特有の機能で高速化を図るという話ですが、これはまぁコツがわかればすぐに発想的に思いつくことなのでセッションではできる限り除外していきたいところです。

2013.07.05

Tiled Resourcesの対応チェック

今のところD3D11.2のビルドできるのは自宅ではSurface Proだけなのですが、さすがにIntelのHD 4000は未サポートだなぁ。

やっぱりAMDのGCNアーキテクチャ以降のGPUいるかなぁ。

2013.07.02

修正した部分

DirectXTKのSpriteBatchがDepthStencilStateを変更しているということに気づかずうっかりミスってましたが、修正しました。

特にインスタンシング描画時にエラーが顕著でしたね。

Fbx001
前のリビジョン

DepthStencilStateが2Dのテキスト描画用でZバッファ効いてない感じ。

Fbx002
修正版

正しく描けてる。

ソース修正

FBXLoaderのサンプルのやつDirectXTKの文字描画のときにDepthStencilStateが書き換えられるのを戻してなかったので修正しました。

https://github.com/shaderjp/FBXLoader

これで正しく描画されるはず。

2013.07.01

Windows Phone 8端末

999322_10200299380592759_795478941_

SIMフリーなLumia 920LTE。

最近、たまにアメリカとか行くのですが現地SIMって1日プランとかで$3で200MB(それ超えると低速になる)とかあって、海外ルーター借りるより安くて利便性高いんじゃないかと思ったのと、なんとなくアプリ作ってみたくなったので購入。

日本でも使うかは考え中。

ちなみに、日本語は普通に対応してるし、文字入力も10キー配列でフリックもいけますね。

DirectXTKの文字描画で

今、GitHubにあげてるリビジョンはDirectXTKの文字描画入れるとZバッファ周りの処理がおかしくなるなぁ。

なんか、ステート変更が戻らないのだろうか?

« 2013年6月 | トップページ | 2013年8月 »