1) SkiaSharp

: 오픈 소스 Skia 그래픽 엔진으로 구동되는 .NET 및 C#용 2D 그래픽 시스템

 

a) SkiaSharp SKBitmap

: SkiaSharp.SKBitmap ~~ = ImageUtil.~ReadFromBinary( ~~ );

( Binary단위로 읽은 Image를 SKBitmap으로 뽑아낸 후 "SaveToFile로 out 시킴)

.glb / .gltf 파일에서 빼낸 .png확장자의 이미지(Texture Atlas)

 

 

2) Materials

: 여기에 적힌 대부분은 "Khronos Group"의 "GlTF"양식을 따름

: Draw call을 줄이기 위해서 Material별로 사전작업으로 모아놓음.

{
    "materials": [
        {
            "name": "gold",
            "pbrMetallicRoughness": {
                "baseColorFactor": [ 1.000, 0.766, 0.336, 1.0 ],
                "metallicFactor": 1.0,
                "roughnessFactor": 0.0
            }
        }
    ]
}

여기에 더해 Material별로 작업할떄 Image도 같이 사전작업을 함.

 

ImgIdx에 img별 Key로 저장 후 images.Length가 imgIdx보다 클 때, Material.~Texture에 images[imgIdx]의 Path로 전달.

전달 후 materials의 materialsId 별로 위의 Value를 전달함.

 

3) Node

: Nodes and Hierarchy 구조를 가지고 있어 점진적인 Value값이 필요함.(=재귀구현)

: evaluate 된 매트릭스를 원래의 매트릭스에 곱해지고 그것을 누적해서 전달함.

 

ex) m = new Matrix4x4( ~~~~ // );
      node.evaluateM = m * ownerNode.evaluateM;

 

→ Node를 통한 재귀 생성

: Parameter로 만들어진 gltf와 GlTf의 Node, Action으로 무명 메서드 생성(GlTfNode, GlTfNode)

if (ChildrenNode != null)
            {
                for (var i = 0; i < ChildrenNode.Length; i++)
                {
                    var childNodeId = ChildrenNode[i];
                    var childNode = gltf.nodes[childNodeId];

                    action(ownerNode, childNode);

                    VisitChildren(gltf, childNode, childNode.children, action); // 재귀
                }
            }

 

수토리지