High Level Shading Language コード例

High Level Shading Language

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/02/12 05:06 UTC 版)

コード例

以下にDirect3D 10/11向けHLSLを用いた、単純なHalf Lambert照明モデルおよびPhong照明モデル(Blinn-Phong)の頂点シェーダーおよびピクセルシェーダーのプログラムを示す。なお分岐によって照明モデルを切り替えているが、これはいわゆるウーバーシェーダー(uber-shader)なので、実行速度効率などは考慮していないことに注意されたい。

// Shader Constants.
matrix TrWorldViewProj;
matrix TrWorld;
float4 LightPosition;
float3 EyePosition;
float4 DiffuseColor;
float4 SpecularColor;
float SpecularPower;
bool IsPhongModel;

struct BasicVSOutput
{
	float4 Pos : SV_POSITION;
	float3 WPos : TEXCOORD1;
	float3 WNormal : NORMAL0;
};
typedef BasicVSOutput BasicPSInput;

// Vertex Shader Program.
BasicVSOutput BasicVS(float3 pos : POSITION0, float3 normal : NORMAL0)
{
	BasicVSOutput output = (BasicVSOutput)0;
	output.Pos = mul(float4(pos, 1), TrWorldViewProj);
	output.WPos = mul(float4(pos, 1), TrWorld).xyz;
	output.WNormal = mul(normal, (float3x3)TrWorld);
	return output;
}

float4 CalcLambert(float3 light, float3 wnormal)
{
	// Half Lambert.

	float lambert = dot(light, wnormal);
	lambert = lambert * 0.5f + 0.5f;
	lambert *= lambert;
	return lambert * DiffuseColor;
}

float4 BasicLambert(BasicPSInput input)
{
	const float3 light = normalize(LightPosition.xyz - input.WPos);
	const float3 normal = normalize(input.WNormal);
	return CalcLambert(light, normal);
}

float4 BasicPhong(BasicPSInput input)
{
	// Phong lighting with specular.

	const float3 eye = normalize(EyePosition - input.WPos);
	const float3 light = normalize(LightPosition.xyz - input.WPos);
	const float3 halfway = normalize(light + eye);
	const float3 normal = normalize(input.WNormal);
	const float specular = pow(max(dot(normal, halfway), 0.0), SpecularPower);
	return CalcLambert(light, normal) + specular * SpecularColor;
}

// Pixel Shader Program.
float4 BasicPS(BasicPSInput input) : SV_TARGET0
{
	if (IsPhongModel)
	{
		return BasicPhong(input);
	}
	else
	{
		return BasicLambert(input);
	}
}

例のように、ピクセルシェーダーによってピクセル単位の正規化法線ベクトルを求めることにより、Direct3D 7以前の固定機能シェーダーでは実現が難しかったPer-Pixelライティングが容易に実装可能となっている。 もちろん、使用するシェーダーモデルおよび対応するハードウェアによっては、より複雑で長大なアルゴリズムを実装することもできる。リアルタイムグラフィックスゆえにハードウェア性能に応じたトレードオフにはなるが、単純な局所照明(ローカルイルミネーション)だけでなく、より厳密な物理ベースのレンダリング方程式英語版に基づいた、大域照明(グローバルイルミネーション)モデルをHLSLによるプログラマブルシェーダーで実装することで、より現実に近いリアルタイム3Dコンピューターグラフィックスを実現することも可能となる。さらに、Direct3D 11 (DirectCompute) ではコンピュートシェーダーを使って、GPUにグラフィックス用途以外の汎用計算を行なわせるGPGPUプログラムをHLSLで記述することも可能となる。

