private void CollectSubAssets(AlembicTreeNode node, ImportAssetEventArgs args, Material mat)
        {
            if (m_ImportSettings.m_importMeshes)
            {
                var meshFilter = node.linkedGameObj.GetComponent <MeshFilter>();
                if (meshFilter != null)
                {
                    var m = meshFilter.sharedMesh;
                    m.name = node.linkedGameObj.name;
                    args.AddSubAsset(m.name, m);
                }
            }

            var renderer = node.linkedGameObj.GetComponent <MeshRenderer>();

            if (renderer != null)
            {
                renderer.material = mat;
            }

            foreach (var child in node.children)
            {
                CollectSubAssets(child, args, mat);
            }
        }
        private void GenerateSubAssets(ImportAssetEventArgs args, GameObject go, AlembicStream stream)
        {
            var material = new Material(Shader.Find("Standard"))
            {
            };

            args.AddSubAsset("Default Material", material);

            CollectSubAssets(stream.AlembicTreeRoot, args, material);
        }
Ejemplo n.º 3
0
        public override void OnImportAsset(ImportAssetEventArgs args)
        {
            var fileName = System.IO.Path.GetFileNameWithoutExtension(args.AssetSourcePath);

            var go        = new GameObject(fileName);
            var usdStream = go.AddComponent <UsdStream>();

            usdStream.importSettings = new usdi.ImportSettings()
            {
                interpolation      = m_importSettings.interpolation,
                normalCalculation  = m_importSettings.normalCalculation,
                tangentCalculation = m_importSettings.tangentCalculation,
                maxBoneWeights     = m_importSettings.maxBoneWeights,
                scale           = m_importSettings.scale,
                loadAllPayloads = true,
                triangulate     = true,
                swapHandedness  = m_importSettings.swapHandedness,
                swapFaces       = m_importSettings.swapFaces,
                splitMesh       = true,
                doubleBuffering = true,
            };
            usdStream.directVBUpdate    = m_directVBUpdate;
            usdStream.forceSingleThread = m_forceSingleThread;
            usdStream.timeUnit          = m_timeUnit;
            usdStream.playTime          = m_time;

            usdStream.LoadImmediate(args.AssetSourcePath);

            var material = new Material(Shader.Find("Standard"))
            {
            };

            material.name = "Material_0";
            args.AddSubAsset("Default Material", material);
            _subObjects = new SortedDictionary <int, UnityEngine.Object>();
            CollectSubAssets(go.transform, args, material);

            int i = 0;

            foreach (var m in _subObjects)
            {
                if (String.IsNullOrEmpty(m.Value.name) || m.Value.name.IndexOf("<dyn>") == 0)
                {
                    m.Value.name = fileName + "_" + m.Value.GetType().Name + "_" + (++i);
                }
                args.AddSubAsset(m.Value.name, m.Value);
            }

            if (m_importMode == UsdImportMode.StripUSD)
            {
                usdStream.usdiDetachUsdComponents();
            }

            args.SetMainAsset(fileName, go);
        }
        public override void OnImportAsset(ImportAssetEventArgs args)
        {
            m_ImportSettings.m_pathToAbc = args.AssetSourcePath;
            var mainObject = AlembicImportTasker.Import(m_importMode, m_ImportSettings, m_diagSettings, (stream, mainGO, streamDescr) =>
            {
                GenerateSubAssets(args, mainGO, stream);
                if (streamDescr != null)
                {
                    args.AddSubAsset(mainGO.name, streamDescr);
                }
            });

            args.SetMainAsset(mainObject.name, mainObject);
        }
Ejemplo n.º 5
0
        private void CollectSubAssets(Transform node, ImportAssetEventArgs args, Material mat)
        {
            var schemas = node.GetComponents <UsdXformComponent>();

            foreach (var s in schemas)
            {
                s.schema.overrideImportSettings = true;
                s.schema.importSettings         = m_importSettings;
            }

            var meshFilter = node.GetComponent <MeshFilter>();

            if (meshFilter != null)
            {
                RegisterSubAsset(meshFilter.sharedMesh);
            }

            var renderer = node.GetComponent <MeshRenderer>();

            if (renderer != null)
            {
                renderer.material = mat;
            }

            var skinned = node.GetComponent <SkinnedMeshRenderer>();

            if (skinned != null && skinned.sharedMesh != null)
            {
                RegisterSubAsset(skinned.sharedMesh);
                skinned.material = mat;
            }

            for (int i = 0; i < node.childCount; i++)
            {
                CollectSubAssets(node.GetChild(i), args, mat);
            }
        }