개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요!

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [유니티 어필리에이트 프로그램] 아래의 링크를 통해 에셋을 구매하시

www.youtube.com

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 유니티와 VS2022를 함께 사용하는 방법과 새로 추가된 기능을 알아봅시다.

 

사용 엔진 버전 : 2021.3

 

타임라인

0:00 인트로

0:09 VS2022 설치

0:56 유니티와 VS2022 연결

1:23 VS2022 테스트

2:25 아웃트로

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 유니티와 비주얼 스튜디오 2022를 함께 사용하는 것에 대해 알아보겠습니다.

VS2022 설치

먼저 비주얼 스튜디오 2022를 설치해야 합니다.

구글에서 비주얼 스튜디오 2022를 검색해서 가장 상단에 표시되는 Visual Studio 2022 IDE 페이지를 선택합니다.

설치 파일을 다운로드 받고 실행합니다.

그 다음에는 워크로드에서 필요한 개발 도구를 선택하면 됩니다.

우리는 유니티나 언리얼로 게임 개발을 할 예정이기 때문에 아래로 내려서 게임 카테고리에 있는 [Unity를 사용한 게임 개발] 도구와 [C++를 사용한 게임 개발] 도구를 선택합니다.

그리고 [설치] 버튼을 눌러서 설치를 진행합니다.

설치가 완료된 다음에는 재부팅을 한 번 해줍니다.

유니티와 VS2022 연결

비주얼 2022 설치와 재부팅이 완료된 다음에는 유니티 허브를 실행하고 새 프로젝트를 생성합니다.

프로젝트 생성이 완료된 다음에는 에디터 상단 메뉴 바에서 [Edit > Preferences] 항목을 선택해서 Preferences 창을 열어줍니다.

그리고 왼쪽의 리스트에서 External Tools 항목을 선택하고 External Script Editor로 설치한 Visual Studio Community 2022를 선택해줍니다.

VS2022 테스트

연결이 완료된 다음에는 새 스크립트를 생성하고 더블클릭해서 스크립트 에디터를 엽니다.

그러면 새로 연결된 비주얼 스튜디오 2022로 스크립트 에디터가 열리는 것을 볼 수 있습니다.

코드를 작성해보면 당연하게도 이전 비주얼 스튜디오와 거의 같게 동작하지만 2022에서 새로 도입된 기능이 있습니다.

바로 작성중인 코드를 기반으로 뒤에 작성할 코드를 추천해주는 기능입니다.

추천받은 코드를 사용하기 위해 탭 키를 눌러주면 바로 자동으로 코드가 완성됩니다.

물론 작성하려는 코드와 완벽하게 일치하게 코드를 추천해주지는 않기 때문에 조금씩 수정하면서 작성할 필요는 있지만 간단한 코드의 경우에는 거의 들어맞기 때문에 조금씩 살피면서 작업해야 합니다.

그래도 며칠간 사용해본 경험으로는 처음에는 엉뚱한 코드를 추천해주는 경우가 꽤 있었지만 어느 정도 사용하다보면 어떤 코드를 추천해야 하는지 데이터가 쌓여서 조금씩 정확도가 올라가는 것으로 보입니다.

아웃트로

생산성 향상을 위한 자동완성 기능에 관심이 있다면 비주얼 스튜디오 2022를 한 번 사용해보는 것도 좋을 것 같습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

 

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/join

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 언리얼 5.1에서 개선되는 나나이트를 프리뷰해보겠습니다.

 

사용 엔진 버전 : 5.1

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 짧게 아직 개발중인 언리얼 5.1 버전의 나나이트를 프리뷰해보겠습니다.

5.0 나나이트

전에 올린 나나이트 영상에서처럼 언리얼 5.0의 나나이트는 몇 가지 제약사항이 있었습니다.

바로 애니메이션이나 모프타깃, 머리티얼을 이용한 월드 포지션 오프셋처럼 메시가 변형되는 경우에는 나나이트를 적용할 수 없다는 것이었습니다.

