BlenderでGLSL 簡単なシェーダ

wikibooksのマニュアルの要点まとめです。

参照先は GLSL Programming/Blender/Minimal Shader 

Creating GLSL Shader

まずはBlenderの開始から。エラーメッセージを確認できるように

  • windowsの場合は起動後に Help > Toggle System Console
  • Linuxの場合はコンソールから起動

Text Editor を開き、 Text > Create Text Block を選んで、適当な名前をつける。

infoウィンドウから、Add > Mesh > Cube 

3D View から View > Tool Shelf を選ぶ(もしくはショートカット t )。Object Tools > Shading > Smooth を実行。

3D ViewViewPort ShadingTextureにする。

3D View から View > Properties を選ぶ (もしくはショートカット n) 。さらに Display > Shading > GLSL を開いたメニューから選ぶ。

Logic Editorから (メッシュは選択した状態),  Add Sensor > Always 。

Logic EditorからAdd Controller > Pythonを選択して、Text Editorでつけた名前を選択。

Logic EditorからSensorControllerをつなげる。

Text Editorに下のコードを書いて3D Viewにてショートカットpを実行。終了はEsc

import bge
 
cont = bge.logic.getCurrentController()
 
VertexShader = """
   void main() // all vertex shaders define a main() function
   {
      gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
         // this line transforms the predefined attribute gl_Vertex
         // of type vec4 with the predefined uniform
         // gl_ModelViewProjectionMatrix of type mat4 and stores
         // the result in the predefined output variable gl_Position
         // of type vec4. (gl_ModelViewProjectionMatrix combines
         // the viewing transformation, modeling transformation and
         // projection transformation in one matrix.)
   }
"""
 
FragmentShader = """
   void main()
   {
      gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
         // this fragment shader just sets the output color to opaque
         // red (red = 1.0, green = 0.0, blue = 0.0, alpha = 1.0)
   }
"""
 
mesh = cont.owner.meshes[0]
for mat in mesh.materials:
    shader = mat.getShader()
    if shader != None:
        if not shader.isValid():
            shader.setSource(VertexShader, FragmentShader, 1)