2023/10/3
第14回 Unity Editor と Unity PolySpatialで Apple Vision Pro の アプリ開発(Unity PolySpatial カスタム関数ノードのサポート編)
はじめに
今回は、Apple Vision Pro による Unity PolySpatial カスタム関数ノードについて説明します。
Apple Vision Pro について
Apple Vision Pro について、以下の記事にまとめてます。
PolySpatialのシェーダーグラフ変換
PolySpatialのシェーダーグラフ変換は、カスタム関数ノードを部分的にサポートしています。これは、HLSLの限られたサブセットを解析し、MaterialXノードに変換することで実現されます。ただし、組み込みのシェーダーグラフノードと組み合わせて実現できる機能を超えて拡張はできません。PolySpatialのシェーダーグラフ変換は、まだ開発中であるため、将来的にはより多くのHLSL機能をサポートするようになる可能性があります。
関数本体の形式
カスタム関数本体は、一時変数または出力に対する一連の代入文で構成される必要があります。変数の再代入はできません。
Example
サポートされている関数本体の例を以下に示します。本体は、一時変数を1つ割り当て、その値を使用して出力の値を設定する代入文のみで構成されています。
float2 xy = float2(In.r * In.a, In.g) * 2.0 - 1.0;
Out = float3(xy, max(1.0e-16, sqrt(1.0 - saturate(dot(xy, xy)))));
サポートしている型
パーサーは、スカラー型とベクトル型の浮動小数点型を認識します。
float
, float2
, float3
, float4
, float2x2
, float3x3
, float4x4
サポートされている演算子
パーサーは、基本的な算術演算子をサポートしています。
+
, -
, *
, /
, %
Swizzling
ベクトル値のSwizzlingはサポートしています。
例) float3(1, 2, 3).xz
と float2(1, 3)
は同じ。
サポートしているファンクション
HLSL 組み込み関数
パーサーはHLSLの組込み関数のサブセットをサポートしている
abs
, acos
, asin
, atan
, atan2
, ceil
, clamp
, cos
, cross
, degrees
, distance
, dot
, exp
, floor
, fmod
, frac
, length
, lerp
, log
, max
, min
, mul
, normalize
, pow
, radians
, rcp
, reflect
, round
, rsqrt
, saturate
, sign
, sin
, smoothstep
, sqrt
, step
, tan
, transpose
Polyspatial 特有の関数
さらに、パーサーはカスタム splitlr 関数をサポートしており、MaterialX の仕様 に記述されている splitlr 関数を実装しています。
genType splitlr(genType valuel, genType valuer, float center, float2 texcoord);
(genType は float、float2、float3、または float4 のいずれか)
Unity マクロ
テクスチャのサンプリングのために、パーサーは Unity マクロをサポートしています。SAMPLE_TEXTURE2D と SAMPLETEXTURE2DLOD です。
サポートされているグローバル変数
パーサーは、Unity の組み込みグローバル変数のいくつかをサポートしています。Time、SinTime、CosTime、unityDeltaTime です。
まとめ
今回は、Unity PolySpatial のShader Graphについてまとめました。次回は、Unity PolySpatial Lighting のサポート について説明します。
Unity PolySpatial の 他の記事は コチラ にあります。
XR エンジニア
徳山 禎男
SIerとして金融や飲料系など様々な大規模プロジェクトに参画後、2020年にOnePlanetに入社。ARグラスを中心とした最先端のAR技術のR&Dや、法人顧客への技術提供を担当。過去にMagic Leap 公式アンバサダーを歴任。
View More