public override void AbcGetConfig(ref AbcAPI.aiConfig config)
 {
     if (m_aspectRatioMode != AbcAPI.aiAspectRatioModeOverride.InheritStreamSetting)
     {
         config.aspectRatio = AbcAPI.GetAspectRatio((AbcAPI.aiAspectRatioMode) m_aspectRatioMode);
     }
 }
        public override void AbcSetup(AlembicStream abcStream,
                                      AbcAPI.aiObject abcObj,
                                      AbcAPI.aiSchema abcSchema)
        {
            base.AbcSetup(abcStream, abcObj, abcSchema);

            m_camera = GetOrAddComponent<Camera>();
        }
        public override void AbcSetup(AlembicStream abcStream,
                                      AbcAPI.aiObject abcObj,
                                      AbcAPI.aiSchema abcSchema)
        {
            base.AbcSetup(abcStream, abcObj, abcSchema);

            Light light = GetOrAddComponent<Light>();

            // Disable component for now
            light.enabled = false;
        }
     // No config overrides on AlembicPoints
 
     public override void AbcSampleUpdated(AbcAPI.aiSample sample, bool topologyChanged)
     {
         if(m_abcPositions == null)
         {
             AbcAPI.aiPointsGetSummary(m_abcSchema, ref m_summary);
             m_abcPositions = new Vector3[m_summary.peakCount];
             m_abcIDs = new ulong[m_summary.peakCount];
 
             m_abcData.positions = Marshal.UnsafeAddrOfPinnedArrayElement(m_abcPositions, 0);
             m_abcData.ids = Marshal.UnsafeAddrOfPinnedArrayElement(m_abcIDs, 0);
         }
 
         AbcAPI.aiPointsCopyData(sample, ref m_abcData);
         AbcDirty();
     }
        // No config override

        public override void AbcSampleUpdated(AbcAPI.aiSample sample, bool topologyChanged)
        {
            // ToDo
        }
        public override void AbcSampleUpdated(AbcAPI.aiSample sample, bool topologyChanged)
        {
            AbcAPI.aiCameraGetData(sample, ref m_abcData);

            AbcDirty();
        }
 public void GetFacesets(ref AbcAPI.aiFacesets facesets)
 {
     facesets.count = facesetsCache.faceCounts.Length;
     facesets.faceCounts = Marshal.UnsafeAddrOfPinnedArrayElement(facesetsCache.faceCounts, 0);
     facesets.faceIndices = Marshal.UnsafeAddrOfPinnedArrayElement(facesetsCache.faceIndices, 0);
 }
     Mesh AddMeshComponents(AbcAPI.aiObject abc, GameObject gameObject)
     {
         Mesh mesh = null;
         
         MeshFilter meshFilter = gameObject.GetComponent<MeshFilter>();
         
         if (meshFilter == null || meshFilter.sharedMesh == null)
         {
             mesh = new Mesh();
             mesh.MarkDynamic();
 
             if (meshFilter == null)
             {
                 meshFilter = gameObject.AddComponent<MeshFilter>();
             }
 
             meshFilter.sharedMesh = mesh;
 
             MeshRenderer renderer = gameObject.GetComponent<MeshRenderer>();
 
             if (renderer == null)
             {
                 renderer = gameObject.AddComponent<MeshRenderer>();
             }
 
 #if UNITY_EDITOR
             Material material = UnityEngine.Object.Instantiate(AbcUtils.GetDefaultMaterial());
             material.name = "Material_0";
             renderer.sharedMaterial = material;
 #endif
         }
         else
         {
             mesh = meshFilter.sharedMesh;
         }
 
         return mesh;
     }
 public override void CreateAbcObject(AbcAPI.aeObject parent)
 {
     m_abc = AbcAPI.aeNewPoints(parent, gameObject.name);
 }
     public override void AbcSampleUpdated(AbcAPI.aiSample sample, bool topologyChanged)
     {
         AlembicMaterial abcMaterials = m_trans.GetComponent<AlembicMaterial>();
 
         if (abcMaterials != null)
         {
             if (abcMaterials.HasFacesetsChanged())
             {
                 AbcVerboseLog("AlembicMesh.AbcSampleUpdated: Facesets updated, force topology update");
                 topologyChanged = true;
             }
 
             hasFacesets = (abcMaterials.GetFacesetsCount() > 0);
         }
         else if (hasFacesets)
         {
             AbcVerboseLog("AlembicMesh.AbcSampleUpdated: Facesets cleared, force topology update");
             topologyChanged = true;
             hasFacesets = false;
         }
 
         if (m_freshSetup)
         {
             topologyChanged = true;
 
             m_freshSetup = false;
         }
 
         AbcAPI.aiPolyMeshGetSampleSummary(sample, ref m_sampleSummary, topologyChanged);
 
         AbcAPI.aiPolyMeshData vertexData = default(AbcAPI.aiPolyMeshData);
 
         UpdateSplits(m_sampleSummary.splitCount);
 
         for (int s=0; s<m_sampleSummary.splitCount; ++s)
         {
             Split split = m_splits[s];
 
             split.clear = topologyChanged;
             split.active = true;
 
             int vertexCount = AbcAPI.aiPolyMeshGetVertexBufferLength(sample, s);
 
             Array.Resize(ref split.positionCache, vertexCount);
             vertexData.positions = GetArrayPtr(split.positionCache);
 
             if (m_sampleSummary.hasNormals)
             {
                 Array.Resize(ref split.normalCache, vertexCount);
                 vertexData.normals = GetArrayPtr(split.normalCache);
             }
             else
             {
                 Array.Resize(ref split.normalCache, 0);
                 vertexData.normals = IntPtr.Zero;
             }
 
             if (m_sampleSummary.hasUVs)
             {
                 Array.Resize(ref split.uvCache, vertexCount);
                 vertexData.uvs = GetArrayPtr(split.uvCache);
             }
             else
             {
                 Array.Resize(ref split.uvCache, 0);
                 vertexData.uvs = IntPtr.Zero;
             }
 
             if (m_sampleSummary.hasTangents)
             {
                 Array.Resize(ref split.tangentCache, vertexCount);
                 vertexData.tangents = GetArrayPtr(split.tangentCache);
             }
             else
             {
                 Array.Resize(ref split.tangentCache, 0);
                 vertexData.tangents = IntPtr.Zero;
             }
 
             AbcAPI.aiPolyMeshFillVertexBuffer(sample, s, ref vertexData);
 
             split.center = vertexData.center;
             split.size = vertexData.size;
         }
 
         if (topologyChanged)
         {
             AbcAPI.aiFacesets facesets = default(AbcAPI.aiFacesets);
             AbcAPI.aiSubmeshSummary submeshSummary = default(AbcAPI.aiSubmeshSummary);
             AbcAPI.aiSubmeshData submeshData = default(AbcAPI.aiSubmeshData);
 
             if (abcMaterials != null)
             {
                 abcMaterials.GetFacesets(ref facesets);
             }
             
             int numSubmeshes = AbcAPI.aiPolyMeshPrepareSubmeshes(sample, ref facesets);
 
             if (m_submeshes.Count > numSubmeshes)
             {
                 m_submeshes.RemoveRange(numSubmeshes, m_submeshes.Count - numSubmeshes);
             }
             
             for (int s=0; s<m_sampleSummary.splitCount; ++s)
             {
                 m_splits[s].submeshCount = AbcAPI.aiPolyMeshGetSplitSubmeshCount(sample, s);
             }
 
             while (AbcAPI.aiPolyMeshGetNextSubmesh(sample, ref submeshSummary))
             {
                 if (submeshSummary.splitIndex >= m_splits.Count)
                 {
                     Debug.Log("Invalid split index");
                     continue;
                 }
 
                 Submesh submesh = null;
 
                 if (submeshSummary.index < m_submeshes.Count)
                 {
                     submesh = m_submeshes[submeshSummary.index];
                 }
                 else
                 {
                     submesh = new Submesh
                     {
                         indexCache = new int[0],
                         facesetIndex = -1,
                         splitIndex = -1,
                         index = -1,
                         update = true
                     };
 
                     m_submeshes.Add(submesh);
                 }
 
                 submesh.facesetIndex = submeshSummary.facesetIndex;
                 submesh.splitIndex = submeshSummary.splitIndex;
                 submesh.index = submeshSummary.splitSubmeshIndex;
                 submesh.update = true;
 
                 Array.Resize(ref submesh.indexCache, 3 * submeshSummary.triangleCount);
 
                 submeshData.indices = GetArrayPtr(submesh.indexCache);
 
                 AbcAPI.aiPolyMeshFillSubmeshIndices(sample, ref submeshSummary, ref submeshData);
             }
             
             if (abcMaterials != null)
             {
                 abcMaterials.AknowledgeFacesetsChanges();
             }
         }
         else
         {
             for (int i=0; i<m_submeshes.Count; ++i)
             {
                 m_submeshes[i].update = false;
             }
         }
 
         AbcDirty();
     }
     public override void AbcGetConfig(ref AbcAPI.aiConfig config)
     {
         if (m_normalsMode != AbcAPI.aiNormalsModeOverride.InheritStreamSetting)
         {
             config.normalsMode = (AbcAPI.aiNormalsMode) m_normalsMode;
         }
 
         if (m_tangentsMode != AbcAPI.aiTangentsModeOverride.InheritStreamSetting)
         {
             config.tangentsMode = (AbcAPI.aiTangentsMode) m_tangentsMode;
         }
 
         if (m_faceWinding != AbcAPI.aiFaceWindingOverride.InheritStreamSetting)
         {
             config.swapFaceWinding = (m_faceWinding == AbcAPI.aiFaceWindingOverride.Swap);
         }
 
         config.cacheTangentsSplits = m_cacheTangentsSplits;
 
         // if 'forceUpdate' is set true, even if alembic sample data do not change at all
         // AbcSampleUpdated will still be called (topologyChanged will be false)
 
         AlembicMaterial abcMaterials = m_trans.GetComponent<AlembicMaterial>();
 
         config.forceUpdate = m_freshSetup || (abcMaterials != null ? abcMaterials.HasFacesetsChanged() : hasFacesets);
     }
     public override void AbcSetup(AlembicStream abcStream,
                                   AbcAPI.aiObject abcObj,
                                   AbcAPI.aiSchema abcSchema)
     {
         base.AbcSetup(abcStream, abcObj, abcSchema);
 
         AbcAPI.aiPolyMeshGetSummary(abcSchema, ref m_summary);
 
         m_freshSetup = true;
     }
 public abstract void CreateAbcObject(AbcAPI.aeObject parent);
Exemple #14
0
        public override void AbcSampleUpdated(AbcAPI.aiSample sample, bool topologyChanged)
        {
            AbcAPI.aiCameraGetData(sample, ref m_abcData);

            AbcDirty();
        }