これは恐らく B-Con 4前の最後のビルドになるでしょう。よって、2.37はほぼこのビルドと同様になる予定です。2.36以来のすべての新機能についてテストをお願いします。注:新しい TimelineWindow、Transform のクリーンアップ、Python関連の新機能(Spaceハンドラ)があります。*** International はありません。動作させることができませんでした *** Windows版は MSVC とSCons、Linux版は GCC 3.4.5 と SCons でビルドされています。----------------------- 概要- バグ修正- UI クリーンアップ作業:Proportional editing ボタン、その他いくつか EditMode 用ボタン。- Text3d サブモジュールに、load font のサポートを追加。- 新しいTimelineWindow の追加。Tuhopuu からのコピーで、Matt Ebb氏によるコードです。- 追加: 新しい Pivot オプション、"Around active object(アクティブ Object 中心)"。- 更なるBlenderのコントロールのための、多くの Python 新機能。- TimeLine の "Play"用の、アニメーションするUI。
Committon氏Log:バグ修正#2507ビューの移動・回転を行っている間、キューが空にならず読むこともできませんでした…。その所為で、その後しばらくするとキュー全体が満杯になり、特殊キーのリリースイベントが登録できないようになっていました。修正済です。報告されたエラーは Windows と OSX で確認されました。Log:UI クリーンアップ作業:Proportional Editing:- Proportional モードをヘッダにボタン・メニューとして追加。繋がっている形状にのみ作用する新しいオプションも含みます。- Proportional Editing と Proportional モード用のアイコンを追加。- Proportional Editing のデータを Scene の一部としたため、すべてが保存できるように。グローバルフラグ、G_PROPORTIONAL は削除されました。- #define が正しく使用されているか確認、また、Proportional モードの順番を調整、よく使用される 'smooth' をデフォルトとしました。- EditMode 中の[Alt]+[O]を、新しい Proportional 'Connected' モードの切り替えに使用。その他 UI 関連:- EditMode で、レイヤボタンが隠れるようになりました…3DWindowのヘッダの大量のアイコンが急速に成長しているからです。- マニュピュレータのアイコンを少し見映えをよくしました。まだ改良の余地はあります。- 処理前のアイコン画像用のアルファフィルタを追加。暗い、もしくは明るい背景でのアイコンのアンチエリアス処理が改善されます。- EditMode で、現在のレイヤが編集中のデータを表示していない場合、マニピュレータを禁止しました。- (EditMode のDrawオプションの)Normal のサイズ(NSize)に使用される値を Scene.c にも追加。保存されるように。Log:バグ修正 #2506。Sky タイプの "Paper" が、OSA のレンダリング時に正しい dx/dy のテクスチャの度数をを与えていませんでした。1月のレンダラの再コーディング時の残りです。theeth氏Log:Mirror 機能で新 Transform を再利用(基本的には、データの ElementResizes 関数の分割呼び出し)しました。この作業に従い、メニューも更新。もちろん、これはまだ負のリサイズを修正していないため、ObjectMode では現在動作しません。繰り返しますが、これは初期化の独立と、Transform 後の関数の恩恵で簡単にできるのです。私に時間があれば…。ton氏Log:Apple の[command]キーでハングアップを生じる、余分な ghostwindow->commandqual 変数の削除。例えば、TextEdit を Dock から立ち上げ、[Command]+[Q]を押すと、Blender はすべての左クリックイベントを右クリックイベントとして取り扱います。この commandqual 変数はずっと以前に、通常の特殊キーですでに置き換えられており、その時削除すべきでした。(訳注:関係ないのですが、多分OSX版公開時には忘れそうなので(汗)Log:新たなる大きなクリーンアップ。Transform の再コーディングに感謝します。この段階が可能になったのは、Martin が Mirror()を再コーディングしてくれたからです。- 旧 Transform で使用されている、'tottrans' や 'centre' 、 'centroid' のようなグローバル変数を削除。- editobject.c から多くのコードを削除。- transform_conversions.c からすべてのTransform に関連するコードを削除。(Martinへ:こんなことになってすみません…現在 PoseMode への依存のチェックにより、奇妙な関数があることがわかったためです…これは依存グラフの削除のフェイスです)Log:マニピュレータハンドルのクリック―リリースで、マウスを動かさないと、新たにマウスボタン(もしくは[Esc]など)が押されるまで、transform() にはまったままになります。pidhash氏Log:フォント関連をフォントファイル情報のようにラップしました。stiv氏Log:どのバージョンの Python を使用しているかについてのメッセージを表示するように。以前は悪の "'import site' failed" メッセージが表示されていました。ton氏Log:新しいTimelineWindow の追加。Tuhopuu からのコピーで、Matt Ebb氏によるコードです。大きな変更は AudioWindow の一部ではなく、自身が Space タイプになったことです…AudioWindow は自身のオプションに制限されているはずです。この方法で機能が上手く分割できました。私が新しい Space タイプの追加をした最初の機会(本当にしばらくぶり!)なので、大規模なチュートリアルも作成しました。以下を参照して下さい。http://www.blender3d.org/cms/Adding_new_Space_Window.557.0.html TimeWindow の使用方法を記します。- [M]キーで TimeMarker の追加。- [Ctrl]+[M]で Maker の名前をつけるオプションが開きます。- Marker はまだ移動できません…。- [PageUp]/[PageDown]で現在のフレームを次/前の Marker に移動します。- [X]キーで Marker を削除します。- もし、ある Object に Ipo もしくは Action があるとき、キーラインを描画します。- [Ctrl]+[PageUp]/[PageDown]で、現在のフレームを次/前のキーに移動します。- [S]もしくは[E]で、アニメーション再生の Start・End フレームが設定できます。Tuhopuu での実装との違いです。- 新しい Marker の追加で、新しい物が選択され、他は選択解除されるように。- Markerの選択は他の部分のようにクリックで指したMarker以外をすべて選択解除していませんでした。もちろん[Shift]を押していないときです。- 外部参照されない関数は static になりました。- 使用されていない define(MARKER_NONE NEXT_AVAIL)を削除しました。- 描画の順番が混乱しており、行列のコールを多く行いすぎていました。 - Drawing order was confusing, doing too many matrix calls- 必要のないスクロールバーを削除し、時間の値を描画する新しい関数を追加しました。 (中マウスボタンのスクロール動作により、スクロールバーでの混乱が生じない利点があります)- 「フレームマッピング」の正しいサポートを追加。- 文字列ボタン(Marker)にバグがありました(strの長さが64文字であるのに、str[64]をチェックしていました)- 文字列ボタン自身が 「[Enter]でのOK」を許可していませんでした。- ヘッダのフレームボタンを大きくし、矢印をオーバーラップさせました。- 動作がシンプルにならないため、負のフレーム値のサポートを削除しました!Log:TimelineWindow の二つの小さな問題。- 矢印キーの使用によるフレームの変更が、正しく再描画されていませんでした。- オプション "Record" が UserPreference の "Auto keyframe" と結び付けられました。私は当分の間、UserPreference のボタンをそのままにし、ユーザがこれ以上設定せずにすむようにしておこうと思っていたのですが…。Log:Timeline の細かい調整。- [C]キーによる「現在のフレームを中心としたビュー(center view around current frame)」の追加。- プルダウンメニューの View の残りのオプションが完成。- start > endフレーム時に、負の大きさのビューにならないように。Log:バグ修正 #2414Armature の [N]キーパネルで、クォータニオンの XYZW がごっちゃになっていました。現在はOKです。Log:バグ修正 #2515Material の Normal マッピング用に、Ipo の限界を最大25.0まで引き上げました。Log:バグ修正 #2512Mesh の Join 時、アクティブな方が TFace を持ち、他の Mesh がない場合、新しい TFace の作成時に初期化されていませんでした。Log:Mesh の EditMode 時の、"Join Triangles"([J])のクラッシュを修正。発見とコード提供はCampbell Barton氏です。ありがとう! 注:このツールはすばやいですが、悪い結果になります…また、give_quad_verts 関数内でエラーが出力されます。誰かこれに挑みたい人はいますか!jesterking氏Log:* SCons に bFTGL を統合。* そこらじゅうに、 ENV = os.environ を追加(MSVC Toolkit をインストールしている人にとって助けとなります)。OSX ユーザへの注意:プリコンパイルされた ftgl ライブラリ用の正しい情報が config.opts で使用されているかチェックして下さい。ton氏Log:二週間前の Extrude 時の正しい Normal を見つけるコミットにタイプミスがありました…。ループの始まりで "->first" の代わりに "->last" になっていました。これにより、Extrude で生じた、削除すべき古い Face が残ったままになっていました。これを見つけてくださった Jean-Luc氏に感謝!Log:SoftBody 使用時の、UI レベルの警告を二つ追加。- EditMode を抜けるとき、自動的に Bake された結果が削除されます。これがユーザから見えず破壊されてしまうため、"OK?" メニューをここに挿入しました。- Particle Deflector 自身は SoftBody に(また逆も)なることができません。ユーザがこれを設定しようとした時、注意を促すため、ラベルボタンを追加しました。Log:Tom Musgrove氏からの、一つの面のみが選択されている時、Extrude のポップアップをスキップするためのパッチ…。実装には以下の問題がありました。a) Blender は選択されている Edge の量を知らせるすべがない。b) ポップアップのスキップは100%確実にすべき。c) 一度これを行ってしまうと、ポップアップは確実に選択できる時にのみ表示すべき。そうです! 私は G.totedge と G.totedgesel を追加し、Infoヘッダに表示されるようにしたのです。この変数の使用も Extrude のポップアップ用のみに制限することもできました。また、Normal が正しい方向を指していなかったとき、Edge 選択用のみの、'Normal Alignment' が動作するようになっていました。 現在は Z軸をEdge 自身に向けます。'Normal' と 'plane' の正確な選択アルゴリズムはいまだ能力的に問題があります。Log:ObjectMode 時の、負のスケーリング&Mirror メニュー([Ctrl]+[M])の修正。Martinがこの簡単な改造を気に入ってくれるといいのですが。また、ローカル軸かそうでないかを示すためのフラグを constraint に追加。これにより、以下が可能になります。- ローカル空間でのスケールと回転を複数の Object に行った時にその位置が変更されるのを防ぐ- 軸制限のラインの描画をクリアにLog:追加:新しい Pivot オプション、"Around active object"。ある Object のグループを、3Dカーソルの面倒なしで、決められた中心ですばやく回転するのに便利です。特に3Dマニピュレータにいいでしょう。EditMode/PoseMode では、このオプションは "Centroid(中心点)" となり、すでにある "Individual centers" オプションと同じ働きをします。Log:UI 関連とクリーンアップ。- TimeLine: Marker の Grab が可能に。[G]キーもしくは選択(右クリック)+ドラッグ、通常どおり、[Ctrl]を押しながらで1分ずつ(NTSCも正しく補正されます!)移動。また、ヘッダのプルダウンメニューからでも追加可能に。- 秒数表示(Seconds)での時間の値とグリッドの表示が修正されました。描画の間隔は2/5/10/20/50/100フレームなどでしたが、現在は秒数で表示されます。再び "Frames/Sec" の値が修正されました。- "Frames/Sec" ボタンで TimeLine、Sequencerなどが再描画されるように。- TimeLine の Theme の編集のバグ修正。(Image Selectを編集していました…)- Ipo、TimeLine、Sequencer、NLA、Action、Sound用の Grid color を Theme に追加。以前はありませんでした!Log:新しい Transform のTODO:Transform 使用時の Undo 名の修正。Martinへ: 私は下記のような関数を追加しました。BIF_TransformSetUndo("Add Duplicate"); Transform 自身を呼び出す前に、これで Undo で使用される名前の文字列を指示し、また、[Esc]で終了する必要があります。これを可能にするため、私は memset() 追加し、グローバル構造体の TransInfo を0で初期化する必要がありました。if(Trans.mode==TRANS_INIT) とともに使用し、上手く行うことができました。(訳注:transform.c参照のこと)これがどれだけ軸制限の事前の設定に関係するかわかりません…私はいつも初期化されていないグローバル構造体を扱うのがやっかいなことかを知ることになります。Log:Timline 関連:- [Alt]+[A]中に[M]キーで Marker を挿入できるように。Matt氏への注意:'val' のチェックを忘れているようです。Tuhopuu での遅延を、私が最大1フレームに戻しました。遅延はリアルタイムグラフィックスアプリでは常識で、画面に見えている画像はすでに古く、次のフレームの描画が完了するまでにキーを押すことができても、すでにフレームの値は進んでいるのです…。- 右マウスボタンでアニメーション再生から抜けます。- Object をアクティブにしても TimeLine を再描画します。- Material Ipo 用のキーラインの描画を追加。[Ctrl]+[Page]キーで移動できます。Softbody:- "〜Spring constant" と呼ばれているボタンを "〜Stiff(ness)"にリネーム。"Friction" も "Damping" になりました。Log:バグ修正 #2528"Ipo Keys" での Transform で、初期化されていないポインタの所為で、[Esc]でクラッシュしていました。(Martinへ:そのアイデアは 新しいデータの calloc じゃないんだよ…ぶつぶつ)注:これはFigueroaプールバーにいるRandallのための追加のマルガリータ。(訳注:このネタは上のリンク先を参照のこと。)ianwill氏Log:BPython: - Blender.event 変数(以前は script links でのみ使用)を、Draw.Register(gui, events, button_events)で登録されたイベントでコールバックしている間、現在のイベントが「どこで設定されたか」をアスキー値で保持するようにしました。Campbell氏の Python Console のような、GUI スクリプトに便利です。GUI スクリプト内では使用されていなかったので(常にNone)、値を保持するためにこの変数を使用しても問題ありません。- Window モジュールと Window.Theme を、新しい theme 変数と Time space の追加により更新。- Script links: -- Script Links用に "Render" イベントを追加。(二回実行され、二回目は行動のクリーンアップ用に「イベント後」になります)。FrameChanged Links は、単体の画像がレンダリングされたときは実行しないようになりました。-- "Enable Script Links" ボタンをScripts Buttonsタブに追加。このビットは残りの G.f(訳注:グローバル変数のフラグ)とともに .blend に保存され、ユーザは .blend 毎にデフォルトでON/OFFを設定できるようになりました。また、"blender -y" も、以前OnLoadのみに起こっていたのと同様、すべての Script Links の実行が禁止されます。-- ScriptButtons のその他の小さな変更点:ある Scripts Link が追加されたとき("New" ボタン)、その時点でアクティブになり、わざわざボタンを押す必要はありません。また、"New" が押された時、ポップアップメニューで利用可能なすべての Text が表示され、ユーザは名前を入力する必要なく選択できます。ポップアップのキャンセルで、文字列ボタンは空になります(Link は存在しますが、Script が設定されていない状態です)。UI 的にはプルダウンメニューの方がいいと思われるのですが、スクリプトと普通のテキストの両方をScript Links のプルダウンで表示するのは奇妙に思えます(Blenderは両方を区別しません)。ポップアップには最後に ".py" がついているもののみを表示することもできます(このコミットでは行っていません。皆の意見が必要です)。もしスクリプト名の拡張子がなし、もしくは違うものであっても、古い物、もしくは現存の .blend ファイルでは、すでに文字列フィールドにその名前があるケースが多いでしょう。-- Ton氏のスペースハンドラ Script Links の実装:現在 3DView のみですが、他にも追加するのは朝飯前です。これには二つのタイプがあります。一つめは EVENT で、3DViewのイベントを選択されたウィンドウから受け取ります。二つめは Draw で、ウィンドウの描画イベント用です。Ton氏のアイデアでは、Blenderとの統合を更に高める、スクリプトをコントロールする方法を提供しようというものでした。以下はその動作です。- スクリプトは下記のような適切なヘッダを持つ必要があります。# SPACEHANDLER.VIEW3D.EVENTそしてその時、3DView の View メニューに、"Space Handler Scripts" サブメニューが表示されます。チェック(マーキング、項目をクリック)すると、そのスクリプトがアクティブになります。EVENT ハンドラは Blender.event 変数から現在のイベントを得て下さい。この値は Draw モジュールからの値と比較することができます。import Blender from Blender import Draw evt = Blender.event if evt == Draw.AKEY: print "a" elif evt == Draw.LEFTMOUSE: print "left mouse button" else: return # 無視してイベントをBlenderに返す Blender.event = None # Blenderに自身がそのイベントの処理を行わないことを示すDRAW ハンドラは所持されている 3DView に自由に描画できます。OpenGLの属性、モデルビュー、投影行列はハンドラを実行する前にプッシュ(保存)され、実行後にポップ(復活)されます。EVENT と DRAW の各ハンドラスクリプト間の通信には通常と同様に、Blender.Registry モジュールを使用します。まだいくつか、いいサンプルコードが必要です。スペースハンドラの正当性のテストにも役立つでしょう。簡単なテストでは結果は良好でした。- 追加に関するドキュメントの更新。======= 注意:スペースハンドラの UI 部分と Script Links はもちろん変更のための門戸は開かれており、私も理解しやすくするため努力しています。恐らく皆、 "None Available"(3DView → View → Space Handler Scripts)用に、Scripts Links のアイコンを使用したくないと思います。何のスペースハンドラなのかのヒントになるとは思いますが。Tooltip も他のメニューで使用されていないため、受け入れられないでしょう。ご意見歓迎します。eeshlo氏Log:バグ修正 #2494:Parent された Linked Data の Lampをエクスポートするとクラッシュしていました。Diego Pino氏により報告された二つのバグ、VertexColor のエンディアンの問題と、プラグインコードが複数の ColorBand を正しくエクスポートしていなかったのも修正しました。Ortho カメラのエクスポートコードを、Blenderの新しい Ortho カメラモデル用に更新。ton氏Log:新しいボタン画像。最上段のアイコンのオフセットを少し修正。theeth氏Log:回転の修正。Parent を正しく計算にいれていませんでした(うーん、以前動作を確認したはずなんだけど)。これはバグ#2516です。http://projects.blender.org/tracker/?func=detail&atid=125&aid=2516&group_id=9また、いくつかTonが軸制限ラインの描画に行った変更を元に戻しました。なぜかは長いコメントで説明しています。eeshlo氏Log:XML エクスポートコードでの VertexColor のエンディアンの修正を忘れていました。まだ報告されていないバグ、Material を持つ Liked Data Object が通常どおりエクスポートすべきデータの代わりに、Object に Link していました。これらがインスタンス化できないと、そのすべてが同じ Material をシェアすることになります。theeth氏Log:大きい Transform関数の掃除を行う時間がありました:- イベント処理部分を、専用の別の関数に分割。Splited off the event treatment into a function of its own - 初期化段階を、専用の別の関数に分離(マニピュレータ機能用のも行う必要があるでしょう)。Transformの呼び出しは現在以下のようになっています:initTransform(mode, context)- 初期化の後に呼び出せるものは、constraintと、Transform()のほとんどです。- 最終的に、postTransform 関数は、Trasform が単なるシンプルな大きいループなため、代わりにblenderのイベントシステムに結び付けるだけにすることができました。- ローカル変数 ret_val を置き換えるための状態変数を TransInfo に追加しました。持ちうる値は、TRANS_RUNNING、TRANS_CANCEL、TRANS_CONFIRM です。- 中マウスボタンと軸制限の選択用ホットキーを関連付けしたため、中マウスボタンによる軸の選択の後にその制限している軸のキーを押すと、その軸のローカルモードに移行します。混乱がかなり減りました。ton氏Log:TimeLine の "Play" 用のアニメーションUI。TimeLine の Play ボタンを押すと、イベントドリブンシステムを使用し、アニメーションシステムの更新とウィンドウに再描画の信号を送ります。つまり、完全に UI は応答性を保っているのです!新しいプルダウン "Playback" で、更新を見たいウィンドウを設定してみて下さい。同設定は TimeLine のフレームの「左ドラッグ」にも使用されています。実装について:- 'Pause'(もしくはstop)のアイコンはまだ作成する必要があり、これを私のラップトップからコミットしています…すべてのコーディングは2×5時間ドイツへの電車に乗っている間に行いました。- アニメーション再生システム([Alt]+[A]も)は、正しい "frames per second" が最大スピードとして使用されます。ボタンは UI の三ヶ所にあり、プルダウンメニューの項目にも追加されています。- このシステムは「スクリーンハンドラ」で動作しており、これは Python の(ネットワーク化された)イベントもしくは Verse の使用を想定してコーディングされています。ドキュメントはのちほど。- ボタンコードはアニメーションUIに「抵抗する」ようにもつくられており、ハイライトの点滅を防ぎます。- すべてのサブループ(transform など)は、中マウスボタンのビュー操作以外は再生をストップします。おまけ:ひずみのない、テクスチャによるAAフォントの描画を実現する方法を見つけました。ラップトップでの表示は完璧に見え(ピクセルマップのフォントと同等)、20倍高速化されています。Log:Timeline のヘッダの "Pause" アイコンの修正。Log:FileWindow のフロントバッファの更新を削除。グラフィックスカード(ATiがほとんど)の問題を修正するだけでなく、スクロール中のハイライトの描画エラーも解決します。特に「アニメーション UI モード」に著しく現れます。Log:FTGL のテクスチャを使用したフォント描画の更なる更新。Pixmap版に使用された、文字をピクセル位置に正確に並べる、同じ floor() トリックを追加しました。現在は完全に同じ外見になりました。jiri氏Log:- 同じフレームにある二つの Marker の一つを選択することが不可能でした…この問題は現在解決済みです。最初に選択されていない Marker を描画する必要があるため、Marker の描画は若干改造のようになってしまいました。(非選択の Marker は選択中の Marker を隠すことはできません…選択に関する視覚的情報が失われてしまいます)
import Blender from Blender import Draw evt = Blender.event if evt == Draw.AKEY: print "a" elif evt == Draw.LEFTMOUSE: print "left mouse button" else: return # 無視してイベントをBlenderに返す Blender.event = None # Blenderに自身がそのイベントの処理を行わないことを示す