
1. 멀티플레이 동기화는 보통 TCP일까요 UDP일까요? 그 이유를 작성해봅시다.
2. Unity Built-in Render Pipeline과 Universal Render Pipeline의 차이점은 무엇이 있을까요?
속도: UDP는 TCP보다 빠르며, 실시간 게임에서는 지연 시간이 중요한 요소입니다. TCP는 데이터의 정확한 전달을 보장하기 위해 패킷 재전송 및 순서 확인을 하므로 지연 시간이 발생할 수 있습니다.
오버헤드 감소: TCP는 연결 설정, 유지 및 종료를 포함한 많은 오버헤드가 있습니다. 반면에, UDP는 연결 설정이 필요 없으며 데이터그램을 단순히 전송합니다.
데이터 손실 감내: 게임의 많은 경우에서 약간의 데이터 손실은 큰 문제가 되지 않습니다. 예를 들어, 위치 업데이트 같은 경우에는 약간의 패킷 손실이 발생해도 다음 업데이트로 보완될 수 있습니다. TCP의 재전송 메커니즘은 이러한 경우 오히려 불필요한 지연을 초래할 수 있습니다.
그러나 중요한 게임 데이터 전송이나 초기 연결 설정, 로그인 정보 등의 전송에는 여전히 TCP를 사용할 수 있습니다.
Unity Built-in Render Pipeline과 Universal Render Pipeline (URP)의 차이점은 다음과 같습니다:
설계 철학:
Built-in Render Pipeline: 전통적인 방식으로 설계되어 있으며, Unity의 초기부터 존재한 렌더 파이프라인입니다. 사용자가 그래픽 설정을 커스터마이징할 수 있지만, 최신 그래픽 기능을 쉽게 활용하기는 어렵습니다.
Universal Render Pipeline: 새로운 세대의 렌더 파이프라인으로, 경량화와 모듈화를 통해 다양한 플랫폼에서 일관된 성능을 제공할 수 있도록 설계되었습니다.
성능 및 최적화:
Built-in Render Pipeline: 일반적으로 복잡한 그래픽 설정과 함께 성능 최적화가 어려울 수 있습니다. 특히 모바일이나 저사양 디바이스에서 성능 문제가 발생할 수 있습니다.
Universal Render Pipeline: 경량화를 목표로 하여 성능 최적화를 쉽게 할 수 있습니다. 다양한 플랫폼에서 효율적으로 동작하도록 설계되어 있으며, 저사양 디바이스에서도 좋은 성능을 발휘할 수 있습니다.
기능 및 확장성:
Built-in Render Pipeline: 기본적인 그래픽 기능을 제공하지만, 최신 그래픽 기술 (예: 쉐이더 그래프, 포스트 프로세싱 효과 등)을 활용하기에는 제한적입니다.
Universal Render Pipeline: 최신 그래픽 기능을 손쉽게 사용할 수 있도록 지원하며, 쉐이더 그래프, 포스트 프로세싱, 라이트매핑 등 다양한 최신 기능을 제공합니다.
사용자 친화성:
Built-in Render Pipeline: 설정이 복잡하고 다양한 그래픽 설정을 직접 관리해야 하는 경우가 많습니다.
Universal Render Pipeline: 설정이 비교적 간단하며, 스크립터블 렌더 파이프라인(SRP) 아키텍처를 사용하여 커스터마이징이 용이합니다.
호환성:
Built-in Render Pipeline: 기존 프로젝트와의 호환성이 높아 기존 프로젝트를 유지하는데 유리합니다.
Universal Render Pipeline: 새로운 프로젝트나 기존 프로젝트를 업그레이드하는 경우에 적합하며, 최신 Unity 버전과의 호환성이 좋습니다.
1. 네트워크 프로토콜 (IP, TCP, UDP)에 대해 설명해주세요.
1. TCP와 UDP의 차이를 설명해주세요.
2. 렌더링 파이프라인에 대해 설명해주세요.
3. 3D 공간에 있는 오브젝트들이 화면에 표현되는 픽셀로 표시되기까지의 과정을 설명해보세요.
4. 셰이더를 활용해본 경험이 있을까요? 어떻게 활용했는지 설명해주세요.
TCP와 UDP의 차이
연결 설정: TCP는 연결 지향적이고, UDP는 비연결 지향적입니다.
신뢰성: TCP는 데이터 무결성과 순서를 보장하지만, UDP는 보장하지 않습니다.
속도: UDP는 TCP보다 빠르며, 지연 시간이 적습니다.
오버헤드: TCP는 연결 설정 및 유지에 따른 오버헤드가 많지만, UDP는 적습니다.
렌더링 파이프라인은 3D 그래픽스를 2D 화면에 그리기 위한 일련의 절차입니다. Unity에서 주로 사용하는 렌더 파이프라인은 Built-in Render Pipeline, Universal Render Pipeline (URP), 그리고 High Definition Render Pipeline (HDRP)입니다. 각 파이프라인은 성능, 기능, 확장성, 호환성 측면에서 차이가 있으며, 프로젝트의 요구사항에 따라 적합한 파이프라인을 선택하여 최적의 그래픽 품질과 성능을 구현할 수 있습니다.
모델링: 3D 모델링 툴을 사용하여 오브젝트를 설계합니다. 각 오브젝트는 버텍스, 엣지, 폴리곤으로 구성됩니다.
월드 변환: 오브젝트의 위치, 회전, 크기 정보를 사용하여 월드 좌표계로 변환합니다.
뷰 변환: 카메라의 위치와 방향을 기준으로 월드 좌표를 뷰 좌표계로 변환합니다. 이는 카메라가 보는 시점을 기준으로 오브젝트를 배치하는 과정입니다.
투영 변환: 3D 좌표를 2D 화면에 투영합니다. 이 과정에서 원근감을 적용하여 멀리 있는 오브젝트는 작게, 가까이 있는 오브젝트는 크게 보이도록 변환합니다.
클리핑: 화면 밖에 있는 오브젝트나 보이지 않는 부분을 제거합니다. 이는 성능을 최적화하기 위한 과정입니다.
래스터화: 변환된 2D 좌표를 픽셀로 변환합니다. 각 폴리곤을 스캔하여 해당 픽셀을 채웁니다.
프래그먼트 셰이딩: 각 픽셀의 색상, 조명, 그림자, 텍스처 등을 계산하여 최종 색상을 결정합니다.
출력: 최종적으로 계산된 픽셀 데이터를 렌더 버퍼에 저장하고, 이를 화면에 출력합니다.