OpenGL ESによるモバイル・組込みグラフィックス
株式会社ディジタルメディアプロフェッショナル
桐井敬祐
Agenda
DMPのご紹介
DMPグラフィックスIPのご紹介
OpenGL ES概要
– OpenGL ES 1.1とOpenGL ES 2.0 – プログラマブルシェーダ概要 – OpenGLの歩み – OpenGLとOpenGL ES – EGL ワーキンググループの活動アップデート
KTXファイルフォーマット
OpenGL ESトレーニングコース、E-ラーニングのご紹介
DMPの概要
会社名:(株)ディジタルメディアプロフェッショナル (略称DMP)www.dmprof.com 事業内容: – 独自開発した3Dグラフィックス技術のライセンス – グラフィックスプロセッサーの開発・販売 – グラフィックス関連ソフトウエア製品の開発・販売 – 3Dグラフィックスに関する技術コンサルティング、トレーニング 所在地:東京都武蔵野市 JR三鷹駅から徒歩2分 会社設立:2002年7月 ULTRAY®2000 Chip (SIGGRAPH 2005) PICA®200 IPコア (SIGGRAPH 2006) OpenGL ES セミナールームDMP グラフィックスIPソリューション
組込み機器向け高性能・低消費電力グラフィックスIP コア
高性能2
D/3DグラフィックスIP
低電力モバイルから高性能アミューズメントまでサポート
ビルディング・ブロック構造によるスケーラブルなアーキテクチャ
(企業部門 最高賞)
フォトリアリスティック
3DグラフィックスIPコア
標準
3DグラフィックスIPコア
OpenVG 1.1対応
ベクターグラフィックスIPコアOpenGL ES概要
OpenGL ESとは?
– OpenGL ES (OpenGL for Embedded Systems)とは、組込みシステム上の2D、3Dのグラ
フィックスのためのロイヤリティのいらないクロスプラットフォームAPIです。 – デスクトップ向けOpenGLのサブセット版です。 – OpenGL ESは、OpenGLを携帯電話、PDA(携帯情報端末)、家電などに組込まれる表示システ ムでの利用をターゲットに、必要十分な機能に絞り込んでコンパクトな規格にまとめたもので す。 – Khronos Groupが仕様策定を行っています。 – スマートフォン、携帯ゲーム機、メディアプレーヤ、車載機器、タブレット等、最も広く採用 されている3DグラフィックスAPIです。 – 主要な組込み機器向けOSでネイ ティブ 3D APIとして採用されてい
OpenGL ESの普及
Khronos Group
Khronos Groupとは?
– 2000年1月にさまざまなプラットフォームとデバイスでリッチメディアのオーサリングと再生を 可能にするためのオープンスタンダードAPIを作成するために3Dlabs, ATI, Discreet,
Evans&Sutherland, Intel, nVIDIA, SGI, およびSun Microsystemsを含む主要な会社によって設 立されました。 – Khronos Groupは、さまざまなプラットフォームとデバイスでダイナミックなメディアのオーサ リングと再生を可能にするためにオープンスタンダードAPIの作成に焦点をあわせられたメン バーによって資金を供給された産業共同体です。 – すべてのKhronosメンバーが、Khronos API仕様の開発に貢献することができ、公開前の様々な 段階で投票する権限が与えられています。
OpenGL ES 1.xと2.x
OpenGL ESの2つのバージョン
– 組込みシステム業界の様々な要求に対応するため、OpenGL ESのロードマップには1.xと2.xと いう、平行して発展する2つのトラックがあります。 – OpenGL ES 1.x » 固定機能パイプライン » OpenGL ES 1.0 ...ソフトウエア実装向け » OpenGL ES 1.1 ... 3Dアクセラレータ向け» Common, Common Liteプロファイルの2種類をサポート – OpenGL ES 2.x
» プログラマブルパイプライン
» Commonプロファイルのみサポート
OpenGL ES 2.0プラットフォーム
すでにメジャーな携帯電話では対応済み
– iPhone(iOS), Parm Pre(WebOS), Android, etc.
SDK、解説本が入手可能
– iOS Dev Center(SDK), Palm Developer Center(PDK), Android Developers(SDK, NDK), etc.
WebGL*などで活用され始めている
*OpenGL ES 2.0のJavaScriptバインディング– Firefox, Safari, Opera, Chromeが対応
プリミティブ 合成 座標変換と ライティング プリミティブ 処理 ラスタライザ テクスチャ 処理 カラー加算 フォグ アルファ テスト デプス ステンシル ブレンド ディザ フレーム バッファ
API
三角形/線/点 頂点OpenGL ES 1.1固定機能パイプライン
フラグメントプリミティブ 合成 バーテックス プロセッサ プリミティブ 処理 ラスタライザ フラグメント プロセッサ デプス ステンシル ブレンド ディザ フレーム バッファ
API
三角形/線/点 頂点OpenGL ES 2.0プログラマブルパイプライン
フラグメントプログラマブルシェーダ
シェーダとは、シェーディングを行うプログラムの事で、頂点、フラグメントの特性を
定義します。(固定機能パイプラインは機能が制限されています)
アプリケーションはグラフィックスハードウエア上の処理をコントロールすることがで
きます。
最先端の特殊効果を作り出すことが可能です。
固定機能パイプラインで可能な処理のすべてと、より多くに対応可能です。
CPUで行っていた従来の処理の一部をGPUで処理することで、他の処理の為にCPUを
解放することができます。
写実的質感表現 Non-photorealistic Rendering (NPR) テクスチャマッピング手続き型 頂点アニメーション 画像処理OpenGL ES 2.0のシェーダ
2種類のシェーダ
– バーテックスシェーダ バーテックスプロセッサで動くシェーダ 頂点単位で行う処理をプログラム 入力:頂点、法線、カラーなど/出力:ポジション、頂点カラーなど – フラグメントシェーダ フラグメントプロセッサで動くシェーダ フラグメント単位で行う処理をプログラム 入力:フラグメントカラー、テクスチャ座標など/出力:フラグメントカラー、テプス値など。 シェーダ記述言語(
GLSL ES)を用いて作成します
OpenGL ES 1.1と2.0
バージョン OpenGL ES 1.1 OpenGL ES 2.0
プロファイル Common, Common-Lite Common
プログラマブルシェーダ 使用不可 GLSL ES 1.00 (GLSL 1.10のサブセット)
マルチサンプリング glEnable/glDisableで切替 マルチサンプルバッファ使用時は常に有効(有効
化/無効化の切替は削除)
ジオメトリ 従来の頂点属性に関するAPI が使用可能
glNormal, glVertexPointer, glNormalPointer, glTexCoordPointer, etc.
従来の頂点属性に関するAPIは削除し、 glVertexAttribPointerに移行。
マトリックス 従来のマトリックス処理に関するAPIが使用可能 glMatrixMode, glLoadIdentity, glPushMatrix, etc.
従来のマトリックス処理に関するAPIは削除。
ライティング 従来のライティングに関するAPIが使用可能 glLight, glMaterial, etc.
従来のライティングに関するAPIは削除。 テクスチャ 従来のglTexEnvが使用可能。CUBEMAPは拡張機能。 glTexEnvは削除。CUBEMAPをサポート。 フォグ 従来のフォグに関するAPIが使用可能 glFog, etc. フォグに関するAPIは削除。 ユーザークリップ 従来のユーザークリップに関するAPIが使用可能。 glClipPlane, etc. ユーザークリップに関するAPIは削除。
OpenGL ES 1.1と2.0
バージョン OpenGL ES 1.1 OpenGL ES 2.0
アルファテスト 従来のAPIで利用可能 glAlphaFunc, etc. アルファテストに関するAPIは削除
ロジックオペレーション 従来のAPIで利用可能 glLogicOp, etc. ロジックオペレーションに関するAPIは削除
ポイントスプライト 従来のAPIで利用可能 仕様変更
フレームバッファオブ ジェクト(FBO)
OpenGLの歩み
1990
2000
2010
★ ★ OpenGL 1.0 1992.01 ★ ★ ★ ★ OpenGL 1.1 1997.01Texture Object Ext.
OpenGL 1.2 1998.03
Volume Texture Ext. Packed Pixels Ext. Normal Rescaling Ext. Separate Specular Ext.
Texture LOD Ext. Image Processing Ext.
etc. OpenGL 1.2.1 1998.10 Multi-Textureing Ext. OpenGL 1.3 2001.08 Compressed Textures Ext. Cubemaps Ext. Multi-sampling Ext. Texture Combine Ext.
etc.
OpenGL 1.4 2002.07
Automatic mipmap Ext. H/W Shadowing Ext. etc.
★ OpenGL 1.5 2003.07 Vertex Buffer Objects(VBO) Ext. Occlusion Queries Ext. etc. ★ OpenGL 2.0 2004.09 Vertex Programs Fragment Shaders Multiple Render Targets Ext.
etc.
★ OpenGL 2.1
2006.07
Pixel Buffer Object Ext. etc.
OpenGL 3.0 2008.07
Frame Buffer Objects(FBO) Ext.
Vertex Array Objects (VAO) Ext.
Hardware Instancing Ext.
★ ★★
OpenGL 3.1, 3.2 2009.03, 08
Geometry shader Texture Buffer Object Copy Buffer API (OpenCLとの連携)
固定機能、イミティエイトモードなどレガ シー機能を拡張機能に、etc. ★★ OpenGL 3.3, 4.0 2010.03 OpenGL 4.1 2010.07 DirectX 11と同等機能を提供 Tessellation Control Shader
Tessellator(固定機能) Tessellation Evaluation Shader
OpenGL ES 2.0完全互換 ARB発足 1992 Khronos Group発足 ARBが Khronos Groupに 2006
OpenGLとOpenGL ES
OpenGL 1.3 OpenGL 1.5 GLSL 1.00(拡張機能) OpenGL 2.0 GLSL 1.20 OpenGL 3.0 GLSL 1.30 OpenGL 3.1 GLSL 1.40 OpenGL 3.2 (Core Profile) GLSL 1.50 固定機能 パイプライン拡張 GL_ARB_compatibility OpenGL 3.2 (Conpatibility Profile) GLSL 1.50 (C.P.) 2003 OpenGL ES 1.0 2004 OpenGL ES 1.1 2007 OpenGL ES 2.0 GLSL ES 1.00EGL
OpenGL ESにはEGLと呼ばれる共通プラットフォーム・インターフェース層の仕様が
あります。
EGLは、OpenGL ESのディスプレイや、コンテキスト、サーフェーイスを管理する外
部レイヤーです。
各種モバイル
API間の相互運用の中核
※EGLという呼称は、従来のOpenGLの各種OS, Windowシス テムに対する拡張レイヤーの呼称に倣ったものです。GLX: OpenGL Extension for the X Window System AGL: OpenGL Extension for the Apple Macintosh PGL: OpenGL Extension for IBM OS/2 Warp
WGL: OpenGL Extension for Microsoft Windows95/98/NT
– クライアントAPI間のバッファ、テクス チャ、およびビデオストリーム等の効率 的な共有
ワーキンググループの活動アップデート
次世代
OpenGL ES (Halti)
– WGでは2009年半ばから仕様策定作業にフォーカス – マーケットが必要とする時期にリリース予定
– 既存OpenGL ES 2.0のエコシステム拡大を阻害しない
ARB / ES Convergence Group
– OpenGL - OpenGL ESのサブ委員会 – ロードマップ共有を引続き推進
エコシステム
– OpenGL ES 2.0 Reference Cardの作成→Webサイトからダウンロード可能 » http://www.khronos.org/opengles/2_X/ !!!"#$%&'&("&%)*&+,')-,( ./01023$%&'&(24%&5+2627,8"20/10 9+,'4:2;<2/"02=>?2@5AB#27,C,%,'B,2DE%F 9+,'4:!";<2ŝƐĂƐŽŌǁĂƌĞŝŶƚĞƌĨĂĐĞƚŽŐƌĂƉŚŝĐƐŚĂƌĚǁĂƌĞ͘dŚĞŝŶƚĞƌĨĂĐĞ ĐŽŶƐŝƐƚƐŽĨĂƐĞƚŽĨƉƌŽĐĞĚƵƌĞƐĂŶĚĨƵŶĐƟŽŶƐƚŚĂƚĂůůŽǁĂƉƌŽŐƌĂŵŵĞƌƚŽƐƉĞĐŝĨLJ ƚŚĞŽďũĞĐƚƐĂŶĚŽƉĞƌĂƟŽŶƐŝŶǀŽůǀĞĚŝŶƉƌŽĚƵĐŝŶŐŚŝŐŚͲƋƵĂůŝƚLJŐƌĂƉŚŝĐĂůŝŵĂŐĞƐ͕ ƐƉĞĐŝĮĐĂůůLJĐŽůŽƌŝŵĂŐĞƐŽĨƚŚƌĞĞͲĚŝŵĞŶƐŝŽŶĂůŽďũĞĐƚƐ͘" ͻG'"'"'H"ƌĞĨĞƌƐƚŽƐĞĐƟŽŶƐĂŶĚƚĂďůĞƐŝŶƚŚĞKƉĞŶ'>^Ϯ͘ϬƐƉĞĐŝĮĐĂƟŽŶ͘ ͻG'"'"'HƌĞĨĞƌƐƚŽƐĞĐƟŽŶƐŝŶƚŚĞKƉĞŶ'>^^ŚĂĚŝŶŐ>ĂŶŐƵĂŐĞϭ͘Ϭ ƐƉĞĐŝĮĐĂƟŽŶ͘ ^ƉĞĐŝĮĐĂƟŽŶƐĂƌĞĂǀĂŝůĂďůĞĂƚǁǁǁ͘ŽƉĞŶŐů͘ŽƌŐͬƌĞŐŝƐƚƌLJͬŐůĞƐ sĞƌƟĐĞƐ D5%%,'I2J,%I,K2<IEI,2G/"LH ǀŽŝĚsĞƌƚĞdžƩƌŝďϭϮϯϰĨ;ƵŝŶƚ!"#$%͕d&'()$*#$ ǀŽŝĚsĞƌƚĞdžƩƌŝďϭϮϯϰĨǀ;ƵŝŶƚ!"#$%͕d&'()$*#$ J,%I,K2=%%EM(2G/"NH sĞƌƚĞdžĚĂƚĂŵĂLJďĞƐŽƵƌĐĞĚĨƌŽŵĂƌƌĂLJƐƚŚĂƚĂƌĞƐƚŽƌĞĚŝŶĂƉƉůŝĐĂƟŽŶ ŵĞŵŽƌLJ;ǀŝĂĂƉŽŝŶƚĞƌͿŽƌĨĂƐƚĞƌ'WhŵĞŵŽƌLJ;ŝŶĂďƵīĞƌŽďũĞĐƚͿ͘ ǀŽŝĚsĞƌƚĞdžƩƌŝďWŽŝŶƚĞƌ;ƵŝŶƚ!"#$%͕ŝŶƚ*!+$͕ĞŶƵŵ,-.$͕ ůĞĂŶ"/01'(!+$#͕ƐŝnjĞŝ*,0!#$͕ĐŽŶƐƚǀŽŝĚΎ./!",$0#$ ,-.$23zd͕hE^/'Eͺzd͕^,KZd͕hE^/'Eͺ^,KZd͕&/y͕&>Kd !"#$%23Ϭ͕DyͺsZdyͺddZ/^Ͳϭ /ĨĂŶZZzͺh&&ZŝƐďŽƵŶĚ͕ƚŚĞĂƩƌŝďƵƚĞǁŝůůďĞƌĞĂĚĨƌŽŵƚŚĞ ďŽƵŶĚďƵīĞƌ͕ĂŶĚ./!",$0ŝƐƚƌĞĂƚĞĚĂƐĂŶŽīƐĞƚǁŝƚŚŝŶƚŚĞďƵīĞƌ͘ ǀŽŝĚŶĂďůĞsĞƌƚĞdžƩƌŝďƌƌĂLJ;ƵŝŶƚ!"#$%#$ ǀŽŝĚŝƐĂďůĞsĞƌƚĞdžƩƌŝďƌƌĂLJ;ƵŝŶƚ!"#$%#$ !"#$%23Ϭ͕DyͺsZdyͺddZ/^Ͳϭ ǀŽŝĚO%E!=%%EM(;ĞŶƵŵ1/#$͕ŝŶƚĮƌƐƚ͕ƐŝnjĞŝ4/)",#$ ǀŽŝĚO%E!;-,P,'I(;ĞŶƵŵ1/#$͕ƐŝnjĞŝ4/)",͕ĞŶƵŵ,-.$͕ ǀŽŝĚΎ!"#!4$*#$ 1/#$23WK/Ed^͕>/Eͺ^dZ/W͕>/Eͺ>KKW͕>/E^͕dZ/E'>ͺ^dZ/W͕ dZ/E'>ͺ&E͕dZ/E'>^ ,-.$23hE^/'Eͺzd͕hE^/'Eͺ^,KZd /ĨĂŶ>DEdͺZZzͺh&&ZŝƐďŽƵŶĚ͕ƚŚĞŝŶĚŝĐĞƐǁŝůůďĞƌĞĂĚ ĨƌŽŵƚŚĞďŽƵŶĚďƵīĞƌ͕ĂŶĚ!"#!4$*ŝƐƚƌĞĂƚĞĚĂƐĂŶŽīƐĞƚǁŝƚŚŝŶ ƚŚĞďƵīĞƌ͘ 9+,'4:2;<2D&PPE'F2<M'IEK2Ϯ͘ϯ KƉĞŶ'>^ĐŽŵŵĂŶĚƐĂƌĞĨŽƌŵĞĚĨƌŽŵĂƌĞƚƵƌŶƚLJƉĞ͕ĂŶĂŵĞ͕ĂŶĚŽƉƟŽŶĂůůLJĂƚLJƉĞůĞƩĞƌŝĨŽƌϯϮͲďŝƚŝŶƚ͕ŽƌĨĨŽƌϯϮͲďŝƚŇŽĂƚ͕ ĂƐƐŚŽǁŶďLJƚŚĞƉƌŽƚŽƚLJƉĞďĞůŽǁ͗ 330$,)0"5,-.$"QEP,ϭϮϯϰŝĨǀ;6'07*3893:3'07;383<3<3<383:3'07=3683'07*9#$ dŚĞĂƌŐƵŵĞŶƚƐĞŶĐůŽƐĞĚŝŶďƌĂĐŬĞƚƐ;ĂƌŐƐ͕ĂŶĚ͕ĂƌŐƐͿŵĂLJŽƌŵĂLJŶŽƚďĞƉƌĞƐĞŶƚ͘ dŚĞĂƌŐƵŵĞŶƚƚLJƉĞdĂŶĚƚŚĞŶƵŵďĞƌ=ŽĨĂƌŐƵŵĞŶƚƐŵĂLJďĞŝŶĚŝĐĂƚĞĚďLJƚŚĞĐŽŵŵĂŶĚŶĂŵĞƐƵĸdžĞƐ͘=ŝƐϭ͕Ϯ͕ϯ͕ŽƌϰŝĨ ƉƌĞƐĞŶƚ͕ŽƌĞůƐĞĐŽƌƌĞƐƉŽŶĚƐƚŽƚŚĞƚLJƉĞůĞƩĞƌƐ͘/Ĩ͞ǀ͟ŝƐƉƌĞƐĞŶƚ͕ĂŶĂƌƌĂLJŽĨ=ŝƚĞŵƐŝƐƉĂƐƐĞĚďLJĂƉŽŝŶƚĞƌ͘ &ŽƌďƌĞǀŝƚLJ͕ƚŚĞKƉĞŶ'>ĚŽĐƵŵĞŶƚĂƟŽŶĂŶĚƚŚŝƐƌĞĨĞƌĞŶĐĞŵĂLJŽŵŝƚƚŚĞƐƚĂŶĚĂƌĚƉƌĞĮdžĞƐ͘" dŚĞĂĐƚƵĂůŶĂŵĞƐĂƌĞŽĨƚŚĞĨŽƌŵƐ͗Őů&ƵŶĐƟŽŶEĂŵĞ;Ϳ͕'>ͺKE^dEd͕'>ƚLJƉĞ ;%%&%(2G/"RH ĞŶƵŵ4,I;%%&%;ǀŽŝĚͿ͖""""""ͬͬZĞƚƵƌŶƐŽŶĞŽĨƚŚĞĨŽůůŽǁŝŶŐ͗ /Es>/ͺEhD ŶƵŵĂƌŐƵŵĞŶƚŽƵƚŽĨƌĂŶŐĞ /Es>/ͺ&ZDh&&ZͺKWZd/KE &ƌĂŵĞďƵīĞƌŝƐŝŶĐŽŵƉůĞƚĞ /Es>/ͺs>h EƵŵĞƌŝĐĂƌŐƵŵĞŶƚŽƵƚŽĨƌĂŶŐĞ /Es>/ͺKWZd/KE KƉĞƌĂƟŽŶŝůůĞŐĂůŝŶĐƵƌƌĞŶƚƐƚĂƚĞ KhdͺK&ͺDDKZz EŽƚĞŶŽƵŐŚŵĞŵŽƌLJůĞŌƚŽĞdžĞĐƵƚĞĐŽŵŵĂŶĚ EKͺZZKZ EŽĞƌƌŽƌĞŶĐŽƵŶƚĞƌĞĚ ƵīĞƌKďũĞĐƚƐG/"SH2 ƵīĞƌŽďũĞĐƚƐŚŽůĚǀĞƌƚĞdžĂƌƌĂLJĚĂƚĂŽƌŝŶĚŝĐĞƐŝŶ" ŚŝŐŚͲƉĞƌĨŽƌŵĂŶĐĞƐĞƌǀĞƌŵĞŵŽƌLJ͘ ǀŽŝĚ'ĞŶƵīĞƌƐ;ƐŝnjĞŝ"͕ƵŝŶƚΎďƵīĞƌƐ#$ ǀŽŝĚĞůĞƚĞƵīĞƌƐ;ƐŝnjĞŝ"͕ĐŽŶƐƚƵŝŶƚΎďƵīĞƌƐ#$ ƌĞĂƟŶŐĂŶĚŝŶĚŝŶŐƵīĞƌKďũĞĐƚƐ ǀŽŝĚŝŶĚƵīĞƌ;ĞŶƵŵ,'07$,͕ƵŝŶƚďƵīĞƌ#$ ,'07$,23ZZzͺh&&Z͕>DEdͺZZzͺh&&Z ƌĞĂƟŶŐƵīĞƌKďũĞĐƚĂƚĂ^ƚŽƌĞƐ ǀŽŝĚƵīĞƌĂƚĂ;ĞŶƵŵ,'07$,͕ƐŝnjĞŝƉƚƌ*!+$͕ ĐŽŶƐƚǀŽŝĚΎ#','͕ĞŶƵŵ)*'7$#$ )*'7$͗^dd/ͺZt͕^dZDͺZt͕zED/ͺZt hƉĚĂƟŶŐƵīĞƌKďũĞĐƚĂƚĂ^ƚŽƌĞƐ ǀŽŝĚƵīĞƌ^ƵďĂƚĂ;ĞŶƵŵ,'07$,͕ŝŶƚƉƚƌŽīƐĞƚ͕ ƐŝnjĞŝƉƚƌ*!+$͕ĐŽŶƐƚǀŽŝĚΎ#','#$ ,'07$,23ZZzͺh&&Z͕>DEdͺZZzͺh&&Z ƵīĞƌKďũĞĐƚYƵĞƌŝĞƐϲ͘ϭ͘ϲ͕ϲ͘ϭ͘ϯ ůĞĂŶ/ƐƵīĞƌ;ƵŝŶƚďƵīĞƌ#$ ǀŽŝĚ'ĞƚƵīĞƌWĂƌĂŵĞƚĞƌŝǀ;ĞŶƵŵ,'07$,͕ĞŶƵŵ&'()$͕ d#','#$ ,'07$,23ZZzͺh&&Z͕>DEdͺZZzͺh&&Z &'()$23h&&Zͺ^/͕h&&Zͺh^' JA,!+&%I2E'F2D-A++A') D&'I%&--A')2I$,2JA,!+&%I2G/"1/"1H ǀŽŝĚO,+I$7E'),C;ĐůĂŵƉĨ"͕ĐůĂŵƉĨ>#$" ǀŽŝĚJA,!+&%I;ŝŶƚ%͕ŝŶƚ-͕ƐŝnjĞŝ?͕ƐŝnjĞŝ@#$ ZĂƐƚĞƌŝnjĂƟŽŶϯ >&A'I(2ϯ͘ϯ WŽŝŶƚƐŝnjĞŝƐƚĂŬĞŶĨƌŽŵƚŚĞƐŚĂĚĞƌďƵŝůƟŶ)-T>&A'I<AU,ĂŶĚ ĐůĂŵƉĞĚƚŽƚŚĞŝŵƉůĞŵĞŶƚĂƟŽŶͲĚĞƉĞŶĚĞŶƚƉŽŝŶƚƐŝnjĞƌĂŶŐĞ͘ :A',2<,)P,'I(2ϯ͘ϰ ǀŽŝĚ:A',VAFI$;ŇŽĂƚ?!#,@#$ >&-M)&'(2ϯ͘ϱ ǀŽŝĚW%&'IWEB,;ĞŶƵŵ#!0#$ #!023t͕t ǀŽŝĚD5--WEB,;ĞŶƵŵ1/#$#$ 1/#$233&ZKEd͕<͕&ZKEdͺEͺ< ŶĂďůĞͬŝƐĂďůĞ;h>>ͺ&Ϳ ǀŽŝĚWŽůLJŐŽŶKīƐĞƚ;ŇŽĂƚ>'4,/0͕ŇŽĂƚ)"!,*#$ ŶĂďůĞͬŝƐĂďůĞ;WK>z'KEͺK&&^dͺ&/>>Ϳ >AK,-27,BIE')-,(2ϯ͘ϲ͕ϰ͘ϯ ǀŽŝĚ>AK,-<I&%,A;ĞŶƵŵ."'1$͕ŝŶƚ.'0'1#$ ."'1$23hEW<ͺ>/'EDEd͕W<ͺ>/'EDEd X,KI5%A')2ϯ͘ϳ ^ŚĂĚĞƌƐƐƵƉƉŽƌƚƚĞdžƚƵƌŝŶŐƵƐŝŶŐĂƚůĞĂƐƚ" DyͺsZdyͺdydhZͺ/D'ͺhE/d^ŝŵĂŐĞƐĨŽƌǀĞƌƚĞdž ƐŚĂĚĞƌƐĂŶĚĂƚůĞĂƐƚDyͺdydhZͺ/D'ͺhE/d^ŝŵĂŐĞƐ" ĨŽƌĨƌĂŐŵĞŶƚƐŚĂĚĞƌƐ͘ ǀŽŝĚĐƟǀĞdĞdžƚƵƌĞ;ĞŶƵŵ,$%,)0$#$ ,$%,)0$23dydhZϬ͘͘dydhZŝǁŚĞƌĞŝс DyͺKD/EͺdydhZͺ/D'ͺhE/d^Ͳϭ dĞdžƚƵƌĞ/ŵĂŐĞ^ƉĞĐŝĮĐĂƟŽŶϯ͘ϳ͘ϭ ǀŽŝĚX,K?PE),/O;ĞŶƵŵ,'07$,͕ŝŶƚ($&$(͕ŝŶƚ!",$0"'(>/01',͕ ƐŝnjĞŝ?!#,@͕ƐŝnjĞŝ@$!7@,͕ŝŶƚA/0#$0͕ĞŶƵŵ>/01',͕ ĞŶƵŵ,-.$͕ǀŽŝĚΎ#','#$ ,'07$,233dydhZͺϮ͕dydhZͺhͺDWͺWK^/d/sͺy͕z͕ dydhZͺhͺDWͺE'd/sͺy͕z͕ !",$0"'(>/01',23>W,͕>hD/EE͕>hD/EEͺ>W,͕Z'͕ Z' >/01',23>W,͕Z'͕Z'͕>hD/EE͕>hD/EEͺ>W, ƚLJƉĞ͗hE^/'Eͺzd͕hE^/'Eͺ^,KZdͺϱͺϲͺϱ͕ hE^/'Eͺ^,KZdͺϰͺϰͺϰͺϰ͕hE^/'Eͺ^,KZdͺϱͺϱͺϱͺϭ D&'8,%(A&'2C%&P274Y=2+AK,-2B&P+&','I(2I&2A'I,%'E-2 I,KI5%,2B&P+&','I(Z
YE(,2?'I,%'E-2W&%PEI 74Y= ?'I,%'E-2D&P+&','I(
>W, >hD/EE Z > >hD/EEͺ>W, Z͕ >͕ Z' Z͕'͕ Z͕'͕ Z' Z͕'͕͕ Z͕'͕͕ ůƚ͘dĞdžƚƵƌĞ/ŵĂŐĞ^ƉĞĐŝĮĐĂƟŽŶŽŵŵĂŶĚƐϯ͘ϳ͘Ϯ dĞdžƚƵƌĞŝŵĂŐĞƐŵĂLJĂůƐŽďĞƐƉĞĐŝĮĞĚƵƐŝŶŐŝŵĂŐĞĚĂƚĂƚĂŬĞŶ ĚŝƌĞĐƚůLJĨƌŽŵƚŚĞĨƌĂŵĞďƵīĞƌ͕ĂŶĚƌĞĐƚĂŶŐƵůĂƌƐƵďƌĞŐŝŽŶƐŽĨ ĞdžŝƐƟŶŐƚĞdžƚƵƌĞŝŵĂŐĞƐŵĂLJďĞƌĞƐƉĞĐŝĮĞĚ͘ ǀŽŝĚD&+MX,K?PE),/O;ĞŶƵŵ,'07$,͕ŝŶƚ($&$(͕ ĞŶƵŵ!",$0"'(>/01',͕ŝŶƚ%͕ŝŶƚ-͕ƐŝnjĞŝ?!#,@͕ ƐŝnjĞŝ@$!7@,͕ŝŶƚA/0#$0#$ ,'07$,2"dydhZͺϮ͕dydhZͺhͺDWͺWK^/d/sͺy͕z͕͕ dydhZͺhͺDWͺE'd/sͺy͕z͕ !",$0"'(>/01',23!""#$"%&'()"*+" ǀŽŝĚdĞdž^Ƶď/ŵĂŐĞϮ;ĞŶƵŵ,'07$,͕ŝŶƚ($&$(͕ŝŶƚdžŽīƐĞƚ͕ ŝŶƚLJŽīƐĞƚ͕ƐŝnjĞŝ?!#,@͕ƐŝnjĞŝ@$!7@,͕ĞŶƵŵ>/01',͕ ĞŶƵŵ,-.$͕ǀŽŝĚΎ#','#$ ,'07$,23dydhZͺhͺDWͺWK^/d/sͺy͕z͕͕ dydhZͺhͺDWͺE'd/sͺy͕z͕ >/01',"ĂŶĚ,-.$͗!""#$"%&'()"*+"" ǀŽŝĚŽƉLJdĞdž^Ƶď/ŵĂŐĞϮ;ĞŶƵŵ,'07$,͕ŝŶƚ($&$(͕ŝŶƚdžŽīƐĞƚ͕ ŝŶƚLJŽīƐĞƚ͕ŝŶƚ%͕ŝŶƚ-͕ƐŝnjĞŝ?!#,@͕ƐŝnjĞŝ@$!7@,#$ ,'07$,233dydhZͺϮ͕dydhZͺhͺDWͺWK^/d/sͺy͕z͕͕ dydhZͺhͺDWͺE'd/sͺy͕z͕ >/01',"ĂŶĚ,-.$͗!""#$"%&'()"*+" D&P+%,((,F2X,KI5%,2?PE),(2ϯ͘ϳ͘ϯ ǀŽŝĚD&P+%,((,FX,K?PE),/O;ĞŶƵŵ,'07$,͕ŝŶƚ($&$(͕ ĞŶƵŵ!",$0"'(>/01',͕ƐŝnjĞŝ?!#,@͕ƐŝnjĞŝ@$!7@,͕ ŝŶƚA/0#$0͕ƐŝnjĞŝ!1'7$B!+$͕ǀŽŝĚΎ#','#$ ,'07$,3'"#3!",$0"'(>/01',͗!""#$"%&'()"*+ ǀŽŝĚŽŵƉƌĞƐƐĞĚdĞdž^Ƶď/ŵĂŐĞϮ;ĞŶƵŵ,'07$,͕ŝŶƚ($&$(͕ ŝŶƚdžŽīƐĞƚ͕ŝŶƚLJŽīƐĞƚ͕ƐŝnjĞŝ?!#,@͕ƐŝnjĞŝ@$!7@,͕ ĞŶƵŵ>/01',͕ƐŝnjĞŝ!1'7$B!+$͕ǀŽŝĚΎ#','#$ ,'07$,3'"#3!",$0"'(>/01',͗!""#$"%&'()"*+ X,KI5%,2>E%EP,I,%(2ϯ͘ϳ͘ϰ ǀŽŝĚdĞdžWĂƌĂŵĞƚĞƌŝĨ;ĞŶƵŵ,'07$,͕ĞŶƵŵ."'1$͕ d.'0'1#$ ǀŽŝĚdĞdžWĂƌĂŵĞƚĞƌŝĨǀ;ĞŶƵŵ,'07$,͕ĞŶƵŵ."'1$͕ d.'0'1*#$ ,'07$,23dydhZͺϮ͕dydhZͺhͺDW ."'1$23dydhZͺtZWͺ^͕d͕dydhZͺD/E͕D'ͺ&/>dZ DĂŶƵĂůDŝƉŵĂƉ'ĞŶĞƌĂƟŽŶϯ͘ϳ͘ϭϭ ǀŽŝĚ4,',%EI,[A+PE+;ĞŶƵŵ,'07$,#$ ,'07$,23dydhZͺϮ͕dydhZͺhͺDW dĞdžƚƵƌĞKďũĞĐƚƐϯ͘ϳ͘ϭϯ ǀŽŝĚYA'FX,KI5%,;ĞŶƵŵ,'07$,͕ƵŝŶƚ,$%,)0$#$ ǀŽŝĚO,-,I,X,KI5%,(;ƐŝnjĞŝ"͕ƵŝŶƚΎ,$%,)0$*#$ ǀŽŝĚ4,'X,KI5%,(;ƐŝnjĞŝ"͕ƵŝŶƚΎ,$%,)0$*#$ ;'5P,%EI,F2@5,%A,(ϲ͘ϭ͘ϯ ǀŽŝĚ'ĞƚdĞdžWĂƌĂŵĞƚĞƌŝĨǀ;ĞŶƵŵ,'07$,͕ĞŶƵŵ&'()$͕ d#','#$ ,'07$,23dydhZͺϮ͕dydhZͺhͺDW &'()$23dydhZͺtZWͺ^͕d͕dydhZͺD/E͕D'ͺ&/>dZ X,KI5%,2@5,%A,(2ϲ͘ϭ͘ϰ ůĞĂŶ?(X,KI5%,;ƵŝŶƚ,$%,)0$#$ 4:2OEIE2XM+,(2Ϯ͘ϯ '>ƚLJƉĞƐĂƌĞŶŽƚƚLJƉĞƐ͘ 4:2XM+, [A'AP5P2YAI2VAFI$ĞƐĐƌŝƉƟŽŶ ůĞĂŶ ϭ ŽŽůĞĂŶ ďLJƚĞ % ^ŝŐŶĞĚďŝŶĂƌLJŝŶƚĞŐĞƌ ƵďLJƚĞ % hŶƐŝŐŶĞĚďŝŶĂƌLJŝŶƚĞŐĞƌ ĐŚĂƌ % ŚĂƌĂĐƚĞƌƐŵĂŬŝŶŐƵƉƐƚƌŝŶŐƐ ƐŚŽƌƚ ϭϲ ^ŝŐŶĞĚϮ͛ƐĐŽŵƉůĞŵĞŶƚďŝŶĂƌLJŝŶƚĞŐĞƌ ƵƐŚŽƌƚ ϭϲ hŶƐŝŐŶĞĚďŝŶĂƌLJŝŶƚĞŐĞƌ ŝŶƚ ϯϮ ^ŝŐŶĞĚϮ͛ƐĐŽŵƉůĞŵĞŶƚďŝŶĂƌLJŝŶƚĞŐĞƌ ƵŝŶƚ ϯϮ hŶƐŝŐŶĞĚďŝŶĂƌLJŝŶƚĞŐĞƌ ĮdžĞĚ ϯϮ ^ŝŐŶĞĚϮ͛ƐĐŽŵƉůĞŵĞŶƚϭϲ͘ϭϲƐĐĂůĞĚŝŶƚĞŐĞƌ ƐŝnjĞŝ ϯϮ EŽŶͲŶĞŐĂƟǀĞďŝŶĂƌLJŝŶƚĞŐĞƌƐŝnjĞ ĞŶƵŵ ϯϮ ŶƵŵĞƌĂƚĞĚďŝŶĂƌLJŝŶƚĞŐĞƌǀĂůƵĞ ŝŶƚƉƚƌ .,0A!,* ^ŝŐŶĞĚϮ͛ƐĐŽŵƉůĞŵĞŶƚďŝŶĂƌLJŝŶƚĞŐĞƌ ƐŝnjĞŝƉƚƌ .,0A!,* EŽŶͲŶĞŐĂƟǀĞďŝŶĂƌLJŝŶƚĞŐĞƌƐŝnjĞ ďŝƞŝĞůĚ ϯϮ ŝƚĮĞůĚ ŇŽĂƚ ϯϮ &ůŽĂƟŶŐͲƉŽŝŶƚǀĂůƵĞ ĐůĂŵƉĨ ϯϮ &ůŽĂƟŶŐͲƉŽŝŶƚǀĂůƵĞĐůĂŵƉĞĚƚŽϬ͖ϭ 7,EFA')2>AK,-(2ϰ͘ϯ͘ϭ ǀŽŝĚ7,EF>AK,-(;ŝŶƚ%͕ŝŶƚ-͕ƐŝnjĞŝ?!#,@͕ƐŝnjĞŝ@$!7@,͕ ĞŶƵŵ>/01',͕ĞŶƵŵ,-.$͕ǀŽŝĚΎ#','#$ >/01',2"Z' ƚLJƉĞ͗hE^/'Eͺzd Q&I,237,EF>AK,-(\]"ĂůƐŽĂĐĐĞƉƚƐĂƋƵĞƌŝĂďůĞŝŵƉůĞŵĞŶƚĂƟŽŶͲ ĚĞĮŶĞĚ>/01',C,-.$ĐŽŵďŝŶĂƟŽŶ͕ƐĞĞϰ͘ϯ͘ϭ͘
KTXファイルフォーマット
KTX - Khronos TeXture
– Khronos Groupが定めるOpenGL, OpenGL ES向けテクスチャファイルフォーマット – 昨年より検討・策定作業を進め2010年7月にリリース
– 軽量なフォーマット
– http://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/
非圧縮・圧縮テクスチャのサポート
– 格納イメージデータは、非圧縮だけではなく圧縮テクスチャフォーマットも格納可能 » e.g. ETC1, ATITC, S3TC, etc.
– 1つのKTXファイル内に、1Dテクスチャから、すべてのmipマップレベルを含むテクスチャ、 cubeマップテクスチャ等を格納する事が可能。
KTXファイルフォーマット関連ツール
libktx
– KTXファイルの読み書きを行うためのライブラリ – 便利で使いやすいライブラリ » ETC1(圧縮テクスチャフォーマット)をサポートしていないハードウエア向けに解凍して くれるローダも提供 » mipマップ生成機能も提供 toktx
– KTXファイルを netpbmフォーマット(.pam, .pgm, .ppmファイル)から作成 – テクスチャ圧縮機能は未対応 いずれも
BSD-likeライセンス(修正BSDライセンス)によるオープンソース化
KTXファイルフォーマットの今後