viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec86fa11d0283110260b998d7cfa8997b9276523871b7241b8f31e763c3d9ce1607674b32e6869950bc8067b7f3572fc2e8ad2033624

될지 안될지 몰라서 일단 윗면만 메쉬들을 합해줬음.

되는거 확인했으니깐 나머지도 작업해야 할 듯


Greedy meshing

이건 사실 꽤 간단함.

내가 제대로 했는지는 모르겠지만, 일단 내가 한 방법은

블록 순회중

1. x+방향으로 최대한 합쳐주고, 

2. 그 후에 합친 블록 전부에서 z+방향으로 추가가 가능할 때, z+방향으로 하나씩 나아가며 합쳐줌

1단계에서  5x1의 블록으로 합쳤다면, 

2단계에서는 5x2 -> 5x3 -> 5x4 이런식으로 늘려줌. 


합쳐진 블록은 "메쉬를 생성했음"으로 표시해주고, 윗면이였다면 그 블록은 앞으로 윗면 메쉬 생성을 하지 않음


나는 블록의 변형이 가능하기 때문에, 변형이 될 가능성이 있는 블록(4방향 옆에 하나라도 블록이 없다면)은 다른 블록과 합쳐지는게 불가능하도록 함


기존 코드에서 크게 고칠 부분도 딱히 없었고, 금방 한듯


텍스쳐 입히는게 문제였음


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec86fa11d0283110260b998d7cfa8997b9276523871b7241b8f31e763c3d9ca535231db5296b6f279832edf64ffd32eb0c0a8d4af371ae950367


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec86fa11d0283110260b998d7cfa8997b9276523871b7241b8f31e763c3d9ca535231db5296b6f279832edf64ffd66ee5f5b821cf322aebdda72


이 하나의 청크가


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec86fa11d0283110260b998d7cfa8997b9276523871b7241b8f31e763c3d9ca535231db5296b6f279832edf64ffd30eb5d09861da771aef6e02b


버텍스 단 4개!



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec86fa11d0283110260b998d7cfa8997b9276523871b7241b8f31e763c3d9ca535231db5296b6f279832edf64ffd36ee5800d61af125ae514d58


텍스쳐 더러워지는건 밉맵 관련 문제라는데 산넘어 산인듯..




메쉬가 여러개가 하나로 합쳐졌기 때문에 단순히 텍스쳐를 입히면 한칸짜리 블록이 늘어나서 맨 윗 gif처럼 됨.


만약 uv가 0,0 ~ 1,1로 고정되는, 블록 하나당 텍스쳐 하나인 시스템이면 단순히 반복모드로 설정하면 된다고 함.


근데 텍스쳐 아틀라스로 하나의 큰 텍스쳐로 묶어서 등록시켜줬기 때문에 따로 쉐이더 내부에서 uv를 잡아줘야 했음.




진짜 쉐이더 1도 모르는데 어떻게든 해냄

유니티 처음했을 때 딱 이 기분이였던것 같음 ㅋㅋ


인터넷에 찾아보면 어차피 좌표 1마다 텍스쳐가 반복되야 하기 때문에 버텍스의 소숫점부분이 곧 uv좌표와 일치한다는 내용이 있었고, 이해는 했음.

근데 윗면일때는 버텍스의 x,z값으로 uv좌표를 구해야 하고, 옆면일때는 y,z 또는 x,z값으로 uv좌표를 구해야 하잖아


처음에는 if를 이용해서 구분했고, 사실 이대로 가도 됐을 것 같긴 함.

근데 다른부분에서 버그가 일어났는데, 나는 여기문제인줄 알고 이 방법을 포기하고 다른방법을 찾았음.



쉐이더에 입력되는 uv좌표를 이용해서 실제 메쉬(0,0 ~ 5,3)에서의 위치를 (0,0~1,1)사이의 비율 값으로 구함, 

실제 메쉬크기와 크기가 같아지도록 조정하고 (0,0 ~ 5,3), 그 때의 위치의 소숫점 부분을 uv좌표로 사용했음.


그걸 위해서 uv좌표, 오프셋, 텍스쳐 크기, 합친 블록의 양 ex)5x3 이 정보를 모두 쉐이더에 보내줘야 했는데, 뭔가.. 이래도 되나 싶긴 함.

사실 정확히 어떤 값들이 오고가는지조차 모르겠어서 괜히 빙 돌아간것 같기도 함.



쉐이더만 6시간 잡고 있었는데 앓던 이가 빠진 기분임

좋은 방법 있으면 제발 알려줘 머리가 너무 아파