Archives

June 2015 の記事

Maya 2016 では Color Space を指定する Attribute が変更されているようです。

MFn::kFileTexture
Maya 2015 以前  colorProfile  int
Maya 2016       colorSpace    string

2015
getAttr file1.cp;
// Result: 3 //

2016
getAttr file1.cp;
// Result: 0 //
getAttr file1.cs;
// Result: sRGB //


// 2015
int cp= getAttribute<int>( object, "cp", &stat ); // colorProfile
switch( cp ){
case 3: // sRGB
    ...
    break;
}

// 2016
bool ifr= getAttribute<bool>( object, "ifr", &stat ); // ignoreColorSpaceFileRules
if( ifr ){
    MString  cs= getAttributeMString( object, "cs", &stat ); // colorSpace
    if( cs == "sRGB" ){
        ...
    }
}

exporter でトラブルがあったのでメモ。


関連エントリ
Maya 2015 ShaderFX のノード情報を読みだしてみる
Maya 2014 の Output Window と stderr
Maya ShaderFX


分かる範囲、試せる範囲で結果をまとめました。
より詳しくは下記ページを参照してください。

GPU 世代対応表

GPU FeatureLevel D3D12 OpenGL OpenGL ES
GeForce Tesla 10_0 N 3.3 ES 3.0? GeForce GTX200
GeForce Fermi 11_0 N (Y) 4.5 ES 3.1 AEP Emu GeForce GTX400
GeForce Kepler 11_0 Y 4.5 ES 3.1 AEP Emu GeForce GTX680
GeForce Maxwell 11_0 Y 4.5 ES 3.1 AEP Emu GeForce GTX750
GeForce Maxwell 2 ? Y 4.5 ES 3.1 AEP ? GeForce GTX900
RADEON R700 10_1 N 3.3? ES ? RADEON HD 4000
RADEON VIEW5 11_0 N 4.5/4.4 ES 3.1 RADEON HD 5000
RADEON VLIW4 11_0 N 4.5/4.4 ES 3.1 RADEON HD 6000
RADEON GCN 1.0 11_1 Y 4.5/4.4 ES 3.1 RADEON HD 7000
RADEON GCN 1.1 12_0 Y 4.5/4.4 ES 3.1 RADEON R9 200/300
RADEON GCN 1.2 ? Y 4.5/4.4 ES 3.1 RADEON R9 285/380/Fury
HD Graphics 7 11_0 N 4.0 ES 3.1 HD 2500/4000
HD Graphics 7.5 11_1 Y 4.3 ES 3.1 HD 4600/5200
HD Graphics 8 ? Y ? ES 3.1 Iris Pro 6200

D3D12 の欄が Y の FeatureLevel は HW 機能ではなく D3D12 API が実際に返してきた値です。ドライバの更新で今後仕様が変わる可能性があります。実際に HD Graphics 4600 が 11_0 → 11_1 に変わりました。

GeForce Fermi (GeForce GTX 560 Ti 等) は Direct3D 12 サポート GPU に含まれますが、現在リリースされているドライバはまだ対応していません。
(NVIDIA Blog: GeForce DirectX 12 Drivers for Windows 10 Now WHQL-Certified)
6/29 現在 GeForce で D3D12 を試す場合 Kepler または Maxwell 以降が必要になります。

RADEON は Catalyst 15.6 beta で OpenGL 4.5 を返しますが shader は 4.4 のまま↓。

GL_VERSION: 4.5.13394 Core Profile/Debug Context 15.200.1023.5
GL_RENDERER: AMD Radeon HD 8400 / R3 Series
GL_VENDOR: ATI Technologies Inc.
GL_SHADING_LANGUAGE_VERSION: 4.40


関連エントリ
DirectX 12 (Direct3D 12) と GPU の対応

関連ページ
3D Low overhead API (Low Level API) Metal/D3D12/Vulkan
Direct3D 12 (DirectX 12) Windows 詳細
GPU 世代対応表


Moto 360 を 5.1.1 に更新すると描画位置がずれるらしいので 3D-imclock を修正しました。
あまりきちんと調べていませんが、画面の仕様が変わっているようです。

3D imclock for Android Wear
Google Play: 3D imclock for Android Wear

