ZAX (Zatools Arithmetic Expression) は RPN (逆ポーランド記法) によるスタックベースの数式・ベクトル処理エンジンです。
思いついちゃったから作っちゃいました。
概要
ZAX は、Zatools 内の一部の数値処理をより細かくカスタマイズするために導入されています。
基本的には上級者向けの機能であり、多くのユースケースは既定のプリセットでカバーされるはずです。
またパフォーマンス上の理由から、既定のプリセットの自体を ZAX 上に構築することはありません。
コード例
基本
ZAX Code:
; @uv0: float4
@uv0 #xy 2.0 * 0.1 0.2 vec2 + .. 0.0 0.0 vec4
HLSL Equivalent:
// float4 uv0;
return vec4(uv0.xy * 2.0 + float2 (0.1 , 0.2 ), 0.0 , 0.0 );
応用
ZAX Code:
0 0 1 vec3
2 / 0.5 +
...
@color #xyz
0.299 0.587 0.114 vec3
dot
vec4
HLSL Equivalent:
// float4 color;
float3 block1 = float3 (0.0 , 0.0 , 1.0 ) / 2 + 0.5 ;
float block2 = dot(color.xyz, float3 (0.299 , 0.587 , 0.114 ));
return float4 (block1.xyz, block2);
行列
ZAX Code:
; @position: float3, @angle: float
0 1 0 vec3 Mtranslate
@angle Mroty Mto4
M*
@position Mtfpoint
HLSL Equivalent:
// float3 position; float angle;
float4x4 t = /* translate by (0, 1, 0) */ ;
float4x4 r = /* rotate around Y by angle */ ;
return mul(mul(t, r), float4 (position, 1.0 )).xyz;
行列は N 個の floatN の並びとして扱われる。詳細は行列・クォータニオン を参照。