GLSLをUnityのシェーダーに書き換える時よく使うやつをメモっていく。
一番下の参考ページを見たほうが早いかもしれません。
◆ 変数
名前が違うやつ
GLSL |
HLSL |
説明 |
vec4, vec3, vec2 |
float4, float3, float2 |
ベクトル |
mat3, mat4, mat3x4 |
float3x3, float4x4, float3x4 |
マトリクス |
名前が同じやつ
GLSL, HLSL |
説明 |
sampler2D |
テクスチャ |
float |
フロート |
◆ 関数
名前が違うやつ
GLSL |
HLSL |
説明 |
fract(x) |
frac(x) |
x の小数部を返します。 |
mod(x,y) |
fmod(x, y) |
x/y の浮動小数点の剰余を返します。 |
atan(x,y) |
atan2(x, y) |
2 つの値 (x,y) のアークタンジェントを返します。 |
mix(x,y,a) |
lerp(x,y,a) |
xとyの間の線形補間。 |
texture2D(img,texcoord) |
tex2D(img,texcoord) |
色取得 |
名前が同じやつ
GLSL, HLSL |
説明 |
pow(x,y) |
xをy乗する |
abs(x) |
絶対値 |
step(edge,x) |
x < edge ? 0.0 : 1.0 |
smoothstep( x,y,a ) |
x,y間をスムーズに補間 |
clamp( x, min, max ) |
xがmin以下ならmin, max以上ならmax |
discard |
フラグメントシェーダーでピクセルの結果を出力しない |
length(v) |
ベクトルVの長さ(絶対値)を返す |
floor(x) |
少数きりすて |
sign(x) |
x の符号を計算 |
normalize(v) |
正規化 |
GLSLにないやつ
GLSL |
HLSL |
説明 |
matrix * matrix |
mul(matrix,matrix) |
マトリックスどうしや、ベクターとマトリックス掛け算。HLSLは関数を使う |
clamp( x, 0.0, 1.0 ) |
saturate( x ) |
[0,1]でcalmpするsaturate。GLSLにはない。clampで代用。 |
if(x<0) discard; |
clip( x ) |
xが負ならdiscardするclip関数。glslならif文で書くのかな?? |
参考ページ
GLSL/HLSL/Metal 命令対応表
http://dench.flatlib.jp/opengl/glsl_hlsl
組み込み関数 (DirectX HLSL)
https://msdn.microsoft.com/ja-jp/library/bb509611(v=vs.85).aspx
Shader(HLSL), 手続き的にテクスチャ生成など行うとき使用頻度の高い関数
http://qiita.com/oishihiroaki/items/9d899cdcb9bee682531a