コード例 #1
0
        // 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);
        }
コード例 #2
0
        // 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);
        }