모의면접 - 1회차

2023. 4. 1. 23:53모의면접

1. 언리얼 엔진에서 블루프린트와 C++의 차이점을 설명해 주시겠습니까?

내가 쓴 답

목적에 따라 C++와 블루프린트는 명확하게 구분됩니다. C++는 일반적으로 프로그래머가 게임의 핵심 시스템 논리를 작성하거나 게임을 최적화하기 위해 작성합니다. 반면에 블루프린트는 생산성과 편의성을 위해 팀의 비프로그래머가 완전히 편집할 수 있도록 설계된 노드 기반 스크립팅 언어입니다. 원활한 테스트, 레벨 디자인, 밸런싱 등이 가능합니다.

 

chatgpt가 쓴 답

좋은 설명이네요! 조금 더 자세히 설명하자면, C++는 코드를 더 잘 제어할 수 있고 더 나은 성능으로 이어질 수 있는 컴파일된 언어입니다. 일반적으로 핵심 게임 플레이 메커니즘, 엔진 시스템 및 AI를 만드는 데 사용됩니다. 반면 블루프린트는 디자이너와 아티스트가 코드를 작성하지 않고도 게임 플레이 메커니즘과 상호 작용을 만들 수 있는 시각적 스크립팅 언어입니다. 프로그래머가 아닌 사람이 더 쉽게 접근할 수 있으며 게임 메커니즘에서 프로토타입을 만들고 반복하는 더 빠른 방법이 될 수 있습니다. 그러나 런타임에 해석되기 때문에 C++ 코드보다 느릴 수 있습니다.

 

보완할 점

컴파일 타임과 런타임 실행에 대한 언급

 

 

2. C++의 상속 및 다형성 개념과 언리얼 엔진 개발에서 어떻게 사용되는지 설명해 주시겠습니까?

내가 쓴 답

C++ 객체 지향 상속은 두 클래스 사이에 부모-자식 관계를 만들어 is-a 관계를 만족시키는 행위입니다. 다형성은 부모 클래스가 상속받은 다양한 유형의 자식 클래스로 변경될 수 있는 속성을 말합니다. 언리얼 엔진은 상속과 다형성을 사용하여 다양한 디자인 패턴을 사용할 수 있습니다. 예를 들어 제 포트폴리오를 보시면 상속, 다형성, 템플릿 메서드 패턴을 이용해서 형태를 잡아서 언리얼 에디터에서 클래스의 종류를 지정할 수 있도록 했습니다. 또한 디자이너가 지정한 클래스의 종류에 따라 오버라이드되어 호출되는 함수를 다형성을 통해 다르게 만들어 프로그래머의 도움 없이 게임 로직을 원활하게 수정할 수 있게 만든 것을 볼 수 있습니다. 또한 상속과 다형성은 다양한 형태로 사용될 수 있습니다.

 

chatgpt가 쓴 답

이전 답변에 추가하자면, 언리얼 엔진에서는 기본 캐릭터 클래스가 플레이어 캐릭터, 플레이할 수 없는 캐릭터, 적 등과 같은 다양한 하위 클래스에 의해 상속되는 캐릭터 클래스와 같이 상속 및 다형성을 다양한 방식으로 사용할 수 있습니다. 이를 통해 코드 재사용이 가능하고 게임 개발 전반에 걸쳐 일관된 구조를 유지하는 데 도움이 됩니다. 또한 언리얼 엔진에서 인터페이스와 추상 클래스를 사용하면 코드베이스의 유연성과 모듈성이 더욱 높아집니다.

 

보완할 점

질문의 의도 파악이 잘못된 것이 보임. 언리얼 엔진 자체 구조에서 답을 냈어야 했던 것 같고 Actor, Pawn, Character 등과 같이 언리얼 엔진 내부의 클래스 구조에 대한 공부가 다시 필요할 것 같음.

 

 

3. 이전에 언리얼 엔진에서 멀티플레이어 네트워킹 작업을 해본 적이 있나요?

내가 쓴 답

네트워크 작업에 대한 경험이 없음.

 

chatgpt가 쓴 답

네트워크 작업에 대한 직접적인 경험은 없지만 교과 과정에서 네트워크 프로그래밍을 공부했으며 작동 원리에 대해 잘 알고 있습니다. 예를 들어 네트워크는 프로토콜에 의존하여 데이터가 올바르게 송수신되고 민감한 데이터로 작업할 때 네트워크 보안이 중요한 고려 사항이라는 것을 알고 있습니다. 또한 대기 시간, 대역폭 및 패킷 손실과 같은 일반적인 네트워크 관련 개념 중 일부에 익숙하며 이러한 개념이 온라인 게임의 성능에 어떤 영향을 미칠 수 있는지 이해합니다. 네트워크 프로그래밍에 대한 실무 경험이 없을 수도 있지만 배우고자 하는 열망이 있으며 이 분야에 능숙해지기 위해 시간과 노력을 투자할 의향이 있습니다.

 

