Image Based Lighting - 3. Diffuse IBL + SH
·
그래픽스
Diffuse IBL Specular IBL에 이어서 Diffuse IBL에 대해 다룬다. Diffuse는 빛이 물체의 표면을 파고 들어갔다가 산란되어 나오는 빛으로, 반구의 모든 방향으로 퍼진다.반대로 생각해 보면, 눈에 들어오는 Diffuse는 반구 영역의 넓은 범위에서 들어오는 빛이 모인 결과임을 알 수 있다.따라서, Specular 보다 더 흐릿하고 저주파의 조명 정보를 가지게 된다. Diffuse IBL에서 사용하는 모델은 Lambertian BRDF를 사용하겠다.원한다면 Disney Diffuse와 같이 Rough Diffuse 모델을 사용할 수 있지만, $\mathbf{v}$와 Roughness에 영향을 받아 추가 변수가 존재하므로 이에 따른 결과를 LUT에 베이킹해야 한다.Lambertia..
Image Based Lighting - 2. Specular IBL
·
그래픽스
Specular IBL 현실의 물체를 보면, 매끄러운 표면에 반사되어 보이는 주변 환경의 모습은 선명하게 보이고, 비교적 거친 표면에서는 흐릿하게 보인다.그 이유는 표면이 거칠어질수록 미세면이 바라보는 방향의 분포가 넓어지므로, 더 넓은 면적에서 들어오는 빛이 반사되어 눈에 들어오기 때문이다.표면이 거칠수록 BRDF lobe가 넓어진다고 표현할 수도 있다. 그리고 이러한 현상을 묘사하기 위해서는, 한 픽셀 영역에 존재하는 수많은 미세면들에 의한 반사 방향을 계산하고 해당 방향에 대한 색상을 구하여 적분해야 한다. \[\int_\Omega L_i(\mathbf{l})f(\mathbf{l},\mathbf{v},\Theta)\left\operatorname{d}\mathbf{l}\]$\Theta$: 재질을 표..
Image Based Lighting - 1. Cube map
·
그래픽스
IBL (Image Based Lighting)IBL은 이미지를 통해서 주변광을 제공하는 방법이다.IBL의 유무에 따른 결과를 비교하면 다음과 같다.이 예시에 사용된 건 금속 재질이다.금속은 대부분의 빛을 반사하는데, Roughness가 낮은 경우에는 반사되는 빛이 한 방향으로 모이게 된다.이런 경우에는 빛이 반사되는 좁은 영역을 제외하고는 전체적으로 어둡게 보이므로 물체를 알아보기 어렵다.금속 재질을 더 밝게 표현하기 위해 주변에 조명을 많이 배치할 수는 있지만, 계산해야 하는 양 또한 늘어나므로 추가 가능한 조명의 개수에 한계가 있다. 이때, IBL을 적용하면 새로운 조명을 추가하지 않고도 사방에 조명을 추가한 것처럼 보이게 할 수 있다.특히 PBR은 사실적인 묘사를 하는 것이 목적이므로, 현실의 이..
플러그인 호환 작업을 하며 언리얼 엔진에 기여한 경험
·
언리얼엔진/그 외
서론 그저 관리하던 플러그인의 UE 5.7 버전 지원을 원했을 뿐이다. 작업을 이어가다 보니 언리얼 엔진의 코드에 기여하게 됐다. 뭔가 거창한 그런 기여는 아니고, 단 13글자 짜리의 간단한 변경이다. 아주 간단한 변경 사항이었지만, 이 덕분에 Audio Tracing 플러그인은 UE 5.7 버전을 지원할 수 있게 되었다. 기여하게 된 배경 간단한 배경 지식 Audio Tracing은 실시간 Ray Traced Audio를 제공하는 플러그인으로, 실시간 음향 전파 시뮬레이션을 위해 하드웨어 레이 트레이싱을 사용한다.그리고 언리얼 엔진 5의 Lumen은 하드웨어 레이 트레이싱도 사용하므로, 이를 위한 가속 구조(TLAS)를 빌드한다.안정성과 효율을 위해, Audio Tracing은 이 Lumen 하드웨어 ..
물리 기반 렌더링(PBR)의 핵심 이론과 BRDF
·
그래픽스
Physically Based Rendering PBR은 어떠한 조명 환경에서도 일관되고 사실적으로 보이는 재질을 표현할 수 있게 해 준다.조명 환경에 따라 값을 미세조정할 필요가 없으므로, 작업 효율도 높일 수 있다. 이 글에서는 BRDF에 대해서 다룬다.BRDF의 뜻은 Bidirectional Reflectance Distribution Function(양방향 반사도 분포 함수)으로, 불투명한 물체의 빛 반사를 표현한다. 이 외에도 목적에 따라 BTDF, BSDF, BSSRDF 등의 함수가 존재하지만, 이 글에서는 다루지 않는다. 렌더링 방정식 먼저, 렌더링 방정식이라는 큰 그림을 이해해야 한다.표면의 한 점($p$)에서 나오는 빛에 대한 렌더링 방정식은 다음과 같다.\[L_o(p,\mathbf{w..
Direct3D 11 기반 자체 엔진 개요
·
게임테크랩 1기/Direct3D 11 엔진
Direct3D 11 기반 자체 엔진게임테크랩 1기 과정 동안 제작한 게임 엔진으로, 마지막 게임잼 과정까지 개발을 이어온 엔진이다. 개발 과정 초기에는 여러 팀에서 만든 다양한 종류의 엔진이 있었다.그래서 내가 이 엔진의 개발에 참여하게 된 건 4주 차쯤인데, 그때부터 마지막까지 이 엔진을 기반으로 해서 개발을 이어왔다. 그러다 보니 나름의 애정을 가지고 개발했고, 시간이 남을 때마다 렌더 및 에셋 파이프라인 등의 기능과 안정성을 조금씩 발전시켰다.그 덕분인지, 감사하게도 마지막 주차의 게임잼까지 이 엔진의 개발을 이어올 수 있게 되었다. 하지만, 개발 과정이 매우 촉박했기 때문에 부족한 부분이 많고 수정해야 할 것도 많이 존재한다.좋게 말하면, 발전 가능성이 아직 많다는 뜻이다. 에셋 시스템, 렌더 ..
[UE 5.7] Substrate 도입 이후의 Diffuse 모델 변경
·
언리얼엔진/그 외
Substrate가 정식 버전이 되면서 5.7 버전으로 시작하는 프로젝트에는 Substrate가 기본적으로 활성화 된다고 한다.기존 셰이딩 모델은 Diffuse에 Lambert를 사용했지만, Substrate는 다른 모델을 사용한다는 글을 봐서 찾아봤다. // Shaders/Private/Substrate/SubstrateEvaluation.ush#if MATERIAL_ROUGHDIFFUSE if (Settings.bRoughDiffuseEnabled && any(DiffuseColor > 0)) { Sample.DiffusePathValue = Diffuse_GGX_Rough(DiffuseColor, SafeRoughness, NoV, AreaLight.NoL, VoH, NoH,..
[UE5 | Audio Tracing] 다양한 에디터 조작에 대응하는 Sound Material 컴포넌트 개발
·
게임테크랩 1기/Audio Tracing
서론이전 글에 이어서 음향 재질을 위한 컴포넌트인 Sound Material Component 구현 과정을 다루겠다.https://mstone8370.tistory.com/55 [Audio Tracing] 음향 재질을 위한 에셋 구현 과정서론이전 글에서 음향 재질을 위한 데이터 파이프라인 구축 과정을 작성했다. https://mstone8370.tistory.com/53 [Audio Tracing] 음향 재질을 위한 Custom Primitive Data 획득서론소리의 전파는 충돌한 표면에 따mstone8370.tistory.com 컴포넌트 제작 과정에서 고려할 부분이 많았기 때문에 글의 내용 또한 길다. 문제 정의음향 재질은 프리미티브의 Custom Primitive Data(CPD)를 통해 전달하니,..
[UE5 | Audio Tracing] 음향 재질을 위한 에셋 구현 과정
·
게임테크랩 1기/Audio Tracing
서론이전 글에서 음향 재질을 위한 데이터 파이프라인 구축 과정을 작성했다.https://mstone8370.tistory.com/53 [Audio Tracing] 음향 재질을 위한 Custom Primitive Data 획득서론소리의 전파는 충돌한 표면에 따라 달라진다.예를 들어 콘크리트와 카펫을 비교해 보면, 콘크리트는 소리를 더 많이 반사시키고 카펫은 흡수한다.이런 재질의 특징을 묘사하기 위해, '음향mstone8370.tistory.com 이후, 음향 재질을 사용자가 쉽게 다룰 수 있게 하는 에디터 기능을 제공해야 됐다.이를 위해 음향 재질을 다루는 컴포넌트를 만들기로 했고, 자세한 내용은 다음 글을 통해 다루겠다. 이 글에서는 간단하게 음향 재질을 위한 에셋인 Sound Material 제작 과정..
[UE5 | Audio Tracing] 실시간 음향 정보 갱신을 위한 Readback 버퍼 풀과 데이터 캡처
·
게임테크랩 1기/Audio Tracing
서론공간 음향을 적용하기 위해선, 레이 트레이싱을 통해 얻은 정보를 기반으로 소리에 효과를 더해야 한다.소리에 효과를 더하고 출력하는 과정은 CPU에서 담당하므로, GPU에 존재하는 정보를 CPU로 전달해야 한다. 언리얼 엔진에는 이러한 작업을 가능하게 해주는 Readback 버퍼(FRHIGPUBufferReadback)가 있다.레이 트레이싱 결과를 RW Structured 버퍼에 저장한 뒤에 Readback 버퍼를 통해 CPU로 복사해 오면 된다. 문제 정의문제는 Readback 버퍼를 통한 데이터 복사 과정은 대략 1-2 프레임 정도의 시간이 소요된다는 점이다.60 프레임 기준으로는 한 프레임에 약 0.0167초가 소요되므로, 약 0.0333초 정도의 지연이 발생한다. 이러한 지연으로 인해 다음 2개..