2024-12-17_TIL

별빛에소원을·2024년 12월 17일

TeamSparta-Unreal1기-TIL

목록 보기
10/90
post-thumbnail

게임 직업군 소개

언리얼 엔진은 게임 개발을 위해 탄생한 매우 훌륭한 도구다. 그러나 게임이 완성되기 까지 단순히 엔진만 잘 다룬다고 좋은 게임이 나오지 않는다.

영화가 수 많은 전문가들의 손을 거쳐서 탄생하는 것처럼 게임 개발에도 다양한 능력을 가진 사람들이 모여 협업을 해야 좋은 게임이 탄생한다.

게임 기획자

어떤 게임을 만들지 고민하는 사람.

기획자는 사람들이 게임을 하는 이유를 어떻게 만들지에 대하여 고민을 하는 사람들이다.
게임의 스토리 라인과, 레벨 디자인, 규칙을 면밀하게 검토한다.

또한 난이도를 조정하고, 핵심 재미요소를 정의하는 것도 기획자의 중요한 역할이다.
많은 인기를 가진 게임들이 밸런스 조정이 망가져서 쇠퇴의 길을 걸었다.

아티스트(그래픽 디자이너, 애니메이터)

기획안이 나오면 눈으로 볼 수 있게 구체화 하는 사람.

컨셉 아티스트

게임의 분위기와 컨셉을 정의하는 일러스트를 그려 전체적인 톤을 잡아준다.

3D 모델러

게임 월드를 구성하는 모든 물체에 대한 3D 모델로 만든다. 많은 Asset이 존재하지만
내가 만들고자 하는 게임의 컨셉에 맞는 Asset을 찾는건 대단히 어려운 일이다.
게임의 생동감을 가져다 주는 역할을 한다.

프로그래머

기획된 규칙과, 아티스트가 만든 자산을 연결하는 사람

클라이언트 프로그래머

  • 플레이어가 직접 눈으로 보고, 손으로 조작하는 모든 상호 작용에 고나련된 부분을 구현
  • 그래픽, 사운드, UI/UX 개선
  • 퍼포먼스 최적화

서버 프로그래머

  • 온라인 게임에서 전체 체계를 안정화 하고 데이터의 일관성과 공정성을 보장
  • 해킹된 클라이언트라고 항상 가정을 하고 갖은 치트나 해킹시도등을 방어

사운드 디자이너

게임의 몰입할 수 있는 음향효과를 담당

PD

팀 전체를 지휘하는 사람.

  • 게임 스튜디오의 리더이자 CEO
  • 게임 개발은 큰 규모와 긴 기간의 프로젝트가 많다. 수십 수백이 모여서 수개월, 수년을 작업하기에 방향을 잃지 않고 출시까지 도착하려면 PD와 PD를 보좌하는 PM들의 역할이 중요하다.
  • 일정관리, 예산 조율까지 개발 외적의 모든 업무를 담당하는 포지션이다.

용어정리

월드

  • 정의
    • 레벨이 존재하는 최상위 컨테이너로 모든 액터와 구송 요소를 퐇마
    • 하나의 월드에는 하나 이상의 레벨이 포함된다.
  • 역할
    • 게임 로직의 전반적인 상태를 관리
    • 물리 시뮬레이션, 이벤트 처리, 루프를 제어
  • 특징
    • API를 통해 월드를 관리하고 상태를 변경 가능하다.
    • 레벨을 여러개 로드하고 관리 할 수 있다.

레벨

  • 정의
    • 레벨은 게임 또는 프로젝트의 하나의 Scene을 의미한다.
    • 언리얼 엔진에서 작업하는 공간을 정의하며, 월드의 구성 요소를 담고 있다.
  • 역할
    • 환경을 설계하고, 액터와 이벤트를 배치하는 데 사용된다.
    • 레벨을 조합하여 대규모 환경을 구성할 수 있다.
  • 특징
    • 레벨파일은 .umap 확장자를 가진다.
    • Type == World로 검색하면 해당 프로젝트 내 레벨 파일을 볼 수 있다