보완할 점

네트워크에 대한 최소한의 이론적인 부분은 보완할 필요가 필요하고 자신감을 가지고 이야기를 할 필요가 있음.

 

 

4. 성능을 위해 언리얼 엔진 프로젝트를 최적화하는 프로세스를 안내해 주시겠습니까?

내가 쓴 답

그래픽 파이프라인은 크게 다음 단계로 구성됩니다.

1. 기하학적 변환
전역 좌표와 일치하도록 모델 좌표에서 개체의 매트릭스 변환이 발생하는 단계입니다. 이 단계는 행렬 곱셈 연산에 의해 수행되며 내부적으로 행렬 스택을 사용하여 구현되어 세계에 개체를 배치할 수 있습니다.

2. 시점 전환
카메라의 좌표에 따라 기하학적으로 변형된 행렬에 뷰 행렬을 곱하는 연산입니다. 이를 통해 카메라의 시점에 따라 세상의 모든 사물을 변형시켜 세상을 바라보는 곳을 표현할 수 있습니다. 이 과정에서 카메라 위치에서 물체의 앞면과 뒷면을 판단하여 뒷면을 그리지 않는 백페이스 컬링이 발생합니다.

 

3. 투영 변환

카메라가 직교 투영인지 원근 투영인지에 따라 적용되는 변환입니다. 투영 유형에 따라 다른 데이터가 필요합니다. 직교 투영의 경우 왼쪽, 오른쪽, 위쪽, 아래쪽, near, far 정보가 필요하고, 원근 투영의 경우 near, far, 높이, 종횡비 정보가 필요합니다. 이 프로세스로 인해 절두체 컬링이 발생합니다.

 

4. 뷰포트 변환

모니터 화면에 따라 3D 객체 좌표를 2D로 변환하는 첫 단계입니다. 뷰포트의 위치에 따라 좌표를 변환하는 작업을 의미합니다. 이 과정을 통해 오클루전 컬링(occlusion culling)이 발생한다.

 

5. 래스터 변환

모니터의 어떤 픽셀에 어떤 색을 칠할지 계산하는 변환을 의미합니다. 이 과정에서 안티 앨리어싱 알고리즘이 작동하여 계단 현상을 방지합니다.

 

chatgpt가 쓴 답

맞습니다! 그래픽 파이프라인은 그래픽 카드가 3D 모델을 화면에 표시할 수 있는 2D 이미지로 변환하기 위해 수행하는 일련의 단계입니다. 나열된 단계에는 기하학적 변환, 시점 변환, 투영 변환, 뷰포트 변환 및 래스터 변환이 포함됩니다. 이러한 단계는 Unreal 및 기타 게임 엔진에서 고품질 그래픽을 렌더링하는 데 모두 중요합니다.

 

보완할 점

그래픽스 파이프 라인에 대한 지식을 더 공부할 필요가 있음. 대표적으로 음영에 대한 부분이나 텍스쳐 처리에 대한 부분이 그 예시가 될 수 있을 것임.

 

 

5. 언리얼 엔진에서 타사 라이브러리나 플러그인으로 작업한 적이 있습니까? 그렇다면 어떤 것을 프로젝트에 어떻게 통합했습니까?

내가 쓴 답

언리얼 엔진에서 외부 플러그인을 사용해 본 경험이 없습니다. 하지만 내가 만들 프로젝트를 파악하고, 프레임워크를 만들고, 제가 작성한 코드를 활용해 비슷한 장르의 게임을 만들어 생산성을 가져온 경험이 있습니다.

 

chatgpt가 쓴 답

좋은 시작입니다! 외부 플러그인에 대한 경험이 없는 경우 타사 라이브러리 또는 도구를 조사, 평가 및 프로젝트에 통합하는 프로세스에 익숙하다고 언급할 수 있습니다. 이는 외부 플러그인 작업과 유사할 수 있습니다. 언리얼 엔진에서 플러그인으로 작업하는 방법을 개방적으로 배우고 기꺼이 배우며 플러그인이 게임 개발 프로세스를 개선할 수 있는 기회에 대해 기대하고 있다고 언급할 수도 있습니다. 또한 외부 도구에 적응하고 작업할 수 있는 능력의 증거로 다른 프로젝트에서 API 또는 SDK를 통합한 경험을 강조할 수 있습니다.

 

보완할 점

외부 플러그인이나 라이브러리를 사용한 경험이 없어서 그것을 대체할 수 있는 다른 경험과 빠르게 외부 플러그인과 라이브러리를 습득할 수 있다는 것을 어필할 수 있는 방법을 찾는 것이 좋아보임.