[Unity/3D] 화면 크기 조절 시 RenderTexture의 오브젝트가 뚫리는 현상

지즈·2025년 4월 5일
0

Unity

목록 보기
15/17

창 모드에서 화면 크기를 줄이자 오브젝트가 마치 카메라에 뚫린 것처럼 렌더링되지 않는 현상을 발견했다.
오브젝트가 카메라의 near clip plane을 넘어선 것처럼 보였고, 자연스럽게 이 값부터 의심하게 되었다. *near plane이란 카메라가 렌더링을 시작하는 가장 가까운 거리다. 이 값보다 가까이 있는 오브젝트는 시야에 들어오지 않으며, 화면상에서 잘려 보이게 된다.

그래서 의심되는 near 값을 줄여보았다. 0.3에서 0.01까지 줄이자 오브젝트는 정상적으로 렌더링되었고, 문제는 해결된 듯 보였다.
하지만 찜찜했다. 화면의 해상도를 줄였다고 해서 near plane 값이 바뀌는 것도 아니고, 오브젝트가 스스로 카메라 안으로 파고든 것도 아닌데, 왜 이런 일이 벌어진 걸까?


확인을 위해 여러 값을 디버그 출력해보았다.
카메라의 nearClipPlane, projectionMatrix, transform.position,
그리고 렌더링되지 않던 오브젝트의 transform.position도 함께 확인했다.

그 결과 near 값도, projection matrix는 변하지 않았지만, 디버그로 찍은 카메라의 위치와 오브젝트의 위치가 둘 다 해상도를 줄일 때마다 값이 변하고 있었다.

transform.position은 월드 좌표 기준인데, 해상도 줄였다고 오브젝트나 카메라가 실제로 움직이는 건 말이 안 됐다.
그러다 문득, 이 오브젝트들이 UI 하이어라키의 자식이라는 사실이 떠올랐다.

해당 오브젝트들과 카메라는 Canvas 안쪽 이미지의 자식 오브젝트였고, 이 이미지는 UI 상에서 Canvas Scaler의 설정에 따라 화면 크기에 비례해서 자동으로 크기 조절되고 있었던 것이다.
즉, 화면을 줄이면 부모 오브젝트(이미지)의 크기가 바뀌고, 자식인 오브젝트와 카메라도 그 영향을 받아 월드 좌표 위치가 변경되고 있었다.

결국, 카메라가 실제로 움직여 near plane보다 가까운 위치까지 오브젝트가 다가간 것이며,
문제의 원인은 해상도나 렌더 텍스처의 해상도가 아닌, UI의 계층 구조와 Canvas의 자동 스케일링 설정이었다.

이 경험을 통해 다시 한 번, UI 안에 물리 오브젝트나 카메라를 넣을 때는 주의해야 한다는 걸 배웠다.
특히 Screen Space - Overlay나 Scale With Screen Size와 같은 UI 설정은 예상치 못한 결과를 초래할 수 있다.

실제로 렌더 텍스처, Z-buffer, 카메라 매트릭스 등 여러 요소들을 살펴봤지만, 핵심은 생각보다 단순하고 소소한 실수였다.
하지만 이 과정을 통해 렌더링 시스템과 UI 동작 방식에 대한 이해를 더 깊게 할 수 있었다.

profile
클라이언트 개발자가 되는 그 날까지 킵 고잉

0개의 댓글