夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

OpenGLとDirectX、異なるノーマルマップについて調べる

本日は3Dグラフィック枠です。

3DCGを描画する際にはOpenGLDirectXなど様々なグラフィックスAPIが用いられ、レンダリングが行われています。

グラフィックスAPIによって若干のデータの扱いの違いがあります。

例えばMetalではそもそもジオメトリシェーダーステージをサポートしていませんし、以前筆者が陥った例だと、Androidで広く使用されているOpenGLDirectXではUVの基準点が異なります。(DirectXでは左上が原点、OpenGLでは左下が原点)

今回はノーマルマップの違いについてみていきます。

〇ノーマルマップでの形式

ノーマルマップには、OpenGL形式とDirectX形式の2つの主要な形式が存在します。

例えばSubstancePainterで新規プロジェクトを作成する場合は法線マップのモードとしてOpenGLDirectXのタイプが選択可能です。

使用するソフトウェアに合わせ適切に法線マップのタイプを選択する必要がありますが、この違いはDirectXOpenGLで座標系が異なるための違いです。

具体的にはDirectXでは座標系が左手系、OpenGLでは右手系です。

ノーマルマップのRGBチャンネルのうちGチャンネルが異なっています。

 この違いによって同一のノーマルマップでDirectXOpenGLではでこぼこが反転して見えます。

 これによってテクスチャの見え方が異なってしまうことが2種類の形式がある理由です。

〇ソフトウェアによる違い

多くのソフトウェアではOpenGL形式、DirectX形式の両方に対応しています。

カテゴリ ソフトウェア名 DirectX OpenGL
ゲームエンジン
Unity
Unreal Engine
GameMaker Studio
Godot Engine
Defold
PICO-8
Pyxel
Cocos2d-x
DCCツール
Maya ◯※ArnoldはOpenGL
Blender
Zbrush
3dsMax
Lightwave
Houdini

DirectX系とOpenGL形式の変換

前述のとおり両者の違いはG成分の向きの違いです。

つまりIntensityの値を-値で反転させることででこぼこが反転し両方に対応させることができます。

本日はノーマルマップについてOpenGL系とDirectX系でまとめました。