Moto 360 では、以前は 320x290 のスクリーンに対して OpenGL の Viewport Y に -30 の offset が入っていました。
Android Wear 5.1.1 からは 320x320 のバッファ扱いとなっており、Viewport の offset が無くなっているものと思われます。(この問題について書いた以前の記事は こちら )

Moto360                     Viewport
-------------------------------------------
Android 5.0      320x290    (0,-30,320,320)
Android 5.1.1    320x320    (0,0,320,320)


関連エントリ
Android Wear 5.0 Watch Face API 対応と互換性
Android Wear 3D のアナログ時計 (Watch Face)
Android Wear にゲームを移植


Android Wear 5.1.1 は Wi-Fi 接続に対応しました。
利用できるのは Wi-Fi 機能を搭載したデバイスのみに限られますが、インターネットを経由した同期を行うことが可能です。

                        Bluetooth   Wi-Fi
-------------------------------------------------------------
Android Wear 4.4W~5.0  直接同期    --
Android Wear 5.1.1      直接同期    Internet 接続、Cloud 同期
Apple Watch             直接同期    LAN 経由同期 (P2P)

Apple Watch も Wi-Fi 接続を併用していますが Wi-Fi の使い方が異なります。


● Apple Watch の場合

Bluetooth の補佐として用いられているようです。
接続は自動化されており iPhone 側の設定を引き継ぎます。
そのため Watch 側には特に Wi-Fi の設定はありません。

iPhone と同じ Wi-Fi ルータを利用して LAN 内で直接転送が行われます。
あくまで iPhone と Watch 間の通信に用いられており、Apple Watch が直接インターネットに接続することは無いようです。

Apple: Apple Watch の Bluetooth と Wi-Fi について


● Android Wear の場合

Android Wear 側に独立した Wi-Fi の設定があります。
予め Wi-Fi の設定しておけば、Android Wear デバイスが直接 Internet への接続を行うことができます。実際に Google Map アプリでは、Bluetooth 接続が切れていても地図データを読み進めることができました。

さらに「クラウド同期」を有効にしておくと、スマートフォンやタブレットとの通信(同期)もインターネット経由で行うことが可能です。

有効にする方法
 1. Smartphone/Tablet 側のコンパニオンアプリ "Android Wear" の設定を開く
 2. クラウド同期を ON にする

Android Wear の場合は Apple Watch と違って同一のネットワーク (LAN) に接続しておく必要がありません。バッテリー消費を考えなければ、ペアリングしたスマートフォンやタブレットは家に置いたままで、Android Wear とモバイルルータだけ持ち歩くこともできるわけです。

通知などのメッセージが届くのはもちろん、設定などコンパニオンアプリを伴うものでもクラウド経由できちんと設定変更が反映されます。


関連ページ
Smart Watch 一覧

関連エントリ
Apple Watch のバッテリーと Android Wear 5.1
Apple Watch を使ってみた, Android Wear との比較など
Android Wear 単体で音楽再生を行うアプリ (2)
Android Wear 3D のアナログ時計 (Watch Face)
Android Wear の 3D 描画 と NDK r10
Android Wear にゲームを移植


Direct3D 12 はこれまでのメジャーアップデートと違い、
CPU 効率を改善することが目的の一つとなっています。

そのため GPU に対しては極端に大きな機能要求はなく、
基本的には Direct3D 11 世代の GPU でほぼそのまま対応します。
対応する GPU は下記の通りです。

・GeForce : Fermi 以降
・RADEON : GCN 以降
・Intel : Haswell 世代以降

Direct3D 12 ではリソースの扱いが大きく変更されています。
Slot 数のような API に起因する制限は基本的になくなっており、
仕様上はメモリの許す限り割り当てることが可能です。
ただしハードウエアが対応しているかどうかはまた別です。
いくつかの GPU で調べてみました。

