LoginSignup
146
109

More than 3 years have passed since last update.

GLSLをHLSLに書き換える

Last updated at Posted at 2017-06-01

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

146
109
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
146
109