Exemple #1
0
        private static Entity GenerateMeshRendererEntity(GameObjectConversionSystem gsys,
                                                         UnityEngine.SkinnedMeshRenderer uSkinnedMeshRenderer, Entity meshEntity, Entity materialEntity, int startIndex,
                                                         int indexCount, bool createAdditionlEntity, bool canUseGPUSkinning, bool canUseCPUSkinning)
        {
            Entity primarySkinnedMeshRenderer = gsys.GetPrimaryEntity(uSkinnedMeshRenderer);
            Entity meshRendererEntity         = primarySkinnedMeshRenderer;

            if (createAdditionlEntity)
            {
                meshRendererEntity = gsys.CreateAdditionalEntity(uSkinnedMeshRenderer);
                MeshRendererConversion.AddTransformComponent(gsys, primarySkinnedMeshRenderer, meshRendererEntity);
            }

            Unity.Tiny.Rendering.SkinnedMeshRenderer smr = new Unity.Tiny.Rendering.SkinnedMeshRenderer();
            smr.sharedMesh        = meshEntity;
            smr.material          = materialEntity;
            smr.startIndex        = startIndex;
            smr.indexCount        = indexCount;
            smr.canUseGPUSkinning = canUseGPUSkinning;
            smr.canUseCPUSkinning = canUseCPUSkinning;
            smr.shadowCastingMode = (Unity.Tiny.Rendering.ShadowCastingMode)uSkinnedMeshRenderer.shadowCastingMode;
            smr.skinQuality       = ConvertSkinQuality(uSkinnedMeshRenderer);
            gsys.DstEntityManager.AddComponentData(meshRendererEntity, smr);

            gsys.DstEntityManager.AddComponentData(meshRendererEntity, new WorldBounds());
            return(meshRendererEntity);
        }
        private static Entity ConvertOriginalSubMesh(GameObjectConversionSystem gsys,
                                                     UnityEngine.SkinnedMeshRenderer uSkinnedMeshRenderer, UnityEngine.Mesh uMesh, Entity meshEntity, int subMeshIndex,
                                                     Entity materialEntity)
        {
            int  boneCount         = uSkinnedMeshRenderer.bones.Length;
            bool canUseCPUSkinning = boneCount > 0;
            bool canUseGPUSkinning = boneCount > 0 && boneCount <= MeshSkinningConfig.GPU_SKINNING_MAX_BONES;

            int    startIndex         = Convert.ToUInt16(uMesh.GetIndexStart(subMeshIndex));
            int    indexCount         = Convert.ToUInt16(uMesh.GetIndexCount(subMeshIndex));
            Entity meshRendererEntity = GenerateMeshRendererEntity(gsys, uSkinnedMeshRenderer, meshEntity, materialEntity,
                                                                   startIndex, indexCount, subMeshIndex > 0, canUseGPUSkinning, canUseCPUSkinning);

            DynamicBuffer <SkinnedMeshBoneRef>
            smbrBuffer = gsys.DstEntityManager.AddBuffer <SkinnedMeshBoneRef>(meshRendererEntity);

            for (int i = 0; i < boneCount; i++)
            {
                smbrBuffer.Add(new SkinnedMeshBoneRef
                {
                    bone = gsys.GetPrimaryEntity(uSkinnedMeshRenderer.bones[i]),
                });
            }

            return(meshRendererEntity);
        }
