From BlenderWiki

Jump to: navigation, search

Blender 2.75: ゲームエンジン

ゲームエンジンには以下の更新があります: 物理シミュレーションの作業、コンストレイントの改良、速度制限とコリジョンマスクの改善、いくつかのオプションを明確にすることによるシンプル化、ライティングに便利な Sun(サン)ランプ用シャドウボックスの追加、エンジンの細部へのアクセスを導入することにより、Python プログラマにはもっと大きな力を手に入れ、さらにカスタムの KX_GameObjects に初期化の引数を追加することができるようになりました。詳細と修正については以下をお読みください。


Level of Detail (LOD)

シーン毎の Hysteresis(ヒステリシス)設定
オブジェクト毎の Hysteresis(ヒステリシス)設定

Hysteresis(ヒステリシス)

新しい Hysteresis(ヒステリシス)パラメーターは、カメラが移行する距離に近づく時に、ディテールレベル間の交代が急激に行われるのを防ぐために導入されました。

Hysteresis(ヒステリシス)の設定:

  • シーン毎(デフォルトは10%)、Scene(シーン)プロパティ→▼Level of Detail(ディテールレベル(LOD))。シーン全体のヒステリシスを望んでいない場合は無効にしてください。
  • オブジェクト毎(デフォルトは10%)、Object(オブジェクト)プロパティ→▼Level of Detail(ディテールレベル(LOD))。有効時、この設定はシーンのヒステリシス設定を上書きします。


Python API

  • 新しく "currentLodLevel" アトリビュートが、KX_GameObject の Python API に追加されました。このアトリビュートはそのゲームオブジェクトの現在の LOD レベルを返します。カメラからの各 LOD 距離に伴うロジックルーチンを処理するのに使用し、別個に Python でカメラへのベクトルの距離を計算する手間をはぶくのに便利です。

Python モジュールによる使用は以下のようになります。

def state_lod(cont):
    own = cont.owner
 
    lod_level = own.currentLodLevel
 
    lod_manager_state = 1
    lod_state = 1 + lod_level
 
    # Set the object's state as 1 (with the Pythons controller running state_lod)
    # And any state after from 1 -> 32
    own.state = lod_manager_state + (1 << lod_state)


互換性

  • 新しい blend ファイルでは、シーンヒステリシス設定はデフォルトで有効、オブジェクト設定は無効になっています。
  • 旧 blend ファイルでは、両ヒステリシス設定(シーン毎とオブジェクト毎)はデフォルトで動作しない設定になっています。


Dynamic(ダイナミック)オブジェクトでの移動のロック

Dyamic(ダイナミック)オブジェクト用Lock Translation(移動をロック)

下記インターフェイスから、Dynamic(ダイナミック)オブジェクトの XYZ の平行移動要素をロックできるようになりました。
Properties(プロパティ)エディター » Physics(物理演算) » ▼Physics(物理演算) » Lock Translation(移動をロック)

(e7f2aec)



Rigid Body(剛体)の Joint Constraint Replication

Blender がグループインスタンス(DupliGroup(グループ複製))時に Rigid Body joint(剛体関節)コンストレイントを複製するように(0b4a71b07245 & D658)。


GLSL マテリアル&アニメーション

ようやく GLSL マテリアルがアニメーション可能になりました。アニメーションできるプロパティは以下の通りです。

  • Diffuse color(ディフューズ色)
  • Diffuse intensity(ディフューズ強度)
  • Specular color(スペキュラ色)
  • Specular intensity(スペキュラ強度)
  • Hardness(硬さ)
  • Emit(放射)
  • Alpha(アルファ)

(8478c71)


GLSL アニメーション可能な World(ワールド)と Mist(ミスト)用API

GLSL での World(ワールド)と Mist(ミスト)もアニメーション可能になりました。アニメーション可能なプロパティは以下の通りです。

  • Horizon color(水平色)= ミストの色
  • Ambient color(周囲光の色)
  • Mist start(開始)
  • Mist depth(深度)
  • Mist minimum intensity(最小強度)

(fd22a92)

Python API

  • 新しい world モジュールと mist 用アトリビュート、背景と周囲光(注:一般的には環境光と呼ばれている物)レンダリング。
.. attribute:: mistEnable
.. attribute:: mistStart
.. attribute:: mistDistance
.. attribute:: mistIntensity
.. attribute:: mistType
.. attribute:: mistColor
.. attribute:: backgroundColor
.. attribute:: ambientColor
scene = bge.logic.getCurrentScene()
scene.world.mistColor = [0.8, 0.8 ,0.2]


Sun Lamp(サンランプ): 新しいシャドウボックスのデバッグ表示

シャドウボックスデバッグ表示

Sun Lamp(サンランプ)に "Show Shadow Box(シャドウボックスの表示)"オプションが付きました。ランプ範囲のデバッグ用の表示を行い、選択中のサンランプがどのオブジェクトに影を落とすのかをフィードバックします。

(4f2657b)



Logic Brick Sensor(ロジックブリックセンサー)

Skip(スキップ)パラメーター
  • ロジックブリックのセンサー内の "Frequency(頻度)" パラメーターが "Skip(スキップ)" にリネームされ、パルス間のスキップするフレーム数を示しているのが判りやすくなりました。
  • 新しい BGE Python アトリビュート、'skippedTicks' が導入。旧 'frequency' も保持されますが、廃止される予定です。


.. attribute:: skippedTicks