액터

  • 정의
    • 액터는 월드에 존재하는 모든 오브젝트다
  • 역할
    • 캐릭터, 조명, 카메라, 사운드, 오브젝트가 포함된다.
  • 특징
    • 액터는 위치, 회전, 크기같은 Transform을 가진다.
    • Blueprint 또는 C++로 커스텀 액터를 만들 수 있다.

  • 정의
    • 액터의 하위 클래스로, 플레이어나 AI가 조종할 수 있는 오브젝트를 뜻한다.
      • 장식물과는 다른 역할을 한다.
    • 게임의 캐릭터를 표현하는데 주로 사용된다.
  • 역할
    • 플레이어 컨트롤러의 경우 입력을 받아서 움직임과 동작을 제어한다.
    • AI 컨트롤러가 폰을 조작하여 NPC를 구현할 수 있다.
  • 특징
    • 폰은 컨트롤러에 의해 제어된다.
    • 캐릭터 클래스는 폰을 기반으로 한 확장된 클래스

좌표계


뷰포트 좌하단에는 좌표를 보여주는 기즈모가 존재한다. 언리얼은 왼손 좌표계를 이용한다.
X를 검지, Y를 중지, 엄지를 Z축으로 볼 수 있다.

케릭터를 클릭후 기즈모를 이용해 다양한 작업을 할 수 있다.

  • [w] : x,y,z 기즈모를 좌표로 이용해 이동할 수 있다.
  • [y] : x,y,z 기즈모를 회전한다.
  • [z] : x,y,z 기즈모를 Scale을 변경한다.

좌표계는 월드 좌표계 로컬 좌표계 가 존재한다.

월드 좌표계

프로그램상 월드를 구성하려면 기준점이 필요하다 원점을 기준으로 x,y,z를 구현한 것을 월드 좌표계라고 한다.

로컬 좌표계

로컬좌표계는 월드상 특정 위치에서의 좌표계를 말한다.
케릭터나 물체가 바라보는 방향에 따라서 월드축과는 상대적인 좌표계가 있어야 불필요한 연산을 줄일 수 있고, 방향값에 대해 직관적인 수치를 알 수 있기에 사용된다.


Transform

트랜스폼은 3D공간에서의 위치,방향,크기를 결정하는 값이다.


Material

표면의 재질을 결정한다. 시각적인 형태의 모든 정보를 포함하는데
빛의 반사도, 색상, 굴곡도를 표현하므로 이를 가능하게 하는 기능이다.
셰이더 코드 -> HLSL 코드로 이동해 HLSL 코드를 볼 수 있다.
HLSL 코드 탭은 직접 편집은 불가능하다.

Material Property

다음과 같은 세가지 머테리얼 프로퍼티는 머테리얼에서 어떤 입력이 활성화 되는지를 제어한다.

  • Blend Mode - 머테리얼이 배경의 픽셀과 블랜드 되는 방법을 정의한다.
  • Shading Model - 표면의 빛이 계산되는 방법을 정의한다.
  • Material Domain - 머테리얼의 용도를 결정한다. 예를 들어 해당 머테리얼이 표면의 일부인지, 라이트 함수인지, 포스트 프로세스 머테리얼인지 결정 한다.

머테리얼에 필요한 입력이 비활성화 되어있을 경우 위의 프로퍼티 중 하나 이상이 잘못 설정된 것.

Base Color

BaseColor은 머테리얼의 전반적인 색상을 정의한다. 원칙적으로 베이스 컬러는 스페큘러, 리플렉션/하이라이트 없이 표면에 반사되어 나오는 빛의 디퓨즈를 나타낸다.
현실에 적용할 경우 베이스 컬러 텍스처는 편광 필더를 사용한 촬영의 결과물과 같다. 편광은 평행 상태에서 비금속의 스페큘러를 제거한다.

Metalic

금속처럼 보이는 정도를 제어한다. 0~1사이의 어떤 값이든 될 수 있지만, 이분법적인 프로퍼티로 간주한다.

  • 비금속의 메탈릭 값은 0.
  • 금속의 메탈릭 값은 1.

Speculer

스페큘러는 표면에서 반사되는 빛의 양을 측정한다. 0 ~ 1 사이의 값이 입력되며 표면에서 반사되는 정도를 정의

  • 0 : 반사 없음
  • 1 : 완전 반사
  • 기본 설정 값은 0.5f 약 4% 반사된다.

Roughness

러프니스 입력은 머테리얼 표면의 거칠기나 부드러운 정도를 제어한다. 거친 재질에 반사된 빛은 부드러운 재질보다 여러 방향으로 퍼진다. 이 값은 리플렉션이 얼마나 희미하거나, 선명한지를 제어한다.

  • Roughness 0 : 거울과 같이 반사
  • Roughness 1 : 무광 표면

    대부분의 표면은 거칠거나, 부드러운 정도가 균등하지 않다. 러프니스는 흔히 오브젝트에 매핑해 표면에 물리적 베리에이션을 더하는 프로퍼티이다.
    Roughness Map이 필요한 Material의 예시로, 금속에 난 스크래치, 나무 바닥의 흠집, 플라스틱 지문등이 있다.

