Dev:JA/Ref/Release Notes/2.77/BGE
< Dev:JA | Ref/Release Notes | 2.77
目次
Blender 2.77: ゲームエンジン
スクリーンショットアクチュエーター
この新しいスクリーンショットモードは、Game(ゲーム)アクチュエーター内にあります(コミットd1ee195260c3676をご覧ください)。
Character(キャラクター)物理タイプへのMax Jumps(最大ジャンプ数)値追加
- Max Jumps(最大ジャンプ数)値(1から255)で、キャラクターが地面につくまでにジャンプできる最大回数を設定できます。
(コミット3dd83b533a032feをご覧ください)
別スレッドによるスクリーンショット保存
スクリーンショットが別スレッドで保存されるようになりました。これはゲームエンジンの実行を維持しつつ、PNG圧縮などとディスクI/Oを行うことを意味します。例えば、群衆シミュレーションシステムの結果の記録で(bgl モジュールによるオーバーレイ描画も含む)、スクリーンショットを毎フレーム保存するとします。このパッチ適用前では、フレーム毎に31msかかっていたのが、現在は最大13msになりました。実際、シミュレーションを毎フレーム保存しても、60FPS で実行できています。コミット31cc60e76bfa8をご覧ください。
Python API の変更
Change KX_WolrdInfo mathutils vector to color
- mistColor、backgroundColor、ambientColor のコールバックが mathutils の color を使用するように(コミットbd6febc4c4fa6efをご覧ください)。
後述の「互換性の問題」もお読みください。
sce.world.backgroundColor.r = 1.0
Character クラスの maxJumps を char 型に変更、0 の代入が可能に
- maxJamps 値を0~255に制限
- maxJumps 値が0の場合、キャラクタはジャンプできません(コミット83721682bb12a5bをご覧ください)。
bge.constraints.getCharacter(obj).maxJumps = 0
クロック管理の改善
- このリリースで、時間の加速・減速が可能になり、さらに外部エンジンとのクロック同期の精度が上がりました。新しい Python 関数がいくつか追加され、現存の物もその用途に合わせ改良されています。
bge.logic.getClockTime()
# 現在の BGE レンダー時間を秒数で取得します。
# BGE レンダー時間とは、次回レンダリング予定のシーンに対応するシミュレーション時間です。
bge.logic.getFrameTime()
# 現在の BGE フレーム時間を秒数で取得します。
# BGE フレーム時間とは、現在呼び出しているロジックシステムに対応するシミュレーション時間です。
# 一般的に言えば、ユーザーはこちらの方が興味があるでしょう。
bge.logic.getRealTime()
# シミュレーション開始からの現実(システムクロック)の経過秒数を取得します。
bge.logic.getTimeScale()
# 現実時間とシミュレーション時間の間の乗数を取得します。デフォルトでは1.0です。
# 1.0より大きいと、シミュレーションは現実時間より速く、1.0未満だとシミュレーションは現実時間より遅いことを意味します。
bge.logic.setTimeScale(time_scale)
# 現実時間とシミュレーション時間の間の乗数を設定します。
# 1.0より大きいと、シミュレーションは現実時間より速くなり、1.0未満だとシミュレーションは現実時間より遅くなります。
# 注:あまり大きすぎる値だと、物理演算が不安定になる可能性があります。
bge.logic.getUseExternalClock()
# BGE が内部 BGE クロックを使用しているのか、または外部クロックに頼っているのかどうかを取得します。デフォルトでは内部 BGE クロックを使用しています。
bge.logic.setUseExternalClock(use_external_clock)
# BGE が内部 BGE クロックを使用するか、または外部クロックに頼るのかを設定します。
# もしユーザーが外部クロックの使用を選択した場合、setClockTime メソッドを定期的に呼び出してください。
bge.logic.setClockTime(new_time)
# 次のシミュレーションクロックの値を設定します。
# 簡単にブロック化したシステムにできる、ロジックブリック内での呼び出しとして、
# Python のカスタムメイン関数からこのメソッドを使用するのが望ましいです。
# (もし設定する時間が少なくとも次のロジックステップまで十分先でない場合)
光源の影用の新しい Python API
- このリリースに伴い、光源の影の設定にアクセスできるようになりました(読み込みのみ)。これはシーンの光源が生成する影のある、カスタム GLSL マテリアルの作成に利用できます(コミットc4c2bd13をご覧ください)。
light.shadowClipStart
# シャドウマップのクリップ開始。これより内側のオブジェクトは影を生成しません。
light.shadowClipEnd
# シャドウマップのクリップ終了。このより外側のオブジェクトは影を生成しません。
light.shadowFrustumSize
# シャドウマップの生成に使用される錐台のサイズ。
light.shadowBindId
# 番号/IDに紐づけされている OpenGL シャドウテクスチャ。
light.shadowMapType
# シャドウマップタイプ(0→Simple(シンプル)、1→Variance(分散))
light.shadowBias
# シャドウバッファのサンプリングバイアス。
light.shadowBleedBias
# 分散シャドウマップでの光の漏れを軽減するバイアス。
light.useShadow
# True でその光源のシャドウオプションが有効、そうでない場合は False。
light.shadowColor
# この光源の影の色。黒=(0.0, 0.0, 0.0)、白=(1.0, 1.0, 1.0)。
light.shadowMatrix
# カメラスペースからシャドウバッファデプススペースにベクトルを変換する行列。
OpenGL でバインドした番号によるテクスチャへのアクセス
- 新しい Python メソッドで、OpenGL のバインドコード/ID/番号/名前のテクスチャにアクセスできるようになりました。これは OpenGL 内のテクスチャをいじるのに使用でき、例えば、テクスチャ上のミップマップを削除したり、ラッピングやフィルタリングオプションに触ることなどができます。また、Blender で OpenGL を学ぶのにも使用できます(コミット608ee3eをご覧ください)。
bindcode = own.meshes[0].materials[0].getTextureBindcode(0)
# getTextureBindcode(textureslot): textureslot はテクスチャプロパティ内のテクスチャスロットを指す整数値。
パフォーマンス
- IK ライブラリに変更、Eigen ライブラリを使用するようになり、Moto ライブラリはデフォルトでは double の代わりに float を使用するように。複雑な .blend では2から2.5倍パフォーマンスが向上します。
ラスターストレージ
- 即時モードオプション(glBegin/glEnd)が削除されました。このモードは頂点配列より遅く、Blender の最小 OpenGL バージョン引き上げに伴い、このモードはもはや代替の一つとして必要なくなったためです。
- Vertex buffer objects (VBOs)がストレージオプションの一つとして選択可能になりました。これは通常、頂点配列とディスプレイリスト有効時より遅く、互換性の問題を生じる可能性があります。しかし、Blender を OpenGL 3以上のコアプロファイルに切り替えた場合、このプロファイルは頂点配列とディスプレイリストに対応していないため、BGE は VBOs への切り替えを余儀なくされるでしょう。このオプションは実験したりいじり回すユーザーのために利用可能になっているので、まだ実際の使用にはお勧めしません。
互換性について
- MistColor、backgroundColor、ambientColor mathutils コールバックが、Vector から Color に変更になりました。xyz の代わりに rgb を使用してください(コミットbd6febc4c4fa6efをご覧ください)。
### OLD ###
sce.world.backgroundColor.x = 1.0
### NEW ###
sce.world.backgroundColor.r = 1.0
- KX_GameObject.mass アトリビュートがオブジェクトの mass のみ変更するように。従来の旧 Blender バージョンの場合、KX_GameObject.mass アトリビュートはオブジェクトの mass とオブジェクト自身の gravity も変更していました(オブジェクトの gravity は mass 変更時に毎回古い mass で除算されていました)。