public void GetResultEOF(ref int streamPriority, GameObject go, MeshCaptureMethod captureMethod, bool forceKeyframe, List<SMesh> storeTo) { SkinnedMeshRenderer[] renderers = go.GetComponentsInChildren<SkinnedMeshRenderer>(true); foreach (SkinnedMeshRenderer renderer in renderers) { SMesh surrogate = null; switch (captureMethod) { case MeshCaptureMethod.smartMesh: if (forceKeyframe) { // || MeshDataChangeDetector.DetectChange(renderer.GetInstanceID(), SceneHierarchyCache.GetMesh(renderer), renderer.transform)) {//not needed, its forced every one and then anyways surrogate = MeshGrabberHelper.BakeBonesKeyFrame(renderer); streamPriority++; } else { surrogate = MeshGrabberHelper.BakeBonesOnly(renderer); } break; case MeshCaptureMethod.fullMesh: surrogate = MeshGrabberHelper.BakeSkinnedMesh(renderer, vBug.settings.recording.meshDataRecording.maxBlendWeights); //19 - 54ms (4 bones), 13 - 43 (1 bone) //14 ms steady by caching boneWeights, and 6 ms(!!!) by splitting the AddBoneInfluences and removing the static method all together! break; } if (surrogate != null) { if (surrogate.subMeshes != null) surrogate.subMeshes.materialIDs = MaterialDataGrabber.RegisterMaterials(renderer); storeTo.Add(surrogate); } } }
public void GetResultEOF(ref int streamPriority, GameObject go, MeshCaptureMethod captureMethod, bool forceKeyframe, List<SMesh> storeTo) { MeshFilter[] filters = go.GetComponentsInChildren<MeshFilter>(true); //Debug.Log("found: " + go.name + ", count: " + filters.Length); foreach (MeshFilter filter in filters) { MeshRenderer renderer = filter.gameObject.GetComponent<MeshRenderer>(); if (renderer == null) continue; Mesh mesh = null; SMesh surrogate = null; switch (captureMethod) { case MeshCaptureMethod.smartMesh: mesh = SceneHierarchyCache.GetMesh(filter); //mesh = filter.sharedMesh != null ? filter.sharedMesh : filter.mesh; if (mesh != null) { if (forceKeyframe) { surrogate = MeshGrabberHelper.BakeMesh(filter.transform, mesh, renderer.enabled); streamPriority ++; } else { surrogate = new SMesh(filter.transform, mesh.name, mesh.GetInstanceID(), filter.gameObject.activeInHierarchy && renderer.enabled); } } else { if (vBug.settings.general.debugMode) Debug.LogWarning("Mesh == Null"); } break; case MeshCaptureMethod.fullMesh: mesh = filter.sharedMesh != null ? filter.sharedMesh : filter.mesh; if (mesh != null) { surrogate = MeshGrabberHelper.BakeMesh(filter.transform, mesh, renderer.enabled); streamPriority++; } else { if (vBug.settings.general.debugMode) Debug.LogWarning("Mesh == Null"); } break; } if (surrogate != null) { if (surrogate.subMeshes != null) surrogate.subMeshes.materialIDs = MaterialDataGrabber.RegisterMaterials(renderer); storeTo.Add(surrogate); } else { if (vBug.settings.general.debugMode) Debug.Log(go.name + "_" + filter.name + " has no SMesh!!! " + captureMethod + ", changed? " + MeshDataChangeDetector.DetectChange(filter.GetInstanceID(), mesh, filter.transform)); } } }