опция смешивания альфа-режима Threejs GLTF не работает под некоторыми углами - PullRequest
0 голосов
/ 02 мая 2018

У меня есть gltf, в котором я применяю текстуры png к прямоугольной сетке. У меня есть прямоугольник PNG и круг PNG. Прямоугольный узел находится при z = 0,01, а окружность - при z = 0,0 Альфа-режим используется для материалов BLEND. материал двухсторонний.

GLTF

{
"scenes" : [
    {
        "nodes" : [
            0
        ]
    }
],
"nodes" : [
    {
        "name" : "Node_0",
        "children" : [
            1,
            3
        ]
    },
    {
        "name" : "Symbol 2",
        "children" : [
            2
        ],
        "translation" : [
            240.25,
            -126.300003,
            0
        ]
    },
    {
        "name" : "Node_2",
        "mesh" : 0,
        "scale" : [
            0.656657,
            0.656657,
            1
        ]
    },
    {
        "name" : "Symbol 1",
        "children" : [
            4
        ],
        "translation" : [
            170,
            -89.050003,
            0
        ]
    },
    {
        "name" : "Node_4",
        "mesh" : 1,
        "translation" : [
            0,
            0,
            -0.01
        ],
        "scale" : [
            2.059968,
            1.399979,
            1
        ]
    }
],
"meshes" : [
    {
        "primitives" : [
            {
                "attributes" : {
                    "POSITION" : 1,
                    "TEXCOORD_0" : 2
                },
                "indices" : 0,
                "material" : 0
            }
        ]
    },
    {
        "primitives" : [
            {
                "attributes" : {
                    "POSITION" : 1,
                    "TEXCOORD_0" : 2
                },
                "indices" : 0,
                "material" : 1
            }
        ]
    }
],
"buffers" : [
    {
        "uri" : "data:application/octet-stream;base64,AQAAAAAAAAADAAAAAwAAAAIAAAABAAAAAAAAAAAAAIAAAAAAAAAAAAAAyMIAAAAAAADIQgAAyMIAAAAAAADIQgAAAIAAAAAAAAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAq6oqPacaKD+nGig/AACAP6caKD+nGig/AACAPwAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAACAAACAPwAAAACrqio9AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AAAAAABAcEOamfzCAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIA/AAAAAKuqKj2G1gNAfzKzPwAAgD+G1gNAfzKzPwAAgD8AAAAAAAAAAAAAAIAK1yO8AAAAAAAAAAAAAAAAAAAAgAAAgD8AAAAAq6oqPQAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAAAAAACpDmhmywgAAAAAAAAAAAAAAAAAAAAAAAACAAACAPw==",
        "byteLength" : 376
    }
],
"bufferViews" : [
    {
        "buffer" : 0,
        "byteOffset" : 0,
        "byteLength" : 24,
        "target" : 34963
    },
    {
        "buffer" : 0,
        "byteOffset" : 24,
        "byteLength" : 48,
        "target" : 34962
    },
    {
        "buffer" : 0,
        "byteOffset" : 72,
        "byteLength" : 32,
        "target" : 34962
    }
],
"accessors" : [
    {
        "name" : "accessor_0",
        "bufferView" : 0,
        "byteOffset" : 0,
        "componentType" : 5125,
        "count" : 6,
        "type" : "SCALAR",
        "max" : [
            3
        ],
        "min" : [
            0
        ]
    },
    {
        "name" : "accessor_1",
        "bufferView" : 1,
        "byteOffset" : 0,
        "componentType" : 5126,
        "count" : 4,
        "type" : "VEC3",
        "max" : [
            100,
            0,
            0
        ],
        "min" : [
            0,
            -100,
            0
        ]
    },
    {
        "name" : "accessor_2",
        "bufferView" : 2,
        "byteOffset" : 0,
        "componentType" : 5126,
        "count" : 4,
        "type" : "VEC2",
        "max" : [
            1,
            1
        ],
        "min" : [
            0,
            0
        ]
    }
],
"materials" : [
    {
        "pbrMetallicRoughness" : {
            "baseColorTexture" : {
                "index" : 0
            }
        },
        "alphaMode" : "BLEND",
        "doubleSided" : true
    },
    {
        "pbrMetallicRoughness" : {
            "baseColorTexture" : {
                "index" : 1
            }
        },
        "alphaMode" : "BLEND",
        "doubleSided" : true
    }
],
"samplers" : [
    {
        "magFilter" : 9729,
        "minFilter" : 9987,
        "wrapS" : 33071,
        "wrapT" : 33071
    }
],
"textures" : [
    {
        "sampler" : 0,
        "source" : 0
    },
    {
        "sampler" : 0,
        "source" : 1
    }
],
"images" : [
    {
        "uri" : "Image0.png"
    },
    {
        "uri" : "Image1.png"
    }
],
"asset" : {
    "version" : "2.0"
}

}

PNGs Circle png

Rectangle png

Я использую ThreeJs GLTF Viewer. https://gltf -viewer.donmccurdy.com / Смешивание работает хорошо под некоторыми углами, но когда я вращаюсь вокруг некоторых углов, смешивание не работает. скриншоты angle where blending works angle where blending does not work

Может ли кто-нибудь объяснить мне это поведение и как мне добиться правильного смешивания на всех углах.

1 Ответ

0 голосов
/ 03 мая 2018

Если это три отдельных узла, и все они живут в 0,0,0, возможно, у вас проблема с сортировкой. GLTF читабелен, но я не настолько знаком со спецификацией, чтобы рассказать, что происходит. Узлы, упомянутые в файле, которые не имеют поля перевода, могут быть все расположены в 0,0,0

В любом случае, средство для чего-то подобного, если вы хотите продолжить сортировку, это назначить другое yourMesh.renderOrder = yourDesiredOrder. Таким образом, для этих элементов вы можете установить 1,2,3,4 ... и контролировать, когда вы хотите, чтобы они рисовали / сообщали сортировке, чтобы учитывать эти веса.

...