// Init - Bake //-------------------------------------------- public void Bake(apPhysicsMeshParam srcPhysicParam, List <apModifiedVertexWeight> modVertWeights, apPortrait portrait) { _nVertWeights = modVertWeights.Count; _vertWeights = new apOptModifiedPhysicsVertex[_nVertWeights]; _physicMeshParam = new apOptPhysicsMeshParam(); _physicMeshParam.Bake(srcPhysicParam); _physicMeshParam.Link(portrait); for (int i = 0; i < _nVertWeights; i++) { apOptModifiedPhysicsVertex optModPhysicVert = new apOptModifiedPhysicsVertex(); apModifiedVertexWeight srcModVertWeight = modVertWeights[i]; optModPhysicVert.Bake(srcModVertWeight); _vertWeights[i] = optModPhysicVert; } }
// Init - Bake //-------------------------------------------- public bool Bake(apModifiedMesh srcModMesh, apPortrait portrait) { _portrait = portrait; _rootMeshGroupUniqueID = srcModMesh._meshGroupUniqueID_Modifier; _meshUniqueID = srcModMesh._meshUniqueID; _transformUniqueID = srcModMesh._transformUniqueID; //_boneUniqueID = srcModMesh._boneUniqueID; _isMeshTransform = srcModMesh._isMeshTransform; apOptTransform rootTransform = _portrait.GetOptTransformAsMeshGroup(_rootMeshGroupUniqueID); apOptTransform targetTransform = _portrait.GetOptTransform(_transformUniqueID); if (targetTransform == null) { Debug.LogError("Bake 실패 : 찾을 수 없는 연결된 OptTransform [" + _transformUniqueID + "]"); Debug.LogError("이미 삭제된 객체에 연결된 ModMesh가 아닌지 확인해보세염"); return(false); } apOptMesh targetMesh = null; if (targetTransform._unitType == apOptTransform.UNIT_TYPE.Mesh) { targetMesh = targetTransform._childMesh; } if (rootTransform == null) { Debug.LogError("ModifiedMesh 연동 에러 : 알수 없는 RootTransform"); return(false); } //_targetType = srcModMesh._targetType; _modValueType = srcModMesh._modValueType; //switch (srcModMesh._targetType) Color meshColor = srcModMesh._meshColor; if (!srcModMesh._isVisible) { meshColor.a = 0.0f; } _isUsePhysicParam = srcModMesh._isUsePhysicParam; if (_isUsePhysicParam) { _physicMeshParam = new apOptPhysicsMeshParam(); _physicMeshParam.Bake(srcModMesh.PhysicParam); _physicMeshParam.Link(_portrait); } //Modifier Value에 맞게 Bake를 하자 if ((int)(srcModMesh._modValueType & apModifiedMesh.MOD_VALUE_TYPE.VertexPosList) != 0) { Bake_VertexMorph(rootTransform, targetTransform, targetMesh, srcModMesh._vertices, meshColor, srcModMesh._isVisible); } else if ((int)(srcModMesh._modValueType & apModifiedMesh.MOD_VALUE_TYPE.TransformMatrix) != 0) { if (srcModMesh._isMeshTransform) { Bake_MeshTransform(rootTransform, targetTransform, targetMesh, srcModMesh._transformMatrix, meshColor, srcModMesh._isVisible); } else { Bake_MeshGroupTransform(rootTransform, targetTransform, srcModMesh._transformMatrix, meshColor, srcModMesh._isVisible); } } else if ((int)(srcModMesh._modValueType & apModifiedMesh.MOD_VALUE_TYPE.BoneVertexWeightList) != 0) { //추가 : VertRig 데이터를 넣는다. Bake_VertexRigs(rootTransform, targetTransform, targetMesh, srcModMesh._vertRigs); } else if ((int)(srcModMesh._modValueType & apModifiedMesh.MOD_VALUE_TYPE.VertexWeightList_Physics) != 0 || (int)(srcModMesh._modValueType & apModifiedMesh.MOD_VALUE_TYPE.VertexWeightList_Volume) != 0) { Bake_VertexWeights(rootTransform, targetTransform, targetMesh, srcModMesh._vertWeights); } else { Debug.LogError("연동 에러 : 알 수 없는 ModifierMesh 타입 : " + srcModMesh._modValueType); return(false); } #region [미사용 코드] ModValue를 고정된 타입으로 Bake할때 (코드 손상됨) //switch(srcModMesh._modValueType) //{ // //case apModifiedMesh.TARGET_TYPE.VertexWithMeshTransform: // case apModifiedMesh.MOD_VALUE_TYPE.VertexPosList: // { // //TODO : 여기서부터 연동하자. // } // break; // //case apModifiedMesh.TARGET_TYPE.MeshTransformOnly: // case apModifiedMesh.MOD_VALUE_TYPE.TransformMatrix: // { // } // break; // case apModifiedMesh.MOD_VALUE_TYPE.Color: // { // Debug.LogError("TODO : OptModMesh에서 Color에 대한 처리를 해야한다."); // } // break; // case apModifiedMesh.MOD_VALUE_TYPE.BoneVertexWeightList: // { // Debug.LogError("TODO : 본 연동"); // } // break; // //case apModifiedMesh.TARGET_TYPE.Bone: // case apModifiedMesh.MOD_VALUE_TYPE.VertexWeightList: // { // Debug.LogError("TODO : 버텍스 가중시 연동"); // } // break; // default: // //Debug.LogError("연동 에러 : 알수 없는 ModifierMesh 타입 : " + srcModMesh._targetType); // Debug.LogError("연동 에러 : 알 수 없는 ModifierMesh 타입 : " + srcModMesh._modValueType); // break; //} #endregion return(true); }
// Init - Bake //-------------------------------------------- public bool Bake(apModifiedMesh srcModMesh, apPortrait portrait) { _portrait = portrait; _rootMeshGroupUniqueID = srcModMesh._meshGroupUniqueID_Modifier; _meshUniqueID = srcModMesh._meshUniqueID; _transformUniqueID = srcModMesh._transformUniqueID; //_boneUniqueID = srcModMesh._boneUniqueID; _isMeshTransform = srcModMesh._isMeshTransform; apOptTransform rootTransform = _portrait.GetOptTransformAsMeshGroup(_rootMeshGroupUniqueID); apOptTransform targetTransform = _portrait.GetOptTransform(_transformUniqueID); if (targetTransform == null) { Debug.LogError("Bake 실패 : 찾을 수 없는 연결된 OptTransform [" + _transformUniqueID + "]"); Debug.LogError("이미 삭제된 객체에 연결된 ModMesh가 아닌지 확인해보세염"); return(false); } apOptMesh targetMesh = null; if (targetTransform._unitType == apOptTransform.UNIT_TYPE.Mesh) { targetMesh = targetTransform._childMesh; } if (rootTransform == null) { Debug.LogError("ModifiedMesh 연동 에러 : 알수 없는 RootTransform"); return(false); } //_targetType = srcModMesh._targetType; _modValueType = srcModMesh._modValueType; //switch (srcModMesh._targetType) Color meshColor = srcModMesh._meshColor; if (!srcModMesh._isVisible) { meshColor.a = 0.0f; } _isUsePhysicParam = srcModMesh._isUsePhysicParam; if (_isUsePhysicParam) { _physicMeshParam = new apOptPhysicsMeshParam(); _physicMeshParam.Bake(srcModMesh.PhysicParam); _physicMeshParam.Link(_portrait); } //추가 ExtraOption _isExtraValueEnabled = srcModMesh._isExtraValueEnabled; _extraValue.Bake(srcModMesh._extraValue); if (!_extraValue._isDepthChanged && !_extraValue._isTextureChanged) { _isExtraValueEnabled = false; } //Modifier Value에 맞게 Bake를 하자 if ((int)(srcModMesh._modValueType & apModifiedMesh.MOD_VALUE_TYPE.VertexPosList) != 0) { Bake_VertexMorph(rootTransform, targetTransform, targetMesh, srcModMesh._vertices, meshColor, srcModMesh._isVisible); } else if ((int)(srcModMesh._modValueType & apModifiedMesh.MOD_VALUE_TYPE.TransformMatrix) != 0) { if (srcModMesh._isMeshTransform) { Bake_MeshTransform(rootTransform, targetTransform, targetMesh, srcModMesh._transformMatrix, meshColor, srcModMesh._isVisible); } else { Bake_MeshGroupTransform(rootTransform, targetTransform, srcModMesh._transformMatrix, meshColor, srcModMesh._isVisible); } } else if ((int)(srcModMesh._modValueType & apModifiedMesh.MOD_VALUE_TYPE.BoneVertexWeightList) != 0) { //추가 : VertRig 데이터를 넣는다. bool isValidVertexRigsData = Bake_VertexRigs(rootTransform, targetTransform, targetMesh, srcModMesh._vertRigs); if (!isValidVertexRigsData) { //유효하지 않은 Rigging의 ModMesh가 있다. //Rig 데이터가 아무것도 없는 ModMesh는 Opt에서 오작동을 한다. (오류 검사를 안하므로) //Debug.LogError("Rig 데이터가 없는 ModMesh"); string strTransform = rootTransform._name + " / " + targetTransform._name; Debug.LogError("AnyPortrait : Vertices with missing rigging data have been detected. Rigging for [" + strTransform + "] is not Bake."); return(false); } } else if ((int)(srcModMesh._modValueType & apModifiedMesh.MOD_VALUE_TYPE.VertexWeightList_Physics) != 0 || (int)(srcModMesh._modValueType & apModifiedMesh.MOD_VALUE_TYPE.VertexWeightList_Volume) != 0) { Bake_VertexWeights(rootTransform, targetTransform, targetMesh, srcModMesh._vertWeights); } else { Debug.LogError("연동 에러 : 알 수 없는 ModifierMesh 타입 : " + srcModMesh._modValueType); return(false); } return(true); }