Work In Progress
-
Audio Listener와 Spatial Audio Source
FMOD 통합 및 기본적인 Audio API 설계 FMOD 통합 및 기본적인 Audio API 설계가장 기본적인 API 설계로 'AudioSystem'과 'AudioSourceComponent' 두 가지 요소를 추가하였다. 이 두가지를 만드는데 있어서 고민했던 점이 어떤 시점에 FMOD API를 호출하도록 할 것인가였다.예를 들어, 단seolyang.tistory.com앞선 포스트에 이어서 Transform Component와 Audio Source Component 두가지 모두를 가지고 있는 엔티티를 Spatial Audio Source 라 보고 3D 공간에서의 오디오 소스를 시뮬레이션 할 수 있도록 별도 처리 하는것을 바로 구현 하였다.Audio Listener 또한 구현되어, 오디오 소스가 이동하는..
-
FMOD 통합 및 기본적인 Audio API 설계
가장 기본적인 API 설계로 'AudioSystem'과 'AudioSourceComponent' 두 가지 요소를 추가하였다. 이 두가지를 만드는데 있어서 고민했던 점이 어떤 시점에 FMOD API를 호출하도록 할 것인가였다.예를 들어, 단순히 Entity-Component 모델의 관점에서 보았을때는 단순히 아래와 같은 형태를 상상 할 수 있다.audioSource->Play();audioSource->Stop();status = audioSource->GetStatus();...하지만 ECS에서의 Component는 로직을 제외한 순수한 데이터만을 저장하는 형태를 띄기 때문에 위와 같이 직접적으로 로직을 포함한 함수를 구현하는 것은 적절지 못하다.현재의 가장 초기 버전의 경우는 ECS의 원칙에 따라 컴포..
-
핸들 유효성에 대한 추가 노트 (2025.03.25)
기본적으로 현재 엔진에서 핸들 기반 리소스 관리는 '단일 소유권' 만을 인정하고, 소유권을 가진 객체가 철저하게 핸들을 발행하는 주체인 시스템에 핸들을 반환/해제할 책임을 지는 것을 기반으로 하고 있다. 단순하게 말하자면, 이미 해제된 핸들을 통해 실제 리소스의 메모리 공간에 접근할려고 하는 시도는 피할 수 있지만. 기본적으로 해제된 핸들에 대한 실제 메모리 주소를 얻고자 하는 시도 뿐 아니라 해제된 핸들에 대한 중복 반환, 소유권을 가지는 객체의 핸들 미반환(메모리 릭/핸들 릭) 문제는 여전히 남아 있다. 소유권을 가지는 객체의 핸들 미반환의 경우, Debug 빌드에 한해서 핸들을 할당할 때의 callstack을 저장 및 핸들 스토리지가 소멸하는 시점의 런타임 체크 및 어설션에 의해서 반환되지 않은 핸..
-
프로젝트 목표 점검 (2025.03)
프로젝트의 목표(실제로 게임을 만들 수 있는 엔진 개발하기)를 위해서라면, 아래의 순서 대로 집중해서 구현 할 것 같다.오디오 시스템 (1순위)물리 라이브러리의 통합 (1순위)Console Variable 시스템 (2순위)Light 타입의 확장 (Directional/Point/Spot)Cascaded Shadow Map (Directional Light)Disney Principled MaterialAtomospheric Scattering (A Scalable and Production Ready Sky and Atmosphere Rendering Technique; [Hillaire20])Tone Mapping (ACES)카툰 렌더링 ( [INDEX] 카툰 렌더링 참고하기)Skeletal Anima..
Pot of Thoughts
-
GPU Upload Heap 적용으로 성능 향상을 얻을 수 있을 것 같은 케이스
위 사진은 GPU에 있는 Scene 데이터를 CPU의 데이터와 동기화 시키기 위해, 변경점들을 Upload Heap에 있는 Staging Buffer에 기록 한 다음, Async Copy Queue(엔진에선 Frame Critical Copy Queue; 현재 Copy Queue를 2개를 활용하여 렌더링에 당장 필요한 데이터를 다루기 위한 Copy Queue와 에셋 업로드 또는 스트리밍등 무거운 작업을 담당하는 Copy Queue(Non Frame Critical Copy Queue)를 따로 분리 하였습니다. 이는 ExecuteCommandLists의 특성, 더 나아가서 GPU에서 명령어를 실행하고 Fence(barrier)에 신호를 주는 방식에 기인한 조치 입니다.)를 통해 데이터를 실제 Scene D..
2025.02.20 20:49 -
전통적인 그래픽스 파이프라인 vs 메쉬 셰이더 파이프라인(Meshlet Rendering)
결론: Vertex-Bounded인 상황에서 메쉬 셰이더 파이프라인의 하한이 더 높다. 즉 메쉬 셰이더 파이프라인을 사용한 Meshlet 단위 처리 방식의 처리율이 기존 Mesh Instance 단위 그리고 Vertex Shader 기반의 전통적인 파이프라인의 처리율 보다 높다. 또한 Vertex-Bounded가 아닌 상황에서도 Meshlet 단위의 Culling 연산으로 인한 추가 비용을 성능적 이점이 넘어선다.장면 설정동적 점광원 2.7만개구 메쉬 인스턴스 6.4만개 (Transformation 실시간 업데이트)LOD 0 기준 구 메쉬의 유니크한 정점은 6144개, 그리고 유니크한 삼각형 프리미티브는 3072개(LOD 0 기준, 장면 내 정점 수 = 약 3.93억개/삼각형 수 = 약 1.96억개)테스..
2025.02.18 12:11 -
Frames In Flight의 개념
모던 그래픽스 API로 넘어오면서 생긴 변화 중 하나는, 더 이상 GPU로의 Command Submission이 즉각적(immediately)으로 이루어 지지 않는다는 점 이다. 물론 D3D11이나 OpenGL에서도 실제로는 즉각적으로 이루어 지진 않고, 드라이버 단에서 명령어들을 모아서 GPU로 넘기긴 했지만, 어쨋거나 어플리케이션의 입장에선 즉각적으로 이루어 지는듯한 환상을 보여주기에 큰 차이는 없다고 생각한다.이 사실을 바탕으로, 대부분의 모던 그래픽스 API의 튜토리얼에선 여러개의 프레임이 동시에 GPU에서 렌더링 되는, 소위 Frames In Flight(Inflight frames)의 개념을 소개한다.문제는 위와 같은 개념이 실제 의도하는 바와는 다르게 이해되었다는 점 이다. 더 정확하게는, ..
2025.02.06 12:49
Personal Study & Research
-
언리얼 엔진 4 렌더링 시리즈 파트 6 관련 노트
해당 포스트의 내용 중 언리얼 엔진 5에 들어서 앞서 언급했던 4.22에서의 메시 드로잉 파이프라인의 변화 이외에도 몇가지 달라진 점에 대한 코멘트가 있어 간단하게 기록.1. 원본 글의 "Modifying the HLSL Pre-Processor Defines" 섹션에서 MaterialShared.cpp 에서 새롭게 추가할 셰이딩 모델을 사용하는 머테리얼을 사용할 때 셰이딩 모델에 지정된 전처리 정의를 추가할 수 있도록 switch 문에 새로운 셰이딩 모델 열거자(enum)을 추가하는 부분이 언리얼 엔진 5.5.4 를 기준으로 HLSLMaterialTranslator.cpp의 2757번째 줄에 위치한다.2. 언리얼 엔진 5.5.4 기준 GBuffer 셰이딩 모델 ID의 #define을 추가 하기 위해서는..
2025.04.12 20:50 -
[역] 언리얼 엔진 4.22를 위한 메시 드로잉 파이프라인 변환 가이드
- 2025/04/11 (최초 작성)- 2025/04/11 (마지막 수정)발 번역 주의보, Figures나 예제 코드는 빠져있을 수 있습니다.개인 공부 및 연습용으로 번역된 글입니다. 의역/오역/오타가 많을 수 있으며. 원저작권자의 별도의 허가 없이 작성되었으므로, 언제든지 삭제될 수 있습니다.원본 아티클언리얼 엔진 4.22를 위한 메시 드로잉 파이프라인 변환 가이드 언리얼 엔진 4.22가 릴리즈 되면서 메시 드로잉 파이프라인이 완전히 다시 쓰였습니다. 주요 변화는 매 프레임마다 가시성이 존재하는 드로우들을 만들어내는 즉시 모드(Immediate Mode)에서, 모든 장면의 드로우들이 사전에 준비되어 있는 보존 모드(Retained Mode)로의 변경입니다. 이는 DirectX Raytracing (DX..
2025.04.11 02:13 -
[역] 언리얼 엔진 4 렌더링 파트 3: 드로잉 정책
- 2025/04/10 (최초 작성)- 2025/04/10 (마지막 수정)발 번역 주의보, Figures나 예제 코드는 빠져있을 수 있습니다.개인 공부 및 연습용으로 번역된 글입니다. 의역/오역/오타가 많을 수 있으며. 원저작권자의 별도의 허가 없이 작성되었으므로, 언제든지 삭제될 수 있습니다.원본 아티클언리얼 엔진 4 렌더링 파트 3: 드로잉 정책by Matt Hoffman* 역자: 시작하기에 앞서 본 포스트에서 다뤄질 내용인 드로잉 정책은 언리얼 엔진 4.22 (2019년도)에서 메시 드로잉 파이프라인이 대대적으로 리팩토링 됨으로써 드로잉 정책에 대한 코드가 엔진으로 부터 완전히 제거되었습니다. 다만 여전히 이전 세대의 파이프라인과 왜 새로운 방식으로 리팩토링 됐는지 파악하고자 하는 목적으로 번역되었..
2025.04.10 22:18
Projects
-
Kei (Vulkan)
Skills: C++, Vulkan, GLSLProject Duration: 2022/11/20 ~2023/05/02Github: SeolYang/Kei: Vulkan Engine (github.com) GitHub - SeolYang/Kei: Vulkan EngineVulkan Engine. Contribute to SeolYang/Kei development by creating an account on GitHub.github.com 군 복무 중 개발한 Vulkan 기반 렌더링 엔진(Vulkan 래퍼 라이브러리)
-
단일 헤더 ECS 라이브러리
Skills: C++, Memory ManagementProject Duration: 2022/05/15 ~ 2022/05/20Github: https://github.com/SeolYang/EntityComponentSystem GitHub - SeolYang/EntityComponentSystem: ECS with C++20ECS with C++20. Contribute to SeolYang/EntityComponentSystem development by creating an account on GitHub.github.com청크 기반의 ECS(Entity Component System)의 구현과 코드 분석 및 프로파일링을 통한 최적화 및 리팩토링.* 개발 노트내 맘대로 짜보는 ECS - Arche..
-
복셀 기반 콘 트레이싱을 활용한 전역 조명 효과 구현 (OpenGL)
Skills: C++, OpenGL, GLSLProject Duration: 2021/03/01 ~ 2021/05/21Github: https://github.com/SeolYang/opengl_pbr GitHub - SeolYang/opengl_pbr: OpenGL based PBR model viewerOpenGL based PBR model viewer. Contribute to SeolYang/opengl_pbr development by creating an account on GitHub.github.com 국민대학교 졸업 프로젝트OpenGL에서의 복셀 콘 트레이싱을 기반으로 한 단일 바운스 동적 전역 조명 알고리즘 및 최적화 기법(AABB 기반 Frustum Culling) 구현 시연 영상 ..
-
Escape (Unity)
Skills: Unity, C#Platform: WindowsGenre: 2D PlatformerProject Duration: 2020/11/20~2020/11/26 국민대학교 게임 소프트웨어 기말 프로젝트로 1인 개발한 2D 플랫포머 게임
-
Mile Engine (Direct3D 11)
Skills: C++, Direct3D 11, HLSL, ImguiProject Duration: 2019/02/04 ~ 2019/06/30Github: https://github.com/SeolYang/project_mile GitHub - SeolYang/project_mile: Game Engine project using Direct3D 11Game Engine project using Direct3D 11. Contribute to SeolYang/project_mile development by creating an account on GitHub.github.com 실시간 렌더링 알고리즘과 렌더러 아키텍처를 공부하기 위한 목적의 Direct3D 11을 이용한 게임 엔진 프로젝트
-
GLTF 모델 뷰어 (OpenGL)
Skills: C++, OpenGL, GLSLProject Duration: 2019/05/23 ~ 2019/07/09Github: https://github.com/SeolYang/opengl_pbr 국민대학교 컴퓨터 그래픽스 수업의 기말 테스트 대체 프로젝트로 개발한 GLTF 모델 뷰어.OpenGL을 사용한 Microfacet BRDF(Cook-Torrance BRDF)와 지연 렌더링(Deferred Rendering)의 구현
-
OpenMP 기반의 간단한 레이트레이서
Skills: C++, OpenMP Project Duration: 2019/04/01 ~ 2020/12/13 Github: https://github.com/SeolYang/ray-tracing Raytracing in one weekends 시리즈를 활용한 레이트레이싱 기반 렌더링 기법 공부를 위한 개인 프로젝트
-
뉴럴 네트워크 기반 역-렌더링 기술 연구
Skills: Python, Tensorflow, Deep Neural Network Project Duration: 2019/02/04 ~ 2019/06/30 Position: 학부 연구생(Undergraduate Research Student) Neural Rendering 알고리즘에 대한 연구 및 구현 텐서플로를 사용한 Neural Inverse Rendering for General Reflectance Photometric Stereo by Tatsunori Taniai et al. 논문 구현
-
지능적 AR 상호작용 기반 식물원 및 동물원 디지털화 기술연구
Intelligence AR interaction based botanical garden and zoo digitalization technique research Skills: Unity, C#, MS Hololens API, ARCore Platform: Microsoft Hololens/Android Project Duration: 2018/08/01 ~ 2019/02/01 Position: Programmer/학부연구생(Undergraduate Research Students) 안정적인 공간 앵커 포인트 관리 및 기기 간 동기화 개발 Developed Stable Spatial Anchor Point Management & Synchronization between devices
-
Vallista
Skills: Unity, C# Platform: Android Project Duration: 2015/07/01 ~ 2016/02/01 Genre: 2D Arcade Position: Main Programmer (Game Logic & UI Programming) 교내 게임잼(24시간) 개발 작품 Vallista 1.0 APK Bounce your bullets to wall, your bullet willbe stronger.Head off endless monsters. apk-dl.com
-
Murevo
Skills: Unity, C# Platform: Android Project Duration: 2016/04/01 ~ 2016/08/01 Genre: Rhythm Game Position: Main Programmer (Game Logic & UI Programming) 구글 플레이 스토어 정식 출시 (20만+ 다운로드 수 달성)
-
LINK-ON
Skills: Unity, C# Platform: Android Project Duration: 2015/07/01 ~ 2016/02/01 Genre: Rhythm Game Position: Main Programmer (Game Logic & UI Programming) 구글 플레이 스토어 정식 출시, 3만+ 다운로드 달성 Link - On - 나무위키 (namu.wiki) SK 플래닛 스마트 앱 챌린지 2015 최우수상 수상 한국게임과학고, 2015 스마트창작터 '눈부신 성과' 전라북도 운주에 위치한 한국게임과학고등학교는 전라북도 뿐만 아니라 전국적으로 몇 안되는 고교 스마트창작터 주관기관이다. 스마트창작터는 어플리케이션(앱), 콘텐츠, 소프트웨어 등 유 news.heraldcorp.com STAC ..
-
Pixel Town
Skills: Unity, C# Project Duration: 2015/02 Genre: 3D RPG Platform: Android Position: Main Programmer (Game Logic & UI Programming)
-
Elysia
Skills: Cocos2D-x, C++ Project Duration: 2014/10/15 ~ 2015/02/15 Genre: Rhythm Game Position: Main Programmer (Game Logic & UI Programming)