イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

shader 配列の扱い

初期化

int a[2] = {1,2};

int a[2][1] = {{1},{2}};

float2 a[1] = {float2(1,1)};

float2 a[1][1] スカラーは多次元配列の初期化が出来るが、ベクトルは無理っぽい

 

返り値の指定

void xtest(out float2 a[1])

void xtest(out float a[1]) 

はout記法を使って記述する

ベクトルでもスカラーでも通常の場所には書くと、エラー文の出ないエラーになる。

一度これを書くと、

// Upgrade NOTE: excluded shader from DX11, OpenGL ES 2.0 because it uses unsized arrays
#pragma exclude_renderers d3d11 gles

というコードが自動的にコードに挿入されてエラーが出ないようになるので注意

 

また、

float2 a[2] = {float2(1,1),float2(2,2)};

は可能だが

float2 b[2];

b = {float2(1,1),float2(2,2)};

は出来ない。

こういうときは

a = bと

新しく配列を作成してその変数を代入する形にすると動く

 

また

a[num]のように配列数に変数を使用することは出来ない(固定長配列)

defineも無理

 

大規模な配列を使うと以下のようなエラーが出る

Sum of temp registers and indexable temp registers exceeds limit of 4096

配列の数を4096以下にすればいいわけではない