특히 월드에 폴리지로 배치되는 풀이나 나무는 일반적으로 스태틱 메시지만, 나뭇잎, 가지, 풀이 바람에 흔들리는 효과를 주기 위해 머티리얼에서 메시를 변형시키기 때문에 나나이트 제약 사항에 따라 나나이트를 적용할 수 없었습니다.

5.1 나나이트

그런데 언리얼 5.1 버전을 확인한 결과 다음 버전부터는 폴리지에도 나나이트를 사용할 수 있게 되었습니다.

이 폴리지들을 보면 마치 바람에 흔들리듯이 미세하게 움직이는 것을 볼 수 있습니다.

이것은 머티리얼을 이용한 메시 변형으로 언리얼 5.0에서는 나나이트 적용이 불가능합니다.

하지만 이중에는 나나이트가 적용된 폴리지가 숨어있습니다.

뷰 모드를 나나이트 시각화로 바꿔보면 어떤 녀석이 범인인지 알 수 있습니다.

다시 한 번 가까이 가서 확인해보면 나나이트가 적용되고 있음에도 머티리얼의 월드 포지션 오프셋에 따라서 폴리지의 흔들림이 표현됨을 확인할 수 있습니다.

그리고 오픈 월드 맵에서 폴리지로 배치되는 모습도 볼 수 있습니다.

아웃트로

이번 영상에서는 언리얼 5.1 나나이트에서 새로 지원되는 기능을 프리뷰해보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/join

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 유니티 씬 뷰 조작법에 대해서 알아보겠습니다.

 

사용 엔진 버전 : 2021.3

 

타임라인

0:00 인트로

0:16 준비

0:33 씬 기즈모

1:03 씬에서의 이동 방법

2:45 아웃트로

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번 영상에서는 유니티의 게임 오브젝트와 컴포넌트에 대해서 알아보도록 하겠습니다.

게임 오브젝트

게임 오브젝트는 유니티 엔진에서 가장 중요한 개념이며, 씬에 배치되는 가장 기본 단위의 오브젝트입니다.

한마디로, 캐릭터나 바닥에 떨어진 아이템, 배경으로 배치된 건물이나 소품, 폭발하면서 발생하는 이펙트, 빛을 밝히는 광원, 모든 장면을 찍는 카메라까지 씬 안에 배치되는 모든 것은 게임 오브젝트입니다.

그리고 이 게임 오브젝트에 어떤 컴포넌트가 추가되느냐에 따라서 게임 속에서 그 게임 오브젝트의 역할이 결정되는 구조입니다.

한마디로 게임 오브젝트는 기능을 구현하는 컴포넌트들을 담는 하나의 컨테이너 역할을 하는 것입니다.

게임 오브젝트는 기본적으로 이름, 태그, 레이어를 가지고 있는데 이것을 이용해서 나중에 원하는 오브젝트를 찾는 등의 처리를 할 수 있습니다.

컴포넌트

컴포넌트는 게임 오브젝트에 붙일 수 있는 다양한 기능을 가진 구성요소입니다.

앞서 이야기했듯이 비어있는 게임 오브젝트에 어떤 컴포넌트를 붙이느냐에 따라서 그 게임 오브젝트의 역할이 달라집니다.

간단한 예시를 들기 위해서 빈 게임 오브젝트를 하나 만들어 보겠습니다.

하이어라키 뷰에 우클릭 한 뒤 Create Empty 메뉴를 선택합니다. 이것은 비어있는 게임 오브젝트를 만든다는 의미입니다.

새로 생성된 게임 오브젝트를 보면 트랜스폼 컴포넌트가 붙어있는 것을 볼 수 있습니다.

비어있는 게임 오브젝트를 만들겠다고 했는데 왜 트랜스폼 컴포넌트가 붙어있는지 의문이 들 수도 있습니다.

유니티 엔진에서 트랜스폼 컴포넌트는 모든 게임 오브젝트에 기본 컴포넌트로 반드시 부착되어 있도록 되어 있으며 게임 오브젝트로부터 제거할 수 없게 되어 있습니다.

