「シェーダー」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
1行目: 1行目:
'''シェーダー'''([[英語]]:shader)とは、本来は3DCGで「陰影処理を」行うことをいう。現在では主に[[GPU]]で行う様々な処理の総称となっている。
+
'''シェーダー'''([[英語]]:shader)とは、本来は3DCGにおいて「陰影処理を行うこと」をいう。現在では「[[GPU]]で行う様々な処理の総称」となっている。
 +
 
 
==概要==
 
==概要==
シェーダーは大きくわけて[[GPU]]が固定機能として持つ「[[固定シェーダー]]」と、[[プログラマ]]が独自の処理を記述できる「[[プログラマブルシェーダー]]」に分けられる。
+
シェーダーは大きくわけて[[GPU]]が固定機能として持つ「[[固定シェーダー]]」と、[[プログラマー]]が独自の処理を記述できる「[[プログラマブルシェーダー]]」に分けられる。
  
 
現在ではプログラマブルシェーダーが主流であるため「シェーダー=プログラマブルシェーダー」となっていることが多い。2018年時点で固定シェーダーを採用している現役製品は[[ニンテンドー3DS]]くらいである。
 
現在ではプログラマブルシェーダーが主流であるため「シェーダー=プログラマブルシェーダー」となっていることが多い。2018年時点で固定シェーダーを採用している現役製品は[[ニンテンドー3DS]]くらいである。
7行目: 8行目:
 
また、ほとんどの[[ゲームフレームワーク]]や[[ゲームエンジン]]では無駄に[[プログラミング]]しなくても定番のレンダリング処理はあらかじめ[[固定シェーダー]]として用意されている。これらでは内部的にはプログラマブルシェーダーを叩いているがソフトウェア的に固定シェーダーに見せている。
 
また、ほとんどの[[ゲームフレームワーク]]や[[ゲームエンジン]]では無駄に[[プログラミング]]しなくても定番のレンダリング処理はあらかじめ[[固定シェーダー]]として用意されている。これらでは内部的にはプログラマブルシェーダーを叩いているがソフトウェア的に固定シェーダーに見せている。
  
最近は[[人工知能]]だ[[ブロックチェーン]]だと[[GPGPU]]の絡みで普通の計算もし易い仕様のプログラミング言語も増えている。
+
最近は[[人工知能]]だ[[ブロックチェーン]]だと[[GPGPU]]の絡みで普通の計算もし易い仕様の[[プログラミング言語]]も増えている。
 +
 
  
 
==DXライブラリのシェーダー==
 
==DXライブラリのシェーダー==
55行目: 57行目:
  
 
==DirectXのシェーダー==
 
==DirectXのシェーダー==
DirectXでは「[[HLSL]]」を用いる。
+
[[DirectX]]では「[[HLSL]]」を用いる。
  
 
==Unityのシェーダー==
 
==Unityのシェーダー==
未稿
+
Unityでは「[[CG言語]]」を用いる。
  
 
==OpenGLのシェーダー==
 
==OpenGLのシェーダー==
70行目: 72行目:
  
 
==関連項目==
 
==関連項目==
 
 
*[[画像処理]]
 
*[[画像処理]]
 
*[[シェーディング言語]]
 
*[[シェーディング言語]]

2021年7月8日 (木) 01:58時点における版

シェーダー英語:shader)とは、本来は3DCGにおいて「陰影処理を行うこと」をいう。現在では「GPUで行う様々な処理の総称」となっている。

概要

シェーダーは大きくわけてGPUが固定機能として持つ「固定シェーダー」と、プログラマーが独自の処理を記述できる「プログラマブルシェーダー」に分けられる。

現在ではプログラマブルシェーダーが主流であるため「シェーダー=プログラマブルシェーダー」となっていることが多い。2018年時点で固定シェーダーを採用している現役製品はニンテンドー3DSくらいである。

また、ほとんどのゲームフレームワークゲームエンジンでは無駄にプログラミングしなくても定番のレンダリング処理はあらかじめ固定シェーダーとして用意されている。これらでは内部的にはプログラマブルシェーダーを叩いているがソフトウェア的に固定シェーダーに見せている。

最近は人工知能ブロックチェーンだとGPGPUの絡みで普通の計算もし易い仕様のプログラミング言語も増えている。


DXライブラリのシェーダー

DXライブラリにおいては、シェーダーをC言語っぽい言語で書き、付属のツールでコンパイルすることができる。

頂点シェーダー

未稿

ピクセルシェーダー

バイナリの主な拡張子は".pso"すなわち「ぷそ」である。

テクスチャ(プログラムで指定した画像)上の位置(左上を(0.0,0.0)、右下を(1.0,1.0)とする)などのパラメータが渡され、 その位置に書き込みたい色のデータを返す。色のデータは、RGBAの各要素をそれぞれ0.0~1.0の実数で表す形式で入出力する。

例:グレースケール

//おまじない
struct PS_INPUT {
	float4 DiffuseColor	: COLOR0;
	float4 SpecularColor	: COLOR1;
	float2 TextureCoord0	: TEXCOORD0;
	float2 TextureCoord1	: TEXCOORD1;
};

struct PS_OUTPUT {
	float4 Output		: COLOR0;
};

sampler DiffuseMapTexture : register(s0);

//メインのプログラムを書く
PS_OUTPUT main(PS_INPUT PSInput) {
	PS_OUTPUT PSOutput;
	float4 nowColor;

	//指定された場所のテクスチャの色を取得するおまじない
	nowColor=tex2D(DiffuseMapTexture,PSInput.TextureCoord0);
	//グレースケールにする計算
	PSOutput.Output.r=0.298912f*nowColor.r+0.586611f*nowColor.g+0.114478f*nowColor.b;
	PSOutput.Output.g=PSOutput.Output.r;
	PSOutput.Output.b=PSOutput.Output.r;
	PSOutput.Output.a=nowColor.a;
	//計算結果を返す
	return PSOutput;
}

一応行列の積などの計算もできそうだが、普通に計算したほうが速いし正確。

DirectXのシェーダー

DirectXでは「HLSL」を用いる。

Unityのシェーダー

Unityでは「CG言語」を用いる。

OpenGLのシェーダー

OpenGLおよびOpenGL ESは「GLSL」を用いる。

Metalのシェーダー

Metalでは「Metal Shading Language」を用いる。

Vulkanのシェーダー

Vulkanでは「GLSL」および「HLSL」の2種類が利用可能となった。

関連項目