Windowで描画ロジックを差し替えてそのスクリプトを起動する事でシェーダ描画を実現しました。一応描画は出来たのですが、このままだと問題があります。記述したGLSL(Pythonスクリプト)、これ、Blenderのプロジェクトを保存しても別ファイルに出力されるというわけではありません。Windowで記述した文字列が見えます。Windowで直書きしたGLSLスクリプトは、プロジェクトファイル内に埋め込まれてしまうわけです。これだと作ったシェーダは一点物。別のプロジェクトへ使い回せません。GLSLスクリプトを外部のテキストで記述しそれを読み込むにはどうしたら良いか?それを見て行きましょう。)前章のFirstShaderのフラグメントシェーダからシアン色を出力するように変更しました。Blockで開いてみましょう。Windowにそのコードが反映されます。Windowのスクリプトの選択肢に出て来るようになりました。Controllerにももちろん出てきます。Player]の[Start]でシェーダ描画を走らせてみましょう:はい、シアン色になりました(^-^)。これで、GLSLスクリプトを外部から読み込む手順が一つわかりました。選択したオブジェクトにシェーダを適用するスクリプト前章ではもう一つLogicを手作業で作成していました。Controllerを追加して、そこにシェーダスクリプトを設定して、最後にSensorとControllerとを接続しました。何か新しいモデルを作成する度にこの作業をするのは手間以外の何物でもありません。ここはスクリプト一発起動で自動化したい所です。これはBlenderの中にある使いたいPythonライブラリを宣言する記述です。C言語で言う所の#includeです。Python」の略で、Blenderの基礎ライブラリの一つです。bpy.contextというのはBlenderの中にあるオブジェクトを管理している人です。View内のオブジェクトを返してくれます。Console」で確認するとこうなります:bpy.context.active_objectと打ちこんでリターンを押すと、「bpy.data.objects['Cube']ですよ」と教えてくれました。今選択してアクティブになっている物を返してくれたわけです。上のスクリプトではこれを「activeObj」という変数に保存しています。bpyには「ops」という大きなくくりがあります。これは「Operators」というBlender内の「操作」に関わるモジュールをまとめた物です。Windowでの操作をする命令が格納されています。ops.logic.sensor_add関数は名前の通りSensorを追加します。Blenderの引数は引数名を指定する必要があります。typeはセンサーのタイプを文字列で指定します。これはAlwaysにしていたのでそれを表す「ALWAYS」にセットします。Window内にSensorが追加されます:手作業でしていたのがポンっと出てくるのでちょっと感動します(^-^)。この追加したSensorは選択されているオブジェクトに関連付いています。後で使いますのでこれをsensor変数に保存しておきましょう。activeObj.game.sensors['Always']」です。Logicとして登録したものは選択オブジェクトの「game.sensors」という所に格納されているようです。これは連想配列でして名前で対象を取り出せます。上のSensorを見ると名前は「Always(灰色のテキストボックスが名前)」のようなので、配列の要素にその名前を指定すると上のSensorを取り出せます。Controller(シェーダ本体)をLogicに追加します。ops.logicなのでLoginの操作系、contorller_add関数はControllerを追加する関数です。このtypeも色々ですが、今回はスクリプトを表すControllerなので「PYTHON」と指定します。このControllerを表す名前を「name='myshader001'」と指定しています。これでLogicにControllerが追加されます:右側のControllerノードがそれです。スクリプトが指定されていませんね。bpy.data.texts['myshader001.py']1行目はもう大体わかりますよね。game.controllersがControllerの配列で先程指定した名前でそれを取り出しています。Controllerのスクリプトテキストは.textにあります。そこにスクリプトを指定するのが右辺側。bpy.dataというのは、今開いているBlenderプロジェクトのありとあらゆるデータを格納している親分オブジェクトです。data親分の下には沢山の子分がぶら下がっているのですが、その中の「texts」というのに現在登録されているスクリプトが配列で格納されています。上のように'myshader001.py'と指定する事で、そのスクリプトが取り出せるので、それをController.textに代入しています。これで、Controllerにスクリプトが指定されます:最後にSensorとControllerを接続します。Sensorが持つlink関数は引数にControllerを取ります。引数名は省略できるみたいです。これで、SensorとControllerの間が繋がれます:上のスクリプトを動かすと、まっさらなLogicからここまでを一気に作ってくれるわけです。大変に便利(^-^)。WindowでそれをOpenする事によってBlenderプロジェクト内にスクリプトを登録する事が出来ました。P]で動きます)という作業に減りました。スクリプトコードをBlender内で直に記述していないのが大きいですよね。なると次に考えたいのが「シェーダ定数」の扱いです。上のシェーダ描画を見るとどちらもシアン色に染まっています。この色を自由に指定したいですよね。次はその辺りを調べてみる事にしましょう。