トップ  >  1. Blenderリリースノート翻訳  >  Blender機能別  >  Blender2.41 GLSL ピクセル/バーテックスシェーダ
blender3d.org -- GLSL Pixel and Vertex shaders


GLSL ピクセル/バーテックスシェーダ


Blender に、OpenGL SL(シェーダランゲージ)のピクセル/バーテックスシェーダを Game Engine 用に割り当てることができるようになりました。もっとちゃんとしたドキュメントは Game Engine Documentation にあります。

シェーダは Python の使用により、単一の Material に適用できます。Object 上のそれぞれの Material ごとに、一つのシェーダに(その Material から)アクセスできます。少しの例外を除き、ほとんどの GLSL の関数にアクセスできます。Attribute の位置は利用できません。

実際には、下記のような宣言は動作しません。
//--
attribute vec3 variable;
//--

フラグメントシェーダでは、下記の Sampler のみ使用可能です。
// -- 
uniform sampler2D;
uniform samplerCube;
//-- 

sampler2D はImage タイプを参照し、samplerCube は Envmap を参照します。

プログラム中で uniform 変数にアクセスするには、その変数の名前/値を補う必要があります:shader.setUniform[if][v](name,value)

vec3 の場合、
shader.setUniform3f(name,f,f,f)
あるいは
shader.setUniformfv(name, [f,f,f] )

Sampler は取扱いに少し違いがあり、インデックスによりアクセスされます(0,2など)。このインデックスは Material パネル内で供給される Texture の順序を参照しています。もし Material がなければ、0を有効な Sampler のインデックスとして常に使用できます。

shader.setSampler(sampler_name, texture_index)

テンプレート
#------------------------------------------------------------------------------
import GameLogic
objects = GameLogic.getCurrentScene().getObjectList()

# -------------------------------------
ShaderObjects = [] # add objects
MaterialIndexList = [0] # material index
# -------------------------------------

VertexShader = """
void main(){
  gl_Position = ftransform();
}
"""

FragmentShader = """
void main(){
  gl_FragColor = vec4(1.0, 0.5, 0.0, 1.0);
}
"""

def MainLoop ():
  for obj in ShaderObjects:
    mesh_index = 0
    mesh = obj.getMesh(mesh_index)
    while mesh != None:
      for mat in mesh.materials:
        if not hasattr(mat, "getMaterialIndex"):
          return
        mat_index = mat.getMaterialIndex()
        found = 0
        for i in range(len(MaterialIndexList)):
          if mat_index == MaterialIndexList[i]:
            found=1
            break
        if not found: continue
        shader = mat.getShader()
        if shader != None:
          if not shader.isValid():
            shader.setSource(VertexShader, FragmentShader,1)
          # set shader variables
          # --
        
      mesh_index += 1
      mesh = obj.getMesh(mesh_index)
# -------------------------------------
MainLoop()
#------------------------------------------------------------------------------
もしエラーが起こった場合、material.getShader()関数は None を返し、その Matarial 用のシェーダは使用されなくなります。


Last update: Jan 26 2006.
This section is maintained by Ton Roosendaal.
プリンタ用画面
友達に伝える
投票数:12 平均点:10.00
前
Blender2.41 スクリーン分割とマルチビュー
カテゴリートップ
Blender機能別
次
Blender2.41 Blender Material

クイックリンク

2013/11/15版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- オープンプロジェクト
- 公式ストア

●マニュアルなど
公式マニュアル(途中)
JBDP2.5 Wiki
CGRad Project
Project-6B(6B計画)

●チュートリアルなど
公式チュート等
その他チュートリンク集
公式動画チュートリアル
Blender Cookie
Blenderで3DCG制作日記
BlenderVideos.com
Blender 3D: Noob to Pro
blenderguru

●日本語コミュニティ
Blender@2ch
BLUG.JP(FBページ)
(BLender User Group of JAPAN)

-旧BLUG.JP
-blugjpまとめ
ぶれんだちゃん*(ツイッター)

●実写合成(日本語)
CGCompo

●合成エフェクト(日本語)
tomo@web

●Cycles
Blender Cycles memo

●Freestyle(日本語)
公式マニュアル
使用例
スザンぬクラブ

●ニュース(英文)
BlenderNation

●Blenderコミュニティ
blenderartists.org
- フォーラム
- 記事検索
- New feature tests
- Model Repository

●Blender Q&A
- Blender Stack Exchange

●テストビルド
Graphicall.org(非公式)
Buildbot(自動生成)

●開発関連
開発情報
開発ドキュメント
公式開発ブログ
Blender開発者サイト
- バグトラッカー
- 旧バグトラッカー(閲覧用)
- パッチトラッカー
- 旧パッチトラッカー(閲覧用)
SVNコミットログ

●GameBlender
公式マニュアル
専用API
バグトラッカーなど
旧バグトラッカー(閲覧用)
Bullet 物理演算ライブラリ

●外部レンダラ
YafRay
LuxRender 私家版資料
Mitsuba

●アドオン
公式スクリプトカタログ
BlenderArtists::python & plugins

●アドオン開発
最新 PythonAPI
Python Japan User's Group

●モデル&マテリアル
Blender Model Repository
Kator Legaz 3D Model
Blend Swap
blender-materials.org

●日本語化・翻訳サイト
Blender日本語化関連(blugjpまとめ)
日本語化の設定(2.4xのみ)

●2.4x用スクリプトとAPI
公式(日本語:下側参照)
L-System(2.5以降は同梱)
Python API リファレンス(2.4x用)

2.4x以前ではPythonフルセットが別途必要になることがあります。
旧Pythonバージョン

●2.4x用プラグイン(Python以外)
Blender Plugin Repository

ログイン

ユーザ名:

パスワード:



パスワード紛失