RADEON RADEON GeForce GeForce Intel HD
R3 HD8400 HD 7750 GTX750Ti GTX650 Graphics 4600
GCN 1.1 HSA GCN 1.0 Maxwell Kepler 7.5th
15.200.1023 15.200.1023 353.30 353.30 10.18.15.4235
FEATURE_LEVEL 12_0 11_1 11_0 11_0 11_1
DoublePrec true true true true true
OMLogicOp true true true true true
MinPrecision NONE NONE NONE NONE NONE
TiledResTier Tier 2 Tire 1 Tier 1 Tier 1 --
ResBindingTier Tier 3 Tire 3 Tier 2 Tier 2 Tier 1
StencilRef true true false false false
TypedUAVFormat true true true false false
ROVsSupported false false false false true
ConservativeRas -- -- -- -- --
GPUVAddrBits 38 31 31 31 31
StdSwizzle64K false false false false false
CrossNodeTier -- -- -- -- --
CrossAdaptTex false false false false false
VPAndRTArray false false false false true
ResHeapTier Tier 2 Tire 2 Tier 1 Tier 1 Tier 2

ハードウエアの対応度を表しているのが Tier で、値が大きいほど制限が無くなります。
Tier が低い場合は D3D11 とほぼ同等です。
例えば 1シェーダーあたり 14 CBV, 128 SRV (Texture), 8 UAV, 16 Sampler など。

この中では RADEON (GCN) が D3D12 API への適応度が最も高いことがわかります。
RADEON (GCN) では数値上の制限がなく、メモリの許す限りいくつでも利用できるわけです。

Tier の詳細はこちら (MSDN Hardware Tiers)、表については こちら もご覧ください。

なおドライバは頻繁に更新されているので、今後仕様が変わる可能性があります。
予めご了承ください。


関連エントリ
Direct3D 12 と ASTC 圧縮 Texture
CPU 負荷が低い 新しい 3D API

関連ページ
3D Low overhead API (Low Level API) Metal/D3D12/Vulkan
Direct3D 12 (DirectX 12) Windows 詳細


OpenGL ES は Mobile 等で用いられる API ですが、Desktop 向け OpenGL にも
積極的に取り込まれており互換性が保たれるようになってきました。
OpenGL 4.5 では GL_ARB_ES3_1_compatibility をサポートし、
OpenGL ES 3.1 API としても使うことができます。

2015/06/25 現在 Windows での対応状況 (beta driver 含む)
Windows           Desktop API   Mobile API
-------------------------------------------------------------
GeForce           OpenGL 4.5    OpenGL ES 3.1 AEP
RADEON            OpenGL 4.5    OpenGL ES 3.1
Intel 4000 (Gen7) OpenGL 4.0    OpenGL ES 3.1    IvyBridge世代
Intel 4600 (7.5)  OpenGL 4.3    OpenGL ES 3.1    Haswell世代

Intel と GeForce は OpenGL ES 3.1 Context を作り直す必要があります。
RADEON の場合は OpenGL 4.5 Context のまま使用します。
Desktop GPU 上で OpenGL ES を使う方法については下記にまとめています。

Desktop 向け OpenGL ES 2.0 / OpenGL ES 3.0 / OpenGL ES 3.1 (AEP) 実行環境


Intel HD Graphics (D3D11世代) は OpenGL 4.5 に対応していませんが、
新しいドライバでは OpenGL ES 3.1 に対応しています。
具体的には Ivy Bridge 世代の Intel HD Graphics 4000/2500 以降で、
BayTrail の HD Graphics も含まれます。

Intel HD Graphics 4000 (Ivy Bridge) Windows 8.1 x64

GL_VERSION: OpenGL ES 3.1 - Build 10.18.10.4226
GL_RENDERER: Intel(R) HD Graphics 4000
GL_VENDOR: Intel
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.1 - Build 10.18.10.4226

Intel HD Graphics (BayTrail-T Atom Z3740) Windows 10 x86

GL_VERSION: OpenGL ES 3.1 - Build 10.18.10.3993
GL_RENDERER: Intel(R) HD Graphics
GL_VENDOR: Intel
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.1 - Build 10.18.10.3993

Intel HD Graphics 4600 (Haswell) Windows 10 x64

GL_VERSION: OpenGL ES 3.1 - Build 10.18.15.4235
GL_RENDERER: Intel(R) HD Graphics 4600
GL_VENDOR: Intel
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.10 - Build 10.18.15.4235

