HSV 変換
定義通り
float3 hsv2rgb(float3 hsv)
{
float3 rgb = saturate(
abs(fmod(hsv.x * 6.0 + float3(0.0, 4.0, 2.0), 6.0) - 3.0));
return hsv.z * (1.0 - hsv.y + hsv.y * rgb);
}
Code language: Arduino (arduino)
改良スムーズバージョン
float3 hsv2rgb(float3 hsv)
{
float3 rgb = smoothstep(2.0, 1.0,
abs(fmod(hsv.x * 6.0 + float3(0.0, 4.0, 2.0), 6.0) - 3.0));
return hsv.z * (1.0 - hsv.y * rgb);
}
Code language: Arduino (arduino)
コード:
A Simple HLSL Shader Code to Convert HSV to RGB Colors (iUltimateLP) – GitHub Gist
デモ:
Smooth HSV (Inigo Quilez) | Shadertoy
RGB to HSV / HSL (tayloia) | Shadertoy
RGB / HSV Tween Compare (sss88028) | Shadertoy
参考:
RGB と HSV を相互に色相変換する | KAZUPON 研究室
RGB を HSV に変換して明るさとかを変えるシェーダー (Unity) | KAYAC engineers’ blog
RGB to HSV / HSL / HCY / HCL in HLSL | chilliant.com
Fast Branchless RGB to HSV Conversion in GLSL | Lol Engine
RGB to HSV controls – Unity Forum
switch 文
属性
flatten
branch
forcecase
call
ドキュメント:
switch ステートメント | Microsoft Learn [公式]
参考:
シェーダモデル 3.x 以前の HLSL で switch 文を使うときの注意 | Neareal
switch attributes – GameDev.net
回転行列
コード:
3×3 Rotation Matrix (keijiro) – GitHub Gist
クォータニオン
コード:
Quaternion Structure for HLSL (mattatz) – GitHub Gist
定数
円周率を表す定義する。
static const float PI = 3.1415926525;
Code language: Arduino (arduino)
または、acos を用いて定義する。
static const float PI = acos(-1.0);
Code language: Arduino (arduino)
参考:
定数バッファ
ドキュメント:
定数バッファを作成する方法 | Microsoft Learn [公式]
シェーダー定数 | Microsoft Learn [公式]
定数変数のパッキング規則 | Microsoft Learn [公式]
バッファの概要 v11 | Microsoft Learn [公式]
参考:
Descriptor / DescriptorHeap / DescriptorTable / RootSignature | もんしょの巣穴
シェーダ内に定数を定義したつもりだが値が割り当てられない問題 | Yorung’s Hotfix
invalid input semantic POSITION エラー
現象:
POSITION
セマンティクスが不正である旨のエラーが発生する。
error X4502: invalid input semantic 'POSITION': Legal indices are in [1,15]
原因:
- ピクセルシェーダーの入力として
POSITION
セマンティクスを使用することはできない。
対処法:
POSITION
に相当する値が必要な場合は、他のセマンティクスを経由して渡す。
参考:
ビルド時にエラー invalid input semantic ‘POSITION’ が出力される – Qiita
Visual Studio でコンパイルエラーが発生する
参考: