Difference between revisions of "Tutorial:Introduction to Shaders (日本語)"

(Created page with "これはシェーダーの基本に関して解説するための基礎的なチュートリアルです。こち...")
 
m
 
Line 47: Line 47:
 
* [[Shader (日本語)|Shader]]
 
* [[Shader (日本語)|Shader]]
  
[[Category:Tutorials (日本語)]]
+
[[Category:Tutorials]]
  
 
{{#set:LOVE Version=0.9.0}}
 
{{#set:LOVE Version=0.9.0}}

Latest revision as of 11:35, 28 August 2016

これはシェーダーの基本に関して解説するための基礎的なチュートリアルです。こちらには小型の用例があります:

function love.load()
    shader = love.graphics.newShader("shader.fs")
end

function love.draw()
    love.graphics.setShader(shader)
    love.graphics.rectangle("fill", 0, 0, 100, 100)
    love.graphics.setShader()
end

最も重要な事はシェーダーを記述するときに留意して欲しいことはエントリー・ポイントは純正の (Open)GL と同一ではないことです。それは LOVE において変更されています。

vec4 effect( vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords )

したがって FragCoord を設定する代わりに、ピクセルの色に対して vec4 を返します。テクスチャ座標は、現在のテクスチャ、システム全体の配色設定、および現在のピクセルにおける画面座標位置と同様に提供されます。純正の (Open)GL では要素に対して一定値を提供します。

上記にて言及したように、一定形式の変数をシェーダーへデータを送信することができます:

shader:send(name, value[s])

値は数値または vec2/3/4 に対する数値のテーブルすることができます。または行列用の多数の数値です。完全な一覧はこちらです

私が知っている限り LOVE 用の既に記述されたシェーダーに関する太っ腹なレポジトリを捜しているのであれば、幸運欠乏症です。しかしながら、そこで、 "share a shader" (シェーダーの共有) スレッドがあります。それは現在入手可能な物として最も目的に近いです。

シェーダーの動作方法に関して存じなければ、グラフィックス・プロセッサ (GPU) が各ピクセルに対して実行を行う小型のプログラムと見なすことができます。長方形を描画する場合に、OpenGL は座標を画面上のピクセル (ラスター化処理) へ変換してからシェーダーによりピクセルを実行します。即時に画像修正を行うための非常に高速かつ効率的な方法であり、現代的な写実またはそれ以外ではグラフィックスであり、それらを超えた範囲のことはほぼ不可能 (極端に実用的ではない) でしょう。

シェーダーにおける effect 関数は現在のピクセルに対する選択を希望する色を表す vec4 を返します。テクスチャに対する読み込みおよびに数学に対する多数の組み込み関数があります。こちらには単におよび白色のテクスチャを描画する effect の一例があります。

vec4 effect( vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords )
{
    vec4 c = Texel(texture, texture_coords); // LOVE へ指定した座標 (0-1, 0-1) からテクスチャの色を読み取ります。
    return vec4(vec3(1.0, 1.0, 1.0) * (max(c.r, max(c.g, c.b))), 1.0); // これはテクスチャの指定されたピクセルで最も明度の高い色チャンネルにより調整された白色を返すだけです。あまり複雑ではないですが、 B&W (Black and White : 白黒化) を正確に行う方法としては綺麗でありません :P
}

-- 出典: [1]

関連



そのほかの言語