트랜스폼 컴포넌트는 이 게임 오브젝트가 씬의 어느 위치에 어떻게 회전되어서 어떤 크기로 배치되어 있는지를 결정합니다.

그럼 게임 오브젝트에 컴포넌트를 추가하는 방법을 배우기 위해서 방금 만든 빈 게임 오브젝트에 카메라 컴포넌트를 부착해서 새로운 카메라로 만들어보겠습니다.

컴포넌트를 추가할 게임 오브젝트를 선택하고 인스펙터창에서 Add Component 버튼을 누르면 게임 오브젝트에 추가할 수 있는 컴포넌트들의 목록이 보입니다.

이 중에서 게임 오브젝트에 추가할 컴포넌트를 찾아서 선택하면 됩니다.

하지만 이 상태로는 카메라 컴포넌트를 빠르게 찾기 어렵기 때문에, 검색창에 camera를 검색하여 선택합니다.

그러면 비어있던 게임 오브젝트 자리에 카메라 모양이 생기며 게임 오브젝트가 카메라가 된 것을 확인할 수 있습니다.

이렇게 유니티에서 제공하는 기본적인 컴포넌트 외에도 개발자가 직접 컴포넌트를 만들어서 게임 오브젝트에 붙일 수도 있습니다.

대부분의 실제 게임 기능을 하는 시스템들은 이런 커스텀 컴포넌트로 만들어지고 게임 오브젝트에 추가됩니다.

커스텀 컴포넌트를 만드는 방법은 프로젝트 뷰에서 우클릭한 뒤 Create > C# Script 항목을 선택하는 것입니다.

그러면 New BehaviourScript라는 이름으로 C# 스크립트 파일이 생성됩니다.

이렇게 만든 컴포넌트는 보통 용도에 맞게 이름을 지어줍니다.

커스텀 기능이 만들어지는 예시를 위해서 만든 스크립트를 더블 클릭해서 스크립트 에디터를 엽니다.

그리고 업데이트 함수에서 스페이스 바를 누르면 간단한 로그를 출력하도록 코드를 작성하겠습니다.

코드를 저장하고 에디터로 돌아갑니다.

이렇게 생성한 컴포넌트를 다른 컴포넌트와 마찬가지로, 게임 오브젝트를 선택하고, Add Component 버튼을 누른 뒤, 추가할 컴포넌트의 이름을 검색해서 게임 오브젝트에 붙일 수 있습니다.

그리고 게임을 플레이하고 스페이스 바를 누르면 작성한 코드대로 로그가 출력됩니다.

이런 간단한 예시를 확장해서 앞으로 여러분들이 게임에 필요한 기능들을 만들어 나가는 방식으로 개발을 하게 되는 겁니다.

아웃트로

이번 영상에서는 유니티의 게임 오브젝트와 컴포넌트에 대해서 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/join

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 언리얼 엔진 5의 핵심인 나나이트 가상화 지오메트리 시스템에 대해서 알아봅시다.

 

사용 엔진 버전 : 5.0.3

 

타임라인

0:00 인트로

0:09 나나이트란?

0:34 나나이트의 기본 원리

2:55 나나이트의 제약

3:10 나나이트 메시 임포트

4:11 나나이트 시각화

5:51 나나이트 활성화

6:33 아웃트로

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 나나이트 가상화 지오메트리 시스템에 대해서 알아보겠습니다.

나나이트란?

나나이트란 새로운 내부 메시 포맷과 렌더링 기술을 사용하여 픽셀 스케일의 디테일과 다수의 오브젝트를 렌더링하는 언리얼 엔진 5에 새로 도입된 가상화 지오메트리 시스템입니다.

나나이트 지오메트리를 사용하므로써 우리는 ZBrush에서 스컬핑한 하이폴리 메시나 3D 스캔을 통해 제작된 메가 스캔 모델처럼 최소 수백만 개의 폴리곤으로 만들어진 영화 품질의 아트를 퀄리티 손실없이 사용할 수 있게 됩니다.

나나이트의 기본 원리

먼저 나나이트 가상화 지오메트리 시스템의 기본적인 원리를 가볍게 설명해 보겠습니다.

