Work In Progress
-
스타킹 재질 표현
프레넬 방정식과 거듭제곱을 활용해 피부 표면 색상과 스타킹 표면 색상의 선형보간을 통한 스타킹 투과 근사 및 텍스처 좌표(V 좌표)를 사용하여, 스타킹이 늘어 날수록 투과율이 높아져 피부색이 더 강하게 반사되는 현상을 근사하였습니다.아쉬운점 및 추후 개선점단순히 UV 좌표만으로는 신체에 대한 밀착도를 세밀하게 표현하지 못함: 별도 밀착도를 표현하는 텍스처를 사용하면 더 세밀하게 조정가능 할 것으로 생각됨실제 나일론의 빛 반사를 표현하는 것이 아닌, 단순 가정을 통해 밀착도를 정의하여 밀착 정도에 따라 스타킹의 베이스 컬러와 피부의 베이스 컬러를 선형보간 한 다음 람베르트 디퓨즈로 디퓨즈만 계산 한 것이다 보니 표현력이 부족함.
-
하이브리드 툰 셰이딩 도전 5 - Outline Masking
현재 사용중인 아웃라인을 렌더링하는 방식은 Inverted Hull, 즉 동등한 모델의 뒷면을 그리고 노멀 방향으로 확장 시켜서 아웃라인이 생긴 것 처럼 보이는 방식을 사용하고 있다. 그러다보니, 눈 주변이나 입 주변 같이 특히나 다른 표면에 비해 평탄치 못한 지오메트리 구조를 가지는 경우에 아웃라인이 원치않게 생기는 부분이 있었다. 이 문제를 해결할 방법은 첫 프로토타이핑때 부터 생각해두고 있을만큼 간단한데, 바로 일종의 아웃라인 전용 마스킹 텍스처를 만들고, 아웃라인을 억제하고 싶은 부분을 텍스처에 정보를 미리 포함시켜 두면 된다는 것이다.이번엔 단순히 마스킹으로써 얼굴 내부에 아웃라인이 생기는 것을 방지만 했지만. 응용해서 아웃라인의 색상을 텍스처로 미리 설정해둔다거나, 알파 채널에 마스킹이 아닌..
-
하이브리드 툰 셰이딩 도전기 4 - Fresnel-Schlick 수정
Microfacet Theory에 따르면 우리가 Specular BRDF를 평가하는 노멀은 Macrosurface(일반적인 표면 노멀)이 아닌 Half Vector (Microfacet 들의 노멀)인데 Fresnel-Schlick 근사식을 통한 반사율 계산에 Macrosurface Normal을 사용하여 위 사진의 좌측과 같이 프레넬 반사가 극적으로 나타났다. 이를 Half Vector를 노멀로 사용하도록 하여 제대로 반사율을 계산 할 수 있도록 수정하였다.(Rim Light를 의도적으로 표현 할 때 사용 할 수 있을까?)
-
하이브리드 툰 셰이딩 도전기 3 - 엔젤링 표현해보기
사실 Kajiya-Kay BRDF를 사용해서 헤어의 스펙큘러 하이라이트를 표현해보고 싶었으나 생각외로 고전한 탓에.. 조금 더 연구가 필요한 부분인 것 같아, 일단 더 간단하게 2부: 셀 음영의 다양한 표현 | UE5의 셀 셰이딩 를 참고하여 바이노멀과 하프벡터의 내적 값의 거듭제곱을 사용한 엔젤링 표현을 Disney Diffuse BRDF와 Fresnel과 합쳐서 적용해보았다. 고퀄리티의 결과물은 아니나 그래도 나름 그럴 듯한 표현은 가능하였다는 점에서 일단 만족한다!
Pot of Thoughts
-
브레인 덤프: Sparse Set
개요 이 글에서는 Igniter(D3D12 기반 커스텀 엔진)의 핸들 기반 리소스 관리를 구현의 주축이 되는 자료 구조인 Sparse Set에 대해 정리하며. 왜 핸들 기반 리소스 관리의 구현에 Sparse Set을 기반으로 하였는지, 단순 동적 배열에서의 제한점을 어떻게 해결하는지를 중점으로 다루고자 한다. 먼저 Sparse Set이 어떤 구조인지, 어떤 로직을 통해 작동하는지에 대해 알아보기 전에 핸들 기반 리소스 관리를 구상 단계에서 필요로 한 요구 조건을 나열하면 아래와 같다.캐시 친화적인 구조를 가질 것 (요소들이 tightly packed, 즉 빈틈없이 연속적으로 메모리 공간상에 배치되어 있어야 함)임의의 요소의 추가/삭제/조회(lookup)이 가능하다면 O(1)의 시간 복잡도를 가질 것외부에..
2026.02.05 19:44 -
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 -
StaticTransformTag
현재 엔진에서 구현 중인 렌더러(또는 렌더링 시스템 전반)는 GPU 주도적 설계를 따르고 있다.그렇다 보니 렌더링 가능한 물체에 대한 모든 정보를 GPU에 업로드 해두고, 바뀌는 정보를 감지하여 GPU 메모리에 데이터를 반영 해주도록(Replication) 구현 되어 있다.문제는, 이들을 프로파일링 하였을 때 CPU 타임이 만만치 않았다는 것 이다. 물론 이 사실을 구현 초기에 프로파일링을 통해 인지 할 수 있었고 극도로 병렬화 될 수 있는 구조로 설계 및 서로 연관이 없는 데이터의 경우 서로 동시적(또는 병렬적)으로 처리 될 수 있도록 구현 하였다. 덕분에 CPU 타임은 생각보다 크게 줄일 수 있었다.이중 특히 Transform의 경우 모든 렌더링 가능한 물체가 포함 하고 있는 만큼, 가장 큰 처리 시..
2025.02.06 11:47
Personal Study & Research
-
[번역] 그래픽스 프로그래머를 위한 구면 조화(Spherical Harmonics) 입문
개인 공부를 위한 번역임을 알립니다. 내용에 오역 또는 의역 포함 될 수 있고 검수 과정이 없기 때문에 문법, 맞춤법적 오류 또는 오타가 존재할 수 있으므로, 원문을 반드시 참고 하시길 바랍니다.모든 저작권은 원문 저자에게 있으며, 저작권자의 요청 시 언제든지 비공개 또는 삭제 처리 될 수 있습니다.원문: Introduction to Spherical Harmonics for Graphics Programmers Introduction to Spherical Harmonics for Graphics ProgrammersIntroduction to Spherical Harmonics for Graphics Programmers published on Apr 12 2026 This post requires ..
2026.04.25 17:18 -
블로그에 게시할 장기 연재(?) 주제 선정
현재 가장 최우선 목표는 언리얼 엔진으로 클라이언트 프로그래밍 포트폴리오용 프로젝트를 진행하는 것, 가능하다면 언리얼 엔진에서 하이브리드 툰 셰이딩을 최대한 구현해 보는 것이 있으나. 장기적으로 내가 가장 관심 있었던 주제인 Global Illumination(졸업 프로젝트/논문도 Voxel Cone Tracing Global Illumination을 주제로 한만큼..) 알고리즘들에 대해 공부해 보고, 가능하다면 커스텀 렌더링 엔진(DX12로 제작 중이던)에서 구현해보고 싶다.하드웨어 레이트레이싱 가속과 딥 러닝 기반의 슈퍼 샘플링 또는 디노이징 기술(ex. DLSS)의 발전을 제외하고 최근 GI에서 가장 중요하게 다뤄지는 토픽들을 뽑아보자면 아래와 같을 것이다.JCGT(Journal of Compute..
2026.01.20 01:10 -
[역] Crash Course in BRDF Implementation - 분산항
개인 공부를 위한 번역임을 알립니다. 내용에 오역 또는 의역 포함 될 수 있고 검수 과정이 없기 때문에 문법, 맞춤법 또는 오타가 존재 할 수 있으므로, 원문을 반드시 참고 하시길 바랍니다.모든 저작권은 원문 저자에게 있으며, 저작권자의 요청 시 언제든지 비공개 또는 삭제 처리 될 수 있습니다.원문: Crash Course in BRDF Implementation저자: Jakub Boksansky 분산(Distribution)항 D는 미세면 노멀 분포 함수 (NDF)를 사용해서 얼마만큼 비율의 미세면들이 방향 H를 향하고 있으며 방향 L로 들어온 빛이 방향 V로 반사될 것이냐를 계산합니다. 다르게 말해서, 얼마 만큼의 빛이 주어진 L과 V방향 사이에서 개별적인 미세면 사이에서 아무런 차폐가 일어나지 않..
2025.11.24 19: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 (Unity)
Skills: Unity, C#Platform: AndroidProject Duration: 2015/07/01 ~ 2016/02/01Genre: 2D ArcadePosition: Main Programmer (Game Logic & UI Programming) 교내 게임잼(24시간) 개발 작품 Vallista 1.0 APKBounce your bullets to wall, your bullet willbe stronger.Head off endless monsters.apk-dl.com
-
Murevo (Unity)
Skills: Unity, C#Platform: AndroidProject Duration: 2016/04/01 ~ 2016/08/01Genre: Rhythm GamePosition: Main Programmer (Game Logic & UI Programming) 구글 플레이 스토어 정식 출시 (20만+ 다운로드 수 달성)MuRevo - Android Apps on Google Play (archive.org)>
-
LINK-ON (Unity)
Skills: Unity, C#Platform: AndroidProject Duration: 2015/07/01 ~ 2016/02/01Genre: Rhythm GamePosition: Main Programmer (Game Logic & UI Programming) 구글 플레이 스토어 정식 출시, 3만+ 다운로드 달성Link - On - 나무위키 (namu.wiki)SK 플래닛 스마트 앱 챌린지 2015 최우수상 수상 한국게임과학고, 2015 스마트창작터 '눈부신 성과'전라북도 운주에 위치한 한국게임과학고등학교는 전라북도 뿐만 아니라 전국적으로 몇 안되는 고교 스마트창작터 주관기관이다. 스마트창작터는 어플리케이션(앱), 콘텐츠, 소프트웨어 등 유news.heraldcorp.com STAC 2015..
-
Pixel Town (Unity)
Skills: Unity, C#Project Duration: 2015/02Genre: 3D RPGPlatform: AndroidPosition: Main Programmer (Game Logic & UI Programming)
-
Elysia (cocos2d-x)
Skills: Cocos2D-x, C++Project Duration: 2014/10/15 ~ 2015/02/15Genre: Rhythm GamePosition: Main Programmer (Game Logic & UI Programming)