본문 바로가기
게임 공부/게임 개발 일지

개발 도중 겪은 문제 혹은 버그 그리고 해결한 방법들

by woohyeon 2021. 8. 15.
반응형

나중의 면접을 위해 기록...

- Light 구현 도중 상수 버퍼를 사용할 일이 있었다. 상수 버퍼가 16바이트 기준 정렬되어야 한다는 것을 알고 있었지만, 변수와 변수 사이에 16바이트가 채워지지 않으면 컴파일러가 알아서 패딩 데이터를 채워줄줄 알았다. 그래서 float3 float3 타입을 연속으로 사용하였는데, 셰이더의 결과가 이상했다. 방향 벡터와 빛의 색상을 순서대로 전달한 것인데, 디버깅을 하다보니 빛의 색상이 셰이더로 이상하게 전달된다는 것을 알았다. 설정한 흰색(1, 1, 1)과 달리 노랑(1, 1, 0)이였다. 그런데 클라이언트 쪽에서 그 값은 1,1,1로 저장되어 있었다. 혹시나 싶어 메모리 뷰를 확인해 보았는데 뒤통수를 맞은 느낌이었다. 생각과 달리 float3과 float3 사이에 패딩 데이터가 채워지지 않고, 다음 float3의 첫 float 값이 땡겨져서 채워진 것이다. 그래서 두 번째 변수인 빛의 색상이 1, 1, 0이 되어 버린 것이다. 이를 확인 후 두 변수 모두 float4 타입으로 전달하니 정상적인 결과가 나왔다.  

- Spot Light 구현 도중 Light를 x축 기준(pitch) 90도 회전시키면 inner, outer cone dir이 제대로 표현이 안됨. 이 cone dir은 Light Dir(Forward vector)를 x축 기준 회전하여 만들음. 아마 light를 pitch 90도 회전했을 때 Forward Vector의 방향축이 -y축이랑 겹쳐서 y축 회전이 정상적으로 먹히지 않는 것 같음. 이것이 짐벌락인가?

- 오일러 각을 base로 하던 회전 시스템을 쿼터니언 회전으로 바꾸던 도중 이상한 현상들이 발견되었다. 며칠동안 헤맸는데 아마 쿼터니언의 곱 순서와 회전축을 잘못 설정해서 발생한 문제인 것 같다. 예상할 수 없는 결과가 발생하다보니 원인을 찾기 어려웠던 것 같다.

- 디버깅에서 메모리뷰 어떻게 사용? -> 개발 도중에 어떤 구간에서 어떤 스태틱 변수의 값이 이상하게 변했다. 스태틱 변수는 해당 영역에서만 값을 확인할 수 있어서 밖의 영역에서 값을 확인하기 어렵다. 이때 메모리 뷰를 이용하면 해당 주소의 메모리를 항상 참조할 수 있어서 어떤 부분에서 그 값이 이상하게 변경되었는지 정확히 찾을 수 있었다.   




댓글