나나이트에서는 엄청나게 많은 수의 트라이앵글 중에 일정 수를 클러스터라는 단위로 묶어줍니다.

이렇게 묶인 클러스터는 또 다시 몇 개를 묶어 부모 클러스터로 만듭니다.

이런 과정을 나나이트 시스템에서 자동으로 처리합니다.

이렇게 만들어진 클러스터들을 카메라가 바라보는 시점에 따라서 컬링하는 것입니다.

일반적인 오클루전 컬링은 그리지 않을 대상을 오브젝트 단위로 판별합니다.

그래서 메시가 겹쳐있다고 하더라도 조금이라도 보이면 오브젝트 전체를 렌더링하고 그 위에 그 오브젝트를 가릴 오브젝트를 덮어씌워 렌더링합니다.

하지만 나나이트에서는 앞에서 말한 클러스터를 이용해 카메라에 보이는 클러스터만 렌더링하고 겹쳐져서 가려진 부분은 나나이트가 컬링해서 렌더링하지 않도록 처리합니다.

그렇기 때문에 가려진 오브젝트더라도 오브젝트 전체를 그려야 하는 오클루전 컬링과 달리 카메라에 보이는 클러스터만 그리면 되기 때문에 성능 상 이점이 훨씬 많습니다.

다만 여기서 유의해야할 점은 나나이트에서 클러스터 컬링을 처리할 때 표면 사이의 거리가 너무 가깝게 많이 겹쳐있으면 오버드로 판정으로 인해 소모하는 비용이 커지고 퍼포먼스가 저하될 수 있다는 점입니다.

다시 원래 클러스터 이야기로 돌아와보겠습니다.

이렇게 클러스터를 묶어서 트리 구조로 만들면 카메라와의 거리에 따라 어떤 클러스터 묶음을 보여줄 지 나나이트가 자동으로 선택하고 그리지 않아도 되는 디테일 단계는 메모리에 저장하지 않도록 처리합니다.

한마디로 자동으로 LOD가 처리되는 겁니다.

일반적인 LOD는 거리에 따라 오브젝트의 퀄리티를 떨어뜨리기 위해서 퀄리티를 낮춘 모델을 직접 만들어야 했습니다.

하지만 나나이트 시스템에서는 로우 퀄리티의 메시를 직접 만들고 거리에 따른 LOD 설정을 수동을 할 필요가 없으며 LOD가 자동으로 처리되며 LOD가 전환될 때 퀄리티 손실이 거의 발생하지 않습니다.

그리고 하이퀄리티 메시를 거의 그대로 사용하기 때문에 노멀맵 텍스처를 사용해서 디테일을 표현할 필요가 없습니다.

이렇게 수동으로 노멀맵을 굽고 LOD를 적용하기 위해 작업하는 등의 최적화를 위한 수동 작업을 배제함으로써 실제로 게임에 들어가는 아트 작업에만 집중할 수 있게 되는 겁니다.

아주 간단하게 설명한 나나이트 가상화 지오메트리의 기본 원리는 이렇습니다.

물론 더 많은 내용들이 존재하지만 나나이트의 전체적인 내용을 다루려면 굉장한 분량의 영상이 되버릴 것이기 때문에 기본 원리에 대한 설명은 여기서 마치도록 하겠습니다.

나나이트 제약

그리고 나나이트의 제약에 대해서 짧게 설명하겠습니다.

현재 나나이트는 스태틱 메시에만 적용이 가능하며 스켈레탈 애니메이션이나, 모프타깃, 머티리얼을 통한 월드 포지션 오프셋 등 메시가 변형되는 경우에는 나나이트가 지원되지 않습니다.

나나이트 메시 임포트

그럼 이제 언리얼 엔진 5에서 나나이트 가상화 지오메트리를 사용하는 방법을 알아보겠습니다.

먼저 언리얼 프로젝트를 하나 실행합니다.

프로젝트가 열리고 나면 콘텐츠 브라우저에 우클릭하고 [퀵셀 콘텐츠 추가] 버튼을 눌러서 브릿지 창을 열고 몇 가지 3D 모델을 다운로드 받고 프로젝트에 임포트합니다.

