++scenes;

CGメイキング,Terragen 4の使い方,その他お知らせ

(Terragen 4) Terragen RPCを試す その1(準備・サンプル実行)

本記事の対象Terragen 4バージョン:Professional (Educational含む)

前回

注意:本記事はTerragen RPCのベータ版(0.9.2)を基にしています。アップデートにより、コードに変更が加わる場合があります。

また、Windows 10/11前提で進めます。

  1. Pythonをインストール

    サンプルを実行するために、Pythonをインストールします。
    つい最近3.11が出たばかりですが、バージョン違いで面倒なトラップを踏みたくないので、チュートリアルと同じ3.10.5とします。
    Python Release Python 3.10.5 | Python.org

    ページ下部の「Windows installer」をクリックしてダウンロードします。

    ダウンロードしたインストーラを起動して、インストールします。

    インストーラ下部のAdd Python 3.10 to PATHにチェックを入れておきます。

    インストールが終わったら、コマンドプロンプトを起動して、python --versionと打ちます。 ↓のように、3.10.5と出ればOKです。

  2. Terragen RPCをダウンロード

    以前はGitHubからダウンロードする必要がありましたが、2023/7/6からpipからインストールできるようになっていました。 pipとは、Pythonで使える様々な拡張機能がダウンロードできるサービスのことです。(非常にざっくりな説明だから詳しい人怒らないで)

    下記のコマンドを実行だけで使えるようになります。

     pip install terragen-rpc
    

    さて、ここからは、https://planetside.co.uk/docs/terragen-rpc/high-py-api.htmlに記載されているサンプルコードを使って試していきましょう。

    メモ帳などのエディタを開き、下記のコードを書き(コピペでよいです)、「rpc-sample.py」という名前で保存してください。

    import terragen_rpc as tg
    
    # Print the nodes at the top level of the project
    
    project = tg.root()
    children = project.children()
    for c in children:
        print(c.path())
    
    # Print the parameters of a node whose path is "/Render Camera"
    
    camera = tg.node_by_path('/Render Camera')
    if camera:
        print(camera.param_names())
    else:
        print("Node not found")
    
    # Note: Exception handling was omitted from this example for brevity.
    # See other examples for exception handling.
    

    上記のスクリプトを実行しましょう。

    先に、Terragen 4.6を起動しておいてください。

    まず、rpc-sample.pyが保存されているフォルダで、エクスプローラの右クリックメニューから「ターミナルを開く」をクリックします。(ここでは英語版表示ですみません。Windows Terminalが開きます)

    または、エクスプローラのアドレスバーにcmdと打ち込み、Enterキーを押します。(コマンドプロンプトが開きます)

    開いたターミナルまたはコマンドプロンプトに、python rpc-sample.pyと打ってみましょう。こんな表示となるはずです。(Windows Terminalでの表示例です)

    お疲れさまでした。

    では、今実行したスクリプトの流れをざっくりと書きます(あんまりPythonの知識が無くてもいいように)。

    メインの処理は6行目からですね。

    まずノードネットワークの一番上の階層にアクセスし、children()でそこにあるノードたちを取得します。 childrenにはルートにぶら下がってる各ノードが格納されています。

     root = tg.root()
     children = root.children()
    

    それぞれのノードの、ルートからのパスを順番に表示していきます。パスはスラッシュから始まります。

     for c in children:
         print(c.path())
    

    これで一区切りです。

    次の行からはまた別の処理をしています。 node_by_path()で、パスが/Render Cameraのノードを探します。 あったら、そのノードがcameraに格納されます。 param_names()で、ノードが持つパラメータの名前の一覧を表示しています。 もし、パスが/Render Cameraのノードがなければ、エラーメッセージを表示します。

     # Print the parameters of a node whose path is "/Render Camera"
    
     camera = tg.node_by_path('/Render Camera')
     if camera:
         print(camera.param_names())
     else:
         print("Node not found")
    
  3. 次回予告

    今回は簡単な例でしたが、もう少しいろんなAPIを使って遊んでいきます。

    以上。