GeForce のように GL_ANDROID_extension_pack_es31a (AEP) はありませんが、
Tessellator/GeometryShader など一部の機能は独自に対応が行われているようです。
OpenGL ES 3.1 context には下記の extension が含まれていることがわかります。

GL_INTEL_tessellation
GL_INTEL_geometry_shader

Intel Developer Zone : Tessellation for OpenGL ES 3.1 on Android


GeForce は OpenGL ES 3.1 context で AEP をサポートしています。
ただし GPU によっては、AEP で必要な一部機能 (ASTC Texture) がソフトウエアで
エミュレーションされているようです。
NVIDIA は Mobile 向けに GLES Emulator Library をリリースしていないので
それを兼ねているのかもしれません。


RADEON は OpenGL 4.x そのままなので特に機能制限ありません。
よっていずれも GLES API ながら OpenGL 4.x 相当の機能が使えることになります。


GPU ごとの詳細は下記に載せています。
それぞれ可能な範囲で OpenGL ES 3.1 context の結果も含めました。

Desktop GPU Extensions


関連エントリ
Android 5.x OpenGL ES 3.1 と対応 GPU
Galaxy S6 Mali-T760 は AEP 非搭載ながら ASTC HDR 対応
GeForce の OpenGL 4.5 ES3_1_Compatibility は AEP 対応
Android Nexus 6 Adreno 420 も OpenGL ES 3.1 AEP 対応 (Direct3D 11相当)
Android 5.0 Nexus 10 Mali-T604 は OpenGL ES 3.1 対応
(Kindle) Fire HD 6 は OpenGL ES 3.0 対応で非対称 4 core CPU
iPad Air 2 (Apple A8X) の GPU
NVIDIA SHIELD Tablet Tegra K1 は OpenGL ES 3.1 で Extension Pack 対応
OpenGL ES 3.1 は OpenGL 4.x 相当で ComputeShader に対応


Android 5.0 から OpenGL ES 3.1 に対応しています。
GPU の対応状況を調べてみました。
今のところ判明している(直接調べた) GPU は下記の通りです。

GPU              OpenGL API           SoC
----------------------------------------------------
Tegra K1         OpenGL ES 3.1 AEP
Adreno 420       OpenGL ES 3.1 AEP    Snapdragon 805
Adreno 430       OpenGL ES 3.1 AEP    Snapdragon 810         
Mali-T604        OpenGL ES 3.1        Exynos 5
Mali-T760        OpenGL ES 3.1        Exynos 7
PowerVR G6200    OpenGL ES 3.1        MT8135
PowerVR G6430    OpenGL ES 3.1        Atom Z3580

OpenGL ES 3.0 がサポートされたのは Android 4.3 からです。
上記の結果を見ると、OpenGL ES 3.0 対応 GPU の大半がそのまま
OpenGL ES 3.1 にも対応できていることがわかります。

上記の表にはありませんが、Z37 系の Intel HD Graphcs (Gen7) も
Windows の最新ドライバで OpenGL ES 3.1 に対応しました。(詳細はこちら)

よって今のところ例外は Adreno 300 系だけとなっています。
Adreno 300 (305/306/320/330等) は OpenGL ES 3.0 専用と考えて良さそうです。


もう一つの特殊な例外は iOS です。
サポートしている OpenGL API は ES 3.0 までですが、
Low Level API の Metal を使うことで OpenGL ES 3.1 相当の機能を用いることができます。

GPU              API                     SoC
--------------------------------------------------
PowerVR G6430    OpenGL ES 3.0 / Metal   A7
PowerVR GX6450   OpenGL ES 3.0 / Metal   A8
PowerVR GX6850   OpenGL ES 3.0 / Metal   A8X

OpenGL ES 3.1 対応状況については下記にまとめています。

OpenGL ES 3.1 対応端末

GPU ごとの詳細はこちら

CPU/GPU OpenGL ES Extension (Mobile GPU)


関連エントリ
Galaxy S6 Mali-T760 は AEP 非搭載ながら ASTC HDR 対応
Android Nexus 6 Adreno 420 も OpenGL ES 3.1 AEP 対応 (Direct3D 11相当)
Android 5.0 Nexus 10 Mali-T604 は OpenGL ES 3.1 対応
(Kindle) Fire HD 6 は OpenGL ES 3.0 対応で非対称 4 core CPU
iPad Air 2 (Apple A8X) の GPU
NVIDIA SHIELD Tablet Tegra K1 は OpenGL ES 3.1 で Extension Pack 対応