Exemple #3
0
 private static void ConvertGPUSkinnedSubMesh(GameObjectConversionSystem gsys,
                                              UnityEngine.SkinnedMeshRenderer uSkinnedMeshRenderer, UnityEngine.Mesh uMesh, Entity meshEntity)
 {
     //Get the gpu draw range And calc the bone reference for the draw range
     var sharedMaterials = uSkinnedMeshRenderer.sharedMaterials;
     NativeArray <GPUSkinnedMeshDrawRange> gsmdrBuffer =
         gsys.DstEntityManager.GetBuffer <GPUSkinnedMeshDrawRange>(meshEntity).ToNativeArray(Allocator.Temp);
     NativeArray <OriginalVertexBoneIndex> ovbiBuffer =
         gsys.DstEntityManager.GetBuffer <OriginalVertexBoneIndex>(meshEntity).ToNativeArray(Allocator.Temp);
     SkinnedMeshRenderData skinnedMeshRenderData =
         gsys.DstEntityManager.GetComponentData <SkinnedMeshRenderData>(meshEntity);
     ref BlobArray <SkinnedMeshVertex> skinnedVertices = ref skinnedMeshRenderData.SkinnedMeshDataRef.Value.Vertices;
        private static List <Entity> ConvertGPUSkinnedSubMesh(GameObjectConversionSystem gsys,
                                                              UnityEngine.SkinnedMeshRenderer uSkinnedMeshRenderer, UnityEngine.Mesh uMesh, Entity meshEntity)
        {
            List <Entity> entities            = new List <Entity>();
            bool          needGPUSkinningData = gsys.DstEntityManager.HasComponent <GPUSkinnedMeshDrawRange>(meshEntity);

            if (!needGPUSkinningData)
            {
                return(null);
            }

            //Get the gpu draw range And calc the bone reference for the draw range
            LitMeshRenderData litMeshRenderData = gsys.DstEntityManager.GetComponentData <LitMeshRenderData>(meshEntity);
            ref LitMeshData   litMeshData       = ref litMeshRenderData.Mesh.Value;
Exemple #5
0
        private static void ConvertOriginalSubMesh(GameObjectConversionSystem gsys,
                                                   UnityEngine.SkinnedMeshRenderer uSkinnedMeshRenderer, UnityEngine.Mesh uMesh, Entity meshEntity, int subMeshIndex,
                                                   Entity materialEntity)
        {
            int  boneCount         = uSkinnedMeshRenderer.bones.Length;
            bool canUseCPUSkinning = boneCount > 0;
            bool canUseGPUSkinning = boneCount > 0 && boneCount <= MeshSkinningConfig.GPU_SKINNING_MAX_BONES;

            int    startIndex         = Convert.ToUInt16(uMesh.GetIndexStart(subMeshIndex));
            int    indexCount         = Convert.ToUInt16(uMesh.GetIndexCount(subMeshIndex));
            Entity meshRendererEntity = GenerateMeshRendererEntity(gsys, uSkinnedMeshRenderer, meshEntity, materialEntity,
                                                                   startIndex, indexCount, subMeshIndex > 0, canUseGPUSkinning, canUseCPUSkinning);

            ConvertBlendShapeData(gsys, uSkinnedMeshRenderer, meshRendererEntity);

            DynamicBuffer <SkinnedMeshBoneRef>
            smbrBuffer = gsys.DstEntityManager.AddBuffer <SkinnedMeshBoneRef>(meshRendererEntity);

            for (int i = 0; i < boneCount; i++)
            {
                smbrBuffer.Add(new SkinnedMeshBoneRef
                {
                    bone = gsys.GetPrimaryEntity(uSkinnedMeshRenderer.bones[i]),
                });
            }

            var isLit    = gsys.DstEntityManager.HasComponent <LitMaterial>(materialEntity);
            var isSimple = gsys.DstEntityManager.HasComponent <SimpleMaterial>(materialEntity);

            if (isLit || isSimple)
            {
                if (isLit)
                {
                    gsys.DstEntityManager.AddComponent <LitMeshRenderer>(meshRendererEntity);
                }
                else if (isSimple)
                {
                    gsys.DstEntityManager.AddComponent <SimpleMeshRenderer>(meshRendererEntity);
                }
            }
        }
Exemple #6
0
        private static void ConvertBlendShapeData(GameObjectConversionSystem gsys,
                                                  UnityEngine.SkinnedMeshRenderer uSkinnedMeshRenderer, Entity meshRendererEntity)
        {
            Mesh uMesh = uSkinnedMeshRenderer.sharedMesh;

            if (uMesh.blendShapeCount <= 0)
            {
                return;
            }
            DynamicBuffer <BlendShapeWeight> blendShapeWeightsBuffer =
                gsys.DstEntityManager.AddBuffer <BlendShapeWeight>(meshRendererEntity);

            for (int shapeIndex = 0; shapeIndex < uMesh.blendShapeCount; shapeIndex++)
            {
                string blendShapeName = uMesh.GetBlendShapeName(shapeIndex);
                float  curWeight      = uSkinnedMeshRenderer.GetBlendShapeWeight(shapeIndex);

                BlendShapeWeight blendShapeWeight = new BlendShapeWeight();
                blendShapeWeight.NameHash  = BlendShapeChannel.GetNameHash(blendShapeName);
                blendShapeWeight.CurWeight = curWeight;
                blendShapeWeightsBuffer.Add(blendShapeWeight);
            }
        }