각 퀄리티 별로 하나씩 다운로드 받아 임포트하겠습니다.

임포트가 끝나고 나면 다운로드 받은 모델들을 레벨에 배치해봅시다.

그리고 뷰 모드를 와이어 프레임으로 바꾸면 퀄리티에 따라서 다른 수의 폴리곤으로 표현되는 모습을 볼 수 있는데 그 중에서도 나나이트 메시는 차원이 다르게 많은 폴리곤 수를 가지고 있습니다.

나나이트 시각화

이제 임포트한 메시에 나나이트가 제대로 적용되고 있는지 보기 위해서 나나이트 시각화 기능을 사용해 보겠습니다.

뷰 모드를 [나나이트 시각화 > 개요]로 설정하면 렌더된 화면과 함께 자주 사용되는 나나이트 시각화 화면들이 한꺼번에 보이게 됩니다.

그 중에서 [나나이트 시각화 > 마스크]로 변경하면 현재 나나이트 오브젝트와 비나나이트 오브젝트를 구분해서 볼 수 있습니다.

초록색으로 표시되는 오브젝트가 바로 나나이트가 적용되고 있는 오브젝트입니다.

그 다음에 [나나이트 시각화 > 트라이앵글]로 뷰 모드를 변경하면 나나이트 메시의 트라이앵글이 어떻게 표시되고 있는지 볼 수 있습니다.

특히 트라이앵글 상태에서 물체와의 거리가 바뀌면 트라이앵글의 형태가 바뀌며 LOD가 자동으로 적용되는 모습을 볼 수 있습니다.

[나나이트 시각화 > 클러스터]로 뷰 모드를 변경하면 트라이앵글 뷰 모드와 비슷하지만 좀 더 큰 덩어리로 합쳐진 것을 볼 수 있습니다.

앞에서 말한 것처럼 일정한 갯수의 트라이앵글을 하나의 클러스터로 묶어서 처리하고 있는 겁니다.

그리고 클러스터 역시 더 큰 클러스터로 묶어서 트리 형태로 처리하고 거리에 따라서 어느 수준의 클러스터가 보여야 할지 자동으로 처리합니다.

그 다음으로는 [나나이트 시각화 > 오버드로] 뷰 모드입니다.

잠시 뷰 모드를 원상태로 되돌린 다음 오브젝트를 복사해서 겹쳐보겠습니다.

그리고 뷰 모드를 오버드로로 변경하면 하나만 있는 오브젝트는 오버드로가 거의 없지만 겹쳐둔 오브젝트는 오버드로가 발생하면서 밝은 색으로 표시되는 것을 볼 수 있습니다.

앞에서 이야기한 것처럼 이런 식으로 표면 가까이 겹쳐서 그려지는 오버드로가 너무 많으면 성능 저하가 발생할 수 있습니다.

너무 많이 겹쳐서 아주 밝은 색으로 보인다면 퍼포먼스를 위해 개선해야할 필요가 있습니다.

나나이트 활성화

이번에는 나나이트가 활성화되지 않은 스태틱 메시에 나나이트 설정을 활성화하는 방법을 알아보겠습니다.

나나이트 퀄리티가 아닌 메시를 더블 클릭해서 에디터를 엽니다.

에디터가 열리고 나면 디테일 패널에서 나나이트 지원 활성화 프로퍼티를 체크하고 변경사항을 적용해줍니다.

그리고 에셋을 저장하고 나나이트 시각화로 보면 나나이트가 잘 적용된 것을 볼 수 있습니다.

참고로 언리얼 개발자들의 이야기에서 과연 로우 폴리로 만들어진 스태틱 메시도 나나이트로 전환해야하는가에 대한 질문이 있었습니다.

그 답변으로는 모든 걸 나나이트로 만드는게 중요한건 아니며 사용할지 말지는 선택사항이지만 가급적이면 바꾸는걸 권장한다는 것이었습니다.

아웃트로

