티스토리 뷰

🟩 오늘의 목표

  • 컴퓨터가 0과 1로 세상을 표현하는 방식인 '데이터 인코딩'의 원리를 이해한다.
  • 우리가 쓴 C++ 소스코드가 하드웨어를 움직이는 '명령어'로 변환되는 과정을 파악한다.
  • 언리얼 엔진의 문자열 시스템(FString, FText, FName)과 에셋 포맷의 기술적 배경을 습득한다.

🟧 1. 데이터의 최소 단위와 인코딩 전략

🟦 비트(Bit)와 n비트의 법칙

  • 컴퓨터가 이해하는 가장 작은 정보 단위는 비트(Bit)이며, 0과 1 두 가지 상태를 가진다.
  • 핵심 규칙 : $n$개의 비트로 표현할 수 있는 상태의 수는 $2^n$가지이다.
  • 바이트(Byte) : 8개의 비트를 하나로 묶은 단위($1 Byte = 8 Bits$)로, 총 256가지($2^8$) 정보를 표현할 수 있다.

🟦 텍스트가 데이터가 되는 과정 : 인코딩과 디코딩

  • 문자 집합(Character Set) : 컴퓨터가 인식할 수 있는 문자의 마스터 리스트이다. 현대 언리얼 개발의 표준은 전 세계 언어를 포함하는 유니코드(Unicode)다.
  • 인코딩(Encoding) : 사람이 읽는 문자를 컴퓨터의 0과 1로 바꾸는 과정이다. 언리얼 엔진은 내부적으로 UTF-16 방식을 주로 사용하여 문자열을 처리한다.
  • 디코딩(Decoding) : 컴퓨터의 이진 정보를 다시 사람이 읽는 문자로 바꾸는 과정이다. 인코딩과 디코딩의 규칙이 맞지 않으면 '글자 깨짐' 현상이 발생한다.

🟦 언리얼 엔진 전용 문자열 타입

  • FString : 편집이 자유로운 기본적인 문자열 형태다.
  • FText : 다국어 지원(로컬라이징)의 핵심이며, 전 세계 사용자에게 올바른 언어가 디코딩되도록 보장한다.
  • FName : 문자열을 고유한 ID(숫자)로 인코딩하여 저장하며, 이름표로서의 성능 최적화에 특화되어 있다.

🟧 2. 에셋의 인코딩 : 시각적 정보의 수치화

🟦 텍스처와 메시의 데이터 변환

  • 텍스처(Texture) : 각 픽셀의 색상을 비트 심도(Bit Depth)에 따라 숫자로 표현한다. 8비트 채널은 256단계, 16비트 채널은 65,536단계의 정밀도를 가진다.
  • 메시(Mesh) : 정점(Vertex)의 공간 좌표를 실수형 데이터(Float)로 인코딩하여 저장한다.
  • GPU 디코딩 : 저장된 데이터는 GPU가 시스템 버스를 통해 읽어 들인 뒤, ALU(산술논리연산장치)를 통해 위치 계산 및 화면 출력을 위한 디코딩 과정을 거친다.

 

🟧 3. 소스코드와 명령어 : 실행의 메커니즘

🟦 고급 언어와 저급 언어

  • 고급 언어: C++, Python 등 사람이 이해하기 쉬운 문법을 제공하는 언어다.
  • 저급 언어: 하드웨어가 직접 실행하는 기계어(0과 1)와 이를 1:1 대응시킨 어셈블리어를 의미한다.
  • 최적화가 극한으로 필요한 게임 개발자에게 어셈블리 코드는 하드웨어가 어떤 절차로 명령을 수행하는지 추적하는 중요한 관찰 대상이다.

🟦 컴파일 vs 인터프리터 (블루프린트의 정체)

  • 컴파일 언어(C++) : 소스 전체를 미리 저급 언어로 번역(목적 코드 생성)하여 실행 속도가 압도적으로 빠르다.
  • 인터프리터 언어 : 한 줄씩 실시간으로 해석하며 실행한다. 유연하지만 속도가 상대적으로 느리다.
  • 블루프린트 : 가상 머신 기반의 인터프리터 방식으로 작동한다. 성능을 올리기 위해 노드들을 C++ 수준으로 변환하는 '네이티브화(Nativization)' 기술을 사용하기도 한다.

🟦 링킹(Linking) : 파편화된 코드의 연결

  • 컴파일로 생성된 목적 파일(.obj)들은 아직 서로의 위치나 엔진 외부 라이브러리의 주소를 모른다.
  • 링킹(Linking)은 이 흩어진 파일들을 하나로 묶고 주소를 연결하여 최종적인 실행 파일을 만드는 단계다. 언리얼 빌드 시간이 긴 이유 중 상당수는 이 복잡한 링킹 작업 때문이다.

🟧 핵심 요약 및 주의사항

  • 데이터 단위 : 1바이트는 8비트이며, $2^n$ 법칙에 따라 비트 수가 늘어날수록 표현 가능한 정보량이 기하급수적으로 증가한다.
  • 최적화 포인트 : 블루프린트는 인터프리터 방식이므로 매 프레임 연산량이 많은 로직은 C++로 컴파일하여 실행 효율을 높여야 한다.
  • 인코딩 정합성 : 외부 에셋이나 텍스트를 가져올 때 인코딩 방식(UTF-8 등)이 엔진의 디코딩 설정과 맞지 않으면 데이터 손실이 발생할 수 있다.

 

'내일배움캠프 Unreal_7기 > 본캠프' 카테고리의 다른 글

TIL - 42일차  (0) 2026.01.27
TIL - 41일차  (0) 2026.01.26
TIL - 39일차  (0) 2026.01.22
TIL - 38일차  (1) 2026.01.21
TIL - 37일차  (1) 2026.01.20