Exynos 7 Octa の Mali-T760 は OpenGL ES 3.1 に対応していることを確認しました。
残念ながら AEP (Android Extension Pack) が無いので D3D11 (FeatureLevel11)
相当の Tessellator 等は動きません。
その代わり ASTC 形式の圧縮テクスチャで HDR をサポートしている GPU は
今のところこれだけです。

Samsung Galaxy S6 Edge Exynos 7420 Android 5.0

GL_RENDERER: Mali-T760
GL_VERSION:  OpenGL ES 3.1

GL_EXT_debug_marker
GL_ARM_rgba8
GL_ARM_mali_shader
GL_OES_depth24
GL_OES_depth_texture
GL_OES_depth_texture_cube_map
GL_OES_packed_depth_stencil
GL_OES_rgb8_rgba8
GL_EXT_read_format_bgra
GL_OES_compressed_paletted_texture
GL_OES_compressed_ETC1_RGB8_texture
GL_OES_standard_derivatives
GL_OES_EGL_image
GL_OES_EGL_image_external
GL_OES_EGL_sync
GL_OES_texture_npot
GL_OES_vertex_half_float
GL_OES_required_internalformat
GL_OES_vertex_array_object
GL_OES_mapbuffer
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_rg
GL_EXT_texture_type_2_10_10_10_REV
GL_OES_fbo_render_mipmap
GL_OES_element_index_uint
GL_EXT_shadow_samplers
GL_OES_texture_compression_astc
GL_OES_texture_compression_astc_ldr
GL_OES_texture_compression_astc_hdr
GL_KHR_debug
GL_EXT_occlusion_query_boolean
GL_EXT_disjoint_timer_query
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_OES_get_program_binary
GL_OES_texture_3D
GL_EXT_texture_storage
GL_EXT_multisampled_render_to_texture
GL_OES_surfaceless_context
GL_OES_texture_stencil8
GL_EXT_shader_pixel_local_storage
GL_ARM_shader_framebuffer_fetch
GL_ARM_shader_framebuffer_fetch_depth_stencil
GL_EXT_sRGB
GL_EXT_sRGB_write_control
GL_EXT_texture_sRGB_decode
GL_KHR_blend_equation_advanced
GL_OES_texture_storage_multisample_2d_array
GL_OES_shader_image_atomic

今のところ判明している ASTC対応 GPU

                    ASTC LDR   ASTC HDR   AEP    OS
------------------------------------------------------------
S805/810 Adreno 400    Y          N        Y     Android 5.0
Tegra K1               Y          N        Y     Android 5.0
Exynos 7 Mali-T760     Y          Y        N     Android 5.0
A8X PowerVR GX6850     Y          N        N     iOS 8

ASTC 対応 GPU はまだ多くないものの、OpenGL (ES) だけでなく
D3D12/11.3 (FeatureLevel 12以上) や Metal でも使用することができます。
プラットフォームや API を超えて共有できるフォーマットになりつつあります。

下記ページを更新しました
CPU/GPU OpenGL ES Extension (Mobile GPU)


Desktop GPU でも GeForce (GTX650/GTX750Ti Kepler/Maxwell 等) は
GL_ARB_ES3_1_compatibility にて GL_ANDROID_extension_pack_es31a (AEP)
に対応しています。
GL_KHR_texture_compression_astc_ldr は無いものの、
glGetIntergerv( GL_COMPRESSED_TEXTURE_FORMATS ) では列挙されるので
ASTC Texture を読み込むことができます。
ただしエミュレーションらしくロード時に非圧縮フォーマットに展開されているようです。


関連エントリ
Direct3D 12 と ASTC 圧縮 Texture
iPad Air 2 (Apple A8X) の GPU
OpenGL ES 3.0 / OpenGL 4.3 ASTC 圧縮テクスチャの比較
OpenGL 4.3/GLES 3.0 次の圧縮テクスチャ ASTC
Direct3D11/OpenGL 圧縮テクスチャ BPTC, BC6H/BC7 の詳細構造 (2)