LoginSignup
0

More than 5 years have passed since last update.

Amazon SumerianでColliderとスケールに関連するバグがあった

Posted at

Amazon Sumerianで以下のようなColliderとスケールに関連するバグを見つけた。
一応AWSサポートには連絡済で対応される予定(時期未定)らしい。

正常ケース

index1.gif

再現方法

  • 以下のコードでメッシュを作成するスクリプトを何かしらのEntitiyにアタッチする。
'use strict';

function setup(args, ctx) {
    // Constructing a quad entity
    var attributes = [sumerian.MeshData.POSITION, sumerian.MeshData.NORMAL, sumerian.MeshData.TEXCOORD0];
    var attributeMap = sumerian.MeshData.defaultMap(attributes);
    var vertexCount = 4;
    var indexCount = 6;
    var meshData = new sumerian.MeshData(attributeMap, vertexCount, indexCount);
    meshData.getAttributeBuffer(sumerian.MeshData.POSITION).set([
        -1, -1, 0,
        -1, 1, 0,
         1, 1, 0,
         1, -1, 0,

    ]);
    meshData.getAttributeBuffer(sumerian.MeshData.NORMAL).set([
        0,0,1,  0,0,1,  0,0,1,  0,0,1,
    ]);
    meshData.getAttributeBuffer(sumerian.MeshData.TEXCOORD0).set([
        0,0,  0,1,  1,1,  1,0,
    ]);
    meshData.getIndexBuffer().set([0,3,1, 1,3,2]);

    var quadEntity = ctx.world.createEntity(meshData, new sumerian.Material(sumerian.ShaderLib.textured)).addToWorld();
    ctx.entity = quadEntity;

    const collider = new sumerian.MeshCollider({meshData: meshData});
    const colliderComponent = new sumerian.ColliderComponent({collider: collider});
    quadEntity.setComponent(colliderComponent);
}

異常ケース

index1000.gif

再現方法

  • 以下のスクリプトを何かしらのEntitiyにアタッチする。
'use strict';

function setup(args, ctx) {
    // Constructing a quad entity
    var attributes = [sumerian.MeshData.POSITION, sumerian.MeshData.NORMAL, sumerian.MeshData.TEXCOORD0];
    var attributeMap = sumerian.MeshData.defaultMap(attributes);
    var vertexCount = 4;
    var indexCount = 6;
    var meshData = new sumerian.MeshData(attributeMap, vertexCount, indexCount);
    meshData.getAttributeBuffer(sumerian.MeshData.POSITION).set([
        -1000, -1000, 0, // <= 正常ケースからの変更点:1000倍する
        -1000, 1000, 0,  // <= 正常ケースからの変更点:1000倍する
         1000, 1000, 0,  // <= 正常ケースからの変更点:1000倍する
         1000, -1000, 0, // <= 正常ケースからの変更点:1000倍する

    ]);
    meshData.getAttributeBuffer(sumerian.MeshData.NORMAL).set([
        0,0,1,  0,0,1,  0,0,1,  0,0,1,
    ]);
    meshData.getAttributeBuffer(sumerian.MeshData.TEXCOORD0).set([
        0,0,  0,1,  1,1,  1,0,
    ]);
    meshData.getIndexBuffer().set([0,3,1, 1,3,2]);

    var quadEntity = ctx.world.createEntity(meshData, new sumerian.Material(sumerian.ShaderLib.textured)).addToWorld();
    ctx.entity = quadEntity;
    quadEntity.setScale(new sumerian.Vector3(0.001, 0.001, 0.001)); // <= 正常ケースからの変更点:1/1000倍する。

    const collider = new sumerian.MeshCollider({meshData: meshData});
    const colliderComponent = new sumerian.ColliderComponent({collider: collider});
    quadEntity.setComponent(colliderComponent);
}

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0