ゲーム用プロパティの順序変更

New up/down buttons

ゲーム用プロパティの順番を[▲][▼]ボタンで変更できるように。(a8adeeb)



コリジョン

  • Collision Group(コリジョングループ)/ Collision Mask(コリジョンマスク)用の Python API が追加されました。
KX_GameObject.collisionGroup
KX_GameObject.collisionMask
  • コリジョングループ・マスクの数が8から16に増加しました。つまり、コリジョングループ・マスクの最大値は(216)-1となります。
  • 最初のフレームでは、コリジョングループは衝突に使用される交差をしていませんでした。現在、適切に衝突できるよう修正されています。
  • さらに、EndObject(エンドオブジェクト)が、スリープ状態のオブジェクトと、(エンドオブジェクトにより)削除されるオブジェクトと衝突中のオブジェクトをアクティブ化するように。つまり、ある剛体が他のオブジェクトの上でスリープ状態を開始する際に後者が削除されると、剛体が従来のように空中に浮くのではなく、アクティブ化して落下するということです。(3d55859)
  • KX_GameObject.suspendDynamics() メソッドにオプションの boolean 引数、"ghost" が追加されました。True時、衝突判定を無効にします。 オブジェクトを効率的にゴーストにできます。(4e7ef3f5cd8c)


描画前の設定用コールバック

描画設定をコントロールする新しいコールバックが利用可能になりました。これは自身の描画前にカメラ行列(モデルビューと投影)を設定するのに便利です。(9425a8f)

scene.pre_draw_setup.append(my_callback)

Python サンプルコード

サンプルシーンでは(レンダリングに使用しない)デフォルトカメラ、ダミーカメラ('Camera.VR')、実際にレンダリングに使用される二つのカメラ('Camera.Left', 'Camera.Right')が必要になります。

from bge import logic, render
 
def callback():
    scene = logic.getCurrentScene()
    objects = scene.objects
 
    vr_camera = objects['Camera.VR']
 
    if render.getStereoEye() == render.LEFT_EYE:
        camera = objects['Camera.Left']
    else:
        camera = objects['Camera.Right']
 
    vr_camera.worldOrientation = camera.worldOrientation
    vr_camera.worldPosition =  camera.worldPosition
 
def init():
    scene = logic.getCurrentScene()
    objects = scene.objects
 
    main_camera = scene.active_camera
    main_camera.useViewport = True
 
    vr_camera = objects['Camera.VR']
    vr_camera.useViewport = True
    vr_camera.setViewport(0, 0, render.getWindowWidth(), render.getWindowHeight())
 
    scene.pre_draw_setup.append(callback)


PyObjectPlus のサブクラス化(Mutating)

  • BGE Python のサブクラス化が追加のイニシャライザー引数に対応しました。例えば以下のようなことができます。
class Player(types.KX_GameObject):
    def __init__(self, gameobj, life):
        print("create new player :", self, ", life :", life)
 
 
def wrap_player(cont):
    own = cont.owner
    # Old reference to own will now be invalidated, so overwrite
    # Pass additional parameter life (50)
    own = Player(own, 50)


AddObject 参照引数のオプション化

  • KX_Scene.addObject 関数の参照引数がオプションになりました。参照するオブジェクトが提供されない場合、ソースオブジェクトのオリジナルの回転、スケール、位置が使用されます。
  • この時、新しいオブジェクトはそのシーンのアクティブレイヤーに追加されます。
obj = scene.addObject("Cube")

(5efbd2a)


新しい isSuspendDynamics アトリビュート

これは KX_GameObject の新しいアトリビュートの一つで、そのゲームオブジェクトの休止(Suspend)状態を返します。(a12b2ec)

.. attribute:: isSuspendDynamics

正しい速度制限

速度制限がロジックステップ毎ではなく、物理演算サブステップ毎に適用されるようになりました。(D1364)

新しい getDisplayDimensions メソッド

この新しい rasterizer メソッドは、現在のディスプレイデバイス(モニターなど)に設定された寸法(実際の寸法である必要はありません)をピクセル数で返します。(e36b0cbc89637b)

from bge import render
 
width, height = render.getDisplayDimensions()

Rigid Body(剛体)コンストレイント API キーワード

createConstraint() がキーワード引数を許容するようになりました。省略された引数はデフォルト値になります。(87b6d3c)

const = bge.constraints.createConstraint(obj1_ID, obj2_ID, constraintType, pivot_x = 1.0, pivot_z = -1.0, axis_z = 90.0, flag = 128)


バグ修正

このリリースでは40以上のバグが修正されています。詳細は このリスト(英文)を参照してください。


互換性について

新しい色管理設定
  • 色管理の修正に伴い、BGE の Render(レンダー)プロパティ→▼Shading(シェーディング)パネルの "Color Management(カラーマネージメント)" スイッチが削除されました。代わりに「Scene(シーン)プロパティ→▼Color Management(カラーマネージメント)」内の "Display Device(表示デバイス)" を使用してください。


  • Rigid body(剛体)コンストレイント API: XYZ 軸と Z 回転の初期値が1.0から0.0に変更されました。もし古いスクリプトでこれらの値を設定していなかった場合、同じピボット位置と回転を得るには、コンストレイント作成時に設定する必要があります。
const = bge.constraints.createConstraint(obj1_ID, obj2_ID, constraintType, 1.0, 1.0, 1.0, 0.0, 0.0, 90.0)