이번 영상에서는 나나이트 가상화 지오메트리 시스템의 기본적인 내용에 대해서 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

유니티 에셋 스토어에서 인디 이노베이션 세일이 계속되고 있습니다!

 

지난 7월 27일부터 8월 9일까지는 인스퍼레이션 기간으로 개발자의 프로젝트에 영감을 주는 에셋들이라는 컨셉으로 180종의 에셋을 할인했습니다. 그리고 이번 8월 10일부터 8월 22일까지는 개발자의 시간을 절약하고 효율성을 높이기 위한 에셋 180종을 할인하는 스피드 업 할인이 시작되었습니다.

 

컨셉이 바뀌면서 할인되는 에셋의 종류 역시 바뀌었으니 필요한 에셋을 찾아보시고 구매하시면 좋을 듯 합니다.

 

그리고 지난 인스퍼레이션 기간과 마찬가지로 스피드 업 기간에도 인디 이노베이션 세일의 일환으로 구매 금액별 할인 쿠폰이 제공됩니다. 이 쿠폰을 사용하면 일정 금액 이상 구매할 때마다 추가 할인을 받을 수 있습니다. 100달러 이상 구매 시 5% 추가 할인을 받을 수 있고 175달러 이상 구매 시 10%, 250달러 이상 구매시 15% 추가 할인을 받을 수 있습니다. 할인은 세일 중인 항목에 대해서만 적용이 되며, 각 세일 기간마다 쿠폰 코드가 달라지므로 주의하셔야 합니다. 하지만 쿠폰 사용 횟수의 제한이 없으므로 마음껏 사용하셔도 됩니다.

 

이번 인디 이노베이션 세일 스피드 업 기간의 쿠폰 코드는 이것입니다.

 

[스피드 업 기간 추가 할인 코드]

SPEEDUP2022

영상 하단의 링크를 통해서 에셋 스토어에 방문하여 할인하는 에셋들을 살펴본 뒤 필요한 에셋들을 구매하면 됩니다.

이 링크를 통해 에셋을 구매하면 저에게 수수료가 지급됩니다.

물론 이렇게 저에게 수수료가 지급된다고 해서 구매하는 에셋의 비용이 증가한다던가 하지는 않으니 여러분들은 필요한 에셋을 구매하면서 제 채널을 후원해주실 수 있게 됩니다.

 

[인디 이노베이션 스피드 업 세일 에셋 보러가기]

 

당신의 게임 개발 속도를 높이세요 - Asset Store

게임 제작은 시간이 오래 걸리는 작업입니다. 에셋스토어의 에셋으로 개발 프로세스의 속도를 높이세요.

assetstore.unity.com

 

 

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 유니티에서 공식 지원하는 오브젝트 풀링을 알아봅시다.

 

[패키지 다운로드]

https://github.com/WERGIA/WerGameDevChan/blob/main/Unity/unity-object-pool.unitypackage

 

사용 엔진 버전 : 2021.3

 

타임라인

0:00 인트로

0:10 오브젝트 생성과 파괴 방식의 문제

2:26 오브젝트 풀링의 개념

3:02 유니티 오브젝트 풀링

6:14 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 유니티 2021부터 정식 기능으로 포함된 오브젝트 풀링에 대해서 알아보도록 하겠습니다.

오브젝트 생성과 파괴 방식의 문제

오브젝트 풀링이 무엇인지는 이전에 만든 오브젝트 풀링 영상에서 이야기했었지만 그래도 한 번 더 간단하게 설명해보도록 하겠습니다.

먼저 오브젝트 풀링을 사용하지 않고 오브젝트를 생성하거나 파괴하면 두 가지 문제가 발생할 수 있습니다.

첫 번째 문제는 가비지 컬렉팅으로 인한 프레임 드랍입니다.

프로그래밍에서 오브젝트를 생성하거나 파괴하는 작업은 꽤나 무거운 작업으로 분류됩니다.

오브젝트 생성은 메모리를 새로 할당하고 리소스를 로드하는 등의 초기화 과정이 필요하고, 오브젝트 파괴는 파괴 이후에 발생하는 가비지 컬렉팅으로 인한 프레임 드랍이 발생할 수 있습니다.

