일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 프로그래밍 기초
- Private Bytes
- OculusMotionVectorPass
- URP로 변경
- Windows Build
- VR
- 작업 집합
- 벡터
- C언어
- Specular
- 3d
- Three(Two) Tone Shading
- Cell Shader
- Toon Shader
- 메모리 누수
- 가상 바이트
- URP
- ASW(Application SpaceWarp)
- AppSW
- Rim Light
- working set
- ColorGradingLutPass
- Virtual Byte
- 게임 수학
- 개인 바이트
- Cell Look
- Cartoon Rendering
- Today
- Total
목록게임 프로그래밍(학습 내용 정리)/3D Graphic Engine (11)
WinCNT
Global Illumination(GI, 전역 조명) 현실에서는 거의 모든 것이 (간접)광원이 된다 이것에 대한 고려 없이는 사실적인 그래픽스라고 할 수 없다 (다른 말로는 물리적인 근거가 약해진다) 간접광(Indirect Illumination) 직접광으로부터 바운스된 빛이 재차로 영향을 미치는 영역 PRT - IBL PRT(Precomputed Radiance Transfer) 정적(static) 이 모델에서는 동적(움직이는 것)은 구현이 안 된다 IBL(Image-Based Lighting) 이미지 기반 조명 (고해상도의)이미지를 기반으로 전역 조명을 근사 그래서 아트에서는 흔히 HDR(I)라고도 하기도 함 (단 HDR의 실제 의미하고는 직접적인 연관이 없음) IBL 적용 지금까지는 한 개의 Ra..
프레넬 반사 모든 표면은 전반사(Total internal reflection)한다 굴절률이 서로 다른 두 매질이 맞닿은 경계면을 빛이 통과할 때, 입사각이 임계각을 넘어서면 빛이 흡수되지 못하고 정반사하는데, 이를 전반사라고 한다 이 현상은 오귀스탱 장 프레넬(Augustin-Jean Fresnel)이 프레넬 방정식으로 유도하여 프레넬 반사(Fresnel Reflectance)라고도 한다 빛이 하나이거나 단순한 모델인 경우는 (다른 항과의 곱셈으로 인해 희미해져서) PBR에서의 프레넬 항을 구현해도 별 차이가 안 느껴질 수 있지만 사방에서 빛이 들어오거나 GI(글로벌 일루미네이션)에서 확실히 느껴진다 프레넬 반사율 그래프 위의 그래프는 물체별 입사각에 따른 프레넬 반사율을 나타낸 것이다 가로축이 입사각..
레거시 모델에서는 거칠기나 금속성에 대해서 팩터로서 고려하지 않았다 그래서 거칠기나 금속성을 표현하기 위해서는 텍스처나 노멀맵에 해당 정보들을 포함시켜서 구현했을 것이다 하지만 PBR에는 미세면과 거칠기, 금속성을 팩터로서 고려한다 Microfacet and Roughness 미세면(Microfacet, 혹은 Microface) PBR에서는, 계산의 대상이 되는 한 지점(Face, Vertext, Pixel 등등)에 무수히 많은 미세면이 존재하고, 그곳에서 빛이 반사한다는 모델을 채용하고 있다 (레거시 모델에서는 그저 N dot L 등의 처리를 하고 끝났을 것이다) 물론 미세면 또한 어디까지나 모델이며 근사(통계적으로 구한 비율)이며 (Cook-Torrance의)BRDF의 미세면 분포 함수(D)와 기하 ..
Bidirectional Reflectance Distribution Function(BRDF) BRDF는 한국어로 양방향(쌍방향) 반사(율) 분포 함수라고 할 수 있다 위키피디아에서의 BRDF의 정의는 다음과 같다 BRDF란 불투명한 표면에서 빛이 반사되는 방법을 정의하는 네 가지 실수 변수의 함수 함수로 나타내면 다음과 같다 ω(오메가) = 파라미터, 함수의 입력 값 r = reflectance(반사) i = incidence(입사), 즉 ωi 는 입사광 벡터(광원을 향하는 벡터)을, ωr 은 반사광 벡터(뷰를 향하는 벡터)를 의미함 위의 함수는 실제 식을 가지고 있지 않으며, 단순히 형태만을 정의한 것이다 즉 아래와 같은 조건을 만족하면 모두 BRDF라고 할 수 있다 (출처: https://life..
빛과 물질의 상호작용 현실 세계에서는 빛이 사방에서 들어온다 빛이 물체의 표면과 만났을 때 일부는 반사 - Specular가 되기도 하고 프레넬이 되기도 하고... 일부는 흡수 -흡수되고 어떻게 되는지는 모름, 열? 에너지? 일단 무시하는 부분, 맹점이기도 하다 일부는 굴절 - 물체 내부로 들어간다! - 이것도 기본적으로 고려하지 않는다 - 하지만 유리 일부는 들어가서 다시 반사(Diffuse Reflection) - 물체의 고유한 색을 같게 하는 부분 - Diffuse가 기존의 표면에서 난반사하는 성분이라는 것은 이제 잊어라!! Etc... - 자세한 부분은 생략한다(구현에서도 생략함!) BRDF N dot L의 큰 카테고리 N dot L도 결국 BRDF를 나타내기 위한 한가지 계산식일 뿐! Rende..
Per Vertex Lighting 버텍스 기준으로 빛을 계산 Per Pixel Lighting 픽셀 기준으로 빛을 계산 Ambient Light 레거시 모델에서는 계산이 불가능한 빛 연산 보통 가장 어두운 부분이며 레거시 모델에서는 단색을 더하는 처리를 한다 광원의 종류 Directional Light Point Light Spot Light 조명 처리 Diffuse(확산광)과 램버트의 코사인 법칙 광원의 입사 벡터(의 역방향)과 버텍스(혹은 픽셀)의 노멀 벡터와의 각도로 확산광의 조명을 연산하는 처리 램버트의 코사인 법칙에 의한 조명 연산은 경험적 모델로 빛이 들어오는 각도에 따라 빛의 세기가 달라진다는 점에 착안했다 예를 들어 빛의 각도가 0도이면 빛은 안 들어올테고 빛의 각도가 90도에 가까워질수..
Ambient Light 주변광, 빛의 성분 중 하나 Legacy Model Ambient를 색 하나로 표현함 N dot L로 계산이 불가능한 영역을 그냥 색 하나로 처리했음 Ambient 표현의 발전 이후 Ambient에 대해서 여러 발전이 있었음 Ambient Occlusion(주변광 차폐) 차폐도를 계산하는 아이디어 기하적으로 얼마나 들어가(가려져) 있는가로 Ambient를 구성하는 방법 Ambient Occlusion을 그대로 계산한다면? 페이스(혹은 버텍스)마다 n개(모든 공간에 다 쏠 수는 없으니)의 레이를 쏴서 해당 페이스(혹은 버텍스)가 얼마나 차폐되어 있는가를 계산해야 한다 물론 이 방식은 계산하면 계산량이 어마어마하기 때문에 실시간 렌더링에서는 불가능하다 (1프레임 - 0.167초를 넘..
Deferred Rendering 디퍼드 렌더링, 지연된 렌더링 Deferred Shading이라고도 함 레거시한 Forward Rendering과 대비됨 라이팅 계산을 먼저 하지 않고 미루어 두었다가 실행하기 때문에 지연(Deferred) 렌더링이라고 불린다 기존의 렌더링 파이프라인에서 더 발전하기 위해 픽셀 쉐이더 쪽으로 기하 정보를 보내는 시도가 있었다 픽셀 쉐이더의 다른 패스로 정보를 보내게 됐음 2D 텍스처끼리 조립해서 하나의 텍스처로 다시 조립하는 것 장점으로는 일단 광원을 무한대로 보낼 수 있다 오브젝트의 개수에 상관 없이 상수 시간에 라이팅의 처리가 가능하다 단점으로는 투명도를 처리할 수 없다 핵심 정리 1. 먼저 다양한 정보를 텍스처에 출력(1st pass, MRT) position, n..
Shader 색을 칠하는 부분 Renderer의 핵심적인 부분 Rendering-Pipeline의 프로그램 가능한 부분 그래픽스 카드들이 지원하는 버텍스와 폴리곤으로 3D를 표현하는 3D 기반에서는 특히 Vertext Shader와 Pixel Shader가 가장 중요하다 (복셀 기반 3D 등은 알아서 만들어야 한다) Shader 버전별 차이 DX와 Feature Level은 완전히 일치하진 않음 DX9 - Moedl 2.0, 3.0 20년 정도 대세였던 모델(와우) DX10 - Model 4.0 흥행 실패 DX11 - Shader Model 5.0 DX9의 불합리한 부분이 많이 개선되고 흥행에도 성공함 HLSL(Hight-Level Shader Language) C/C++과 비슷한 문법 이전에는 어셈블리..
Renderer 그림을 만들어주는 것 DirectX는 투영될 것을 상정한 폴리곤 기반의 렌더러 그래서 실제 물리적인 세상과는 다른 점들이 많다 터레인 시스템 효율성 때문에 사용 Engine Diagram 3D 엔진의 카테고리 Graphis Library(API들의 모음) 예전의 그래픽스 엔진들(Gamebryo 이전) 예) BitBlt Renderer + Editor 모델 뷰어나 맵 에디터 정도 추가 유니티/언리얼 3, 4 이전의 과도기 Component 기반의 솔루션 기존 스펙 + MultiPlatform, Hot Reload/Play, Component, Serialize, Metadata Visual Scripting(Coding) 3D 엔진은 무엇으로 구성되어 있을까 크게 2가지 축 Renderin..