// Bake //------------------------------------------------ public void BakeMesh(Vector3[] vertPositions, Vector2[] vertUVs, int[] vertUniqueIDs, int[] vertTris, Vector2 pivotPos, apOptTransform parentTransform, Texture2D texture, apPortrait.SHADER_TYPE shaderType, Shader shaderNormal, Shader shaderClipping ) { _parentTransform = parentTransform; _vertPositions = vertPositions; _vertUVs = vertUVs; _vertUniqueIDs = vertUniqueIDs; _vertTris = vertTris; _texture = texture; _pivotPos = pivotPos; _nVert = _vertPositions.Length; transform.localPosition += new Vector3(-_pivotPos.x, -_pivotPos.y, 0.0f); _matrix_Vert2Mesh = apMatrix3x3.TRS(new Vector2(-_pivotPos.x, -_pivotPos.y), 0, Vector2.one); _matrix_Vert2Mesh_Inverse = _matrix_Vert2Mesh.inverse; _shaderType = shaderType; _shaderNormal = shaderNormal; _shaderClipping = shaderClipping; if (_shaderNormal == null) { Debug.LogError("Shader Normal is Null"); } if (_shaderClipping == null) { Debug.LogError("Shader Clipping is Null"); } //RenderVert를 만들어주자 _renderVerts = new apOptRenderVertex[_nVert]; for (int i = 0; i < _nVert; i++) { _renderVerts[i] = new apOptRenderVertex( _parentTransform, this, _vertUniqueIDs[i], i, new Vector2(vertPositions[i].x, vertPositions[i].y), _vertUVs[i]); _renderVerts[i].SetMatrix_1_Static_Vert2Mesh(_matrix_Vert2Mesh); _renderVerts[i].SetMatrix_3_Transform_Mesh(parentTransform._matrix_TFResult_WorldWithoutMod.MtrxToSpace); _renderVerts[i].Calculate(); } if (_meshFilter == null || _mesh == null) { _meshFilter = GetComponent <MeshFilter>(); _mesh = new Mesh(); _mesh.name = this.name + "_Mesh"; _meshFilter.sharedMesh = _mesh; } if (_meshRenderer == null) { _meshRenderer = GetComponent <MeshRenderer>(); //_material = new Material(Shader.Find("AnyPortrait/Transparent/Colored Texture (2X)")); //Debug.Log("Opt Shader : " + _shaderNormal.name + "(" + name + ")"); //_material = new Material(Shader.Find(_shaderName)); _material = new Material(_shaderNormal); _material.SetColor("_Color", new Color(0.5f, 0.5f, 0.5f, 1.0f)); _material.SetTexture("_MainTex", _texture); _meshRenderer.sharedMaterial = _material; } _isMaskParent = false; _isMaskChild = false; _clipParentID = -1; _clipChildIDs = null; _vertPositions_Updated = new Vector3[_vertPositions.Length]; _vertPositions_Local = new Vector3[_vertPositions.Length]; for (int i = 0; i < _vertPositions.Length; i++) { //Calculate 전에는 직접 Pivot Pos를 적용해주자 (Calculate에서는 자동 적용) //_vertPositions_Updated[i] = _vertPositions[i] + new Vector3(_pivotPos.x, _pivotPos.y, 0); //_vertPositions_Updated[i] = _vertPositions[i]; //_vertPositions_Updated[i] = _vertPositions[i] - new Vector3(_pivotPos.x, _pivotPos.y, 0); _vertPositions_Updated[i] = _renderVerts[i]._vertPos3_LocalUpdated; } //_texture_Updated = _texture; _transform = transform; InitMesh(true); RefreshMesh(); }
// Get / Set //----------------------------------------------- public Shader GetShader(apPortrait.SHADER_TYPE shaderType, bool isClippedChild, bool isLinearSpace) { if (!isLinearSpace) { //Gamma Space switch (shaderType) { case apPortrait.SHADER_TYPE.AlphaBlend: if (!isClippedChild) { return(_shader_Normal_AlphaBlend); } else { return(_shader_Clipped_AlphaBlend); } case apPortrait.SHADER_TYPE.Additive: if (!isClippedChild) { return(_shader_Normal_Additive); } else { return(_shader_Clipped_Additive); } case apPortrait.SHADER_TYPE.SoftAdditive: if (!isClippedChild) { return(_shader_Normal_SoftAdditive); } else { return(_shader_Clipped_SoftAdditive); } case apPortrait.SHADER_TYPE.Multiplicative: if (!isClippedChild) { return(_shader_Normal_Multiplicative); } else { return(_shader_Clipped_Multiplicative); } } } else { //Linear Space switch (shaderType) { case apPortrait.SHADER_TYPE.AlphaBlend: if (!isClippedChild) { return(_shader_L_Normal_AlphaBlend); } else { return(_shader_L_Clipped_AlphaBlend); } case apPortrait.SHADER_TYPE.Additive: if (!isClippedChild) { return(_shader_L_Normal_Additive); } else { return(_shader_L_Clipped_Additive); } case apPortrait.SHADER_TYPE.SoftAdditive: if (!isClippedChild) { return(_shader_L_Normal_SoftAdditive); } else { return(_shader_L_Clipped_SoftAdditive); } case apPortrait.SHADER_TYPE.Multiplicative: if (!isClippedChild) { return(_shader_L_Normal_Multiplicative); } else { return(_shader_L_Clipped_Multiplicative); } } } return(null); }