가비지 컬렉팅이란 유니티 스크립팅의 기반이 되는 C# 프로그래밍에서 제공되는 기능입니다.

우리가 Destroy 함수로 게임 오브젝트를 파괴한다고 선언하면 곧바로 메모리에서 사라지는 것이 아닙니다.

그 게임 오브젝트는 게임에서 보이지 않게 되지만 가비지 콜렉터라고 부르는 것이 그것을 수거해서 파괴하기 전까지 메모리에 남아있습니다.

그래서 오브젝트를 파괴한다고 선언하면 일정 사이클이 지난 이후에 가비지 컬렉터가 메모리를 뒤져서 파괴 선언된 오브젝트를 수거해서 파괴합니다.

이렇게 파괴 선언된 오브젝트가 적으면 수거해서 파괴하는 시간이 짧지만, 많은 양의 오브젝트가 쌓여있다면 당연히 수거하고 파괴하는 데 더 많은 시간이 걸리게 됩니다.

거기에 컴퓨터는 이렇게 파괴한 오브젝트를 수거해서 정리하는 작업만 진행하고 있는게 아닙니다.

게임이 동작하는 로직도 처리하고 있고 게임 화면을 보여주기 위해서 렌더링 작업까지 진행하고 있습니다.

그렇기 때문에 파괴된 오브젝트가 많다면 많은 양의 메모리를 정리하기 위해서 게임의 프레임이 일시적으로 떨어지는 문제가 발생합니다.

두 번째 문제는 메모리 파편화입니다.

프로그램에서는 처음부터 정해진 메모리의 양도 있지만, 동작하는 도중에 필요한 양에 따라 새로 할당받는 경우도 있습니다.

그런데 이 예시 이미지처럼 64바이트의 A, B, C, D를 할당받은 상태에서 A와 C를 할당 해제하면 3번과 같이 빈 공간이 생겨납니다.

이 때 128바이트의 오브젝트를 생성하려고 하면 A와 C 자리에는 공간이 부족에서 D의 뒤에 있는 공간에 할당해야 합니다.

이 할당 이 후에 128바이트 짜리 오브젝트를 하나 더 생성하려고 하면, 메모리 빈 공간만 따졌을 때는 128바이트의 공간이 존재하지만, 연결된 크기가 128바이트인 공간이 없어서 오브젝트 생성에 실패합니다.

한마디로 메모리는 남아 있는데 메모리가 부족한 역설적인 상황이 발생하는 것입니다.

이런 문제들을 해결하기 위해서 고안된 개념이 바로 오브젝트 풀링입니다.

오브젝트 풀링의 개념

오브젝트 풀링의 개념은 생각보다 간단합니다.

먼저 오브젝트를 담아둘 오브젝트 풀을 만들고 여기에 빌려줄 오브젝트를 생성해서 담아둔 뒤 외부에서 이 오브젝트가 필요하면 오브젝트 풀에서 빌려가는 갑니다.

그리고 빌려온 오브젝트를 모두 사용하고 나면 다시 오브젝트 풀에 돌려주는 겁니다.

그런데 만약 외부에서 오브젝트 풀 안에 있는 모든 오브젝트를 다 빌려가서 더 빌려줄 수 없는 상황이 되면 그때서야 새로운 오브젝트를 생성해서 꺼내줍니다.

그리고 이렇게 새로 만든 오브젝트 역시 사용이 끝나서 돌려 받으면 파괴하지 않고 오브젝트 풀이 보관하고 있으면 됩니다.

이게 바로 오브젝트 풀링의 개념입니다.

유니티 오브젝트 풀링

유니티 오브젝트 풀링을 사용하는 방법을 알아보기 전에 영상 하단의 링크에서 자료를 다운로드 받아서 프로젝트에 임포트합니다.

패키지를 임포트한 다음에 Pooling Test Scene을 열고 플레이시켜보면 클릭하는 동안에 많은 수의 총알 오브젝트가 생성되는 모습을 볼 수 있습니다.

