「 2015年06月 」一覧

OpenEXR 2.x のライブラリをビルド


とある界隈で OpenEXR が流行っているらしいので、EXR とはどんなものか調べてみました。詳しくはウィキペディアさんに譲るとして、以下のメリットがあるフォーマットだと認識しました。

  • 複数のチャンネル(というか画像プレーン)を複数持てる
  • HDR のデータに対応(16bit float)
  • 圧縮によるデータ削減

HDRだとデータの容量も問題になりますが、フォーマットが 16bit で圧縮ありというところで対策されているようです。また複数のチャンネルが格納できることで、ディファートシェーディングの G-buffer も格納して確認に使ってみたりということができそうです。また映像系のツールではこの形式を用いて行き来したりする模様です。

オープンソースでこの形式を扱うものが提供されており、これが OpenEXR というライブラリです。今現在 2.2 が出ており、これをビルドしてみたのが今回の内容となります。 続きを読む


メインメモリ領域をテクスチャにできる?!


DirectX 9.0 Ex の話になりますが、マイクロソフトの MSDN の説明に以下のようにありました。

Applications that need more flexibility over the use, allocation and deletion of
 the system memory can now create textures from a system memory pointer. 
For example, an application could create a Direct3D texture 
from a GDI system-memory bitmap pointer.

MSDN のページとしてこちら :
https://msdn.microsoft.com/en-us/library/windows/desktop/bb219800(v=vs.85).aspx

この内容を見ると、メモリ領域を指定してテクスチャを生成できるように思います。また参照先の内容を見るとテクスチャを破棄するまでその領域は存在しなくてはならないようなので、ある意味でダイナミックなテクスチャが楽に出来そうな気配もあります。
続きを読む


NVIDIA Nsight Tegra 3.0


NVIDIA Nsight Tegra を更新しました

AndroidWorks なるパッケージが NVIDIA から公開されて、その中に NVIDIA Nsight Tegara 3.0 なるものが入っていました。以前にも Nsight Tegra は Android 開発において、デバッグ効率を上げる可能性を秘めていることは説明しました。ただし当時は TEGRA 専用という制約がありました。
今回、AndroidWorks の説明の中で、 Tegra に限定しないというような文章があったので再び試してみることにしました。

インストール

以前と同様ですが登録して AndroidWorks をダウンロード&インストールします。ほぼ全自動で Android の開発環境がインストールされます。
 だいたい問題なくいくのでしょうが、自分の環境では VisualStudio でのプロジェクト作成時に Min Target が選べないという症状に出遭ってしまいました。一応 NVIDIA のTegra Android Development Pack (TADP) をインストールした後で、 NVIDIA Nsight Tegra をインストールするという方法で、対処を行っています。もし同症状に見舞われたら TADP をインストールしてみると解決するかもしれません。 続きを読む


エクスプローラーのサムネイル拡張


前々からやっていたやつですが、ソフト開発者向けのエクスプローラーのサムネイルを拡張するプログラムを正式に公開することにしました。今回からはインストーラーも整備しました。

ソフトウェアの説明等については別ページにて記載しましたのでそちらを参照願います。
もう来月に迫っている Windows10 での動作確認も一応行っております。

開発の背景

開発者向け、すなわちプログラマ向けなのですが、プログラマならエクスプローラーでさっと確認できたら十分なことも多いですし、わざわざビューワーをインストールして常時起動とかもやりたくなかったわけです。そして、テクスチャとしてよく使用する形式が意外にも標準的に対応が進んでこなかったので作成するに至りました。
 Windows8 以降では、標準で DDS のファイルは何らかの対応がはいり、サムネイル表示されるようになりました。しかしながら対応が不十分で、従来のレガシーとされる形式に非対応だったり、BC4以降の対応もできていなかったような感じで目的とする使用には耐えませんでした。

今後の予定とか

DDSを優先的に対応していたので、PVRでの BC4以降の対応, Float の対応などをやっていく一方で、最近の他の圧縮形式への追従もしていけたらと考えています。

ソフトウェア配布のページはこちらにて「開発者向け サムネイル拡張 DevTexThumb」.


DirectX12 で テクスチャ貼ってみた(1)


以前から随分と DirectX12(仮) 入門なネタが空いてしまいました。色々と追従やらドライバやらあったので、再開できるようにするまで時間がかかってしまいました。

エラーが出るようになってた

まず Build 10130 で気付いたのですが、以前のサンプル類を実行したときに、 “EXECUTION ERROR #552: COMMAND_ALLOCATOR_SYNC” のエラーが出るようになっていました。
コマンドキューの処理の問題があったようで、サンプル類を修正しました。

今回の結果

simple_texture_dx12
上記のように単色のテクスチャを描画できるようになりました。ただし画像からのテクスチャの場合ちょっと問題がありました。詳細は末尾にて。 続きを読む


DirectX12でWARPデバイス


VMWareの中に仮想マシンとしてインストールした Windows 10 でも実は DirectX12 を初期化して動くのを確認できていました。その時にアダプタが複数見つかって、別アダプタを使ったのがきっかけだったのですが、その時のデバイス(アダプタ)は Microsoft Basic Render Driver となってました。実はコレが、WARPデバイスでした。先日 Microsoft から Direct3D 12 UWP Sample という公式なサンプルが公開されたのでこれと比べてみたところ判明しました。

サンプルでは IDXGIFactory4::EnumWarpAdapter で比較的簡単に WARP デバイスを取得できます。この取得したアダプタの情報を見てみたところ、 “Microsoft Basic Render Driver”, VendorID=5140, DeviceID=140 となっていました。
これはVMWare環境下でうまく使えたというアダプタ2つめとも一致していました。

https://msdn.microsoft.com/en-us/library/windows/desktop/bb205075%28v=vs.85%29.aspx

このページの New info about enumerating adapters for Windows 8 の節にもあるように描画専用のアダプタです。

このアダプタを使うと以前の RADEON 環境でもうまく動くのを確認できています。WARPアダプタを使って動いている状態になるので当たり前といえば当たり前ですが・・・。

以下の環境で WARP デバイスを使ってとりあえず DirectX12 の開発を進められることは確認できました。

  • VirtualBox
  • VMware
  • ドライバ不正なRADEON環境

dx12sample_in_vm

VMware Player の中で一応テクスチャ実験のためのサンプルが手元で動いています。

WARPデバイスの取得

サンプルでは IDXGIFactory4 の EnumWarpAdapter を使って取得していますが、以前の IDXGIFactory3 あたりでもちゃんと取得は可能です。単に EnumAdapters で DXGI_ERROR_NOT_FOUND が返ってくるまでインデックスを増やして検索すればOKです。
このときに、指定された VendorId, DeviceId がくるか見ておけばOKです。

これで仮想環境でも実験を始められるので、気軽に DirectX12 を触り始めてみることが出来ますね!


BC7について段階的にデコードしてみた


BC7のCPUデコーダーを作っている過程でおもしろいものが確認できたので記事にしてみました。当たり前の話ではあるのですが、視覚化されたケースって無いようなので。
BC7 はいわゆる第2世代のテクスチャ圧縮技術で、各ブロックごとに最適なモードを選択してデータを圧縮しています。このブロックがどんな風に割り当てられているかを、ブロックごとの色分けで塗ってみたら以下のような結果を得られました。

image_partition

この段階でも各ブロックの特徴によってモード選択されているのが確認できます。そのためおおよその画像の検討が付く程度にはなっています。これらのブロック種別を順番に展開してみます。 続きを読む