Post

2026-04-27 TIL (45일차)

2026-04-27 TIL (45일차)

프로그래밍 팁: “당장 구현”에서 “설계”로 넘어가기

부모 클래스(Inheritance) vs 인터페이스(Interface)

  • 부모 클래스 (Is-A): “아이템은 물리 액터다”처럼 공통된 속성과 기능을 물려줄 때 사용합니다. (예: 모든 아이템은 이름을 가지고 있고, 바닥에 놓일 수 있다.)
  • 인터페이스 (Can-Do): “이 물체는 상호작용이 가능하다”처럼 행위를 정의할 때 사용합니다. (예: 문, 아이템, NPC는 모두 다르지만 ‘상호작용’은 공통으로 할 수 있다.)

객체 지향의 핵심: OCP (개방-폐쇄 원칙)

  • 정의: 기존의 코드를 변경하지 않으면서(Closed), 기능을 추가할 수 있도록(Open) 설계해야 합니다.
  • 방법: 아이템을 새로 만들 때마다 Character 클래스에서 if(ItemA) else if(ItemB)를 추가하고 있다면 설계가 잘못된 것입니다. Item->Use() 처럼 부모의 함수만 호출하고, 실제 동작은 자식 클래스들이 각자 알아서 하도록(다형성) 맡겨야 합니다.



머티리얼의 UV

UV란 무엇인가?

  • 정의: 3D 모델의 표면에 2D 텍스처를 입히기 위한 2차원 좌표계입니다.
  • 좌표값: 가로(U)와 세로(V) 방향으로 0.0에서 1.0 사이의 값을 가집니다.
  • 공부 팁: 머티리얼 에디터에서 TextureCoordinate 노드가 바로 이 UV 값을 출력합니다.

핵심 노드 정의

  1. Append (어펜드):
    • 역할: 개별 숫자(Float)들을 합쳐서 벡터(Vector)로 만듭니다.
    • 예시: Float(0.5)Float(0.2)를 Append 하면 Vector2(0.5, 0.2)가 됩니다. 주로 UV 좌표를 직접 조작할 때 씁니다.
  2. Component Mask (마스크):
    • 역할: 다차원 데이터(RGB)에서 특정 채널만 골라냅니다.
    • 예시: 텍스처에서 R 채널만 뽑아내어 흑백 이미지로 활용할 때 사용합니다.

UV/노이즈에서 R값만 받고 Append를 하면?

  • 상황: 노이즈의 R(Float1) 값에 다른 값(예: G 채널이나 상수)을 Append 하여 UV 단자에 연결하면?
  • 결과: 원래의 정돈된 UV가 아니라, 노이즈의 수치에 따라 좌표가 뒤틀리는 ‘디스토션(Distortion)’ 효과가 발생합니다. 불이 일렁거리거나 물결이 치는 효과를 만들 때 사용하는 핵심 기법입니다.



ORM

언리얼 엔진에서 사용하는 ‘텍스처 패킹’ 기법입니다. 하나의 텍스처 이미지 안에 있는 RGB 채널에 각각 다른 정보를 담습니다.

  • R (Red): Occlusion (Ambient Occlusion, 주변광 차폐)
  • G (Green): Roughness (거칠기)
  • B (Blue): Metallic (금속성)

왜 이렇게 쓰나요? 텍스처를 각각 3장을 쓰는 것보다 하나로 합쳐서 쓰는 것이 메모리를 훨씬 적게 차지하고, 그래픽 카드에서 데이터를 불러오는 횟수(Draw Call)를 줄여 성능을 비약적으로 향상시키기 때문입니다.



마스터 머티리얼

  • 모든 사물에 일일이 머티리얼 노드를 새로 짜는 것은 비효율적입니다.
  • 가장 기본적인 기능(색상, 노멀, ORM, UV 조절 등)을 미리 다 짜놓은 거대한 원본 머티리얼을 ‘마스터 머티리얼’이라고 부릅니다.

머티리얼 인스턴스

  1. 파라미터화 (Parameterize): 마스터 머티리얼 내부에서 수치(Scalar)나 텍스처 노드 위에서 마우스 우클릭 후 ‘Convert to Parameter’를 선택합니다. 이름을 BaseColor, RoughnessMult 등으로 정합니다.
  2. 인스턴스 생성: 마스터 머티리얼 우클릭 후 ‘Create Material Instance’를 누릅니다.
  3. 조절하기: 생성된 인스턴스를 열면, 복잡한 노드 그래프 대신 체크박스와 슬라이더만 나타납니다. 여기서 값을 수정하면 컴파일 대기 시간 없이 즉시 화면에 반영됩니다.

효율: 게임 개발 시 90% 이상의 오브젝트는 1~2개의 마스터 머티리얼에서 파생된 인스턴스들로 처리하는 것이 성능과 작업 속도 면에서 정석입니다.

This post is licensed under CC BY 4.0 by the author.