총알을 발사하는 역할의 Shooter 클래스를 보면 지금은 오브젝트 풀을 사용하지 않고 총알을 생성하고 있습니다.

이제 이 총알 생성과 파괴 부분을 유니티 오브젝트 풀로 대체해보겠습니다.

유니티 오브젝트 풀을 사용하기 위해서는 UnityEngine.Pool 네임스페이스가 필요합니다.

그리고 오브젝트 풀을 적용하기 위해서는 풀링의 대상이 될 오브젝트의 클래스와 풀링된 오브젝트를 관리할 클래스, 두 군데에 작업을 해줘야합니다.

먼저 풀링의 대상이 될 Bullet 클래스로 이동합니다.

그리고 클래스의 상단에 UnityEngine.Pool 네임스페이스를 선언해줍니다.

IObjectPool<Bullet> 타입으로 이 총알 오브젝트를 관리 중인 풀을 캐싱할 _ManagedPool 멤버 변수를 선언합니다.

그리고 SetManagedPool 함수를 만들고 매개변수로 받은 풀을 _ManagedPool에 저장하도록 만들어줍니다.

그 다음에는 DestroyBullet 함수를 만들고 호출되면 총알 오브젝트를 풀에 반환하도록 코드를 작성합니다.

그리고 Shoot 함수에서 총알을 5초 후에 파괴하는 부분을 5초 후에 DestroyBullet 함수를 호출하도록 수정합니다.

그 다음에는 Shooter 클래스로 이동해서 상단에 UnityEngine.Pool 네임스페이스를 선언해줍니다.

그리고 멤버 변수로 총알 오브젝트들을 관리할 IObjectPool<Bullet> 타입의 _Pool 변수를 선언해줍니다.

그리고 Awake 함수를 만들어서 _Pool 멤버 변수에 Object Pool을 생성해서 넣어줍니다.

여기서 생성자의 매개 변수에 넣어줄 것이 좀 많습니다.

먼저 총알 오브젝트를 생성할 때 호출될 함수인 CreateBullet 함수를 만들고 가지고 있는 프리팹으로 총알 오브젝트를 생성한 다음 생성된 bullet 오브젝트에 자신이 등록되어야할 풀을 알려주고 반환합니다.

그리고 풀에서 오브젝트를 빌려올 때 사용될 OnGetBullet 함수와 오브젝트를 풀에 돌려줄 때 사용될 OnReleaseBullet 함수를 선언하고 코드를 작성합니다.

마지막으로 풀에서 오브젝트를 파괴할 때 사용될 OnDestroyBullet 함수 역시 작성해줍니다.

그리고 이렇게 만든 함수들을 풀의 생성자 매개변수에 넣어주고, 생성가능한 오브젝트 최대 갯수 역시 넣어줍니다.

오브젝트 풀과 관련된 코드를 모두 작성한 다음에는 Update 함수로 가서 프리팹을 인스턴스화해서 총알 오브젝트를 생성하는 부분의 코드를 오브젝트 풀을 사용하도록 코드를 수정합니다.

코드를 모두 작성한 다음에는 저장하고 에디터로 돌아갑니다.

그리고 게임을 플레이해서 테스트해보면 처음에는 총알 오브젝트가 없지만 총알을 발사할 때 생겨납니다.

그리고 총알이 사라질 때가 되면 풀에 설정해놓은 최대 갯수만 남아서 비활성화되고 나머지는 완전히 파괴되는 모습을 볼 수 있습니다.

다시 한 번 총알을 발사해보면 비활성화된 총알들이 재활용되고 모자란 총알들만 생성되는 모습을 볼 수 있습니다.

아웃트로

이번 영상에서는 2021 버전부터 정식 지원되는 유니티 오브젝트 풀링에 대해서 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

[참고자료]

https://luv-n-interest.tistory.com/1368

https://docs.unity3d.com/ScriptReference/Pool.ObjectPool_1.html

https://workinprogress.kr/wiki/programming/do-not-feed-the-gc/

반응형

+ Recent posts