GLSL
Unity
Shader

GLSLをHLSLに書き換える

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

clamp( x, min, max )
xがmin以下ならmin, max以上ならmax

smoothstep( x,y,a )
clamp( (x-min) / (max-min), 0.0, 1.0 )

discard
フラグメントシェーダーでピクセルの結果を出力しない

length(v)
ベクトルVの長さ(絶対値)を返す

floor
少数きりすて

sign(x)
x の符号を計算

normalize
正規化


GLSLにないやつ

GLSL
HLSL
説明

matrix * matrix
mul(matrix,matrix)
マトリックスどうしや、ベクターとマトリックス掛け算

clamp( x, 0.0, 1.0 )
saturate( x )
[0,1]でcalmpするsaturateはGLSLにはない。clampで代用。

if(x<0) discard;
clip( x )
xが負ならdiscard。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