なお、HLSLソースファイルには通例.hlsl拡張子が付けられ、ヘッダーファイルには.hlsli拡張子が付けられる[12]


  1. ^ Programming guide for HLSL - Win32 apps | Microsoft Learn
  2. ^ High-level shader language (HLSL) - Win32 apps | Microsoft Learn
  3. ^ Writing HLSL Shaders in Direct3D 9 - Win32 apps | Microsoft Learn
  4. ^ Interfaces and Classes - Win32 apps | Microsoft Learn
  5. ^ 上位レベル シェーダ言語 | Microsoft Learn
  6. ^ HLSL | Microsoft Learn
  7. ^ Shader Models vs Shader Profiles - MSDN
  8. ^ [GDC 2016]シェーダモデル6.0がやってくる! Microsoftが語った「次のDirectX」 - 4Gamer.net
  9. ^ a b HLSL Shader Model 6.0 (Windows)
  10. ^ Direct3D 9 から Direct3D 10 への移行時の考慮事項 (Direct3D 10)
  11. ^ 動的リンク
  12. ^ .hlsli Extension - List of programs that can open .hlsli files
  13. ^ Direct3D 9 でのシェーダーの使用 | Microsoft Learn
  14. ^ GitHub - KhronosGroup/glslang: Khronos-reference front end for GLSL/ESSL, partial front end for HLSL, and a SPIR-V generator.
  15. ^ HLSL, FXC, and D3DCompile | Games for Windows and the DirectX SDK blog
  16. ^ Unity での HLSL - Unity 2020.3 マニュアル
  17. ^ Unity 5.0 - Manual: Writing vertex and fragment shaders
  18. ^ Unity 5.0 - Manual: Compute Shaders
  19. ^ コンピュートシェーダー - Unity 2017.4 マニュアル
  20. ^ Microsoft/DirectXShaderCompiler: This repo hosts the source for the DirectX Shader Compiler which is based on LLVM/Clang.
  21. ^ ShaderEffect クラス (System.Windows.Media.Effects)
  22. ^ ShaderEffect クラス (System.Windows.Media.Effects)
  23. ^ WPF Version 4 の新機能
  24. ^ Effects (Windows)
  25. ^ シェーダー モデルとシェーダー プロファイル
  26. ^ Direct3D 10 でのシェーダーの使用
  27. ^ 3Dグラフィックス・マニアックス (4) GPUとシェーダ技術の基礎知識(4) | マイナビニュース
  28. ^ 【4Gamer.net】[特集]ATIとNVIDIAが語る2005&2006年 ATI編
  29. ^ テッセレーション (Direct3D 9)
  30. ^ 4Gamer.net AMD,コードネーム「R600」こと「ATI Radeon HD 2000」を発表
  31. ^ [連載][西川善司の3Dゲームエクスタシー]「ATI Radeon HD 2000」シリーズのGPUアーキテクチャ徹底解説
  32. ^ Game Developers Conference(GDC) 2010現地レポート - GAME Watch
  33. ^ "PDC 2008: メインストリーム アプリケーション向け Direct3D10", Microsoft Corporation, 2008年10月
  34. ^ D3D_FEATURE_LEVEL enumeration
  35. ^ Direct3D feature levels
  36. ^ ダウンレベルのハードウェア上の Direct3D 11
  37. ^ 10Level9 リファレンス
  38. ^ Shader Model 5.1
  39. ^ HLSL Shader Model 5.1 Features for Direct3D 12
  40. ^ Hardware Feature Levels
  41. ^ a b Shader Model 3.0, Ashu Rege, NVIDIA Developer Technology Group, 2004.
  42. ^ a b The Direct3D 10 System, David Blythe, Microsoft Corporation, 2006.
  43. ^ "Shader Model 3.0 Unleashed", Randima (Randy) Fernando, NVIDIA Developer Technology Group
  44. ^ テクスチャー オブジェクト (DirectX HLSL)
  45. ^ 西川善司の3DゲームファンのためのE3最新ハードウェア講座” (日本語). Impress Watch (2011年6月11日). 2011年6月11日閲覧。
  46. ^ 西川善司の3Dゲームファンのための「プレイステーション 4」グラフィックス」講座(後編)” (日本語). Impress Watch (2013年3月8日). 2014年8月29日閲覧。





英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「High Level Shading Language」の関連用語

High Level Shading Languageのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



High Level Shading Languageのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのHigh Level Shading Language (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2024 GRAS Group, Inc.RSS