Shade3D 公式

01 はじめに [ Shade Labo ]


#1

< 01 - 1 Shade Labo >


関連記事:

  • 02 vec3 module
  • 03 matrix module
  • 04 quaternion module
  • 05 labo module

Shade の内部処理方法の探求や、Bezier Line / Surface に係わる処理のヒント、幾何的解析法 などについて、これからこの場を借りて少しずつ紹介して行きたいと思います。

すでに旧フォーラム等で色々と述べてきましたが、すでに閲覧できなくなっている記事もあり、改めて内容の再構成や追加,修正等をおこなって、この場でまとめていく予定です。

直ぐに役立つ python script の紹介ではなく、あくまでも script, plugin 等での処理における ヒントやアイデア、処理の考え方, Shade の内部処理の探求などを紹介することがメインとなりますが、最終成果物としてユーザーインターフェースを持った script も提供する予定です。

当面は過去記事のリニューアルがメインになりますが、新規の記事の目標としては、拙作の Shade 用ツールのメインでもある 200 PowerPack の処理内容にについて、python で記述可能な範囲で紹介できればと考えています。

ただ、あちこち寄り道しながらになりますので、少々時間がかかりそうです。


#2

< 01 - 2 Script >


内容にもよりますが、ここでの script 記述の制限 32K byte がネックになってしまう可能性があります。

そこで基本的な 演算処理, 幾何解析, Bezier handling などは Module Library として別構成にし、提供することにしました。

Shade Labo で紹介する様々な 実験, 解析, サンプル script を動かすには、これらの module を予め所定の場所にインストールしておく必要があります。


Module は 大きく2つに分類されます


ベクトル周りの演算ライブラリー

vec3, matrix, quaternion の各 class を定義した3つの module があり、エラーチェックとそのメッセージ出力を詳細に実装してあります。

開発用のお助けツールとして作っているわけではないので、numpy 等を使っている方には ? ? ? な所もあると思いますが、ご容赦下さい。

module code は次の記事に掲載します。( 一部は後日投稿 )

  • 02 vec3 module
  • 03 matrix module
  • 04 quaternion module


    ルーチンライブラリー

labo, geo 等の module を予定し、本文中の script 内で使用される種々雑多な関数を提供します。

ルーチン的な記述や Labo に特化した処理や入出力、sample tips 的なものの集まりで、 junk に近いものも含まれます。

正しい使用を前提とし( 正しい object 選択、正しい引数 )、簡略なエラーチェックに留めています。

途中で関数が追加された場合、差し替えが必要になります。

module code は次の記事に掲載します。( geo module 等 将来的に追加予定 )

  • 05 labo module

#3

< 01 - 3 Class 名 >


python では Class 名を大文字で始める約束事がありますが、ベクトル演算に係わる module が色々と公開されていますので、それらとバッティングしないよう、約束違反ですが、vec3, matrix, quaternion については小文字で始まる名前にしてあります。

その他の class 名は 大文字で始めます。


#4

< 01 - 4 演算ライブラリーの基本方針 >


ベクトル演算をサポートする python module はいくつか公開されており、numpy がスタンダード的な位置を占めているようです。

いくつかの module について仕様を参考としましたが、やはり共通の設計思想というのはないようで、特に 外積 と 内積 の operand をどう扱うかは、悩ましところです。

色々な方式があり、それぞれの設計思想も想像できるのですが、やはり誰もが納得できるような取り扱いは無理なのかもしれません。


演算ライブラリーは次の考えに基づいて作成しています。
  1. Shade python とのスムースな連携をはかる

  2. 計算の効率性よりもメンテナンス性やコードの見通しをよくすることを優先

  3. 数学演算として定義されないコンピュータ特有の演算はサポートしない

  4. コード記述が数式の記述と同じ形になるようにする( 特にこれを重視 )


これに基づいて次のように作ってあります。
  • 各 class を list の sub class として定義する。
    これにより、list に対する処理や関数がそのまま利用でき、Shade script の list 引数に変換することなくそのまま渡せる

  • vec3 = vec3 * vec3 を外積とし、float = vec3.dot(vec3) を内積とする

  • vec3 * matrix では Affine 変換を前提として、vec3(3要素)と 4 x 4 matix の積を特例としてサポート

  • 行ベクトル [ , , , , … ] と 1行 n 列 matrix [ [ , , , , … ] ] を区別せず、同等のものとして扱えるようにする

  • 列ベクトル transposed [ , , , , … ] と m 行 x 1 列 matrix [ [ ], [ ], [ ], … ] ] を区別せず、同等のものとして扱えるようにする

  • int / int の整数計算を回避し、要素を int で与えても問題が生じないようにする


#5

< 01 - 5 インストール >


module code を コピーして Shade の script palette あるいは text editor にペースト、指定される名称 xxx.py で保存して、所定の場所にインストールします。


インストール場所は次のようにして確認できます。

Shade を立ち上げ次の script を実行すると、module のインストール先候補がメッセージウィンドに表示されます。

import sys
for s in(sys.path) :
	xshade.message(s)

Third Party の module は ‥\site-packages の中に入れることが推奨されているようですので、そこに入れて下さい。


Win 環境についてはわからないのですが、 Mac について言えば、

  • Application フォルダ内の Shade 本体を選択
  • 右クリックでコンテキストメニューを表示
  • メニューから「 パッケージの内容を表示 」を選択
  • 以下、 Contents > python27 > Lib > site-packages と開いていく
  • site-packages 内に xxx.py を入れる

となり、使用するバージョンの Shade 毎にインストールが必要になります。


Shade script から module が呼び出されると、xxx.py と同じ階層に xxx.pyc というファイルが作られます。

削除や module の修正などによる差し替えの場合には、この xxx.pyc も一緒に削除する必要があります




[ 01 はじめに 終わり ]