인덱스 가르기


List<List<int>> separateIndex(List<int> indices)
{
List<List<int>> result = new List<List<int>>();

List<int> triangle = new List<int>(indices);

while(triangle.Count>0)
{
bool found = true;
List<int> faceindices = new List<int>();
List<int> tris = new List<int>();
tris.Add(triangle[0]);

while (found)
{
found = false;
for(int i =0;i<triangle.Count/3;i++)
{
if(tris.Contains(triangle[i*3]))
{
tris.Add(triangle[i*3 + 1]);
tris.Add(triangle[i*3 + 2]);
if(!faceindices.Contains(i))
{
found = true;
faceindices.Add(i);
}
}
else if(tris.Contains(triangle[i * 3 + 1]))
{
tris.Add(triangle[i * 3]);
tris.Add(triangle[i * 3 + 2]);
if (!faceindices.Contains(i))
{
found = true;
faceindices.Add(i);
}
}
else if(tris.Contains(triangle[i*3+2]))
{
tris.Add(triangle[i * 3]);
tris.Add(triangle[i * 3 + 1]);
if (!faceindices.Contains(i))
{
found=true;
faceindices.Add(i);
}
}
}
}
faceindices.Sort();
List<int> indice = new List<int>();
for(int i =faceindices.Count-1;i>=0;i--)
{
indice.Add(triangle[faceindices[i] * 3 ]);
indice.Add(triangle[faceindices[i] * 3 + 1]);
indice.Add(triangle[faceindices[i] * 3 + 2]);
triangle.RemoveAt(faceindices[i] * 3 + 2);
triangle.RemoveAt(faceindices[i] * 3 + 1);
triangle.RemoveAt(faceindices[i] * 3 );
}
result.Add(indice);
}

return result;

}


되는대로 짰는데 느리다. 엘리먼트 분리가 이렇게 느릴줄은..  레이어당 한번만 해주면 되는거니까 넘어가자.

분리된 이미지처리 

 static void Optimize(List<Vector3> vertices, List<int> indices)
    {
        Dictionary<int, List<int>> optimizeList = new Dictionary<int, List<int>>();
        List<int> RemoveList = new List<int>();
        List<int> changeList = new List<int>();
        for(int i =0;i<vertices.Count;i++)
        {
            for(int j= i+1;j<vertices.Count;j++)
            {
                if(Vector2.Distance(vertices[i],vertices[j])<0.0001f)
                {
                    int indi = indices.FindIndex(x => x == i);
                    int indj = indices.FindIndex(x => x == j);
                    if (indi < 0 || indj < 0) continue;
                    if (!optimizeList.ContainsKey(indi))
                    {
                        optimizeList.Add(indi, new List<int>());
                    }
                    optimizeList[indi].Add(indj);
                }
            }
        }
        foreach(var opt in optimizeList)
        {
            foreach (var removeindex in opt.Value)
            {
                indices[removeindex] =  indices[opt.Key];
            }
        }
    }

스플릿버텍스 합치기. 

리타게팅시키면서 안쓰는 버텍스 처리도 해줘야 하는데 
meshutility.optimize()가 해줘서 뺐다. 

public static void  Optimize(List<Vector2> array,int degree =5)
    {

        List<int> toRemove = new List<int>();
   
        for (int i = 1; i < array.Count - 1; i++)
        {
            Vector3 currentVertex = array[i];
            Vector3 prevVertex = array[i-1];
            Vector3 nextVertex = array[i + 1];

            Vector3 v1 = prevVertex - currentVertex;    
            Vector3 v2 = nextVertex - currentVertex;

            float acos = Vector3.Dot(v1, v2) / (v1.magnitude * v2.magnitude);
            float dif = 180.0f - Mathf.Rad2Deg * Mathf.Acos(acos);

            if (dif < degree)
            {
                toRemove.Add(i);
            }
        }
        toRemove.Sort();
        for(int i =toRemove.Count-1;i>=0;i--)
        {
            array.RemoveAt(toRemove[i]);
        }
        
    }

각도로 정점 지우기 

대충 uv까지 적용. 아직까진 매우 잘된다. 



뎁스와 관련되어서  고민중이다. 

falloff 방식의 문제점이 있는데 정확한 값이 아니라는점이다. 

모델데이터를 사용하지 않는 이상 어쩔수없는 한계점이 있긴하다만 
dlib나 opencv 관련 자료를 찾아보고 있는중인데 

페이셜랜드마크는 입력수단이기땜에 결론은 정점을 어떻게 처리하느냐가 문제이다.

 페이셜 폼이 있고 페이셜 폼에 뎁스값은 정의형태로 , 
페이스 랜드마크를 이용해서 매칭시키는 방법..이 현재는 유력하다.











한눈팔기


버텍스인덱스쪽 연습할겸 유니티 스프라이트 그리드 커팅 . 

깃헙에서 psd importer 를 구하게 되어서 , 틈틈히  2d head 제작기를 유니티로 아예 옮겨버릴까 싶다.
기존 방식과 차별점은.
1.fbx및 포스트프로세서를 돌리지 않는다는점이 가볍고. 

2. 특수한 환경임에도 맥스의 skin modifier를 써야한다는점이 합리적이지 못했는데 전용 스킨툴을 만들면 해볼만한게 많다. 

3. fbx를 위해 맥스 작업자의 손을 거쳐야하는데 유니티 전용툴이면 누구든 접근가능하다. 희망사항이지만.



 



greinerhorman , weiler atherton , sutherlandhodgman 알고리즘을 테스트 해 보고 

 필요한 기능은 planecut이라서 sutherlandhodgman에 몇가지 체크를 추가해서 대략 완성 했다. 

inout boolean부분은 weiler atherton을 참고해서 정리했는데 내 식대로 한거라 불안. 



psd 레이어위치에 맞춰 로딩하게 함. 

메시 쪼개기는 멀티엘리먼트 지원하게 수정해야겠다.

border manifold 부분의 문제






1 2 3 4 5 6 7 8 9 10 다음



메모장

Junhyuck Park
(PN/pakdragon,pakk)
MALE E-mail:pakdragon57@gmail.com