Anisotropy & Tangent

Material의 Roughness의 Anosotropy 정도와 라이트 방향을 제어한다. 이 두 입력은 브러시드 메탈 등의 애니소트로픽 효과를 재현하기 위해 사용.

애니소트로픽 및 탄젠트 입력을 사용하지 않으면 머티리얼은 아이소트로픽으로 반응. 애니소트로픽 입력값이 0일 때도 머티리얼은 마찬가지로 아이소트로픽입니다.

  • -1.f ~ 1.f 사이의 값으로 제어 할 수 있다. 0이 아니면 Anisotropy 효과가 없다.

Emissive Color

Emissive Color 입력은 Material이 빛나는 위치와 밝기를 제어한다. Maskd Texture(빛나는 영역을 제외하면 거의 검은색)을 받는 것이 이상적.
HDR 라이팅이 지원 되므로 1보다 큰 값이 허용된다.

Opacity

반투명 블랜드 모드가 선택되면 활성화 되며, 반투명, 애디티브 및 변조된 Material에 사용된다.

  • 0.f 은 완전히 투명한 Material
  • 1.f 은 완전히 불투명한 Material
  • 0.f ~ 1.f은 반투명 Material
    불투명 및 마스크드 블렌드 모드는 서브서피스 셰이딩 모델 중 하나를 사용할 때도 Opacity를 사용

OpacityMask

OpacityMask는 Opacity와 비슷하지만, Masked blend Mode때만 사용이 가능하다.
Opacity입력과는 다르게 부분적이거나 중간 정도인 투명도를 허용하지 않는다. 사용시 Material영역은 완전히 보이거나, 완전히 보이지 않는다. 따라서 철망이나 쇠사슬 같은 복합적인 입체 표면을 정의하는 Material을 작업할 때 유용하다.

Opacity 값이 0.5f 설정된 경우 결과는 다음과 같다.

  • Opacity Mask Clip Value < Pixel은 완전히 보이게 된다.
  • Opacity Mask Clip Value > Pixel은 투명해진다.

Normal

개별 Pixel의 Norma즉 Pixel의 방향을 수정하여 표면에 유의미한 물리적 디테일을 더하는데 사용하는 Normal Map을 받는다.

같은 StaticMesh를 사용하는 두 무기는 NormalMap을 사용하여 더욱 디테일하게 표현할 수 있다.
표면에 실제로 렌더링 되는 것 보다 더 많은 폴리곤이 렌더링 되는 듯한 착각을 불러일으킨다.


실습

오늘 배운 내용을 가지고 머테리얼을 만들고, 수정하고, 오브젝트를 배치하며 월드를 꾸며 보았다
위의 사진은 악마소환을 컨셉으로 한 사진이다.

위 사진은 머테리얼을 실습한 과정중에 만든 것이다.
맨처음 생각한건 검게 발광하는 구체다 소환되는 마왕 주변에 검게 발광하는 알 수 없는 구체라니 멋지다고 생각했다. 그래서 검은색으로 만들기 위해 색상을 변경하고 넣어봤는데 조명과 어울리지 않아 붉은색으로 변경했다.

소환된 악마의 붉게 번들거리는 표면은 영상을 찾아 학습 후 적용하였다.


BurningMap과 BaseMap은 서로 다른 텍스쳐를 가진다. BurningMap에서 임의 값과 멀쩡한 나무의 값을 Blend해서 나온값과 탄나무의 값을 HeightLerp해서 BaseColor에 입력된다. 그럼 탄부분의 텍스쳐와
섞여져 타고있는거 같은 모습이 나오게된다.

이때 붉은 부분을 빛나게 하기 위해서 BaseMap에 BlendOverlay 값과 임의값과 곱해서 Emissive Color에 입력시키면 붉게 타는듯한 텍스쳐가 나오게 된다.

모델링의 Paint기능을 활용해서 붉은색으로 칠해주고 VertexColor를 HeightLerp의 TransitionPhase의 입력값으로 넣어주면 더욱 선명하게 변한다.


노말맵은 노말Texture의 값을 노말맵 반대방향값과 FlatternNormal의 입력을 해주면 바깥부분부터 붉게 타오르는 모습을 확인할 수 있다.

FlatternNormal과 Flatness값은 강의를 따라하긴 했지만 잘 이해하지 못하였다.

추후 다시 찾아보기로 하자.

profile
취미로 게임하는사람

0개의 댓글