01

가장 먼저 발견한 문제는 그림자였습니다.

보시다시피 그림자가 일정한 영역 밖에는 그려지지 않죠.

Quality의 Shadow Distance를 건드려도 달라지지 않고요.


해결법은 간단했습니다.

projectionMatrix를 변경할 때 orthgraphicSize도 이에 맞게 수정하면 됩니다.

그리고 이걸 수정하니 유니티 5의 버그가 눈에 띄더군요.



[다른 건 움직이지 않고 Camera.projectionMatrix[1,2]만 수정하는 모습]



보아하니 이 문제를 겪고있는 건 저만이 아닌 것 같네요. (링크)



해결법은 자체적으로 ShadowMap을 만드는 것 뿐입니다.

아니면 버그 수정을 기다리거나요.


일단 기다리죠.



그리고 이제 벽 오브젝트 하나에서, 한 조각 이상의 벽을 만들 때.


Offset Problem

바로 오프셋 문제입니다.


CAD에서는 쉽게 되는데, 지금 해야할 것은 그 기능을 C#으로 재창조하는 거죠.





이틀간 벡터질한 끝에 성공했습니다.

덤으로 더 보기 쉽게 단면 코드도 다시 추가했습니다.


일단 이렇게 점 여러 개를 이을 수 있게되면, 여러가지 응용이 가능해지죠.




일단 타원 코드를 추가했습니다. (그리고 네, 벽 높이 조정도 할 수 있어요)

원도 타원의 일종이니 그냥 만들어 주고.

회전된 타원도 만들고 싶지만, 그건 다음에.





그리고 Debug.Log를 거의 지우고, 이 모든 작업을 100번 반복하는데 얼마나 걸리는지 확인해봤습니다.

(일단 기본 데이터는 같은 걸 썼지만, 최종적으로는 각 층이 고유한 메쉬를 가진 개체입니다.)



Coroutine 코드를 어디서든 사용할 수 있게 코드 개편을 한번 더 했고요. (그 도중에 무한 루프가 몇 번 터져서 Unity 셧다운 몇 번 되고)

그래서 중간중간 Update(프레임 시작)부터 계산 후까지 시간이 20ms가 넘으면 다음 프레임에서 다시 계산하게 했습니다.

이러니 바쁘게 계산해도 30fps는 유지가 되더군요. (60fps는 이 방법으로 안 될 것 같음... 그냥 로딩할 때의 랙이라 생각하시길)


하여튼 이렇게 타원벽, 꺾인 벽, 그냥 벽을 100번 만드는 데 1.143초가 걸렸습니다.

사실 가장 병목인 부분은 Debug.Log에요. (...)

벡터 다루면서 도배한 Debug.Log만 싹 정리해주니 시간이 몇 배로 줄었어요.



이제 다음 주까지 벽을 다룰 건지, 아니면 이제 바닥같은 걸로 넘어갈 건지죠.

일단 바닥을 만들어보죠.











Posted by Metnias
,