| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- SRP
- 리눅스 명령어
- dots
- AssetBundle
- 프로세스
- 픽셀 쉐이더
- 메모리
- unity
- 유니티 최적화
- 버텍스 쉐이더
- 배칭
- 유니티
- 디자인패턴
- 에셋번들
- 정렬
- ubuntu
- ecs
- HDRP
- GPU 병목
- URP
- SQLD
- rocky linux
- 리눅스
- 렌더링파이프라인
- 스레드
- 쉐이더
- SQL시험
- c#
- 성능 최적화
- 멀티스레드
- Today
- Total
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- SRP
- 리눅스 명령어
- dots
- AssetBundle
- 프로세스
- 픽셀 쉐이더
- 메모리
- unity
- 유니티 최적화
- 버텍스 쉐이더
- 배칭
- 유니티
- 디자인패턴
- 에셋번들
- 정렬
- ubuntu
- ecs
- HDRP
- GPU 병목
- URP
- SQLD
- rocky linux
- 리눅스
- 렌더링파이프라인
- 스레드
- 쉐이더
- SQL시험
- c#
- 성능 최적화
- 멀티스레드
- Today
- Total
목록전체 글 (67)
Let's Girin!
※ Unity 프로젝트를 커밋할 때마다 직접 Unity Editor를 켜서 빌드하는 건 번거롭다. Jenkins를 붙여두면 GitHub에 push → 자동으로 빌드까지 이어지는 파이프라인을 만들 수 있다. 이전 프로젝트들은 Andoid와 iOS의 파이프라인을 수동 빌드로만 진행했었는데, 빌드 자동화를 위해 공부한 내용을 정리해보았다.1. 사전 준비물항목설명Windows PCJenkins와 Unity Editor를 함께 실행할 서버/PCUnity Hub + Unity Editor빌드할 프로젝트와 동일한 버전 설치GitHub 저장소Unity 프로젝트가 올라가 있는 원격 저장소Java (JDK/JRE)Jenkins 구동에 필요GitJenkins가 저장소를 clone/fetch 하기 위해 필요 Java..
※ Unity DOTS-ECS로 3D뱀서라이크 게임을 직접 만들어보면서 겪었던 문제와, 그걸 해결하기 위해 VAT를 도입하게 된 과정을 정리해보려고 한다. 처음엔 그냥 익숙한 SkinnedMeshRenderer로 몬스터를 찍어내면 되겠지 싶었는데, 개체 수가 조금만 늘어나도 바로 한계가 드러났다. 이걸 해결하려고 이런저런 자료를 찾아보다가 VAT라는 기법을 알게 됐고, 실제로 적용하면서 배운 내용들을 이 글에 남겨둔다. 1. DOTS - ECS와 SkinnedMeshRenderer의 한계Unity DOTS-ECS로 Survivors류 게임을 만들다 보면 화면에 수백~수천 마리의 몬스터가 동시에 움직이는 상황이 기본값이 된다. 이 정도 물량에서 SkinnedMeshRenderer를 그대로 쓰면 다음 문제들..
게임 엔진에서 복잡한 애니메이션을 어떻게 구현할까? 버텍스 애니메이션 텍스처(VAT)는 각 버텍스의 위치 변화를 텍스처로 저장(베이킹)하여 게임 엔진에서 실시간으로 애니메이션을 재현하는 기술로 뛰어난 성능을 제공한다. 1. Vertex Animation Texture란? VAT는 물체의 각 점(Vertex)이 움직이는 정보를 텍스처(이미지)로 저장하는 방식이다. 마치 그림에 점들의 움직임을 기록해두는 것과 같다고 생각하면 된다. 이 텍스처를 게임 엔진에서 커스텀 셰이더(Shader)라는 특별한 프로그램으로 읽어들이면, 점들이 움직여서 애니메이션이 만들어진다. ※ 셰이더는 게임 그래픽을 어떻게 보여줄지 결정하는 프로그램인데, VAT에서는 애니메이션을 재생하는 역할도 한다. 이 방법은 게임 엔진이 모든 ..
※ 유니티 프로젝트를 진행하면서 겪었던 최적화 이슈들과 프로파일링 과정에서 알게 된 핵심 개념들을 정리해서 작성한 글입니다. 측정 및 근거를 찾는 최적화를 목표로, CPU/GPU 병목, 텍스처 압축 등의 내용 위주로 정리했습니다.1. 프로파일링의 기본 원칙★ 유니티 프로젝트의 성능 최적화는 추측이 아니라,정확한 측정과 데이터 분석에서 시작해야 한다. 타겟 플랫폼 선행 조사 & 프로토타이핑개발 초기 단계에서 목표 하드웨어의 한계를 명확히 파악하고, 프로토타입 단계부터 구현 가능성을 검증한다.기능 구현에만 몰두하다가 출시 직전에 몰아서 최적화하는 방식은 위험하다. 아키텍처 자체를 갈아엎어야 하는 상황이 올 수도 있기 때문이다.프로파일링을 통한 병목 탐지무작정 코드를 고치는 것이 아니라 프로파일러를 통해 정..
1. Command BufferCPU와 GPU는 독립적으로 작동하는 프로세서이다. CPU가 게임 로직을 처리하면서 "Mesh를 여기에 그려라"라는 명령을 GPU에 실시간으로 직접 보낸다면, 두 프로세서 간의 동기화 문제와 통신 오버헤드로 심각한 병목이 생긴다.이를 해결하는 것이 Command Buffer이다. CPU는 GPU가 수행해야 할 명령들을 버퍼에 쌓아두고, GPU는 자신의 처리 속도에 맞춰 하나씩 꺼내 실행한다. 이 구조 덕분에 CPU와 GPU는 비동기적으로 동작하며 효율을 극대화할 수 있다. 2. Draw Call과 BatchDraw Call : CPU가 GPU에게 내리는 렌더링 명령. 호출될 때마다 커맨드 버퍼에 쌓이며, 횟수가 많아질수록 CPU 오버헤드가 증가한다.Batch : 유사한..
1. Netcode for Entities란?Unity에서 제공하는 두 가지 주요 넷코드 솔루션 중 하나로, 특히 빠른 페이스의 경쟁 게임에 적합하다. 이는 권한 서버를 사용하며,클라이언트측 예측을 지원한다. 이러한 특성 덕분에 실시간 게임에서 발생할 수 있는 네트워크 지연을 최소화하고, 더욱 부드러운 게임플레이 경험을 제공한다. 2. Netcode for GameObject 와의 차이Netcode for GameObjects는 주로 게임 오브젝트 기반의 네트워크 로직을 구현한다.반면, Netcode for Entities는 DOTS (Data-Oriented Technology Stack)와 통합되어, 엔티티 기반의 더 효율적인 네트워크 처리 방식을 제공한다. 3. 핵심 기능🔹권한 서버게임의 모든..
1. ECS 아키텍처 기본 개념🔹Entity(엔티티)엔티티는 게임 내에서 개별 객체를 나타내며, 단순히 ID만 가지고 있는 객체이다. 엔티티는 데이터나 행동을 가지지 않으며, 컴포넌트들을 통해 기능을 추가할 수 있다. 엔티티는 상태를 가진 데이터가 아니라 구성 요소로서, 시스템에 의해 처리된다. ex. Monster 엔티티는 Health, Transform, Velocity 컴포넌트를 가질 수 있다. 🔹Component(컴포넌트)컴포넌트는 엔티티의 상태나 속성을 저장하는 데이터 구조이다. 컴포넌트는 독립적이고 로직을 포함하지 않으며, 오직 값만을 저장한다.컴포넌트는 일반적으로 C# 구조체로 작성되며, 시스템에서 이 데이터를 처리한다. ex. Transform 컴포넌트는 엔티티의 위치, 회전, 크기를..
1. Collections 패키지Collections 패키지는 Unity의 관리되지 않는 컬렉션 타입을 제공한다. "관리되지 않는" 이라는 것은 C# 런타임이나 가비지 컬렉터가 이 컬렉션들의 메모리 관리를 하지 않는다는 의미다. 즉, 사용자가 명시적으로 메모리를 관리해야 하므로 성능을 높이는 데 유리하지만, 잘못된 메모리 관리는 문제를 일으킬 수 있다. 🔹관리되지 않는 컬렉션 특징메모리 관리 : Collections 패키지는 자동으로 메모리를 관리하지 않기 때문에, 사용자는 더 이상 필요하지 않은 컬렉션을 직접 Dispose() 메서드를 호출하여 해제해야 한다. 가비지 컬렉션 부하 없음 : 관리되지 않는 컬렉션은 가비지 컬렉터에 의해 추적되지 않기 때문에, 가비지 컬렉션 부하를 줄이고, 성능을 높이는 ..