Skip to content

얕은 것부터 깊은 것까지 PBR의 원리와 구현을 배워보세요.

🌐 원문 링크: 由浅入深学习PBR的原理和实现 (cnblogs.com/timlly)
📅 원문 발행일: 2019-04-25 | ✍️ 저자: Timlly (00 / )

💡 시리즈 분류: PBR & Shading국내 업계 표준 용어 감수 및 수식/도해 복원 적용 완료


PBR-White-Paper-Knowledge-Architecture-1.0PBR-White-Paper-Knowledge-Architecture-1.0

*Zhihu 마스터 Mao Xingyun은 PBR의 비교적 완전한 지식 시스템 아키텍처 다이어그램을 요약했습니다. 잘 안보이시면 여기를 클릭해주세요. *

PBR 기술을 막 접한 신인의 경우, 이렇게 거대한 지식 시스템과 수많은 생소한 용어, 이론, 공식 및 구현을 접하게 되면 아마도 PBR 지식 시스템에 빠져들게 될 것입니다. 이는 극복할 수 없는 격차가 되어 두려움을 불러일으키고 PBR 연구를 포기하게 될 것입니다.

마침 저자는 최근 PBR 관련 자료를 많이 연구했다. 나는 일부 자료를 여러 번 관찰하고 PBR의 점진적인 학습에 대해 어느 정도 이해를 얻었습니다. 그래서 PBR을 접해본 적 없는 사람들도 PBR을 배우고, 적용하고, 마스터하고, 차근차근 구현할 수 있도록 이 글을 쓰자는 생각이 떠올랐다.

1.3 이 글의 내용과 특징

이 기사에는 다음과 같은 기능이 있습니다.

  • 챕터는 레이어로 나누어져 있으며, 이는 점진적으로 이전을 다음으로 연결합니다.

  • PBR 교육을 생생하고 흥미롭게 만들기 위해 정교한 그림을 다수 소개합니다.

  • Markdown 구문을 사용하면 그래픽과 텍스트가 더욱 아름답고 균일하게 배열됩니다.

  • LATEX를 사용하여 수학 공식을 표현합니다.

  • 문장이 간결하고 이해하기 쉽습니다.

  • 풍부하고 다양한 사례.

  • PBR의 핵심 원칙에 집중하고 불필요한 문제는 피합니다.

이 기사는 주로 다양한 수준과 초점에서 PBR의 원리, 구현 및 적용을 설명하고 다양한 그룹을 대상으로 하는 다음 장으로 구성됩니다.

  • PBR 기본 지식 및 응용

내용:

PBR의 개념과 역사, 응용을 소개한다.

  • 대상:

주니어 프로그래머

  • 미술

  • 주니어 TA (기술 예술)

  • PBR의 기본 이해 및 적용에 대한 사전 이해를 원하는 분

  • 중급: PBR의 기본 원리 및 구현

내용:

PBR의 기본 원리와 상용 엔진의 구현을 소개합니다.

  • 대상:

중급 프로그래머

-TA

  • PBR 구현에 대해 알고 싶은 분

  • 고급: PBR 핵심 이론 및 원리

내용:

PBR의 핵심 이론과 렌더링 원리를 심도있게 소개합니다.

  • 대상:

고급 프로그래머

  • PBR의 기본 원리에 관심이 있는 사람

  • 고급: PBR 상관 이론 및 도출

내용:

PBR의 핵심이론과 관련된 이론적 원리와 도출을 소개한다.

  • 대상:

수석 프로그래머

  • PBR의 기본 원리와 이론을 완전하고 철저하게 이해하고 싶은 분

위에서 볼 수 있듯이 각 장은 이전 장과 다음 장을 연결하며 PBR의 원리와 구현을 계층별로 분석하여 얕은 것부터 깊은 것까지 PBR을 도입하려는 목적을 달성합니다. 독자는 현재 수준과 알고 싶은 정도에 따라 다양한 장을 선택적으로 읽을 수 있습니다. 사실 이 글의 제목은 "계층적 점진적 학습 PBR의 원리와 구현"이 더 적합하지만, 현재의 제목은 여전히 ​​이해하기 쉽습니다.

이 기사에서는 실시간 렌더링 분야의 Cook-Torrance BRDF 조명 모델을 구현 사례로 사용하여 PBR의 핵심 이론에 중점을 둘 것입니다. 다른 부차적인 이론은 이 기사의 범위를 벗어나며 다른 문헌을 참조할 수 있습니다.

2. 초보자: PBR의 기본 이해 및 적용

이 장에서는 주로 PBR의 기본 개념과 진화 역사를 소개하고 주류 상용 엔진에 적용하는 방법을 소개합니다.

대상 그룹:

  • 주니어 프로그래머

  • 미술

  • 주니어 TA (기술 예술)

  • PBR의 기본 이해 및 적용에 대한 사전 이해를 원하는 분

2.1 PBR 기본 소개

2.1.1 PBR 개념

PBR(물리 기반 렌더링)을 중국어로 번역하면 물리 기반 렌더링입니다. 실제 원리와 이론을 사용하여 다양한 수학적 방법을 통해 일련의 렌더링 방정식을 도출, 단순화 또는 시뮬레이션하고, 컴퓨터 하드웨어 및 그래픽 API를 사용하여 사실적인 이미지를 렌더링하는 기술입니다.

2.1.2 물리적 렌더링과의 차이점

그렇다면 왜 물리적 렌더링이라고 부르지 않습니까?

물리적 렌더링(Physical Rendering)은 현실 세계와 완전히 일치하는 컴퓨터 렌더링 효과를 말합니다.

이 질문에 답하기 위해서는 먼저 현실 세계의 위상 형성 원리를 이해해야 합니다.

현실 세계의 물체는 고유한 물질적 특성과 표면 특성을 가지고 있습니다. 이들은 다양한 지역 조명과 전역 주변 조명의 영향을 받으며 서로 상호 작용합니다. 결국 이 정보는 광파의 형태로 사람의 눈의 복잡한 구조 속으로 들어가 시신경을 자극해 생물학적 신호를 형성하고, 뇌의 광수용체 피질에 들어가 궁극적으로 시인지를 일으키게 된다. (아래 사진)

한 논문에서는 대부분의 사람들의 눈이 5,010억 픽셀에 해당하는 양의 정보를 수신할 수 있다고 지적했습니다. 현재 주류 해상도는 1억 수준에 불과하다. 디스플레이 밝기 범위와 화면 픽셀 간격의 한계로 인해 렌더링 및 밝기 표현 범위인 1억 픽셀과는 거리가 멀다.

현재의 지식 수준과 하드웨어로는 현실 세계와 완전히 일치하는 효과를 렌더링하는 것이 아직 불가능합니다. 특정 절차를 거쳐 실제 세계에 가까운 렌더링만 시뮬레이션할 수 있으므로 물리적 렌더링 대신 물리 기반 렌더링이라고 합니다.

2.1.3 PBR의 특징

이 섹션에서는 기본 물리적 원리의 특성보다는 PBR의 효과 특성을 설명합니다.

전통적인 Lambert 셰이딩 및 Phong 셰이딩과 비교하여 PBR 셰이딩은 질적으로 향상되었으며 점점 더 복잡한 재료 기능을 표현할 수 있습니다.

  • 표면 세부사항

  • 물체 러프니스

  • 금속과 절연체를 구별

  • 물체의 탁도 정도

  • 프레넬 현상: 각도에 따라 강도가 다른 반사광

  • 반투명 물체

  • 혼합 재료의 다중 레이어

  • 바니시 효과

  • 기타 더 복잡한 표면 특징

퐁 모델 셰이딩 효과는 단순히 이상적인 모델의 디퓨즈와 하이라이트만 표현할 수 있을 뿐이며, 렌더링된 효과는 현실 세계와는 거리가 멀습니다.

다양한 재질의 러프니스, 질감, 하이라이트, 바니시, 엣지 라이트 등 표면 디테일을 사실적으로 렌더링하는 PBR 재질 효과 볼. 렌더링 효과에서 PBR의 현실감이 향상되는 것을 볼 수 있습니다.

2.2 PBR의 진화 역사

PBR은 원래의 전통적인 램버트 조명에서 현재에 이르기까지 발전해 왔으며, 200년 이상의 역사를 거쳐왔습니다. 이 기간 동안 많은 반복적인 진화와 개선이 있었고 주류 조명 모델과 분기 조명 모델도 곳곳에서 꽃을 피웠습니다. 다음은 PBR 진화의 핵심 기술 노드를 연대순으로 집중적으로 살펴보겠습니다.

2.2.1 램버트(1760)

Lambert 모델은 Johann Heinrich Lambert가 1760년에 제안한 조명 모델입니다. 전통적인 조명 모델입니다.

디퓨즈를 계산합니다. 디퓨즈는 광원이 물체 표면에 부딪힌 후 모든 방향으로 반사되어 생성되는 반사 효과입니다. 이것은 이상적인 확산 조명 모델입니다.

디퓨즈광의 강도는 대략 Lambert의 법칙을 따릅니다. 즉, 디퓨즈광의 강도는 입사광의 방향과 반사점에서 표면의 노멀 방향 사이의 각도의 코사인에만 비례합니다.

Lambert 모델 음영 효과는 이상적인 환경에서 디퓨즈 효과를 시뮬레이션합니다.

2.2.2 스미스(1967)

Smith는 Cook-Torrance의 DFG 부분의 G 기하학적 용어를 효과적으로 결합하여 기하학적 함수의 근사 방법을 효과적으로 개선했습니다. 자세한 내용은 다음 장에서 설명됩니다.

2.2.3 퐁(1973)

퐁(Phong) 모델은 베트남계 미국인 학자인 부이 뚜옹 퐁(Bùi Tuang Phong)이 발명한 것으로 1973년 그의 박사 논문에서 처음 발표됐다. 전통적인 이상적인 조명 모델이기도 하다.

Lambert와 비교하여 Phong은 스페큘러 반사 부분을 추가하여 객체 렌더링 효과를 실제 세계에 더 가깝게 만듭니다(아래 그림).

2.2.4 쿡-토런스(1982)

Cook-Torrance는 1982년 Cook과 Torrance가 공동으로 제안한 빛 반사 모델입니다.

이 모델은 동일한 장면에서 다양한 재료와 다양한 광원의 상대적 밝기를 고려합니다. 반사광의 방향 분포와 입사각에 따라 반사가 변할 때의 색상 변화를 기술하고, 특정 실제 물질로 만들어진 물체에서 반사되는 빛의 분광 에너지 분포를 얻을 수 있으며, 이 분광 에너지 분포를 바탕으로 색상을 정확하게 재현할 수 있습니다.

즉, Cook-Torrance는 기하학 항 G, 프레넬 항, 러프니스 항 D 및 기타 정보를 추가합니다. 이 모델을 사용하여 렌더링된 이미지의 현실감이 크게 향상되었습니다.

Cook-Torrance 조명 모델 렌더링 효과. 모델의 표면 특징과 조명 효과를 더 좋게 렌더링합니다.

2.2.5 오렌 나야르(1994)

Lambert 모델은 이상적인 환경에서의 조명 시뮬레이션이므로 물체(특히 거친 물체) 표면의 조명 효과를 정확하게 반영할 수 없습니다.

Oren Nayarh 모델은 석고, 모래, 세라믹 등과 같이 표면이 거친 객체를 주로 모델링하여 이를 개선했습니다. 마이크로평면 간의 상호 폐색(섀도잉 및 마스킹) 및 상호 반사 조명을 고려하여 일련의 Lambert 마이크로평면이 사용되었습니다. 실제 물체의 표면 러프니스를 어느 정도 시뮬레이션하고 물체를 더욱 질감있게 만들 수 있습니다.

왼쪽: 실제 사진, 가운데: Lambert 모델 효과, 오른쪽: Oren Nayarh 모델 효과

2.2.6 슐릭(1994)

Schlick 모델은 Phong 모델의 스페큘러 반사에서 지수 연산을 단순화합니다. 대신 다음 수식을 사용하세요.

F=F0+(1Fo)(1cos(θ))5F0=(n1n2n1+n2)2

시뮬레이션하는 스페큘러 반사 효과는 기본적으로 Pow 작업과 동일하며 효율성은 Pow 작업보다 높습니다.

2.2.7 GGX(2007)

GGX 모델로 해결된 문제는 마이크로평면 반사 모델을 표면이 거친 반투명 재료로 일반화하여 불투명 유리와 유사한 거친 표면의 투과 효과를 시뮬레이션할 수 있는 방법입니다. 동시에 새로운 마이크로패싯 분포 함수도 제안합니다.

*위: GGX는 반투명 개체의 효과를 매우 사실적으로 시뮬레이션합니다. *

반투명 물체의 시뮬레이션을 위해 제안되었지만 마이크로 평면의 노멀 방향 분포를 설명하는 함수로 표면이 거친 불투명 물체를 렌더링하는 데에도 적합합니다.

GGX는 불투명 물체의 효과를 매우 사실적으로 시뮬레이션할 수도 있습니다

GGX는 다양한 주류 게임 엔진에서 널리 사용되어 왔으며 가장 효과적이기도 합니다.

2.2.8 디즈니 원칙 BRDF(디즈니 원칙 BRDF, 2012)

SIGGRAPH 2012 컨퍼런스에서 Disney Animation Studios에서 일하는 Brent Burly는 유명한 주제인 **"Physically Based Shading at Disney"**를 발표했습니다.

Brent Burly가 SIGGRAPH 2012에서 PBR의 디즈니 원칙에 관해 연설합니다.

그는 이후의 게임산업과 영화산업에서 PBR의 방향과 표준을 정립한 디즈니 원칙드 BRDF(Disney Principd BRDF)를 제안했다. 후속 주류 게임 엔진, 3D 렌더러 및 애니메이션 제작 소프트웨어는 대부분 이 솔루션 또는 변형을 기반으로 구현됩니다.

디즈니 원칙에 따라 PBR로 렌더링된 "주먹왕 랄프"의 그림입니다.

Disney 원칙의 BRDF는 이해하기 쉬운 소수의 매개변수와 매우 완벽한 아트 워크플로우를 사용하여 이전에 복잡했던 PBR 매개변수 및 제작 프로세스를 크게 단순화합니다. 이는 물리적으로 정확한 모델이 아닌 Art Directable 셰이딩 모델입니다.

디즈니 원칙 BRDF는 매개변수를 추상화했습니다.

2.2.9 현 단계의 BxDF(2019)

물리적 기반 조명 모델은 수십 년 동안 개발되어 왔으며 이 기간 동안 많은 핵심 기술과 변형 기술이 파생되었습니다. 각각에는 적용 가능한 시나리오가 있거나 특정 애플리케이션 시나리오의 문제를 해결합니다.

최근 몇 년 동안 PBR 기술은 주로 더 현실적이고, 더 복잡하며, 더 나은 성능 또는 여러 모델을 결합하는 포괄적인 기술로 이동했습니다. 대표적인 기술은 다음과 같습니다.

  • GGX + Smith용 PBR 확산(2017)

  • 다중 산란 확산(2018)

  • 레이어 재질

  • 혼합재료

  • 혼합 BxDF (혼합 BxDF)

  • 고급 렌더링

UE4에서 렌더링한 가상 인간 사이렌. 레이어드 머티리얼, 혼합 머티리얼, 혼합 BxDF, 눈털 및 피부 렌더링과 같은 새로운 기술을 통합합니다.

아바타 사이렌의 스킨 디테일입니다. 디지털 카메라로 찍은 사진 못지않게 사실감이 어마어마합니다. 특별한 알림 없이는 이것이 게임 엔진이 실시간으로 렌더링한 그림이라고 믿기 어려울 것입니다.

2.3 PBR의 응용분야

오랜 개발 기간을 거쳐 PBR은 기술과 렌더링 효과 면에서 급속한 발전을 이루었습니다. 컴퓨터 그래픽의 차세대 렌더링 기술입니다. 주로 다음을 포함하여 실시간 렌더링 및 오프라인 렌더링 분야 모두에서 매우 광범위하고 심층적인 응용 프로그램을 보유하고 있습니다.

  • 영화 및 애니메이션. 초창기에는 '아바타', '업', 최근에는 '배틀엔젤', '방황하는 지구', '드래곤 길들이기3' 등 PBR 기술을 활용해 렌더링한 실사 영화, 몰입형 영화, 다양한 애니메이션 영화가 많다.

영화 '아바타'의 등장인물 장면.

영화 '배틀엔젤'의 한 장면. 주인공 알리타(Alita)는 PBR 기술을 통해 컴퓨터로 렌더링된 가상 캐릭터입니다. 그녀는 실제 배우 및 실제 환경과 완벽하게 통합됩니다.

영화 '유랑지구'의 가상 장면. 특수 효과 제작 회사는 PBR 기술을 사용하여 끔찍하고 몰입감 넘치는 장면을 시뮬레이션합니다.

  • 실시간 게임. PBR은 PC 게임, 온라인 게임, 모바일 게임, 콘솔 게임 및 기타 게임 부문에서 널리 사용됩니다. 게임을 접해 본 대부분의 사람들은 차세대 효과의 매력을 경험했다고 믿습니다.

PC 온라인 게임 '니수이한' 캐릭터의 차세대 효과.

모바일 게임 'PlayerUnknown's Battlegrounds: Exciting Battlefield'의 차세대 장면입니다.

독립형 게임 "Need for Speed 20"의 역동적인 순간.

  • 컴퓨터 지원 설계 및 제조(CAD/CAM). 이 분야는 처음부터 컴퓨터 그래픽이 사용되었습니다. PBR의 도입은 디자이너들이 실물과 거의 동일한 제품을 디자인하는 데 더욱 현실적으로 도움이 되었습니다.

회로 기판 설계 사전 렌더링 렌더링.

스포츠카 컨셉 디자인 렌더링.

인테리어 홈 장식 디자인 렌더링.

  • 컴퓨터 지원 교육(CAI). 실감나는 PBR 기술을 통해 교육 콘텐츠에 필요한 가상 장면을 렌더링하고, 애니메이션 기술과 결합해 교육을 더욱 생생하고 흥미롭게 만듭니다.

  • 가상 현실(VR/AR/MR). 가상 기술은 일반적으로 안경이나 헬멧 및 기타 디스플레이 장치를 착용해야 하며 주로 군사, 교육, 시뮬레이션 훈련, 의학 및 기타 분야에서 사용됩니다. VR에는 실제 세계를 더욱 현실적으로 시뮬레이션하고 참가자가 현장에 몰입할 수 있도록 하는 PBR 기술이 도입되었습니다.

Magic Leap이 제작한 VR 컨셉 일러스트입니다.

  • 과학적 컴퓨팅 시각화. 기상학, 지진, 천체 물리학, 분자 생물학, 의학 등 과학 분야에서 PBR 기술을 사용하면 자연 법칙을 보다 현실적으로 시뮬레이션하여 과학자들이 새로운 발견을 하고 대학의 교사와 학생들이 가르치는 데 도움이 될 것입니다.

DNA 이중 나선 구조의 컴퓨터 시뮬레이션.

2.4 게임 엔진에 PBR 적용

디즈니는 2012년 디즈니 원칙의 PBR 이론을 제안한 이후 게임과 영화 산업에 돌풍을 일으켰다. 이후 주요 주류 게임 엔진, 렌더러 및 모델링 소프트웨어는 Sneezy 원칙을 기반으로 PBR 기술을 구현했습니다.

다음은 Disney 원칙을 지원하는 주요 게임 엔진의 PBR 일정입니다.

  • Unreal Engine 4: "Unreal Engine 4의 실제 셰이딩", SIGGRAPH 2013

  • Unity 5: "Unity의 물리적 기반 셰이딩", GDC 2014

  • Frostbite: Frostbite를 PBR로 이동, SIGGRAPH 2014

  • Cry Engine 3.6: "Cry Engine의 물리적 기반 셰이딩", 2015

UE4와 Unity의 알고리즘 구현에는 약간의 차이가 있지만, 이 장에서는 알고리즘 구현에 대해 논의하지 않고 주로 머티리얼 매개변수에 대해 설명합니다.

언리얼 엔진 4용 2.4.1 PBR

다른 Disney 원칙의 PBR 구현과 비교하여 UE4의 PBR은 매개변수가 간소화되었습니다. 관련된 매개변수는 주로 다음과 같습니다.

  • 기본 색상: 재질의 기본 텍스처 색상인 Vector3(RGB)를 제공합니다. 해당 값은 0과 1 사이로 제한됩니다.

베이스 컬러를 처리하려면 UE4의 머티리얼 에디터를 사용하세요.

다음 표는 측정 후 비금속 재료의 기본 색상 강도를 보여줍니다(비금속 재료는 단일 색상, 즉 강도만 가집니다).

소재 기본 색상 강도

숯 0.02

신선한 아스팔트 0.02

마모된 아스팔트 0.08

토양 0.13

푸른 잔디 0.21

사막의 모래 0.36

신선한 콘크리트 0.51

오션 아이스 0.56

신선한 눈 0.81

다음 표는 측정 후 얻은 금속 소재의 기본 색상(R, G, B)으로, 선형 색 영역 공간의 값입니다.

소재 기본색상

철 (0.560, 0.570, 0.580)

실버 (0.972, 0.960, 0.915)

알루미늄 (0.913, 0.921, 0.925)

골드 (1.000, 0.766, 0.336)

구리 (0.955, 0.637, 0.538)

크롬 (0.550, 0.556, 0.554)

니켈 (0.660, 0.609, 0.526)

티타늄 (0.542, 0.497, 0.449)

코발트 (0.662, 0.655, 0.634)

플래티넘 (0.672, 0.637, 0.585)

  • 러프니스: 재료 표면의 거칠기를 나타내며 값은 0에서 1 사이로 제한됩니다. 재료가 거칠수록 스페큘러 반사가 덜 분명해집니다. 금속과 비금속의 거칠기에는 차이가 있습니다.

상단: 거칠기가 0~1로 변화하면서 비금속 재질이 점차 변화하는 사진. 하단: 거칠기가 0-1로 변경됨에 따라 금속 재료가 점차적으로 변하는 그림입니다.

  • 메탈릭: 재질이 금속과 유사한 정도를 나타냅니다. 0은 유전체(절연체)이고 1은 금속입니다. 금속에는 디퓨즈가 없고 스페큘러 반사만 있습니다.

0~1의 메탈릭 변화도.

  • 반사광: 0(스페큘러 반사 전혀 없음)부터 1(완전한 스페큘러 반사) 범위의 재질의 스페큘러 반사 강도를 나타냅니다. UE4의 기본값은 0.5입니다. 모든 것이 빛납니다(스페큘러 반사). 디퓨즈가 강한 재질의 경우 반사도를 0으로 조정하는 대신 거칠기를 조정할 수 있습니다.

반사도가 0에서 1로 변경됩니다.

다음 표는 UE4에서 제공하는 일부 머티리얼 스페큘러리티의 참조 값입니다:

소재 반사광

잔디 0.500

플라스틱 0.500

석영 0.570

얼음 0.224

물 0.255

우유 0.277

피부 0.350

UE4에서 시뮬레이션한 머티리얼 효과 중 일부가 아래 그림에 나와 있습니다.

윗줄 왼쪽부터: 숯, 원시 콘크리트, 오래된 아스팔트; 맨 아래 줄 왼쪽부터: 구리, 철, 금, 알루미늄, 은, 니켈, 티타늄.

2.4.2 Unity의 PBR

Unity의 PBR은 내장된 Standard Shader에 통합되었으며 구현 기준은 사용자 친화적입니다. 따라서 제한된 매개변수가 머티리얼 에디터에서 사용자에게 제시되며, 이는 다양한 기존 텍스처 정보와 통합됩니다.

Unity의 내부 구현 메커니즘은 PBR의 기본 원칙을 따르며 메탈릭, 표면 러프니스, 에너지 보존, 프레넬 반사, 표면 그림자 음영 처리와 같은 기능을 지원합니다.

Unity의 표준 셰이더 편집 인터페이스.

그 중 PBR과 관련된 매개변수는 다음과 같습니다.

  • 알베도: 기본 색상으로, UE4의 기본 색상과 동일합니다. 텍스처 맵을 사용하여 지정하거나 색상 값으로 대체할 수 있습니다.

  • 메탈릭: 메탈릭 등급, 의미는 UE4와 동일합니다. 그러나 금속 맵으로 대체할 수 있으며 이 경우 매끄러움 매개변수가 사라집니다.

Unity가 Metallic 맵을 지정한 후의 효과에서는 Smoothness 매개변수가 사라집니다.

  • 매끄러움: 매끄러움. 이는 UE의 러프니스 값과 정확히 반대이지만 둘 다 재료 표면의 거칠기를 나타냅니다.

Unity의 Smoothness 매개변수는 0에서 1로 변경됩니다.

부드러움 소스: 부드러움 데이터를 저장하는 텍스처 채널을 지정합니다. Metallicity의 Alpha 채널, Specular Map, 기본 Color Map의 Alpha 채널을 선택할 수 있습니다.

  • Occlusion: 오클루전 맵. 간접광(예: 주변광)을 받는 재질의 빛 강도와 반사 강도를 지정하는 데 사용됩니다.

Unity는 마스킹 맵을 사용하여 주변광의 영향으로부터 캐릭터(얼굴, 목)의 어두운 면을 보호합니다.

  • 프레넬: 물체 표면의 법선과 시선 사이의 각도가 커질수록 물체의 반사 능력이 증가합니다. 이 현상을 프레넬 효과라고 합니다. Unity에서는 프레넬 효과의 매개변수를 직접 조정할 수 없지만 내부 구현 메커니즘이 이를 자동으로 처리합니다. 표면이 매끄러울수록 프레넬 효과가 강해지고, 반대로 표면이 거칠수록 프레넬 효과가 약해집니다.

위 그림은 프레넬 효과의 약한 정도에서 강한 정도의 그라데이션을 보여줍니다.

삼. 중급: PBR의 기본 원칙과 구현

이전 장에서는 PBR의 역사와 현실적 효과 특성을 주로 소개하였다. 이 장에서는 PBR 핵심 부분의 기본 원리와 주류 구현 솔루션에 중점을 두어 독자가 PBR의 핵심 이론을 어느 정도 이해하고 관련 코딩을 마스터할 수 있도록 합니다.

주로 목표로:

  • 중급 프로그래머

-TA

  • PBR의 기본 원리와 구현을 이해하고 싶은 사람

이 장에서는 대량의 데이터를 분석하고 비교한 후 LearnOpenGL의 PBR 튜토리얼을 기반으로 PBR의 기본 원리와 구현을 설명합니다.

3.1 PBR의 기본 이론 및 도출

본 절의 이론과 도출은 최대한 단순화하고 능률화하였으며, 다음 장에서는 보다 심층적인 원리와 이론을 설명할 것이다.

다음 조건을 충족하는 조명 모델을 PBR 조명 모델이라고 할 수 있습니다.

  • 마이크로패싯 표면 모델을 기반으로 합니다.

  • 에너지를 절약하세요.

  • 물리 기반 BRDF를 사용합니다.

3.1.1 마이크로패싯

대부분의 PBR 기술은 마이크로패싯 이론을 기반으로 합니다. 이 이론에 따르면 미시적 수준에서 모든 물질 표면은 서로 다른 방향을 가진 많은 작은 평면으로 구성되어 있다고 믿어집니다. 일부 재료 표면은 더 매끄럽고 일부는 더 거칠습니다.

현실 세계의 물체 표면은 반드시 많은 작은 평면으로 구성되는 것은 아니며 곡선이거나 움푹 패인 경우도 있습니다. 그러나 우리가 육안으로 관찰할 수 있는 차원의 경우, PBR의 미시적 근사 시뮬레이션 방법으로 산출된 결과는 실제와 매우 다릅니다.

모든 재료 표면은 거칠기가 다른 작은 평면으로 구성됩니다. 왼쪽의 질감은 더 거칠고 오른쪽의 질감은 더 부드럽습니다.

빛이 이러한 마이크로패싯에 닿으면 일반적으로 스페큘러 반사가 발생합니다. 표면이 더 거칠면 반사된 빛의 방향이 더 무질서해지기 때문에 더 혼란스러울 것입니다. 반대로, 매끄러운 마이크로 평면의 경우 반사광이 더 균일해집니다.

위 사진의 왼쪽 소재 표면이 더 거칠고 반사광이 더 지저분합니다. 사진 오른쪽의 재질이 훨씬 더 매끄러우며 반사광도 더 규칙적입니다.

미세한 관점에서 볼 때 표면이 완전히 매끄러울 수는 없습니다. 이러한 마이크로패싯은 픽셀별로 계속 세분화되기에는 너무 작기 때문에 러프니스(러프니스, 2.4.1에서 언급한 러프니스) 매개변수만 가정하고 통계적 방법을 사용하여 마이크로패싯의 거칠기를 대략적으로 추정할 수 있습니다.

평면의 거칠기를 기반으로 벡터의 방향이 마이크로패싯의 평균 방향과 일치할 확률을 계산할 수 있습니다. 이 벡터는 빛 벡터 l과 시선 벡터 v 사이의 중간 벡터로 중간 벡터라고 합니다.

반각 벡터 h는 시선 v과 입사광 l 사이의 중간 단위 벡터입니다.

반각 벡터의 계산식은 다음과 같습니다.

h=l+vl+v

반폭 벡터 계산 GLSL 구현:

cpp
// lightPos는 라이트(Light)위치 ,viewPos는 위치 ,FragPos는 픽셀(Pixel)위치
vec3 lightDir   = normalize(lightPos - FragPos);
vec3 viewDir    = normalize(viewPos - FragPos);
vec3 halfwayDir = normalize(lightDir + viewDir);

반각 벡터와 일치하는 방향의 마이크로패싯이 많을수록 재료의 스페큘러 반사가 더 강하고 선명해집니다. 또한 0~1 값의 거칠기를 도입하면 마이크로패싯의 전체 방향을 대략적으로 시뮬레이션할 수 있습니다.

거칠기가 0.1에서 1.0으로 변경됩니다. 거칠기가 작을수록 스페큘러 반사가 더 밝아지고 범위가 작아집니다. 거칠기가 클수록 스페큘러 반사가 약해집니다.

3.1.2 에너지 절약

마이크로평면 이론에서는 대략적인 에너지 보존이 채택됩니다. 방출된 빛의 총 에너지는 입사광의 총 에너지를 초과하지 않습니다(이미시브 물질 제외). 3.1.1의 러프니스 변화도를 보면, 재료의 거칠기가 커질수록 반사 범위는 넓어지지만 전체적인 밝기는 어두워지는 것을 알 수 있습니다.

그렇다면 PBR은 어떻게 대략적인 에너지 보존을 달성합니까?

이 질문에 대답하려면 먼저 스페큘러 반사와 디퓨즈의 차이점을 명확히 해야 합니다.

빛의 광선이 물질의 표면에 닿으면 일반적으로 반사 부분과 굴절 부분으로 나누어집니다. 반사 부분은 물체 내부로 들어가지 않고 표면에서 직접 반사되어 스페큘러 반사광을 생성합니다. 굴절된 부분은 물체 내부로 들어가서 흡수되거나 분산되어 디퓨즈를 생성합니다.

물체로 굴절된 빛이 즉시 흡수되지 않으면 계속 전진하여 물체 내부의 입자와 충돌하게 됩니다. 각 충돌로 인해 에너지 손실의 일부가 모든 빛 에너지가 소비될 때까지 열 에너지로 변환됩니다. 일부 굴절된 광선은 입자와 여러 번 충돌한 후 물체 표면에서 방출되어 디퓨즈광을 형성합니다.

평평한 표면에 비치는 빛은 스페큘러 반사광과 굴절광으로 구분됩니다. 물체 입자와 여러 번 충돌한 후 굴절된 빛이 표면에서 방출되어 디퓨즈가 될 수 있습니다.

일반적으로 PBR은 굴절된 빛을 단순화하여 평면의 모든 굴절된 빛을 산란 없이 완전히 흡수되는 것으로 처리합니다. 굴절된 빛이 산란된 후 시뮬레이션을 계산하는 서브서피스 스캐터링(SSS)(Subsurface Scattering) 기술이라는 셰이더 기술이 있습니다. 일부 재료(가죽, 대리석, 왁스 등)의 시각적 효과를 크게 향상시킬 수 있지만 그에 따라 성능도 저하됩니다.

금속 재료는 굴절된 모든 빛을 즉시 흡수하므로 금속은 스페큘러 반사만 있고 굴절된 빛으로 인한 디퓨즈는 없습니다.

에너지 보존 주제로 돌아갑니다. 반사광과 굴절광은 상호 배타적입니다. 표면에서 반사된 빛은 더 이상 재료에 의해 흡수될 수 없습니다. 따라서 물질의 내부로 들어오는 굴절광은 입사광 이후에 남은 에너지에서 반사광을 뺀 값이다.

위의 에너지 보존 관계에 따라 스페큘러 반사 부분을 먼저 계산할 수 있는데, 이는 입사광에 의해 반사되는 에너지의 백분율과 동일합니다. 굴절 부분은 스페큘러 반사 부분으로부터 계산할 수 있습니다.

cpp
float kS = calculateSpecularComponent(...); // 반사(Reflection)/
float kD = 1.0 - kS;                        // 굴절 /디퓨즈(Diffuse)

위의 코드에서 볼 수 있듯이 스페큘러 반사 부분과 디퓨즈 부분의 합은 확실히 1.0을 초과하지 않으므로 대략적으로 에너지 보존 목적을 달성합니다.

3.1.3 반사율 방정식

Render Equation(Render Equation)은 빛의 시각적 효과를 시뮬레이션하는 데 사용되는 최고의 모델입니다. PBR 렌더링 방정식은 PBR 조명 계산 과정을 추상적으로 설명하는 데 사용되는 렌더링 방정식의 특수 버전으로 반사 방정식이라고 합니다.

PBR의 반사 방정식은 다음과 같은 형태로 추상화할 수 있습니다.

Lo(p,ωo)=Ωfr(p,ωi,ωo)Li(p,ωi)nωidωi

반사 방정식은 복잡해 보일 수 있지만, 부분별로 분해하면 그 신비를 풀 수 있습니다.

반사 방정식을 더 잘 이해하려면 먼저 방사 측정법을 이해하세요. 라디오메트릭스는 가시광선을 포함한 전자기장 복사를 측정하는 데 사용되는 방법입니다. 곡면이나 특정 방향의 빛을 측정하는 데 사용할 수 있는 방사성 양이 많이 있습니다. 여기서는 L로 표시되는 반사 방정식과 관련된 하나의 수량인 Radiance에 대해서만 논의합니다.

먼저, 방사성 측정에 관련된 개념, 명사, 공식, 기타 정보를 표로 나타내는데, 이에 대해서는 나중에 자세히 소개하겠습니다.

이름 상징 단위 공식 분석하다

복사에너지(복사에너지) Q 줄(J)

  • 전자기 방사선 에너지

방사속(복사속) \피 와트(W) Φ=dQdt 단위 시간당 복사되는 에너지로 복사 전력(Radiant Power) 또는 플럭스(Flux)라고도 합니다.

방사량(방사량) 와트/제곱미터(W/m2) Φ=dΦdA단위 면적당 도달하는 방사선속

라디오시티(라디오시티) 와트/제곱미터(W/m2) M=dΦdA복사속을 떠나는 단위 면적, 복사라고도 불리는 복사 방출(Radiant Existance)

복사강도(복사강도) 와트/스테레오라디언(W/sr) I=dΦdω 단위 입체각을 통한 복사속

래디언스(래디언스) 와트/제곱미터 고체 라디안(W/m2sr) L=dΦdωdA 단위 면적과 단위 입체각을 통과하는 복사속

입체 각도(입체 각도) \오 입체 라디안, 스테라디안(sr) ω=Sr2 2차원 호를 3차원으로 확장한 것입니다. 1스테라디안은 단위 구의 표면적과 같습니다.

복사휘도는 단일 방향으로 방출되는 빛의 크기나 강도를 정량화하는 데 사용됩니다. 방사선율은 여러 물리적 변수의 집합입니다. 관련된 물리적 변수는 다음과 같습니다.

  • 복사속: 방사속은 광원의 에너지 출력을 와트 단위로 나타내는 기호 Φ로 표시됩니다. 빛은 각각 특정(가시적) 색상과 관련된 다양한 파장의 에너지 모음입니다. 따라서 광원에서 방출되는 에너지는 광원에 포함된 모든 다양한 파장의 함수로 볼 수 있습니다. 390nm(나노미터)에서 700nm 사이의 파장을 갖는 빛은 가시광선 스펙트럼에 있는 것으로 간주됩니다. 즉, 인간의 눈에 보이는 파장을 의미합니다.

위 이미지는 태양의 다양한 파장의 빛에 포함된 에너지를 보여줍니다.

전통적인 물리학의 복사속은 다양한 파장으로 구성된 이 함수의 전체 면적을 계산합니다. 이 계산은 매우 복잡하고 많은 성능을 소모합니다. PBR 기술에서는 파장의 세기를 직접적으로 사용하지 않고, 복사속 계산을 단순화하기 위해 3원색 코딩(RGB)을 사용합니다. 이러한 단순화로 인해 일부 정보가 손실되더라도 시각적 효과에 미치는 영향은 기본적으로 무시할 수 있습니다.

  • 입체각: ω 기호로 표시되며 단위 구에 투영된 단면의 크기 또는 면적을 나타냅니다. 입체각을 볼륨이 있는 방향으로 생각할 수 있습니다.

좀 더 생생하게 설명하자면, 관찰자가 단위구의 중심에 서서 투영 방향을 바라볼 때, 단위구에 투영된 외곽선의 크기가 입체각입니다.

  • 복사강도: 기호 I로 표시되며 광원이 단위 구의 각 단위 입체각에 투사하는 복사속을 나타냅니다. 예를 들어, 점 광원이 모든 방향으로 균일하게 에너지를 방사한다고 가정하면 방사 강도는 단위 면적(입체각) 내의 에너지로 계산할 수 있습니다.

방사선 강도 계산 공식:

I=dΦdω

여기서 I는 복사 플럭스 Φ의 복사 강도를 입체각 ω으로 나눈 값을 나타냅니다.

위의 물리적 변수를 이해한 후에 방사율 방정식에 대해 계속 논의할 수 있습니다. 다음 방정식으로 표현되는 의미는 복사 강도 Φ를 갖는 빛이 입체각 ω을 통해 복사하는 영역 A에서 관찰할 수 있는 총 에너지입니다.

L=\frac{I}{dA^\perp}=\frac{\frac{d\Phi}{d\omega}{dA\cos\theta}=\frac{d\Phi}{ dA d\omega \cos\theta}

작성자 메모: 원본 기사의 공식은 L=d2ΦdAdωcosθ입니다. 파생 후에는 정사각형이 없습니다.​

복사휘도는 빛의 입사(또는 소스) 각도와 평면 노멀 θcosθ 사이의 각도를 기반으로 계산된 영역의 빛의 양에 대한 방사 측정법입니다. 비행기에서 빛이 비스듬히 비칠수록 빛은 더 약해집니다. 반대로, 빛이 표면에 수직으로 비춰질수록 빛은 더 강해집니다. 기본 조명의 디퓨즈 색상 계산과 유사하게 cosθ는 빛 방향과 표면 노멀의 내적과 직접적으로 같습니다.

cpp
float cosTheta = dot(lightDir, N);

위의 물리기호들은 PBR의 반사방정식과 직접적인 연관이 있는 것 같지는 않습니다. 그러나 입체각 \오과 면적 A이 모두 무한히 작은 것으로 간주되면 복사휘도를 사용하여 공간의 한 지점에 부딪히는 광선의 흐름을 분석할 수 있습니다. 이는 단일 광선이 단일 지점의 복사휘도에 미치는 영향을 계산할 수 있음을 의미합니다. 또한 입체각 ω은 방향 벡터 ω로 변환되고, 면적 A는 점 p으로 변환됩니다. 따라서 셰이더에서는 휘도를 직접 사용하여 각 조각에 대한 단일 광선의 기여도를 계산합니다.

실제로, 빛의 광도에 대해 이야기할 때 우리는 일반적으로 점 p에 입사하는 모든 광선에만 초점을 맞춥니다. 이러한 조명의 휘도의 합을 복도라고 합니다. 휘도와 복사조도를 이해한 후 반사 방정식으로 돌아갑니다.

Lo(p,ωo)=Ωfr(p,ωi,ωo)Li(p,ωi)nωidωi

렌더링 방정식에서 L은 특정 점 p의 휘도를 나타내며, 입사광의 극소 입체각 ωi은 입사광의 방향 벡터 ωi로 간주할 수 있습니다. 입사광과 평면 사이의 각도가 에너지에 미치는 영향을 측정하는 데 사용되는 cosθ 구성요소는 복사 방정식에서 벗어나 반사 방정식nωi의 별도 항으로 사용됩니다.

반사 방정식은 모든 시선 방향ω0에서 점 p에 의해 반사된 휘도 Lo(p,ωo)의 합을 계산합니다. 즉, L0ωo 방향에서 눈으로 관찰되는 p 지점의 총 방사조도를 계산합니다.

반사 방정식에 사용되는 방사조도는 특정 방향의 입사광뿐만 아니라 p 지점을 중심으로 하는 반구 Ω 내의 모든 입사광을 포함해야 합니다. 이 반구는 표면 노멀 n을 둘러싸는 반구를 나타냅니다.

저자 메모: 왜 전체 구가 아닌 반구만 계산합니까?

다른 반구는 시선과 반대이기 때문에 관찰할 수 없기 때문에, 즉 복사속 기여도가 0이므로 무시한다.

이 영역(반구) 내의 모든 값을 계산하기 위해 반사 방정식에 적분이라는 수학 기호를 사용하여 반구Ω 내의 모든 입사 벡터 dωi를 계산합니다.

적분을 통해 면적을 계산하는 방법에는 분석적으로점근적으로(수치적으로) 두 가지 방법이 있습니다. 현재로서는 렌더링 계산을 만족시킬 수 있는 분석 방법이 없으므로 이 통합 문제를 해결하기 위해 이산 점근 방법만 선택할 수 있습니다.

구체적인 방법은 특정 스텝 크기에 따라 반구 Ω에서 반사 방정식을 이산적으로 해결한 다음, 얻은 결과를 스텝 크기에 따라 평균화하는 것입니다. 이 방법을 **리만 합(Riemann sum)**이라고 합니다. 구현을 위한 의사코드는 다음과 같습니다.

cpp
int steps = 100; // 계산/산출(Calculate)의 개수 ,개수 ,계산/산출(Calculate)결과 。
float dW  = 1.0f / steps;
vec3 P    = ...;
vec3 Wo   = ...;
vec3 N    = ...;
float sum = 0.0f;
for(int i = 0; i < steps; ++i) 
{
    vec3 Wi = getNextIncomingLightDir(i);
    sum += Fr(P, Wi, Wo) * L(P, Wi) * dot(N, Wi) * dW;
}

dW 값이 작을수록 결과는 적분 함수의 올바른 면적 또는 부피에 더 가까워집니다. 이산적인 스텝 길이를 측정하는 dW는 반사 방정식에서 dωi로 간주될 수 있습니다. 적분 계산에 사용하는 dωi는 선형 연속 기호로 코드에서는 dW와 직접적인 관련이 없지만 이 방법은 이해에 도움이 되며 이 이산 점근 계산 방법은 항상 올바른 결과에 매우 가까운 값을 얻을 수 있습니다. 단계 수를 늘리면 리만 합의 정확도가 향상될 수 있지만 계산량도 증가한다는 점은 언급할 가치가 있습니다.

반사 방정식은 모든 방향으로 반구Ω에 들어가고ωi 중심점p에 부딪히고, 반사 함수fr를 통해 관찰자의 눈에 들어오는 모든 입사광 Ω의 휘도의 합을 더한 것입니다. 광원으로부터 입사광 휘도를 얻을 수 있으며, 환경 맵을 사용하여 모든 입사 방향의 휘도를 측정할 수 있습니다.

이 시점에서 반사 방정식에서는 fr 항만 설명되지 않은 상태로 남습니다. fr은 BRDF(양방향 반사 분포 함수)입니다. 그 기능은 표면 재료 특성을 기반으로 입사 광도의 크기를 조정하거나 가중치를 부여하는 것입니다.

3.1.4 양방향 반사 분포 함수(BRDF)

양방향 반사율 분포 함수(BRDF)는 입사광 방향ωi을 입력 매개변수로 사용하는 함수입니다. 출력 매개변수는 출현광 ωo이고 표면 노멀은 n이며 매개변수 a는 마이크로평면의 거칠기를 나타냅니다.

BRDF 함수는 주어진 속성을 사용하여 불투명 표면의 최종 반사광에 대한 각 개별 광선의 기여도를 대략적으로 계산합니다. 표면이 완전히 매끄러운 경우(예: 거울) 모든 입사광 ωi에 대한 BRDF 함수는 0.0을 반환합니다. 단, 나가는 빛의 방향 각도 ωo가 표면 노멀을 중심 축으로 하는 입사광 방향의 각도 ωi와 완전히 대칭이 아닌 경우 1.0이 반환됩니다.

BRDF의 재료의 반사 및 굴절 특성 시뮬레이션은 이전에 논의된 마이크로평면 이론을 기반으로 합니다. BRDF가 물리적으로 합리적이려면 에너지 보존 법칙을 준수해야 합니다. 예를 들어, 반사된 빛 에너지의 합은 입사광을 초과해서는 안 됩니다. 기술적으로 말하면 Blinn-Phong 조명 모델은 BRDF와 같이 ωiωo를 입력 매개변수로 사용하지만 물리 기반 렌더링과 같은 에너지 보존 법칙을 엄격하게 준수하지는 않습니다.

BRDF에는 표면 조명을 시뮬레이션하기 위한 여러 알고리즘이 있습니다. 그러나 기본적으로 모든 실시간 렌더링 파이프라인은 Cook-Torrance BRDF를 사용합니다.

Cook-Torrance BRDF는 디퓨즈와 스페큘러 반사라는 두 부분으로 나뉩니다.

fr=kdflambert+ksfcooktorrance

여기서 kd는 굴절된 입사광의 비율이고, ks는 스페큘러 반사되는 입사광의 다른 부분입니다. BRDF 방정식 좌변의 flambert는 디퓨즈 부분을 나타내며, 이를 렘브란트 디퓨즈(Lambertian Diffuse)라고 합니다. 이는 이전의 확산 셰이딩과 유사하며 상수 방정식입니다.

flambert=cπ

여기서 c는 확산 표면 질감과 유사한 알베도 또는 표면 색상을 나타냅니다. π로 나누는 것은 디퓨즈광을 정규화하고 이후 BRDF 통합을 준비하는 것입니다.

여기서 Rembrandt 디퓨즈와 이전에 사용된 디퓨즈 사이의 관계: 이전 디퓨즈는 법선과 표면 노멀의 내적을 곱한 표면의 디퓨즈 색상을 사용했습니다. 이 내적은 여전히 ​​존재하지만 BRDF 외부로 이동하여 nωi로 작성되고 반사 방정식 Lo 뒤에 배치됩니다.

BRDF의 반사(반사) 부분은 더 복잡합니다.

f=DFG4(ωon)(ωin)

Cook-Torrance 스페큘러 반사 BRDF는 3가지 함수(D, F, G)와 정규화 인자로 구성됩니다. D, FG 기호는 각각 특정 부품의 표면 반사 특성을 대략적으로 시뮬레이션합니다.

  • D(정규 D분포 함수, NDF): 표면 러프니스의 영향을 받아 방향 방향이 중간 벡터와 일치하는 마이크로패싯의 수를 추정하는 정규 분포 함수입니다. 마이크로패싯을 추정하는 데 사용되는 주요 기능입니다.

  • F(Fresnel 방정식): 다양한 표면 각도에서 표면에 의해 반사되는 빛의 비율을 설명하는 프레넬 방정식.

  • G(G기하학 함수): 마이크로플레인의 자체 그림자 특성을 설명하는 기하학적 함수입니다. 평면이 상대적으로 거칠면 표면의 마이크로패싯이 다른 마이크로패싯을 차단하고 표면에서 반사되는 빛의 양을 줄일 수 있습니다.

위의 각 기능은 해당 물리적 ​​매개변수를 추정하는 데 사용되며, 해당 물리적 ​​메커니즘을 구현하는 데 사용되는 각 기능은 둘 이상의 형태를 가집니다. 그 중 일부는 매우 현실적이지만 다른 일부는 매우 효율적입니다. 자신의 필요에 따라 원하는 기능의 구현 방법을 선택할 수 있습니다.

Epic Games의 Brian Karis는 이러한 기능의 다양한 대략적인 구현에 대해 광범위한 연구를 수행했습니다. Unreal Engine 4에서 Epic Games가 사용하는 함수는 여기서 사용됩니다. 여기서 D는 Trowbridge-Reitz GGX를 사용하고, F는 Fresnel-Schlick 근사(Approximation)를 사용하고, G는 Smith의 Schlick-GGX를 사용합니다.

3.1.4.1 D(정규 D분포 함수, NDF)

정규 분포 함수는 일부(예: 중간) 벡터 h의 방향과 정렬된 마이크로패싯의 비율을 통계적으로 근사화합니다.

현재 일부 러프니스 파라미터와 곧 사용할 매개변수인 Trowbridge-Reitz GGX(GGXTR)가 제공되는 한 마이크로패싯의 전체 방향을 통계적으로 추정할 수 있는 NDF가 많이 있습니다.

NDFGGXTR(n,h,α)=α2π((nh)2(α21)+1)2

여기서 h는 마이크로평면을 측정하는 데 사용되는 반각 벡터이고, α는 표면 러프니스이며, n은 표면 노멀입니다. 표면 노멀과 빛의 방향 사이에 h를 배치하고 다른 거칠기를 매개변수로 사용하면 다음과 같은 효과를 얻을 수 있습니다.

거칠기가 매우 낮은 경우(표면이 매우 매끄러움) 중간 벡터 h와 일치하는 방향의 마이크로패싯은 작은 반경 범위 내에 매우 집중됩니다. 이러한 농도로 인해 NDF는 결국 매우 밝은 점을 생성하게 됩니다. 그러나 표면이 거칠면 마이크로패싯의 방향이 더욱 불규칙해집니다. 벡터 h의 방향으로 정렬된 마이크로패싯은 훨씬 더 큰 반경 내에 분포되지만 농도가 낮을수록 최종 효과가 더 어두워집니다.

Trowbridge-Reitz GGX의 NDF 구현 코드:

cpp
float DistributionGGX(vec3 N, vec3 H, float a)
{
    float a2     = a*a;
    float NdotH  = max(dot(N, H), 0.0);
    float NdotH2 = NdotH*NdotH;
	
    float nom    = a2;
    float denom  = (NdotH2 * (a2 - 1.0) + 1.0);
    denom        = PI * denom * denom;
	
    return nom / denom;
}

3.1.4.2 F(F레스넬 방정식)

프레넬 방정식은 표면에서 반사된 빛을 서로 다른 시야 방향으로 굴절된 빛으로 나눈 비율을 정의합니다. 광선이 표면에 닿는 순간 프레넬은 표면과 보는 방향 사이의 각도를 기반으로 반사되는 빛의 비율을 계산합니다. 이 비율과 에너지 보존 법칙에 따르면, 남은 에너지가 굴절될 에너지라는 것을 직접적으로 알 수 있다.

모든 표면이나 재료는 수직으로 볼 때 기본 반사율을 갖습니다. 어떤 각도에서든 표면을 보면 모든 반사 현상이 더욱 분명해집니다(반사율이 기본 반사율보다 높습니다). 주변의 어떤 물체에서도 이 현상을 관찰할 수 있습니다. 테이블을 90도 각도로 관찰하면 정상적인 반사 현상이 더욱 분명해집니다. 이론적으로 어떤 물질의 표면을 완벽한 90도 각도로 관찰하면 전반사가 나타나야 합니다(모든 물체와 물질에는 프레넬 현상이 있습니다).

프레넬 방정식 역시 복잡한 방정식이지만 다행히 프레넬-Schlick을 사용하여 프레넬 방정식을 근사화할 수 있습니다.

F(h,v,F0)=F0+(1F0)(1(hv))5

F0은 표면의 기본 반사율을 나타내며, **굴절 지수(IOR)**라는 방법을 사용하여 계산할 수 있습니다. 구체에 적용될 때의 효과는 여러분이 보는 것과 같습니다. 관찰 방향이 지표각(일반 시야각과 90도 다름)에 가까울수록 프레넬 현상으로 인한 반사가 더 강해집니다.

프레넬 방정식에는 몇 가지 미묘한 점이 있습니다. 하나는 Fresnel-Schlick 알고리즘이 유전체(절연체) 표면에 대해 정의된 알고리즘일 뿐이라는 것입니다. 금속 표면의 경우 기본 반사율을 계산하기 위해 유전체의 굴절률을 사용하는 것은 부적절합니다. 이를 계산하려면 다른 프레넬 방정식을 사용해야 합니다. 이 문제의 경우 전면 시야각(즉, 0도 각도로 표면을 향함)에서 표면의 응답(F0)을 미리 계산한 다음 이전 Fresnel-Schlick 알고리즘과 마찬가지로 관찰 각도를 기반으로 보간할 수 있습니다. 이런 식으로 우리는 하나의 방정식으로 금속과 유전체를 모두 계산할 수 있습니다.

정면 시야각에서 표면의 반사 또는 기본 반사율은 이 데이터베이스에서 찾을 수 있습니다. SIGGRAPH 오픈 클래스에서 Naty Hoffman이 나열한 몇 가지 공통 자료의 값은 다음과 같습니다.

여기서 관찰할 수 있는 흥미로운 현상은 모든 유전체 재료 표면의 기본 반사율이 0.17보다 높지 않다는 것입니다. 이는 일반적인 상황이 아니라 실제로는 예외입니다. 전도성 물질 표면의 기본 반사율은 더 높게 시작하고 (대부분) 0.5에서 1.0 사이에서 다양합니다. 또한 도체나 금속 표면의 경우 기본 반사율은 일반적으로 색상으로 표시되므로 RGB의 3원색으로 표시됩니다(정선 입사의 반사율은 파장에 따라 달라질 수 있음). 이 현상은 금속 표면에서만 관찰할 수 있습니다.

유전체 표면과 비교하여 금속 표면의 이러한 고유한 특성은 소위 금속 작업 흐름이라는 개념을 이끌어냅니다. 즉, 표면 재질 쓰기에 참여하려면 Metalness라는 추가 매개변수를 사용해야 합니다. 금속성은 재료 표면이 금속인지 비금속인지를 설명하는 데 사용됩니다.

유전체와 도체의 값을 미리 계산함으로써 두 표면 유형 모두에 대해 동일한 프레넬-슐릭 근사치를 사용할 수 있지만 금속 표면의 경우 기본 반사율에 색상을 추가해야 합니다. 우리는 일반적으로 다음과 같이 구현합니다.

cpp
vec3 F0 = vec3(0.04);
F0      = mix(F0, surfaceColor.rgb, metalness);

우리는 대부분의 유전체 표면에 대한 대략적인 기본 반사율을 정의합니다. F0은 가장 일반적인 전해질 표면의 평균을 취하며 이는 다시 근사치입니다. 그러나 기본 반사율로 0.04를 사용하면 대부분의 유전체 표면에 충분하며 추가 표면 매개변수를 입력할 필요 없이 물리적으로 신뢰할 수 있는 결과를 생성할 수 있습니다. 그런 다음 금속 표면 특성에 따라 유전체의 기본 반사율을 사용하거나 F0을 표면 색상으로 사용합니다. 금속 표면은 굴절된 모든 빛을 흡수하고 디퓨즈가 없기 때문에 표면 색상 텍스처를 기본 반사율로 직접 사용할 수 있습니다.

Fresnel Schlick 근사는 GLSL 코드로 구현될 수 있습니다:

cpp
vec3 fresnelSchlick(float cosTheta, vec3 F0)
{
    return F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0);
}

여기서 cosTheta는 표면 노멀 벡터 n과 관찰 방향 v의 내적 결과입니다.

3.1.4.3 G(G기하학 함수)

기하학적 함수는 마이크로 평면이 서로 가려져 빛의 에너지가 감소하거나 손실되는 현상을 시뮬레이션합니다.

NDF와 마찬가지로 기하학 함수도 거칠기를 입력 매개변수로 사용합니다. 거칠다는 것은 마이크로패싯이 셀프 섀도잉을 생성할 확률이 높다는 것을 의미합니다. 기하학 함수는 GGX와 Schlick-Beckmann의 조합인 아날로그 함수 Schlick-GGX를 사용합니다.

GSchlickGGX(n,v,k)=nv(nv)(1k)+k

여기서 k는 직접 조명 및 IBL 조명에 사용되는 기하학 함수의 매개변수인 러프니스 α를 사용하여 계산됩니다.

k=(α+1)28kIBL=α22

여기서 α 값은 엔진이 거칠기를 α로 변환하는 방법에 따라 달라집니다. 다음 튜토리얼에서는 이 변환을 수행하는 방법과 위치에 대해 자세히 설명합니다.

형상을 효과적으로 시뮬레이션하려면 시선 방향(기하학적 폐색)과 빛 방향(기하학적 그림자)이라는 두 가지 관점을 동시에 고려해야 합니다. Smith 함수를 사용하여 두 부분을 합칠 수 있습니다.

G(n,v,l,k)=Gsub(n,v,k)Gsub(n,l,k)

그 중 v는 시선 벡터를 나타내고, Gsub(n,v,k)는 시선 방향의 기하학적 폐색을 나타냅니다. l은 빛 벡터를 나타내고 Gsub(n,l,k)는 빛 방향의 기하학적 그림자를 나타냅니다. Smith 함수와 Schlick-GGX를 Gsub로 사용하면 아래와 같이 다양한 러프니스 R의 시각적 효과를 얻을 수 있습니다.

기하학 함수는 [0.0, 1.0] 범위의 승수입니다. 여기서 흰색(1.0)은 마이크로패싯 음영이 없음을 의미하고 검은색(0.0)은 마이크로패싯이 완전히 가려짐을 의미합니다.

GLSL로 작성된 기하학 함수 코드는 다음과 같습니다.

cpp
float GeometrySchlickGGX(float NdotV, float k)
{
    float nom   = NdotV;
    float denom = NdotV * (1.0 - k) + k;
	
    return nom / denom;
}
  
float GeometrySmith(vec3 N, vec3 V, vec3 L, float k)
{
    float NdotV = max(dot(N, V), 0.0);
    float NdotL = max(dot(N, L), 0.0);
    float ggx1 = GeometrySchlickGGX(NdotV, k); // 의 차폐/오클루전
    float ggx2 = GeometrySchlickGGX(NdotL, k); // 의 그림자(Shadow)
	
    return ggx1 * ggx2;
}

3.1.4.4 Cook-Torrance 반사 방정식

최종 반사 방정식을 얻기 위해 Cook-Torrance 반사 방정식의 각 부분을 물리적 기반 BRDF로 대체합니다.

Lo(p,ωo)=Ω(kdcπ+ksDFG4(ωon)(ωin))Li(p,ωi)nωidωi

위의 방정식은 수학적으로 완전히 정확하지는 않습니다. 앞에서 언급한 바와 같이 프레넬 항 F은 표면의 빛의 반사 비율을 나타내며, 이는 ks 인수에 직접적인 영향을 미치며, 이는 반사 방정식의 스페큘러 반사 부분이 이미 ks 인수를 암시하고 있음을 의미합니다. 따라서 최종 Cook-Torrance 반사 방정식은 다음과 같습니다(ks 제거).

Lo(p,ωo)=Ω(kdcπ+DFG4(ωon)(ωin))Li(p,ωi)nωidωi

이 방정식은 일반적으로 물리 기반 렌더링(PBR)이라고 부르는 물리 기반 렌더링 모델을 완전히 정의합니다.

3.1.5 PBR 소재 만들기

PBR 수학적 모델에 대한 기본적인 이해를 마친 후 마지막으로 논의하고 싶은 것은 아티스트가 PBR 렌더링 파이프라인에서 직접 사용할 수 있도록 어떤 종류의 재료 속성을 생성해야 하는가입니다. PBR 파이프라인에 필요한 모든 머티리얼 매개변수는 텍스처를 사용하여 정의하거나 시뮬레이션할 수 있습니다. 텍스처를 사용하면 지정된 표면이 픽셀 단위로 빛과 상호 작용하는 방식, 즉 이 점이 금속인지, 표면이 얼마나 거친지, 표면이 다양한 파장의 빛에 반응하는 방식을 제어할 수 있습니다.

다음은 PBR 렌더링 파이프라인에서 일반적으로 사용되는 텍스처입니다.

다음 매개변수는 2.4 게임 엔진에서 PBR 적용에 설명된 많은 매개변수와 기본적으로 일치합니다.

  • 반사율(알베도): 반사율 텍스처는 재료 표면의 각 픽셀 색상을 지정합니다. 재질이 금속인 경우 텍스처에는 기본 반사율이 포함됩니다. 이는 이전에 사용한 확산 텍스처와 매우 유사하지만 조명 정보가 포함되어 있지 않습니다. 확산 텍스처에는 일반적으로 약간의 그림자와 더 어두운 균열이 있는데, 이는 재료의 색상만 포함하는 알베도 맵에 나타나지 않아야 합니다(금속 재료는 기본 반사율입니다).

  • Normal (Normal): 일반 텍스처는 이전에 사용한 것과 정확히 동일합니다. 노멀 맵은 픽셀 단위로 표면 노멀을 지정하므로 평평한 표면도 울퉁불퉁해 보일 수 있습니다.

  • 메탈릭(메탈릭): 메탈릭 맵은 픽셀 단위로 표면이 금속성인지 유전체인지 여부를 지정합니다. PBR 엔진의 각 설정에 따라 금속 정도는 [0.0, 1.0] 범위의 부동 소수점 값이거나 0 또는 1의 부울 값일 수 있습니다.

  • 러프니스(러프니스): 러프니스 맵은 표면이 픽셀 단위로 얼마나 거친지를 지정합니다. 러프니스 값은 재료 표면의 마이크로패싯의 평균 방향에 영향을 미칩니다. 반사 효과는 거친 표면에서 더 크고 흐릿하며, 매끄러운 표면은 더 밝고 선명합니다. 일부 PBR 엔진은 부드러움 맵이 더 직관적이라고 생각하기 때문에 러프니스 맵 대신 부드러움 맵을 사용합니다. 샘플링된 매끄러움은 (1-매끄러움) = 거칠기를 사용하여 거칠기로 변환할 수 있습니다.

  • 앰비언트 오클루전(AO)(앰비언트 오클루전(AO), AO): AO 맵은 재료 표면 및 형상 주변의 가능한 위치에 추가 그림자 효과를 제공합니다. 예를 들어, 벽돌 벽이 있습니다. 두 벽돌 사이의 간격에는 알베도 맵이 그림자 없이 색상 정보를 포함해야 하며, AO 맵은 이 섹션을 더 어둡게 하여 빛이 이 위치에 도달하기 어렵게 만들어야 함을 지정하는 데 사용됩니다. 조명 계산의 마지막 단계에서 AO 맵을 사용하면 렌더링 효과를 크게 향상시킬 수 있습니다. 모델이나 재료의 AO 맵은 일반적으로 모델링 단계에서 수동으로 생성됩니다.

아티스트는 현실 세계의 객체의 물리적 속성을 기반으로 렌더링을 위한 물리적 기반 재료를 직접 설정하고 조정할 수 있습니다.

물리 기반 렌더링 파이프라인의 가장 큰 장점은 재료의 물리적 특성이 변경되지 않고 유지된다는 것입니다. 주변광을 어떻게 설정하더라도 실제에 가까운 렌더링 결과를 얻을 수 있어 아티스트의 삶이 더욱 윤택해집니다.

물리적 파이프라인을 기반으로 한 머티리얼은 다양한 렌더링 엔진으로 쉽게 이식할 수 있으며, 조명 환경에 관계없이 자연스러운 결과를 정확하게 렌더링할 수 있습니다.

3.2 PBR 조명 구현

3.1장은 Cook-Torrance 반사 방정식의 이론적 및 공식적 중요성을 설명합니다. 이 섹션에서는 앞에서 언급한 이론을 포인트 라이트, 방향 조명 및 스포트라이트와 같은 직접 조명을 기반으로 하는 렌더러로 변환하는 방법을 살펴보겠습니다.

3.2.1 방사조도 계산

3.1장에서는 Cook-Torrance 반사 방정식의 의미 대부분을 설명하지만 한 가지가 언급되지 않습니다. 장면에서 방사조도(Irradiance, 즉 방사선의 총 에너지 L)를 어떻게 처리합니까? 컴퓨터 분야에서 장면의 휘도 L는 지정된 입체각 ω을 통과하는 광원의 복사속 ϕ을 측정합니다. 여기서 우리는 입체각 ω이 무한히 작다고 가정합니다. 즉, 복사휘도는 지정된 방향 벡터를 통과하는 광원에서 방출된 광선의 플럭스를 측정할 정도로 작습니다.

이 가정을 사용하여 이전 튜토리얼에서 설명한 조명 계산에 이를 어떻게 통합합니까? RGB로 (23.47, 21.31, 20.79)로 표현되는 방사속을 갖는 점 광원이 있다고 상상해 보십시오. 이 광원의 복사 강도는 복사속을 모든 나가는 방향으로 나눈 값과 같습니다. 평면의 특정 점 p을 음영 처리할 때 가능한 모든 입사광 방향은 반구 Ω를 통과하지만 단 하나의 입사 방향 ωi만 점 광원에서 직접 나옵니다. 그리고 우리 장면에는 하나의 광원만 포함되어 있고 이 광원은 점일 뿐이므로 점 p에서 다른 모든 입사광 방향의 휘도는 0이 되어야 합니다.

순간적으로 점광원의 거리 감쇠를 고려하지 않고 입사광의 휘도는 광원이 어디에 배치되어도 동일하고(입사광 각도 cosθ가 휘도에 미치는 영향을 무시) 점광원의 방사 강도가 모든 방향에서 동일하기 때문에 유효 방사 강도는 방사속과 완전히 동일합니다. 상수 값(23.47, 21.31, 20.79).

그러나 복사휘도는 p 위치를 입력 매개변수로 사용해야 합니다. 왜냐하면 실제로 빛의 방사 강도는 p 지점과 광원 사이의 거리에 따라 일정한 감쇠를 가지기 때문입니다. 또한 원래의 복사 방정식에서 표면 노멀 n과 입사광 방향 벡터 ωi의 내적도 결과에 영향을 미친다는 것을 알 수 있습니다.

좀 더 간결하게 설명하자면: 점 광원에서 직접 조명을 받는 경우 휘도 함수 L이 빛의 색상을 계산합니다. p 지점까지의 거리를 감쇠한 후 nωi만큼 크기가 조정됩니다. p 지점에 닿을 수 있는 빛 ωi의 방향은 p 지점에서 광원 방향입니다. 이것을 코드에 넣으세요:

cpp
vec3  lightColor  = vec3(23.47, 21.31, 20.79);
vec3  wi          = normalize(lightPos - fragPos);
float cosTheta    = max(dot(N, Wi), 0.0);
// 계산/산출(Calculate)라이트(Light)포인트 fragPos의 감쇠(Falloff/Attenuation)계수
float attenuation = calculateAttenuation(fragPos, lightPos); 
// 의 radiance타입/유형 ,vec3
vec3 radiance  = lightColor * (attenuation * cosTheta);

이 코드는 여러분에게 매우 친숙할 것입니다. 이것이 디퓨즈을 계산하는 데 사용한 알고리즘입니다! 단일 광원으로부터 직접 조명만 있는 경우 휘도 계산 방법은 이전 조명 알고리즘과 유사합니다.

여기서는 점광원이 극미하고 공간의 한 점일 뿐이라고 가정합니다. 체적 광원 모델을 사용하면 광도가 0이 아닌 입사광의 방향이 많이 있습니다.

입사각이 일정하고 감쇠 계수가 없는 평행 광원, 고정된 복사 강도가 없지만 전방 벡터를 중심으로 크기가 조정되는 스포트라이트와 같은 다른 유형의 점 기반 광원에 대해서도 비슷한 방식으로 휘도를 계산할 수 있습니다.

이는 또한 표면 반구 Ω에 대한 적분 으로 다시 돌아옵니다. 우리는 여러 단일 위치 광원이 동일한 표면의 동일한 지점을 조명하기 위해 통합이 필요하지 않다는 것을 알고 있습니다. 우리는 알려진 수의 광원을 직접 추출하고, 이들 광원의 방사조도를 개별적으로 계산한 다음 이를 합산할 수 있습니다. 결국 각 광원에는 물체 표면의 광도에 영향을 미칠 수 있는 방향성 조명이 하나만 있습니다. 이런 식으로 비교적 간단한 루프를 통해 각 광원의 기여도를 계산하면 전체 PBR 조명 계산이 완료될 수 있습니다. 주변광은 모든 방향에서 올 수 있으므로 IBL을 사용하여 계산에 주변광을 추가해야 하는 경우에만 적분을 사용해야 합니다.

3.2.2 PBR 표면 모델

앞서 언급한 PBR 모델을 만족하는 소스 셰이더를 작성하는 것부터 시작해 보겠습니다. 먼저 표면의 PBR 관련 속성을 셰이더에 공급해야 합니다.

cpp
#version 330 core
out vec4 FragColor;
in vec2 TexCoords;
in vec3 WorldPos;
in vec3 Normal;
  
uniform vec3 camPos;
  
uniform vec3  albedo;
uniform float metallic;
uniform float roughness;
uniform float ao;

버텍스 셰이더에서 일반적인 입력을 얻을 수 있으며 그 중 일부는 객체 표면의 재료 속성입니다.

소스 셰이더 시작 부분에서 먼저 모든 조명 알고리즘이 수행해야 하는 몇 가지 계산을 수행합니다.

cpp
void main()
{
    vec3 N = normalize(Normal); 
    vec3 V = normalize(camPos - WorldPos);
    [...]
}

3.2.2.1 직접 조명

이 튜토리얼 예제에서는 장면 방사조도 소스로 4개의 점 조명을 사용합니다. 반사 방정식을 만족시키기 위해 각 광원을 반복하고 개별 광도를 계산한 다음 BRDF와 입사각으로 스케일링된 결과를 합산합니다. 우리는 이 루프를 적분 연산의 구현으로 생각할 수 있습니다. 먼저, 각 광원의 관련 매개변수를 계산합니다.

cpp
vec3 Lo = vec3(0.0);
for(int i = 0; i < 4; ++i) 
{
    vec3 L = normalize(lightPositions[i] - WorldPos);
    vec3 H = normalize(V + L);
  
    float distance    = length(lightPositions[i] - WorldPos);
    float attenuation = 1.0 / (distance * distance);
    vec3 radiance     = lightColors[i] * attenuation; 
    [...] // 로직 ,따라서 for루프 ‘}’。

선형 공간에서 계산을 수행하므로(감마 보정은 최종 단계에서 처리됨) 광원의 감쇠는 물리적 역제곱 법칙과 더 일치합니다.

역제곱 법칙은 물리적으로 정확하지만 빛의 감소를 더 잘 제어하기 위해 상수, 선형 및 2차 방정식을 사용할 수도 있습니다. 이러한 감소가 물리적으로 정확하지 않더라도 마찬가지입니다.

그런 다음 각 광원에 대한 모든 Cook-Torrance BRDF 구성요소를 계산합니다.

DFG4(ωon)(ωin)

우리가 가장 먼저 해야 할 일은 스페큘러 반사와 디퓨즈 사이의 비율, 반사되는 빛의 양, 굴절되는 양을 계산하는 것입니다. 이전 튜토리얼에서 이 프레넬 방정식에 대해 이야기했습니다.

cpp
vec3 fresnelSchlick(float cosTheta, vec3 F0)
{
    return F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0);
}

Fresnel-Schlick 알고리즘에서 요구하는 F0 매개변수는 앞서 언급한 기본 반사율, 즉 표면에 0도 각도로 비추는 빛의 비율이 반사되는 것입니다. 다른 재료의 F0 값은 다릅니다. 소재별로 매우 넓은 소재표에서 만나보실 수 있습니다. 우리는 PBR 메탈릭 파이프라인에서 간단한 가정을 했습니다. 우리는 0.04의 F0 효과가 대부분의 유전체 표면에서 좋아 보일 것이라고 생각했습니다. 금속 표면의 경우 알베도 텍스처에 F0을 넣습니다. 이는 다음과 같이 작성할 수 있습니다.

cpp
vec3 F0 = vec3(0.04); 
F0      = mix(F0, albedo, metallic);
vec3 F  = fresnelSchlick(max(dot(H, V), 0.0), F0);

위 코드에서 볼 수 있듯이 비금속의 F0은 항상 0.04입니다. 메탈릭 속성을 통해 F0와 알베도 사이를 선형적으로 보간하지 않으면 다른 비금속 F0을 얻을 수 있습니다.

F를 사용하면 계산해야 하는 정규 분포 함수 D와 기하학적 함수 G가 여전히 있습니다.

직접 조명이 켜진 PBR 조명 셰이더에서는 다음 코드와 동일합니다.

cpp
float DistributionGGX(vec3 N, vec3 H, float roughness)
{
    float a      = roughness*roughness;
    float a2     = a*a;
    float NdotH  = max(dot(N, H), 0.0);
    float NdotH2 = NdotH*NdotH;
	
    float num   = a2;
    float denom = (NdotH2 * (a2 - 1.0) + 1.0);
    denom = PI * denom * denom;
	
    return num / denom;
}

float GeometrySchlickGGX(float NdotV, float roughness)
{
    float r = (roughness + 1.0);
    float k = (r*r) / 8.0;

    float num   = NdotV;
    float denom = NdotV * (1.0 - k) + k;
	
    return num / denom;
}

float GeometrySmith(vec3 N, vec3 V, vec3 L, float roughness)
{
    float NdotV = max(dot(N, V), 0.0);
    float NdotL = max(dot(N, L), 0.0);
    float ggx2  = GeometrySchlickGGX(NdotV, roughness);
    float ggx1  = GeometrySchlickGGX(NdotL, roughness);
	
    return ggx1 * ggx2;
}

여기서는 3.1 이론 튜토리얼과 비교하여 러프니스 파라미터를 함수에 직접 전달했다는 점에 주목할 가치가 있습니다. 이런 식으로 원래 거칠기에 대해 몇 가지 특별한 작업을 수행할 수 있습니다. 디즈니의 원리와 에픽게임즈의 사용법에 따르면 조명 효과를 계산할 때 정규 분포 함수와 기하학 함수에서 원래 러프니스 대신 거칠기의 제곱을 사용하는 것이 더 정확할 것입니다.

일단 정의되면 NDF 및 G 구성 요소를 계산하는 것은 간단합니다.

cpp
float NDF = DistributionGGX(N, H, roughness);       
float G   = GeometrySmith(N, V, L, roughness);

그런 다음 Cook-Torrance BRDF를 계산할 수 있습니다.

cpp
vec3 numerator    = NDF * G * F;
float denominator = 4.0 * max(dot(N, V), 0.0) * max(dot(N, L), 0.0);
vec3 specular     = numerator / max(denominator, 0.001);

0으로 나누는 것을 방지하기 위해 분모 항목에 0.001을 특별히 추가했습니다.

이 시점에서 우리는 최종적으로 반사 방정식에 대한 각 광원의 기여도를 계산할 수 있습니다. 프레넬 값은 kS와 동일하므로 F를 사용하여 빛이 표면에 닿은 후 반사되는 부분을 나타낼 수 있습니다. 에너지 보존 법칙에 따라 kS를 사용하여 kD를 직접 계산할 수 있습니다.

cpp
vec3 kS = F;
vec3 kD = vec3(1.0) - kS;
  
kD *= 1.0 - metallic; // 에 의해 테이블 굴절 ,디퓨즈(Diffuse)컬러 ,kD구현 개 이면

kS는 빛 에너지가 얼마나 반사되는지를 나타내고, 굴절된 빛의 남은 에너지는 kD로 표시됩니다. 또한 금속 표면은 빛을 굴절시키지 않으므로 확산 색상이 없으므로 kD를 0으로 설정하여 이 규칙을 구현합니다.

이 데이터를 사용하여 최종적으로 각 광원의 방출된 빛을 계산할 수 있습니다.

cpp
const float PI = 3.14159265359;
  
    float NdotL = max(dot(N, L), 0.0);        
    Lo += (kD * albedo / PI + specular) * radiance * NdotL;
}

최종 결과 Lo 또는 방사선(라디오시티)은 실제로 반구 Ω에서 반사 방정식의 통합 결과입니다. 여기서 특히 주목해야 할 점은 BRDF에서 이미 프레넬 매개변수 F를 곱했기 때문에 방정식에서 kS를 제거하고 여기서 다시 곱할 필요가 없다는 점입니다.

실제로 입사광의 가능한 모든 방향을 통합할 수는 없습니다. 왜냐하면 입사광의 4방향만이 이 조각에 영향을 미칠 수 있다는 것을 이미 명확하게 알고 있기 때문입니다. 따라서 이러한 입사광을 처리하려면 루프를 직접 사용하면 됩니다.

남은 것은 조명 결과 Lo에 AO를 적용하는 것뿐입니다. 그러면 이 조각의 최종 색상을 얻을 수 있습니다.

cpp
vec3 ambient = vec3(0.03) * albedo * ao;
vec3 color   = ambient + Lo;

3.2.2.2 선형 및 HDR 렌더링

위에서는 모든 계산이 선형 공간에 있다고 가정합니다. 이 결과를 사용하려면 셰이더 끝에서 감마 보정도 수행해야 합니다. 선형 공간에서 조명을 계산하는 것은 PBR에 매우 중요합니다. 모든 입력 매개변수도 선형이어야 합니다. 이를 고려하지 않으면 잘못된 조명 결과가 발생합니다.

또한, 입력광 매개변수가 실제 물리적 매개변수에 더 가깝기를 바랍니다. 예를 들어, 광도나 색상 값은 매우 광범위한 값을 가질 수 있습니다. 이런 식으로 결과적으로 Lo 출력도 매우 커집니다. 아무런 처리도 하지 않으면 LDR(Low Dynamic Range) 출력 방법에 맞게 기본적으로 0.0에서 1.0 사이로 직접 고정됩니다.

Lo의 값 범위 문제를 효과적으로 해결하기 위해 톤 맵 및 노출 맵을 사용하여 Lo의 HDR(High Dynamic Range)을 LDR에 매핑한 다음 감마 보정을 수행할 수 있습니다.

cpp
color = color / (color + vec3(1.0)); // 톤매핑(Tonemapping)
color = pow(color, vec3(1.0/2.2)); 	 // 보정(Correct)

여기서는 Reinhard 연산자(Reinhard 연산자)를 사용하여 감마 보정 후 높은 동적 범위를 유지하려고 HDR에서 톤 맵 작업을 수행합니다. 우리는 프레임 버퍼를 분리하거나 후처리를 사용하지 않으므로 톤매핑과 감마 보정을 포워드 프래그먼트 셰이더에 직접 넣을 수 있습니다.

PBR 렌더링 파이프라인의 경우 선형 공간과 높은 동적 범위가 매우 중요합니다. 이것이 없으면 서로 다른 빛의 강도에서 밝은 빛과 낮은 빛의 세부 묘사를 그리는 것이 불가능합니다. 잘못된 계산 결과로 인해 보기 흉한 렌더링 효과가 발생합니다.

3.2.2.3 완전한 PBR 직접 조명 셰이더

이제 남은 유일한 일은 최종 톤매핑 및 감마 보정된 색상을 프래그먼트 셰이더의 출력 패스에 전달하는 것이며 PBR 직접 조명 셰이더가 있습니다. 완전성을 위해 전체 주요 기능은 다음과 같습니다.

cpp
#version 330 core
out vec4 FragColor;
in vec2 TexCoords;
in vec3 WorldPos;
in vec3 Normal;

// material parameters
uniform vec3 albedo;
uniform float metallic;
uniform float roughness;
uniform float ao;

// lights
uniform vec3 lightPositions[4];
uniform vec3 lightColors[4];

uniform vec3 camPos;

const float PI = 3.14159265359;
// --------------------------------------------------------------------
float DistributionGGX(vec3 N, vec3 H, float roughness)
{
    float a = roughness*roughness;
    float a2 = a*a;
    float NdotH = max(dot(N, H), 0.0);
    float NdotH2 = NdotH*NdotH;

    float nom   = a2;
    float denom = (NdotH2 * (a2 - 1.0) + 1.0);
    denom = PI * denom * denom;

    return nom / max(denom, 0.001); // prevent divide by zero for roughness=0.0 and NdotH=1.0
}
// --------------------------------------------------------------------
float GeometrySchlickGGX(float NdotV, float roughness)
{
    float r = (roughness + 1.0);
    float k = (r*r) / 8.0;

    float nom   = NdotV;
    float denom = NdotV * (1.0 - k) + k;

    return nom / denom;
}
// --------------------------------------------------------------------
float GeometrySmith(vec3 N, vec3 V, vec3 L, float roughness)
{
    float NdotV = max(dot(N, V), 0.0);
    float NdotL = max(dot(N, L), 0.0);
    float ggx2 = GeometrySchlickGGX(NdotV, roughness);
    float ggx1 = GeometrySchlickGGX(NdotL, roughness);

    return ggx1 * ggx2;
}
// --------------------------------------------------------------------
vec3 fresnelSchlick(float cosTheta, vec3 F0)
{
    return F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0);
}
// --------------------------------------------------------------------
void main()
{		
    vec3 N = normalize(Normal);
    vec3 V = normalize(camPos - WorldPos);

    // calculate reflectance at normal incidence; if dia-electric (like plastic) use F0 
    // of 0.04 and if it's a metal, use the albedo color as F0 (metallic workflow)    
    vec3 F0 = vec3(0.04); 
    F0 = mix(F0, albedo, metallic);

    // reflectance equation
    vec3 Lo = vec3(0.0);
    for(int i = 0; i < 4; ++i) 
    {
        // calculate per-light radiance
        vec3 L = normalize(lightPositions[i] - WorldPos);
        vec3 H = normalize(V + L);
        float distance = length(lightPositions[i] - WorldPos);
        float attenuation = 1.0 / (distance * distance);
        vec3 radiance = lightColors[i] * attenuation;

        // Cook-Torrance BRDF
        float NDF = DistributionGGX(N, H, roughness);   
        float G   = GeometrySmith(N, V, L, roughness);      
        vec3 F    = fresnelSchlick(clamp(dot(H, V), 0.0, 1.0), F0);
           
        vec3 nominator    = NDF * G * F; 
        float denominator = 4 * max(dot(N, V), 0.0) * max(dot(N, L), 0.0);
        vec3 specular = nominator / max(denominator, 0.001); // prevent divide by zero for NdotV=0.0 or NdotL=0.0
        
        // kS is equal to Fresnel
        vec3 kS = F;
        // for energy conservation, the diffuse and specular light can't
        // be above 1.0 (unless the surface emits light); to preserve this
        // relationship the diffuse component (kD) should equal 1.0 - kS.
        vec3 kD = vec3(1.0) - kS;
        // multiply kD by the inverse metalness such that only non-metals 
        // have diffuse lighting, or a linear blend if partly metal (pure metals
        // have no diffuse light).
        kD *= 1.0 - metallic;	  

        // scale light by NdotL
        float NdotL = max(dot(N, L), 0.0);        

        // add to outgoing radiance Lo
        Lo += (kD * albedo / PI + specular) * radiance * NdotL;  // note that we already multiplied the BRDF by the Fresnel (kS) so we won't multiply by kS again
    }   
    
    // ambient lighting (note that the next IBL tutorial will replace 
    // this ambient lighting with environment lighting).
    vec3 ambient = vec3(0.03) * albedo * ao;

    vec3 color = ambient + Lo;

    // HDR tonemapping
    color = color / (color + vec3(1.0));
    // gamma correct
    color = pow(color, vec3(1.0/2.2)); 

    FragColor = vec4(color, 1.0);
}

이전 튜토리얼에서 반사 방정식에 대한 이론적 지식을 배운 후 이 셰이더가 더 이상 모든 사람에게 문제를 일으키지 않기를 바랍니다. 이 셰이더를 사용하면 메탈릭 및 거칠기가 다른 공에 빛나는 4개의 점 광원 효과는 대략 다음과 유사합니다.

메탈릭 값은 아래쪽에서 위쪽으로 0.0에서 1.0으로 증가하고 거칠기는 왼쪽에서 오른쪽으로 0.0에서 1.0으로 증가합니다. 메탈릭 및 러프니스 파라미터의 역할은 비드 간의 차이를 관찰하여 이해할 수 있습니다.

예제의 소스 코드는 LearnOpenGL 웹사이트에서 찾을 수 있습니다.

3.2.3 질감 있는 PBR 사용

섹션 3.2.2.3의 PBR 구현에서 몇 가지 중요한 표면 재질 속성은 부동 소수점 유형입니다.

cpp
uniform float metallic;
uniform float roughness;
uniform float ao;

실제로 텍스처로 대체될 수 있습니다. 텍스처를 사용하는 PBR은 표면 재질의 세부 사항을 보다 정확하게 제어할 수 있어 렌더링 효과가 더 좋습니다. Unity는 이 접근 방식을 지원합니다.

픽셀 단위로 재료 표면의 속성을 제어하려면 개별 재료 매개변수 대신 텍스처를 사용해야 합니다.

cpp
[...]
uniform sampler2D albedoMap;
uniform sampler2D normalMap;
uniform sampler2D metallicMap;
uniform sampler2D roughnessMap;
uniform sampler2D aoMap;
  
void main()
{
    vec3 albedo     = pow(texture(albedoMap, TexCoords).rgb, 2.2);
    vec3 normal     = getNormalFromNormalMap();
    float metallic  = texture(metallicMap, TexCoords).r;
    float roughness = texture(roughnessMap, TexCoords).r;
    float ao        = texture(aoMap, TexCoords).r;
    [...]
}

예술 작품에 의해 생성된 알베도 텍스처는 일반적으로 sRGB 공간에 있으므로 후속 계산을 수행하기 전에 먼저 선형 공간으로 변환해야 합니다. 아트 리소스에 따라 AO 텍스처를 sRGB에서 선형 공간으로 변환해야 할 수도 있습니다.

이전 공의 재질 속성을 텍스처로 대체한 후 PBR은 이전에 사용된 조명 알고리즘에 비해 질적인 향상을 경험했습니다.

여기에서 텍스처 데모 소스 코드를 찾을 수 있으며, 사용된 모든 텍스처는 여기에 있습니다(흰색 AO 맵 사용). 금속 표면은 디퓨즈가 없기 때문에 직접 조명 환경에서 더 어둡습니다. 또한 환경에서 조명 계산을 위해 주변 하이라이트를 사용하는 경우에도 정상적으로 보입니다. 이에 대해서는 다음 튜토리얼에서 이야기하겠습니다.

아직 이미지 기반 조명 기술을 추가하지 않았기 때문에 여기에는 다른 PBR 렌더링 예제와 같은 놀라운 효과가 없습니다. 그럼에도 불구하고 이 셰이더는 여전히 물리적 기반 렌더링이므로 IBL이 없어도 훨씬 더 사실적으로 보이는 일반 조명을 얻을 수 있습니다.

3.3 이미지 기반 조명(IBL)

IBL(이미지 기반 조명)은 광원 개체에 대한 기술 모음입니다. 직접 조명과 달리 주변 환경을 큰 광원으로 취급합니다. IBL은 일반적으로 큐브맵 환경 맵과 결합됩니다. 큐브맵은 일반적으로 실제 사진에서 수집되거나 3D 장면에서 생성되므로 조명 방정식에 사용할 수 있습니다. 큐브맵의 각 픽셀은 광원으로 처리됩니다. 이를 통해 전역 조명과 일반적인 모양과 느낌을 보다 효과적으로 캡처하여 렌더링된 개체가 해당 환경과 더 잘 조화되도록 합니다.

이미지 기반 조명 알고리즘이 일부 (전역) 주변 조명을 얻으면 해당 입력은 보다 정교한 형태의 주변 조명 또는 전체 조명의 대략적인 시뮬레이션으로 처리됩니다. 이는 IBL을 PBR 렌더링에 유용하게 만들어 객체 렌더링 효과를 더욱 현실감 있게 만듭니다.

PBR과 결합된 IBL을 소개하기 전에 반사 방정식을 검토해 보겠습니다.

Lo(p,ωo)=Ω(kdcπ+ksDFG4(ωon)(ωin))Li(p,ωi)nωidωi

앞서 언급했듯이, 우리의 주요 목표는 반구 Ω를 통해 모든 입사광 wi의 적분 을 해결하는 것입니다. 직접 조명과 달리 IBL에서는 주변 환경의 모든 입사광ωi에 복사가 있을 수 있으며 이러한 복사는 적분을 해결하는 데 중요한 역할을 합니다. 점을 해결하려면 두 가지 요구 사항이 있습니다.

  • 임의의 방향 벡터 ωi가 주어지면 장면 방사선을 얻으려면 몇 가지 방법이 필요합니다.

  • 문제 해결은 가능한 한 빨리 실시간으로 진행되어야 합니다.

첫 번째 요구 사항은 비교적 간단하며 환경 큐브맵을 사용합니다. 큐브맵이 주어지면 각 픽셀이 별도의 방출 광원이라고 가정할 수 있습니다. 임의의 방향 벡터 ωi로 큐브맵을 샘플링하면 이 방향의 장면 방사를 얻을 수 있습니다.

모든 방향 벡터 ωi의 장면 방사선을 얻는 것은 다음과 같이 매우 간단합니다.

cpp
vec3 radiance = texture(_cubemapEnvironment, w_i).rgb;

두 번째 요구 사항과 관련하여 적분을 풀려면 한 방향의 복사만 고려할 수 있으며 환경 맵의 반구 Ω의 가능한 모든 방향 ωi을 고려해야 합니다. 그러나 기존의 통합 방식은 프래그먼트 셰이더에서는 비용이 매우 많이 듭니다. 통합 문제를 효과적으로 해결하기 위해 사전 계산 또는 전처리 방법을 사용할 수 있습니다. 따라서 우리는 반사 방정식을 조사해야 합니다.

Lo(p,ωo)=Ω(kdcπ+ksDFG4(ωon)(ωin))Li(p,ωi)nωidωi

위의 kdks 항목은 분할될 수 있습니다.

Lo(p,ωo)=Ω(kdcπ)Li(p,ωi)nωidωi+Ω(ksDFG4(ωon)(ωin))Li(p,ωi)nωidωi

분할 후 확산 및 스페큘러 반사에 대한 적분을 별도로 처리할 수 있습니다. 디퓨즈 적분부터 시작하겠습니다.

3.3.1 확산 방사조도

위 방정식의 디퓨즈 적분 부분을 주의 깊게 분석하여 Lambert 디퓨즈가 상수 항(색상 c, 굴절 계수 kdπ)이며 적분 변수에 의존하지 않는다는 것을 알아냅니다. 따라서 가시 상수 부분은 확산 적분에서 제거됩니다.

Lo(p,ωo)=kdcπΩLi(p,ωi)nωidωi

따라서 적분은 ωi에만 의존합니다(p가 환경 맵의 중심에 있다고 가정). 이를 기반으로 새로운 큐브맵을 계산하거나 사전 계산할 수 있습니다. 이 큐브맵은 컨볼루션(컨볼루션)을 사용하여 계산된 각 샘플링 방향(또는 픽셀)ωo의 디퓨즈 통합 결과를 저장합니다.

컨볼루션(컨볼루션)은 다른 모든 항목이 이 데이터 세트에 있다고 가정하고 데이터 세트의 각 항목에 일부 계산을 적용합니다. 여기에 설정된 데이터는 장면 방사선 또는 환경 맵입니다. 따라서 큐브맵의 각 샘플링 방향에 대해 반구 Ω의 다른 모든 샘플링 방향을 고려할 수 있습니다.

환경 맵을 컨볼루션하기 위해 반구에서 많은 수의 ω 방향ωi을 개별적으로 샘플링하고 해당 빛의 평균을 취하여 샘플링된 각 출력 ωo 방향에 대한 적분을 해결합니다. 샘플링 방향 ωi의 반구는 p 점의 중심이고 ωo는 노멀 평면입니다.

각 샘플링 방향 ωo에 대한 통합 결과를 저장하는 이 미리 계산된 큐브맵은 장면에서 ωo에 평행한 표면에 닿는 모든 간접 확산 조명의 미리 계산된 합계로 생각할 수 있습니다. 이 큐브맵을 방사조도 맵이라고 합니다.

복사 방정식은 p 위치에 따라 달라지며, 위치는 복사 조도 다이어그램의 중심에 있다고 가정합니다. 이는 모든 간접 디퓨즈이 동일한 환경 맵에서 나와야 한다는 것을 의미하며, 이는 현실(특히 실내)의 환상을 깨뜨릴 수 있습니다. 렌더링 엔진은 장면 전체에 반사 프로브를 배치하여 이 문제를 해결합니다. 각 반사 프로브는 해당 환경의 고유한 방사조도 맵을 계산합니다. 이러한 방식으로 점 p의 복사휘도(및 복사휘도)는 가장 가까운 반사 프로브의 복사조도를 보간한 것입니다. 여기서는 샘플링이 항상 환경 그래프의 중심에서 이루어진다고 가정합니다. 반사 프로브에 대해서는 다른 장에서 설명합니다.

다음은 큐브맵 환경 다이어그램(아래 왼쪽 그림)과 해당 조도 다이어그램(아래 오른쪽 그림)입니다.

각 큐브맵 픽셀에 대한 컨볼루션 결과를 저장함으로써 방사조도 맵은 환경의 평균 색상이나 조명을 표시하는 것과 다소 유사합니다. 이 환경 맵에서 임의의 방향을 샘플링하면 해당 방향의 장면 방사조도를 얻을 수 있습니다.

3.3.1.1 등장방형 지도

구형 지도(Equirectangular 지도)에 관한 일부 문헌은 파노라마로 변환됩니다. 큐브맵과 차이점은 큐브맵에는 6개의 이미지가 필요한 반면 구형 맵에는 1개의 이미지만 필요하며 저장된 텍스처에는 특정 변형이 있다는 것입니다.

큐브맵은 특정 알고리즘을 통해 구형 맵으로 변환될 수 있습니다. 자세한 내용은 여기를 참조하세요.

3.3.1.2 구형 다이어그램에서 큐브 다이어그램으로

구형 맵에서 환경 조명 정보를 직접 샘플링하는 것도 가능하지만 큐브 맵(큐브맵)을 직접 샘플링하는 것보다 비용이 훨씬 더 많이 듭니다. 따라서 후속 로직을 더 잘 구현하려면 구형 다이어그램을 먼저 큐브 다이어그램으로 변환해야 합니다. 물론 여기에서는 모든 사람이 더 많은 선택권을 가질 수 있도록 구형 맵에서 3D 환경 맵으로 샘플링하는 방법도 설명합니다.

구형 맵을 큐브 맵에 매핑하려면 먼저 큐브 모델을 구축해야 합니다. 이 큐브 모델을 렌더링하는 버텍스 셰이더는 다음과 같습니다.

cpp
#version 330 core
layout (location = 0) in vec3 aPos;

out vec3 localPos;

uniform mat4 projection;
uniform mat4 view;

void main()
{
    localPos = aPos;  
    gl_Position =  projection * view * vec4(localPos, 1.0);
}

픽셀 셰이더에서 변형된 구의 각 부분은 큐브의 각 측면에 매핑됩니다. 구체적인 구현은 다음과 같습니다.

cpp
#version 330 core
out vec4 FragColor;
in vec3 localPos;

uniform sampler2D equirectangularMap;

const vec2 invAtan = vec2(0.1591, 0.3183);
vec2 SampleSphericalMap(vec3 v)
{
    vec2 uv = vec2(atan(v.z, v.x), asin(v.y));
    uv *= invAtan;
    uv += 0.5;
    return uv;
}

void main()
{
    // make sure to normalize localPos
    vec2 uv = SampleSphericalMap(normalize(localPos)); 
    vec3 color = texture(equirectangularMap, uv).rgb;
    
    FragColor = vec4(color, 1.0);
}

렌더링된 큐브 효과는 다음과 같습니다.

큐브 맵 샘플링을 위한 버텍스 셰이더는 다음과 같습니다.

cpp
#version 330 core
layout (location = 0) in vec3 aPos;

uniform mat4 projection;
uniform mat4 view;

out vec3 localPos;

void main()
{
    localPos = aPos;

    // remove translation from the view matrix
    mat4 rotView = mat4(mat3(view)); 
    vec4 clipPos = projection * rotView * vec4(localPos, 1.0);

    gl_Position = clipPos.xyww;  // ※ 주의: 의 는 `xyww`!!
}

큐브 맵 샘플링을 위한 픽셀 셰이더는 다음과 같습니다.

cpp
#version 330 core
out vec4 FragColor;

in vec3 localPos;
  
uniform samplerCube environmentMap;
  
void main()
{
    // 로부터 cubemap샘플링컬러
    vec3 envColor = texture(environmentMap, localPos).rgb;
    
    // HDR -> LDR
    envColor = envColor / (envColor + vec3(1.0));
    // Gamma보정(Correct)(오직 컬러 로 선형(Linear)의 렌더링(Render)파이프라인 )
    envColor = pow(envColor, vec3(1.0/2.2)); 
  
    FragColor = vec4(envColor, 1.0);
}

위 코드에서는 최종 색상을 출력하기 전에 HDR에서 LDR로의 변환과 감마 보정이 수행된다는 점에 유의하시기 바랍니다.

렌더링 효과는 다음과 같습니다.

3.3.1.3 PBR 및 간접 조사 조명

방사성 다이어그램은 직접적이지 않은 모든 방향에서 나오는 주변광 복사의 합을 나타내는 확산 구성요소의 적분을 제공합니다. 방사성 패턴은 무방향성 광원으로 처리되므로 확산 스페큘러 반사를 주변광으로 합성할 수 있습니다.

먼저, 미리 계산된 방사성 맵의 샘플을 선언해야 합니다.

cpp
uniform samplerCube irradianceMap;

표면 노멀을 통해 주변광을 얻는 것은 다음 코드로 단순화될 수 있습니다.

cpp
// vec3 ambient = vec3(0.03);
vec3 ambient = texture(irradianceMap, N).rgb;

그럼에도 불구하고 앞서 언급한 반사 방정식에서 간접광에는 여전히 디퓨즈와 스페큘러 반사가 포함되어 있으므로 디퓨즈에 가중치를 추가해야 합니다. 프레넬 방정식은 아래에서 디퓨즈 계수를 계산하는 데 사용됩니다.

cpp
vec3 kS = fresnelSchlick(max(dot(N, V), 0.0), F0);
vec3 kD = 1.0 - kS;
vec3 irradiance = texture(irradianceMap, N).rgb;
vec3 diffuse    = irradiance * albedo;
vec3 ambient    = (kD * diffuse) * ao;

주변광은 반구 내 노멀 N 주위의 모든 방향에서 나오므로 프레넬 인자를 결정하는 단일 절반 벡터가 없습니다. 프레넬을 계속 시뮬레이션하기 위해 여기서는 법선과 시선 사이의 각도가 사용됩니다. 이전 알고리즘은 프레넬 방정식의 입력으로 표면 러프니스의 영향을 받는 마이크로패싯 절반 벡터를 사용했습니다. 여기서는 거칠기를 고려하지 않았으며 표면의 반사율이 상당히 큰 것으로 간주됩니다.

간접 조명은 직접 조명과 동일한 속성을 상속하므로 표면이 거칠수록 스페큘러 반사율이 낮아질 것으로 예상됩니다. 표면 러프니스가 고려되지 않기 때문에 간접 조명에 대한 프레넬 방정식 강도는 마치 거친 비금속 표면인 것처럼 처리됩니다(아래).

이 문제를 완화하기 위해 프레넬-슐릭 방정식(이 방정식의 소스)에 러프니스 항을 주입할 수 있습니다.

cpp
vec3 fresnelSchlickRoughness(float cosTheta, vec3 F0, float roughness)
{
    return F0 + (max(vec3(1.0 - roughness), F0) - F0) * pow(1.0 - cosTheta, 5.0);
}

표면 러프니스를 고려한 후 프레넬 상관관계 계산은 다음과 같이 끝납니다.

cpp
vec3 kS = fresnelSchlickRoughness(max(dot(N, V), 0.0), F0, roughness); 
vec3 kD = 1.0 - kS;
vec3 irradiance = texture(irradianceMap, N).rgb;
vec3 diffuse    = irradiance * albedo;
vec3 ambient    = (kD * diffuse) * ao;

위에서 언급했듯이 실제로 이미지 기반 조명 계산은 매우 간단하며 단일 큐브맵 텍스처 샘플링만 필요합니다. 대부분의 작업은 환경 맵을 래디언스 맵으로 미리 계산하거나 변환하는 것으로 구성됩니다.

IBL을 추가한 후의 렌더링 효과는 다음과 같습니다(수직은 금속성이 증가함을 의미하고 수평은 거칠기가 증가함을 의미함).

이 섹션의 모든 코드는 여기에서 찾을 수 있습니다.

3.3.2 반사 IBL

3.3.1은 IBL의 디퓨즈 부분을 설명합니다. 이 섹션에서는 IBL의 스페큘러 반사 부분에 대해 설명합니다. 먼저 반사 방정식을 검토합니다.

Lo(p,ωo)=Ω(kdcπ+ksDFG4(ωon)(ωin))Li(p,ωi)nωidωi

위의 스페큘러 반사 부분(ks을 곱함)은 일정하지 않으며 입사광 방향과 시선 방향에 따라 달라집니다. 모든 입사광과 모든 입사 시선의 적분을 실시간으로 계산하는 것은 거의 불가능합니다. 에픽게임즈는 실시간 렌더링의 성능 문제를 해결하기 위해 반사 부분을 사전 컨볼루션하는 절충 방법을 사용할 것을 권장합니다. 이것이 분할합 근사법입니다.

분할 및 근사 방법 반사 방정식에서 스페큘러 반사 부분을 두 부분으로 분리하여 별도로 컨벌루션할 수 있도록 한 다음 스페큘러 반사 표면의 간접 IBL을 위해 PBR 셰이더에서 결합합니다. 사전 컨볼루션된 방사성 맵과 유사하게 분할 및 근사 방법에는 HDR 환경 맵이 입력으로 필요합니다. 분할 및 근사 방법을 더 잘 이해하기 위해 반사 방정식의 반사 부분에 초점을 맞춰 보겠습니다.

Lo(p,ωo)=Ω(ksDFG4(ωon)(ωin)Li(p,ωi)nωidωi=Ωfr(p,ωi,ωo)Li(p,ωi)nωidωi

방사성 맵과 동일한 성능 문제의 경우 반사형 IBL 맵의 적분을 미리 계산하고 조각 법선을 사용하여 이 맵을 샘플링해야 합니다. 방사성 맵의 사전 계산은 ωi에만 의존하며 확산 항을 적분에서 이동할 수 있습니다. 그러나 이번에는 BRDF에서 ωi에만 의존하지 않는다는 것을 알 수 있습니다.

fr(p,wi,wo)=DFG4(ωon)(ωin)

위 방정식에서 볼 수 있듯이 ωo에도 의존하며 두 방향 벡터로 미리 계산된 큐브맵을 샘플링할 수 없습니다. ωiωo의 모든 조합을 미리 계산하는 것은 실시간 렌더링 환경에서 실용적이지 않습니다.

Epic Games의 분할 및 근사 방법은 반사 방정식에서 스페큘러 반사 부분을 두 부분으로 분리하여 별도로 컨볼루션할 수 있도록 한 다음, 스페큘러 반사 표면의 간접 IBL을 위해 PBR 셰이더에서 결합합니다. 분리된 방정식은 다음과 같습니다.

Lo(p,ωo)=Ω(ksDFG4(ωon)(ωin)Li(p,ωi)nωidωi=Ωfr(p,ωi,ωo)Li(p,ωi)nωidωi=ΩLi(p,ωi)dωiΩfr(p,ωi,ωo)nωidωi

첫 번째 부분ΩLi(p,ωi)dωi사전 필터링된 환경 맵입니다. 이는 방사성 맵과 유사하지만 거칠기를 추가하는 사전 계산된 환경 컨볼루션 맵입니다. 러프니스 수준이 증가함에 따라 환경 맵은 더 많은 산란 샘플 벡터로 컨볼루션되어 더 흐릿한 반사를 생성합니다.

각 컨벌루션 러프니스 수준에 대해 퍼지 결과는 사전 필터링된 환경 맵의 mimap 수준에 주기적으로 저장됩니다. 아래 그림은 5가지 서로 다른 러프니스 수준으로 구성된 사전 필터링된 환경 맵입니다.

샘플링 벡터와 산란 강도를 생성하려면 Cook-Torrance BRDF의 정규 분포 다이어그램(NDF)을 사용해야 합니다. 이는 노멀 벡터와 시선 벡터라는 두 가지 입력을 사용합니다. 환경 맵을 컨볼루션할 때 시선 벡터를 알 수 없습니다. Epic Games는 추가 시뮬레이션 방법을 사용합니다. 즉, 시선 벡터(즉, 스페큘러 반사 벡터)가 항상 출력 샘플링 벡터 ωo와 동일하다고 가정합니다. 따라서 코드는 다음과 같습니다.

cpp
vec3 N = normalize(w_o);
vec3 R = N;
vec3 V = R;

환경 맵 컨볼루션을 사전 필터링하는 이 방법에서는 보는 방향에 대해 걱정할 필요가 없습니다. 이는 특정 각도에서 아래 이미지의 반사 표면을 볼 때 좋은 스침 반사 반사를 얻지 못한다는 것을 의미합니다. 그러나 이는 일반적으로 더 나은 절충안으로 간주됩니다.

두 번째 부분 Ωfr(p,ωi,ωo)nωidωi미러 영역 적분입니다. 모든 방향의 입사 휘도가 완전히 흰색이라고 가정하면(예: L(p,x)=1.0) BRDF 값은 주어진 거칠기와 노멀 n과 광원 방향 ωi 또는 nωi 사이의 각도를 사용하여 미리 계산할 수 있습니다. Epic Games는 BRDF 통합 맵이라고 하는 2D 샘플링 텍스처(LUT)에 저장된 다양한 거칠기와 함께 각 노멀 및 빛 방향 조합에 대해 미리 계산된 BRDF 값을 저장합니다.

2D 샘플링된 텍스처는 표면의 프레넬 응답에 대한 스케일(빨간색)과 오프셋 값(녹색)을 출력하여 거울 적분의 두 번째 부분을 제공합니다.

위 그림은 BRDFnωi의 입력을 가로로 나타내고, 입력의 거칠기를 세로로 나타냅니다.

사전 필터링된 환경 맵과 BRDF 통합 맵을 사용하면 셰이더에서 결합할 수 있습니다.

cpp
float lod             = getMipLevelFromRoughness(roughness);
vec3 prefilteredColor = textureCubeLod(PrefilteredEnvMap, refVec, lod);
vec2 envBRDF          = texture2D(BRDFIntegrationMap, vec2(NdotV, roughness)).xy;
vec3 indirectSpecular = prefilteredColor * (F * envBRDF.x + envBRDF.y)

3.3.3 완전한 IBL

첫 번째는 IBL의 반사 부분에 대한 두 개의 텍스처 샘플러 선언입니다.

cpp
uniform samplerCube prefilterMap;
uniform sampler2D   brdfLUT;

그런 다음 노멀 N과 시선 -V를 사용하여 반사 벡터 R을 계산한 다음 MAX_REFLECTION_LOD와 러프니스 파라미터를 결합하여 사전 필터링된 환경 맵을 샘플링합니다.

cpp
void main()
{
    [...]
    vec3 R = reflect(-V, N);   

    const float MAX_REFLECTION_LOD = 4.0;
    vec3 prefilteredColor = textureLod(prefilterMap, R,  roughness * MAX_REFLECTION_LOD).rgb;    
    [...]
}

그런 다음 시선, 노멀 샘플링 BRDF와 러프니스 샘플링 BRDF 사이의 각도를 사용하여 텍스처를 찾고 사전 필터링된 환경 맵의 색상을 기반으로 IBL의 반사 부분을 계산합니다.

cpp
vec3 F        = FresnelSchlickRoughness(max(dot(N, V), 0.0), F0, roughness);
vec2 envBRDF  = texture(brdfLUT, vec2(max(dot(N, V), 0.0), roughness)).rg;
vec3 specular = prefilteredColor * (F * envBRDF.x + envBRDF.y);

그 이후로 반사 방정식의 간접 반사 부분이 계산되었습니다. 이전 섹션의 IBL 디퓨즈 부분과 결합할 수 있습니다.

cpp
vec3 F = FresnelSchlickRoughness(max(dot(N, V), 0.0), F0, roughness);

vec3 kS = F;
vec3 kD = 1.0 - kS;
kD *= 1.0 - metallic;	  
  
vec3 irradiance = texture(irradianceMap, N).rgb;
vec3 diffuse    = irradiance * albedo;
  
const float MAX_REFLECTION_LOD = 4.0;
vec3 prefilteredColor = textureLod(prefilterMap, R,  roughness * MAX_REFLECTION_LOD).rgb;   
vec2 envBRDF  = texture(brdfLUT, vec2(max(dot(N, V), 0.0), roughness)).rg;
vec3 specular = prefilteredColor * (F * envBRDF.x + envBRDF.y);
  
vec3 ambient = (kD * diffuse + specular) * ao;

이때 IBL의 디퓨즈 부분과 스페큘러 반사 부분으로 구성된 주변광 Ambient를 계산할 수 있다. 렌더링 효과는 다음과 같습니다.

확장하고 멋진 자료를 추가하세요.

또는 다음과 같은 멋진 무료 PBR 3D 모델을 로드하세요(Andrew Maximov 제작).

확실히 IBL 조명을 추가한 후에는 렌더링 효과가 더욱 현실적이고 물리적으로 정확해집니다. 아래 이미지는 조명 정보를 변경하지 않고 미리 계산된 다양한 HDR 맵의 효과를 보여줍니다. 여전히 물리적으로 정확해 보입니다.

IBL 튜토리얼이 끝났습니다. 이 섹션의 코드는 구 장면과 텍스처 장면에서 찾을 수 있습니다.

4. 고급: PBR 핵심 이론 및 원리

이전 장에서는 PBR에서 Cook-Torrance의 BRDF의 두 부분인 직접 조명과 IBL을 주로 소개했습니다.

이 장에서는 PBR의 핵심 부분에 대한 기본 이론과 원리를 심층적으로 소개하여 독자가 PBR의 기본 원리를 보다 철저하게 이해할 수 있도록 할 것입니다. 이 장의 내용 중 일부는 이전 장에서 다루었지만 좀 더 심층적으로 설명하겠습니다.

주로 목표로:

  • 고급 프로그래머

  • PBR의 기본 원리에 관심이 있는 사람

4.1 PBR의 핵심 이론 재논의

이전 장에서는 PBR 자격을 얻기 위해 충족해야 하는 다음 세 가지 조건을 설명했습니다.

  • 마이크로패싯 표면 모델을 기반으로 합니다. 이 모델은 미세한 규모에서 무작위 방향의 이상적인 스페큘러 반사를 갖는 수많은 마이크로패싯으로 물체의 표면을 모델링합니다. 미세기하학은 다양한 마이크로패싯의 법선을 변경하여 반사광과 굴절광의 방향을 변경합니다. 통계적 방법은 일반적으로 미세한 기하학적 현상을 처리하는 데 사용됩니다. 즉, 표면을 미세 구조 법선이 있는 무작위 분포로 처리하고 거시적으로는 각 지점에서 여러 방향으로 반사(및 굴절)된 빛의 합으로 처리합니다.

  • 에너지 절약. 나가는 광선의 에너지는 입사 광선의 에너지보다 클 수 없습니다. 표면 러프니스가 증가할수록 스페큘러 반사 영역의 면적은 증가하지만 평균 밝기는 감소합니다.

  • 물리 기반 BRDF를 사용합니다. Cook-Torance의 BRDF는 실시간 렌더링 분야에서 가장 일반적인 PBR 조명 모델입니다. 그 원리와 구현은 이전 장에서 자세히 설명했습니다. 이는 수학과 물리학 분야의 많은 지식을 종합한 것입니다.

위의 세 가지 사항을 더 자세히 논의하면 다음과 같은 지식 사항이 포함됩니다.

  • 광학

빛의 속성

  • 빛의 이론

  • 빛의 에너지

  • 기하광학

반사

스페큘러 반사

  • 프레넬 반사

  • 굴절

산란

  • 흡수하다

  • 물질

마이크로패싯

  • 매크로서피스

  • 카테고리: 금속, 유전체, 반도체

  • 광학기기와의 상호작용

  • 에너지

빛 에너지

  • 전기에너지

  • 운동에너지

  • 열에너지

  • 에너지 보존

  • 에너지 전환

  • PBR 종합

재료 분류

  • 부동산 시뮬레이션

  • 조명 모델

요약하자면, PBR은 광학 원리와 물체 구조 간의 상호 작용을 추상화하고 시뮬레이션하는 것입니다. 빛의 속성부터 시작해 보겠습니다.

4.2 빛의 특성

4.2.1 빛이란 무엇입니까?

어떤 사람들은 빛이 입자라고 말하고, 어떤 사람들은 빛이 전자기적이라고 말하고, 어떤 사람들은 빛이 파동이라고 말하고, 어떤 사람들은 빛이 일종의 에너지라고 말하고, 어떤 사람들은 빛이 양자라고 말합니다. 그렇다면 빛이란 정확히 무엇인가?

좁은 의미에서 빛은 전자기 복사의 특정 부분, 즉 가시광선 내에서 인간의 눈에 보이는 전자기 스펙트럼입니다. 인간의 눈으로 감지할 수 있는 가시광선 스펙트럼으로 시각의 원인이 됩니다.

가시광선은 일반적으로 400~700나노미터(nm) 범위의 파장을 갖는 것으로 정의되며, 비가시광선은 적외선(파장이 길어짐)과 자외선(파장이 짧아짐)입니다.

광범위하게 말하면, 빛은 가시 여부에 관계없이 모든 파장의 전자기 방사선을 의미합니다. 감마선, X선, 전자레인지, 전파가 포함됩니다. 그리고 가시광선(400-700 나노미터)은 전체 파장 영역의 작은 부분일 뿐입니다.

4.2.2 전자기 스펙트럼 및 가시광선

전자기 방사선(EMR)은 가장 긴 파장부터 가장 짧은 파장까지 전파, 마이크로파, 적외선, 가시광선, 자외선, X선 및 감마선으로 구분됩니다.

EMR의 동작은 파장에 따라 달라집니다. 주파수가 높을수록 파장이 짧아지고, 주파수가 낮을수록 파장이 길어집니다. 서로 다른 파장의 전자기 복사는 서로 다른 에너지를 전달합니다. EMR이 개별 원자 및 분자와 상호 작용할 때 그 동작은 전달하는 각 양자의 에너지에 따라 달라집니다.

가시광선의 다양한 파장은 다양한 색상을 나타냅니다. 햇빛이나 형광등과 같은 가시광선은 서로 다른 파장의 전자기 방사선의 집합체이며 프리즘 아래에서 서로 다른 색상으로 분리될 수 있습니다.

광원마다 가시광선에 대한 정의가 조금씩 다르며 일부는 가시광선을 좁은 420~680nm로 정의하고 일부는 380~800nm만큼 넓습니다. 이상적인 실험실 조건에서 사람들은 최소 1050나노미터의 적외선을 볼 수 있습니다. 어린이와 청소년은 파장이 약 310~313나노미터 정도인 자외선을 감지할 수 있습니다.

4.2.3 가시광선에 대한 인간의 눈 인식 원리

이전 섹션에서는 가시광선의 범위와 단순 인식 이론을 설명했습니다. 이 섹션에서는 인간이 파장이 380~800나노미터인 가시광선만 인식하고 인식하는 이유를 자세히 설명합니다.

먼저 인간의 눈의 구조와 시각의 분자적 메커니즘을 이해해야 합니다.

인간의 눈의 구조는 고정밀 카메라와 유사합니다. 빛은 투명한 각막(cornea)과 홍채(iris)로 둘러싸인 동공(pupil)을 통과하여 수정체(lens)에 의해 굴절되어 망막(retina)에 공간적으로 분산된 이미지를 형성합니다. 망막에는 빛의 세기를 주로 감지하는 간상세포(간상세포)와 색상을 주로 감지하는 원추세포(원추세포)가 분포되어 있습니다. 이는 시력 형성의 세포 기반입니다.

막대와 원뿔은 약간 다른 방식으로 빛에 반응하지만 빛에 반응하는 메커니즘은 유사합니다. 간상체 광수용체 세포에 있는 로돕신을 예로 들어 보겠습니다. 이는 7개의 막횡단 단백질(옵신)과 세포막의 망막 보철단으로 구성됩니다. 옵신은 G 단백질 결합 수용체(GPCR)의 일종입니다. 망막 보철 그룹은 일곱 번째 막횡단 α 나선 세그먼트의 라이신 잔기에 공유결합으로 결합되어 있습니다.

레티날 분자는 비타민 A가 산화되어 생성되며, 비타민 A 1분자가 산화되어 레티날 1개가 생성됩니다. 레티날에는 11-cis(11-cis)와 all-trans(All-trans)의 두 가지 구성이 있습니다. 일반적으로 옵신에 결합하는 11-시스 구성은 11-시스 구성입니다. 가시광선(로돕신의 경우 파장이 약 500nm인 전자기파)을 조사하면 위치 11의 cis 구성이 all-trans 구성으로 변환되어 옵신에서 망막 보철물 그룹이 분리될 수 있습니다. 보철단의 이탈은 로돕신의 형태적 변화를 일으키고, 이는 신호전달을 통해 세포막 내부와 외부의 이온전위 변화로 이어져 신경전기신호가 발생하게 된다. 이 신호는 시신경을 통해 뇌로 전달되어 우리가 시력을 갖게 됩니다.

(a) 로돕신의 구조; (b) 레티날 분자의 감광성 이성질화 반응.

따라서 시각의 분자 메커니즘에서 시작하여 답은 다음과 같습니다. 망막 분자의 구성 변형 반응이 가시광선 대역의 전자기파에 반응하기 때문에 이 대역의 전자기파가 인간에게 "볼" 수 있는 것은 바로 그것입니다.

또한, 레티날 분자는 비타민 A의 부분 산화 산물로서 식물에서 널리 발견되는 천연 색소인 베타카로틴의 산화를 통해 얻을 수 있습니다. 출처와 대사 경로는 명확하며 대부분의 생물학적 진화에 의해 감광성 ​​분자로 선택되는 것이 합리적입니다.

그렇다면 고도로 진화된 인간은 왜 가시 스펙트럼 외부의 전자기 방사선을 감지할 수 없습니까? 왜 망막 분자는 가시광선 대역의 전자기파에만 반응합니까?

이는 다양한 대역의 전자기 복사 특성을 통해 답할 수 있습니다.

가장 짧은 파장을 갖는 감마선(감마선)과 고에너지 X선(X선)은 너무 높은 에너지(광자)를 운반하므로 분자가 빠르게 이온화되고 분해되고 심지어 원자핵을 여기시키게 됩니다(핵폭발로 이어짐). 먼저 제외됩니다.

단파장 심자외선(심자외선) 및 연X선에 의해 여기되는 전자 에너지 준위는 일반적으로 내부층 전자 또는 고에너지 전자입니다. 이러한 여기에 의해 얻어지는 분자의 고에너지 상태는 매우 불안정하며 상온의 수용액이나 공기 중에서 효과적인 정보 전달을 보장하기 어렵습니다. 또한 제외됩니다.

파장이 긴 적외선 및 마이크로파 주파수 대역의 전자파는 주로 분자의 진동, 회전, 병진운동과 결합되며, 이러한 움직임은 주로 무작위적인 열적 움직임의 형태로 존재하므로 정확한 정보 표현이 어렵습니다.

더 긴 중파 및 장파(라디오)의 동작 규모는 단일 분자가 수신할 수 있는 규모를 초과하며 세포 기반 생물학적 선택에 적합하지 않습니다.

이번 조사 결과에 따르면 세포가 전자파에 반응하기 위해 분자 수준에서 감광성 메커니즘을 채택해야 한다면 가장 적합한 밴드는 현재 가시광선 밴드일 수 있다. 이 밴드는 분자 운동에서 전자 스펙트럼의 외부 전자 여기 에너지와 동일하며, 이는 분자의 화학 결합 에너지와 대략 동일하지만 약간 낮습니다. 이는 일반적으로 안정적인 화학 결합(특히 생명의 기초가 되는 C-C, C-H, C=O, C-N과 같은 화학 결합)을 손상시키지 않지만 일부 "동적" 화학 결합(예: 레티날의 시스-트랜스 이성질체를 갖는 11 위치 이중 결합)을 유발하여 광학 반응을 일으키고 정보를 효과적으로 전달합니다.

따라서 현재 대역의 가시광선에 대한 인간의 인식은 수억 년에 걸친 지속적인 진화의 결과입니다. 즉, 다른 무리를 감지한 인류의 조상은 제거되었으며, 그들의 유전자는 유전될 수 없다.

그것은 자연 선택, 적자 생존이라고 말할 수 있습니다.

4.2.4 광원

우리 모두 알고 있듯이 빛은 전자기파이고 물질은 원자로 구성되어 있습니다. 원자는 원자핵과 핵 외부를 흐르는 전자로 구성됩니다. 그렇다면 물질 원자의 전자기파는 어디서 오는 걸까요? 전자파가 무()에서 존재할 수 있을까?

외르스테드의 실험은 전자의 이동이 자기장을 동반하기 때문에 DC 전선 주위에 자기장이 생성된다는 것을 발견했습니다. 전자의 운동은 선형 운동진동으로 구분됩니다.

  • 선형 운동: 전자의 선형 운동은 핵 외부 핵 주위의 전자의 움직임과 전도 중 전자의 흐름입니다. 이에 수반되는 전자기파의 거시적 표현은 자기장입니다. 전자의 선형 운동은 빛의 생성을 담당하지 않습니다.

  • 진동: 전자의 진동은 발광과 밀접한 관련이 있습니다. 전자기장이 장 소스에서 이탈하여 전자기파를 형성하게 되는데, 이는 소위 광자가 아닌 빛을 생성하는 것입니다. 전자 진동에는 두 가지 이유가 있습니다.

하나는 고온 물질의 핵 외부에서 전자가 전이되면서 발생하는 진동입니다. 이러한 진동을 위해서는 물질의 온도가 주변 온도보다 훨씬 높아야 하며, 매우 빠른 속도로 작동하는 핵외 전자의 전이로 인한 방사선은 가시광선의 주파수에 도달할 수 있습니다. 이 고온 물질의 핵 외부에서 전자의 전이 복사에 의해 형성된 발광 광원을 열광원이라고 합니다. 마그마, 용철, 화염, 필라멘트 등 고온 물질의 발광은 열광원입니다.

  • 두 번째는 자기장이나 전기장의 작용으로 전자에 의해 발생하는 자극 진동입니다. 이러한 전자 진동은 온도나 핵 외부의 전자 속도와는 아무런 관련이 없습니다. 고온이 필요하지 않고 전자 진동을 발생시켜 방사선을 형성하는 이러한 종류의 광원을 냉광원이라고 합니다. 형광등, 에너지 절약 램프, 오로라, 반딧불, 반도체 발광(LED) 등은 냉광원입니다.

이 섹션의 시작 부분에 있는 질문에 대한 대답은 다음과 같습니다. 광원의 빛은 전자의 진동에서 나옵니다. 전자 진동과 관련된 전자기파 복사는 광파를 형성합니다. 전자 진동의 주파수는 광파의 주파수를 구성합니다. 다수의 전자 진동과 관련된 전자기파 복사가 광원을 형성합니다.

4.2.5 빛의 이론

수백 년의 발전 끝에 빛에 대한 연구와 이론은 빛의 물리적 현상의 일부를 설명하는 것을 목표로 하는 많은 이론 이론을 탄생시켰습니다.

현재 빛의 존재에 관한 주요 이론으로는 입자론, 파동론, 전자기론, 양자론, 파동-입자 이중성 등이 있습니다.

4.2.5.1 빛의 입자 이론

빛의 입자 이론으로도 알려진 빛의 입자 이론은 빛의 본질이 입자인 반사를 통해 볼 수 있는 물리적 물질과 동일하다고 믿습니다(아래 그림).

빛의 입자 성질에 대한 개략도

프랑스 수학자 피에르 가센디(Pierre Gassendi)는 1660년에 빛의 입자 이론을 제안했습니다. 아이작 뉴턴은 가센디의 이론을 확장하여 빛은 모든 방향에서 나오거나 방출되는 입자(물질의 입자)로 구성됩니다.

뉴턴은 이후 Gassendi의 견해를 연구했습니다. 그는 빛의 선형 전파 법칙과 빛의 편광 현상을 바탕으로 1675년 마침내 빛은 광원에서 방출되는 물질 입자이며 균일한 매질 속에서 일정한 속도로 전파된다는 가설을 제시했습니다.

입자이론은 빛의 직선성을 쉽게 설명할 수 있고, 빛의 반사도 쉽게 설명할 수 있다. 입자가 매끄러운 평면에 충돌할 때의 반사 법칙이 빛의 반사 법칙과 동일하기 때문이다.

그러나 입자이론은 빛의 광선이 두 매질의 경계면에 부딪힐 때 동시에 일어나는 반사와 굴절 같은 현상과, 여러 개의 빛의 광선이 교차하고 만나서 방해받지 않고 앞으로 계속 전파되는 현상을 설명하는데 큰 어려움을 겪는다.

4.2.5.2 빛의 파동 이론

1660년대에 로버트 훅(Robert Hooke)은 빛의 파동 이론을 발표했습니다. 그는 빛이 발광 에테르(Luminiferous ether)라는 매질에서 파동의 형태로 이동하며, 파동은 중력의 영향을 받지 않기 때문에 빛이 고밀도 매질에 들어갈 때 속도가 느려질 것이라고 믿었습니다.

빛의 파동 이론은 간섭 현상과 빛의 편광을 예측합니다.

오일러는 파동 이론의 지지자 중 한 사람이었습니다. 그는 파동 이론이 회절 현상을 더 쉽게 설명할 수 있다고 믿었습니다.

프레넬은 또한 그의 파동 이론을 지지하고 독립적으로 완성했습니다. 1821년에 프레넬은 파동 이론에서 빛의 편광에 대한 유일한 설명을 제공하기 위해 수학적 방법을 사용했습니다.

위 사진: 빛의 편광 현상, 선회하는 광파가 1/4파장 편광판과 선형 편광판을 차례로 통과하는 상황.

그러나 파동 이론의 약점은 파동이 음파와 유사하며 전파하려면 매질이 필요하다는 것입니다. 한때 광학 에테르 매체에 대한 가설이 있었지만 19세기 마이컬슨-몰리 실험으로 인해 큰 의문에 빠졌습니다.

뉴턴은 밀도가 높을수록 빛의 속도가 증가한다고 추측했습니다. 호이겐스와 다른 사람들은 그 반대가 사실이라고 생각했지만 당시에는 빛의 속도를 정확하게 측정할 수 있는 조건이 존재하지 않았습니다. 1850년이 되어서야 레옹 푸코(Léon Foucault)의 실험에서 파동 이론과 동일한 결과가 나왔습니다. 그 후, 고전 입자 이론은 완전히 폐기되었습니다.

4.2.5.3 빛의 전자기 이론

빛의 전자기 이론은 1860년대 맥스웰이 제안한 빛의 본질에 관한 현대 이론입니다. 빛을 특정 주파수 범위의 전자기파로 생각하십시오. 빛의 전파, 간섭, 회절, 산란, 편광 및 기타 현상은 물론 빛과 물질 사이의 상호 작용 규칙을 설명할 수 있습니다.

전자기 이론은 또한 전자기파가 서로 수직인 전기장과 자기장을 가지며, 전기장과 자기장의 주파수, 진폭, 파장 및 전파 방향이 일정하다고 믿습니다.

그러나 빛은 여전히 입자적 성질을 갖고 있기 때문에 광전효과, 콤프턴 효과 등의 물리적 현상을 설명할 수 없습니다.

4.2.5.4 빛의 양자 이론

빛의 양자 이론은 방사선의 양자 이론을 바탕으로 빛과 물질의 생성, 전달, 감지 및 상호 작용을 연구하는 학문입니다.

양자광학의 개략도

1900년 플랑크는 흑체복사를 연구하던 중 현실과 매우 일치하는 경험식을 이론적으로 도출하기 위해 “흑체를 구성하는 진동자의 에너지는 연속적으로 변할 수 없고 이산적인 값만 취할 수 있다”는 고전적 개념과는 전혀 다른 가설을 과감하게 내놓았다.

1905년 아인슈타인은 광전 효과를 연구하면서 위에서 언급한 플랑크의 양자 이론을 장려한 뒤 광자 개념을 제안했습니다. 그는 빛 에너지가 전자기파 이론에서 설명한 것처럼 파면에 분포하는 것이 아니라 광자라고 불리는 입자에 집중되어 있다고 믿었습니다. 광전 효과에서는 광자가 금속 표면을 비추면 전자기 이론에서 예측한 대로 에너지를 축적하는 데 필요한 시간 없이 금속에 있는 모든 전자에 동시에 흡수됩니다. 전자는 이 에너지의 일부를 사용하여 금속 표면의 인력을 일 함수로 극복하고 나머지는 금속 표면을 떠난 후 전자의 운동 에너지가 됩니다.

1923년 아서 홀리콤프턴(Arthur Holycompton)은 전자에서 산란된 저강도 X선에서 나타나는 파장 변화(소위 콤프턴 산란)가 파동 이론이 아닌 X선 입자 이론으로 설명될 수 있음을 보여주었습니다.

1926년에 길버트 N. 루이스(Gilbert N. Lewis)는 이 빛 양자 입자를 광자라고 명명했습니다.

2018년 2월, 과학자들은 양자 컴퓨터 개발에 유용할 수 있는 폴라론을 포함할 수 있는 새로운 유형의 빛을 발견했다고 처음으로 보고했습니다.

"매우 수학적"인 물리적 시스템인 양자역학은 고전 역학만큼 성숙해졌으며 미시 세계를 통찰하는 중요한 도구가 되었습니다.

그러나 양자역학 역시 입자운동의 파동-입자 이중성 문제, 확률파 문제, 입자 얽힘 문제, 파동함수 붕괴 문제 등 많은 물리적 혼란을 남긴다.

4.2.5.5 빛의 파동-입자 이중성

역사적으로, 빛이 입자인지 파동인지에 대한 논쟁이 2000년 이상 동안 있어 왔습니다(아래 그림).

빛의 다양한 현상과 성질은 입자성과 파동성을 동시에 갖고 있음을 보여준다. 두 파벌의 연구자들은 각자의 의견을 고집하며 서로 양보하지 않습니다.

1905년이 되어서야 아인슈타인은 독일의 "Physical Annals"에 "빛의 생성과 변형에 대한 추측적 견해"라는 제목의 논문을 발표했습니다. 그는 시간의 평균값에 대해 빛이 파동처럼 행동한다고 ​​믿었습니다. 순간적인 시간 가치에 대해 빛은 입자처럼 행동합니다. 미세한 물체의 파동성과 입자성의 일체성, 즉 파동-입자 이중성이 밝혀진 것은 역사상 처음입니다. 이 과학 이론은 결국 학계에서 널리 받아들여졌습니다.

새로운 사실과 이론이 대두되면서 파동이론과 빛의 입자이론 사이의 논쟁은 '빛은 파동-입자 이중성을 갖는다'는 결론으로 ​​끝났다.

즉, 빛입자의 운동 궤적은 주기적인 파동입니다.

위키피디아에서는 다양한 이론으로 빛의 특성을 생생하게 설명한 영상을 제공하고 있습니다.

4.2.6 빛의 에너지

빛은 에너지 전달 방식이다. 빛 에너지는 광자 에너지(입자 특성 측면에서) 또는 전자기 방사선(파동 특성 측면에서)으로도 알려져 있습니다. 각 광자에는 일정한 양의 에너지가 있으며, 주파수가 높을수록 에너지도 높아집니다.

빛의 측정은 에너지나 방사선의 측정과 유사하며 태양 에너지, 난방, 조명, 통신, 컴퓨터 그래픽 및 기타 분야에서 자주 사용됩니다.

빛 에너지는 줄(J) 단위의 에너지로 측정할 수 있습니다. 복사 에너지의 양은 복사속(또는 전력)을 시간, 면적, 공간에 대해 적분하여 계산할 수 있습니다.

복사 에너지를 측정하기 위한 많은 개념과 기호가 있으며, 수십 개의 완전한 표가 있습니다. PBR과 관련된 개념만 아래에 나열되어 있습니다.

이름 상징 단위 공식 분석하다

복사에너지(복사에너지) Q 줄(J)

  • 전자기 방사선 에너지

방사속(복사속) \피 와트(W) Φ=dQdt 단위 시간당 복사되는 에너지로 복사 전력(Radiant Power) 또는 플럭스(Flux)라고도 합니다.

방사량(방사량) 와트/제곱미터(W/m2) Φ=dΦdA단위 면적당 도달하는 방사선속

라디오시티(라디오시티) 와트/제곱미터(W/m2) M=dΦdA복사속을 떠나는 단위 면적, 복사라고도 불리는 복사 방출(Radiant Existance)

복사강도(복사강도) 와트/스테레오라디언(W/sr) I=dΦdω 단위 입체각을 통한 복사속

래디언스(래디언스) 와트/제곱미터 고체 라디안(W/m2sr) L=dΦdωdA 단위 면적과 단위 입체각을 통과하는 복사속

4.3 광학 이론

광학은 물질과의 상호 작용, 빛을 사용하거나 감지하는 기구의 구조를 포함하여 빛의 동작과 특성을 연구하는 물리학의 한 분야입니다.

광학은 일반적으로 가시광선, 자외선, 적외선의 동작을 설명합니다. 빛은 전자기파이므로 다른 대역(예: X선, 마이크로파, 전파)의 전자기 복사도 유사한 특성을 나타냅니다.

광학은 다양한 각도, 다양한 입도 및 초점에 따라 대략 다음과 같은 범주로 나눌 수 있습니다.

  • 전자기 광학. 빛의 분류 대부분의 광학 현상은 빛에 대한 고전적인 전자기적 설명을 사용하여 설명할 수 있습니다. 그러나 빛에 대한 완전한 전자기적 설명은 실제로 적용하기 어려운 경우가 많으며 다른 유형의 광학 장치를 사용해야 합니다.

  • 기하광학. 기하광학은 빛을 직선으로 이동하고 표면을 통과하거나 표면에서 반사될 때 구부러지는 일련의 광선으로 취급합니다. 이는 물리적 애플리케이션에서 단순화된 모델입니다. PBR의 BRDF는 거의 모두 기하학적 광학을 기반으로 하기 때문에 다음 장에서는 기하학적 광학에 중점을 둘 것입니다.

  • 물리적 광학. 물리광학은 기하광학으로는 설명할 수 없는 회절, 간섭 등의 파동 효과를 포함하는 보다 포괄적인 빛 모델입니다. 역사적으로 광선 기반 조명 모델이 먼저 개발된 후 파동 기반 조명 모델이 개발되었습니다. 19세기에 전자기 이론이 발전하고 나서야 광파가 실제로 전자기 복사였다는 사실이 밝혀졌습니다.

  • 동작 물리학 광학. 천체의 운동에 있어서 빛의 속도 차이, 빛의 표류, 도플러 효과 등을 주로 연구한다. 이제는 대규모의 독립적인 물리학 분야로 발전했습니다.

  • 양자 광학. 일부 현상은 빛이 파동 및 입자와 같은 특성을 갖는다는 사실에 의존합니다. 이러한 효과를 설명하려면 양자역학이 필요합니다. 빛의 입자 특성을 고려할 때 빛은 "광자"라는 입자 집합으로 모델링됩니다. 양자광학은 양자역학을 광학 시스템에 적용하는 것을 포함합니다.

광학은 천문학, 공학 분야, 사진, 컴퓨터, 의학 등 다양한 관련 분야와 연계하여 연구됩니다. 광학의 응용은 거울, 렌즈, 망원경, 현미경, 레이저, 광섬유 등을 포함한 다양한 일상 물체에서 찾을 수 있습니다.

4.3.1 빛의 반사

빛의 반사는 빛이 두 물질 사이의 경계면에서 진행 방향을 바꾸고 원래의 물질로 되돌아오는 현상입니다.

위: 빛이 반사되는 현상.

반사의 원리: 빛은 전자기파입니다. 물체에 부딪힌 광파는 단일 원자에 편파 진동(또는 금속의 전자 진동)을 일으켜 쌍극자 안테나와 같이 각 입자가 모든 방향으로 작은 2차 파동을 방사하게 합니다. 이 모든 파동은 합쳐져서 Huygens-Fresnel 원리에 따라 반사와 굴절을 생성합니다.

빛의 반사는 다음과 같은 유형으로 세분됩니다.

  • 스페큘러 반사(스페큘러 반사): 평행한 광선이 매끄러운 표면에 닿으면 반사된 광선도 평행합니다. 매끄러운 표면을 가진 물체는 빛의 스페큘러 반사를 쉽게 유발하여 눈부신 눈부심을 유발하여 물체를 불분명하게 만듭니다.

  • 디퓨즈(디퓨즈): 평행한 광선이 고르지 않은 표면에 부딪혀 반사된 광선이 모든 방향으로 방출되는 현상입니다.

  • 방향 반사(방향 반사): 디퓨즈와 스페큘러 반사 사이의 반사로 비램버트 반사라고도 합니다. 모든 방향에서 반사되는 것이 특징이며 반사 강도가 모든 방향에서 고르지 않습니다.

  • Retroreflection (Retroreflection): 입사광이 매질의 표면에 부딪히고 반사광의 방향이 입사광과 일치합니다. 항공기가 햇빛이 비치는 구름 위로 비행할 때 항공기 그림자 주위에 보이는 영역이 더 밝게 나타나고 잔디에 맺힌 이슬에서도 비슷한 효과를 볼 수 있습니다.

4.3.2 빛의 굴절

빛의 굴절은 빛이 한 매체에서 다른 매체로 입사할 때 빛의 전파 방향이 변경되어 빛이 다른 인터페이스에서 편향되는 현상을 의미합니다.

위: 빛의 굴절 현상.

굴절의 원리는 반사와 유사합니다. 광파는 특정 주파수 대역의 전자기파입니다. 빛이 전파되는 동안 전파 방향에 수직인 두 가지 구성 요소, 즉 전기장 구성 요소와 자기장 구성 요소가 있습니다. 전기장 구성 요소가 매질의 원자와 상호 작용하면 전자 분극이 발생하여 전자 구름이 형성되고 원자 무게 중심의 상대적 변위가 발생합니다. 결과적으로 빛 에너지의 일부가 흡수됨과 동시에 매질 속에서 빛의 속도가 느려지고 방향이 바뀌면서 굴절이 발생합니다.

위: 빛은 한 물질에서 다른 물질로 전달된 후 굴절되어 파장, 방향 및 속도가 변경됩니다.

현대 물리학에서는 빛이란 정적인 질량이 없고 부피가 매우 작으며 상대적으로 이동 속도가 빠른 물질이라고 지적합니다. 빛은 다른 물질과 동일한 성질을 가지고 있습니다. 빛과 물질의 상호작용으로 인해 빛의 이동 방향, 즉 굴절이 바뀌게 됩니다.

4.3.3 빛의 산란

빛이 불균일한 매질을 통과할 때 광선의 일부가 원래 방향에서 벗어나 분산되어 전파됩니다. 빛의 현상은 측면에서도 볼 수 있습니다.

산란의 원리: 광자와 분자 또는 원자가 서로 가까이 있을 때 강한 상호 반발력으로 인해 원래의 운동 방향에서 벗어나 접촉하기 전에 분리됩니다.

산란은 물체를 관찰하고 식별하는 주요 현상으로, 자연계에서 가장 보편적인 현상이다. 디퓨즈는 실제로 일종의 산란입니다.

4.3.4 빛의 분산

빛의 분산이란 복잡한 색광이 단색광으로 분해되는 현상을 말합니다.

분산 현상은 매질에서 빛의 속도 v=cn(n은 매질의 굴절률)가 빛의 주파수 f에 따라 변하는 것을 보여줍니다. 빛의 분산은 프리즘, 회절 격자, 간섭계 등을 사용하여 얻을 수 있습니다.

빛의 분산은 빛의 파동성을 보여줍니다. 분산은 빛 성분의 굴절률 차이(빛의 색상 다름)로 인해 발생하고, 굴절률은 파동의 주파수에 따라 결정되기 때문입니다.

동일한 매질에 대해 빛의 주파수가 높을수록 이 빛에 대한 매질의 굴절률이 커집니다. 가시광선 중에서 보라색 빛의 주파수가 가장 높고 빨간색 빛의 주파수가 가장 낮습니다. 백색광이 프리즘을 통과할 때 보라색 빛에 대한 프리즘의 굴절률이 가장 큽니다. 빛이 프리즘을 통과한 후 보라색 빛의 편향 정도가 가장 크고 빨간색 빛의 편향 정도가 가장 작습니다. 이런 방식으로 프리즘은 서로 다른 주파수의 빛을 분리하여 빛을 분산시킵니다.

동일한 매질에서 파장이 다른 빛의 속도와 굴절률이 다른 이유는 무엇입니까?

빛은 입자성을 갖고 있기 때문에 매질의 원자 및 분자와 상호작용합니다. 빛의 파장이 짧을수록 전달하는 에너지는 커지고 운동력은 강해지며 매질의 원자 및 분자와의 상호 작용력이 커져 속도가 느려지고 굴절률이 커집니다. (이 답변은 고전 물리학과 파동 이론을 결합한 저자의 추측에 기초한 것입니다. 정확한 근거나 주장은 발견되지 않았으므로 검증이 필요합니다!)

4.3.5 빛의 흡수

전자기 이론에 따르면, 빛의 흡수는 빛(전자기 복사)이 물질을 통과할 때 물질과 상호 작용하고 전자기 복사 에너지가 부분적으로 다른 에너지 형태로 변환되는 물리적 과정입니다.

흡수된 빛 에너지가 열에너지의 형태로 방출되면 광열 변환이 형성됩니다. 흡수되지 않은 빛 에너지가 물체에 의해 반사, 산란 또는 전달되면 우리가 보는 물체의 색상에 영향을 미칩니다.

양자이론에서는 빛의 흡수란 분자나 원자가 광자의 에너지를 흡수하여 광파 복사장(조명) 하에서 낮은 에너지 상태에서 높은 에너지 상태로 전이되는 현상을 말한다고 믿습니다. 이 전환은 특정 고유 주파수를 갖는 발진기와도 동일합니다.

전자기 이론은 특정 주파수의 빛에 대한 물체의 흡수 계수가 크면 해당 주파수의 빛의 반사율도 크다는 것을 증명합니다. 일부 유전체는 강한 흡수 대역을 가지므로 흡수 대역 근처의 주파수에서 빛에 대해 강한 반사도 나타냅니다. 이를 선택적 반사라고 합니다.

반도체 재료는 다양한 정도의 유전체 및 금속 재료의 모든 광학적 특성을 보유합니다. 반도체 물질이 외부 세계로부터 어떤 형태로든(예: 빛, 전기 등) 에너지를 흡수하면 전자가 바닥 상태에서 여기 상태로 여기됩니다. 즉, 광 흡수입니다. 들뜬 상태의 전자는 들뜬 상태에서 기저 상태로 자발적으로 또는 여기 상태로 전이하고, 흡수된 에너지를 빛의 형태로 방출합니다(방사성 재결합). 즉, 빛을 방출합니다. 물론, 흡수된 에너지는 열과 같은 비방사 형태로 방출될 수도 있습니다(비방사 재결합).

금속의 광흡수는 속박전자와 자유전자의 영향을 동시에 고려해야 합니다. 적외선 또는 저주파 방사선의 경우 자유 전자가 중요한 역할을 합니다. 자외선 및 고주파 방사선의 경우 결합 전자의 역할이 더 중요합니다. 이때 금속은 실제로 유전체와 유사한 광학적 성질을 나타낸다.

4.3.6 빛의 회절

회절이란 광파가 장애물이나 슬릿을 만날 때 발생하는 다양한 현상을 말합니다. 이는 장애물의 기하학적 음영 영역으로 구부러지는 장애물이나 구멍의 모퉁이 주변의 파동으로 정의됩니다.

빛은 파동이기 때문에 회절도 겪습니다.

광파가 단일 파장의 간격을 통과한 후에 회절이 발생합니다.

회절 효과는 광파가 굴절률이 다양한 매질을 통과할 때도 발생합니다. 음파, 물파, 전자기파(가시광선, X선, 전파)를 포함한 모든 파동은 회절을 겪습니다.

빛의 회절 원리는 두 가지 측면에서 설명할 수 있습니다.

  • 파동광학: 호이겐스-프레넬 원리와 파동 중첩의 원리에 따르면 파동이 전파되는 방식에 따라 회절이 발생합니다. 파면 전달 매질의 각 입자를 2차 구형파의 점 소스로 처리하여 파동의 전파를 시각화할 수 있으며, 후속 지점에서의 파동 변위는 이러한 2차 파동의 합입니다. 이러한 파동이 함께 추가되면 그 합은 개별 파동의 상대 위상과 진폭에 의해 결정됩니다. 따라서 파동의 합산된 진폭은 0과 개별 진폭의 합 사이의 값을 가질 수 있습니다.

  • 양자 광학: 빛이 슬릿을 통해 전파될 때 각 광자는 방출기에서 슬릿을 통해 화면까지의 경로를 설명하는 파동 함수를 갖습니다. 파동 함수(광자가 이동하는 경로)는 슬릿의 모양, 화면 거리, 광자가 생성될 때의 초기 조건 등 물리적 환경에 따라 결정됩니다.

4.3.7 빛의 중첩과 간섭

여러 개의 광파가 결합하여 형성되는 복합 효과는 빛의 중첩입니다.

보다 정확하게는 비선형 효과가 없는 경우 중첩 원리를 사용하여 간단히 간섭을 추가함으로써 상호 작용 파형의 모양을 예측할 수 있습니다. 광파의 복합 패턴을 생성하는 상호 작용을 종종 간섭이라고 하며 간섭은 다른 결과를 초래할 수 있습니다.

다양한 위상의 광파 중첩 효과.

빛의 중첩 및 간섭 현상의 원리와 회절 유형에 대해서는 다시 설명하지 않습니다.

4.3.8 빛의 편광

편광은 진동하는 방향을 설명하는 파동의 일반적인 특성입니다. 빛은 파동이기 때문에 편광도 있습니다.

편광은 진행파의 방향에 수직인 평면에서 진동 방향을 설명하는 횡파(많은 전자기파와 마찬가지로)입니다. 진동은 단일 방향(선형 편파)일 수도 있고 파동 이동 방향(원형 또는 타원형 편파)으로 회전할 수도 있습니다.

왼쪽: 선형 편광; 중간: 원형 편광; 오른쪽: 타원형 편광.

4.4 기하학 광학

기하광학은 빛의 파장을 극미량으로 취급하여 빛을 직선으로 연구하는 물리학의 한 분야입니다. 빛을 기반으로 하며 빛의 전파 및 이미징 법칙을 연구합니다.

기하광학에서는 물체를 구성하는 물체점을 기하학적 점으로 간주하고, 그로부터 방출되는 광선은 무수한 기하학적 광선의 집합으로 간주됩니다. 광선의 방향은 빛 에너지의 전파 방향을 나타냅니다.

기하광학에서 빛의 개념은 빛의 파동성과 반대됩니다. 에너지와 광파현상(회절 등)의 관점에서 보면 이런 기하학적 빛은 존재할 수 없기 때문이다. 기하광학은 파동광학의 근사치일 뿐입니다. 모든 빛을 마치 파장이 극히 작은 것처럼, 너무 작아서 빛을 직선으로 간주하는 것처럼 취급합니다. 그러나 단순화된 기하광학은 빛의 물리적 성질을 포함하지 않고 광학기기의 광학적 기술적 문제와 컴퓨터 그래픽 렌더링의 복잡성을 간단한 방법으로 해결할 수 있습니다.

기하광학, 특히 컴퓨터 그래픽에서 광처리는 다음과 같이 단순화되거나 다음 기본 법칙을 따릅니다.

  • 선형 전파: 빛은 균일한 매질에서 직선을 따라 전파됩니다. 직선은 빛의 파장이 극히 작다는 것을 의미합니다.

  • 독립 전파: 두 개의 빛이 전파 중에 서로 만나면 서로 간섭하지 않고 각자의 경로를 따라 계속해서 전파됩니다. 두 빛의 광선이 같은 지점에 모일 때, 그 지점의 빛 에너지가 단순히 추가됩니다.

  • 반사 및 굴절: 전파 중에 빛이 서로 다른 두 매체 사이의 매끄러운 경계면을 만나면 빛의 일부가 반사되고 전파 방향은 반사의 법칙을 따릅니다. 다른 부분은 굴절되고 전파 방향은 굴절 법칙을 따릅니다.

  • 경로 가역성: 빛의 광선이 한 지점에서 시작하여 반사와 굴절을 몇 번이나 통과하더라도 최종적으로 광선에 직각으로 인터페이스 반사가 발생하면 광선은 원래 경로를 따라 시작점으로 정확하게 돌아와야 합니다.

  • 매체 등방성: 빛이 전파되는 매체를 균일하게, 즉 등방성으로 단순화합니다. 소위 등방성이란 매체의 어느 지점에서나 물리적 특성(밀도, 탄성, 마찰계수 등)과 화학적 특성이 모든 방향에서 동일하다는 것을 의미합니다.

  • 인터페이스 단순화: 빛이 두 매체 사이의 인터페이스를 통과하는 지점을 평면상의 한 지점으로 처리합니다.

  • 단색광원: 실제 광원은 기본적으로 복합색광원이지만, 기하광학에서는 분산, 푸리에 적분, 에너지 적분 등의 복잡한 문제를 피하기 위해 단색광으로 단순화합니다.

  • 맥스웰 방정식의 전문화: 많은 매개변수가 전문화되고 단순화되었기 때문에 기하광학의 조명 계산에서는 실제로 맥스웰 방정식의 단순화되고 특수화된 버전을 사용합니다.

PBR 관련 기술과 많은 이론이 기하광학과 관련되어 있으므로, 이번 절에서는 기하광학의 내용을 심도있게 살펴보겠습니다.

4.4.1 반사의 법칙

반사의 법칙은 반사되는 빛의 각도를 설명합니다. 입사광의 각도는 반사되는 빛의 각도와 같습니다.

위 그림과 같이 입사광 P는 중간점 O에 입사하고, 반사광은 Q이며, 점 O의 법선이 법선입니다. 반사의 법칙에 따르면:

θi=θr

즉, 입사각 θi과 반사각 θr은 동일합니다. 이에 대한 또 다른 동등한 표현은 다음과 같습니다.

θr=πθi

반사 법칙은 반사 각도 문제를 설명하며 에너지 분포를 포함하지 않는다는 점에 유의해야 합니다.

반사에는 반사성 문제도 포함됩니다. 반사율은 입사파의 파워에 대한 반사파의 파워의 비율입니다. 각 재료의 반사율은 다르며 입사광과 매체 사이의 각도와 관련이 있습니다. 이러한 현상을 프레넬 반사효과(Fresnel Reflection Effect)라고 하며, 관련 방정식이 프레넬 방정식(Fresnel Equation)이다.

위: 프레넬 반사 효과, 중심에서 가장자리로 갈수록 특정 곡선에서 구의 반사율이 증가합니다.

실제로 빛이 매체 표면에 닿을 때 빛의 가능한 결과는 다음과 같습니다.

  • 흡수됨: 빛의 일부가 매체에 흡수되어 다른 형태로 변환되는 능력입니다.

  • 굴절: 부분적으로 굴절된 빛이 매질을 통과하여 다른 매질로 들어가면 투과 효과를 형성합니다.

  • 반사 : 빛의 일부가 반사되는데, 그 반사는 스페큘러 반사와 디퓨즈로 구분됩니다.

4.4.2 굴절의 법칙

굴절의 법칙스넬의 법칙(스넬의 법칙, 스넬-데카르트의 법칙)이라고도 하며 빛이 두 매질 사이에서 굴절된 후 각도, 굴절률 및 빛의 속도 사이의 관계를 설명합니다.

위: 굴절 법칙에 대한 애니메이션 다이어그램.

위 그림과 같이 매질 사이에서 빛이 굴절됩니다. 매질 1의 입사각, 굴절률 및 빛의 속도는 각각 θ1, n1v1입니다. 매질 2의 입사각, 굴절률 및 빛의 속도는 각각 θ2, n2v2입니다. 굴절의 법칙에 따르면 다음과 같은 관계가 있습니다.

sinθ2sinθ1=v2v1=n2n1

굴절 법칙을 사용할 때 특이한 상황이 발생합니다. 빛이 굴절률이 높은 매질에서 굴절률이 낮은 매질로 전파될 때 굴절 법칙에 따르면 입사각이 충분히 클 때 굴절각의 사인이 1보다 커야 하는 것 같습니다.

물론 이것은 불가능합니다. 실제로 이 경우 빛이 경계면에 의해 완전히 반사되는 현상을 내부 전반사(Total Internal Reflection)라고 합니다. 여전히 굴절을 일으킬 수 있는 최대 입사각을 임계각이라고 하며, 이 지점에서의 굴절각은 90입니다.

위 그림에서 볼 수 있듯이 광선은 굴절률이 높은 물에서 굴절률이 낮은 공기로 이동합니다. 입사각이 임계각보다 크면 그림 오른쪽의 내부 전반사가 발생합니다.

그 중 임계각θcrit은 굴절의 법칙으로부터 유도될 수 있습니다.

θcrit=arcsin(n2n1sinθ2)

물의 굴절률n1=1.333, 공기의 굴절률n2=1.0 및 굴절각θ2=90이므로 공기에 대한 물 굴절의 임계각은 위 공식에 따라 계산할 수 있습니다.

\theta_\text{crit_water2air} = \text{arcsin} \left( \frac{1.0}{1.333}\text{sin}90^\circ \right) = 48.6^\circ

4.4.3 기하광학의 기타 법칙

기하광학에는 반사와 굴절의 법칙 외에도 다음과 같은 법칙이 있습니다.

  • 라그랑지 적분 불변.

  • 페르마의 원리.

  • 마리우스와 뒤팽의 법칙.

이러한 법칙은 PBR 기술과 거의 관련이 없으므로 이 기사에서는 자세히 다루지 않습니다. 관심 있는 분들은 추가 정보를 찾아보실 수 있습니다.

4.5 물질 이론

4.5.1 물질이란 무엇입니까?

고전 물리학에서 물질은 질량을 갖고 공간을 차지하는 부피를 갖는 모든 것을 말합니다.

현대 물리학의 관점에서 물질은 우주의 모든 물체를 구성하는 물리적 물체와 에너지장(빛, 전기장, 자기장, 소리 등)을 말하며, 반물질과 암흑물질도 포함됩니다.

거시적인 관점에서 볼 때 물질은 보고, 만지고, 느낄 수 있는 모든 것입니다.

미시적 수준에서 물질은 원자로 구성된 모든 것이며, 원자는 상호 작용하는 아원자 입자로 구성됩니다. 물리적 입자에는 원자, 중성자, 양성자, 전자, 쿼크, 렙톤, 중입자, 페르미온 등이 포함되지만 이에 국한되지는 않습니다. 에너지 입자에는 광양자, 음파 등이 포함되지만 이에 국한되지는 않습니다.

철학적으로 물질에는 객관적인 실체 외에 주관적인 의식도 포함되어 있습니다.

물질의 개념과 구성은 매우 복잡하지만, 컴퓨터 그래픽의 PBR 분야는 고전 물리학의 물질의 광파와 에너지 장만 연구하면 됩니다.

4.5.2 재료 구조

물질의 구성은 다양하며 구조도 모양이 다양합니다.

다양한 현미경 차원에서 관찰하면 물체의 구조는 다음과 같이 설명됩니다.

  • 100m: 1미터 크기. 이 차원은 인간이 가장 자주 노출되고 친숙한 규모입니다. 대부분의 인체, 동물, 생물, 정적인 물체는 이 공간에 있다.

  • 103m: 1mm 치수. 주의 깊게 관찰하거나 일반 돋보기를 사용하면 인간은 여전히 모공, 미세 동물, 미세 곤충, 거대 박테리아, 혈관, 머리카락, 피부 세부 사항 등 많은 것을 명확하게 볼 수 있습니다.

  • 106m: 1미크론 크기. 이 차원의 물질에는 세균, 바이러스, DNA, 혈소판, 적혈구, 백혈구, 림프구 등이 포함됩니다.

  • 109m: 1나노미터 크기. 이 차원은 원자 수준까지 도달해 수소 원자와 엑스선의 특성을 분석할 수 있다.

  • 1012m: 1피코미터 크기. 이 차원은 원자핵 수준까지 깊숙이 들어가 원자, 양성자, 중성자의 크기를 설명할 수 있습니다.

  • 1015m: 1펨토미터 치수. 이 차원은 전하, 하드론, 페르미온의 크기만 설명할 수 있습니다.

  • 1018m: 1-Ami 차원. 이 차원은 전자와 쿼크의 크기만을 설명할 수 있습니다.

  • 1035m: 1 플랑크 길이. 이 차원은 양자 폼과 양자 끈만 설명할 수 있습니다.

다양한 차원의 재료 구성. 위에서 아래로: 1035m에서 1027m까지.

4.5.3 재료 형태

물질의 가장 일반적인 형태(상, 상 상태라고도 함)는 고체 상태, 기체 상태, 액체 상태, 비정질 상태, 액정 상태이며 플라즈마 상태, 초고체 상태, 중성자 상태, 초전도 상태, 초유체 상태, 보스-아인슈타인 응축물 및 페르미온 응축물과 같은 이상한 형태도 있습니다.

이러한 상태는 서로 다른 밀도, 온도, 압력 및 방사선에 따른 물질의 형태입니다. 환경이 바뀌면 한 형태에서 다른 형태로 변하게 됩니다.

고체, 액체, 기체 및 플라즈마 상태의 물질 변환 다이어그램.

4.5.4 재료 특성

물질의 성질은 다양하고 각도에 따라 다른 성질을 가지지만, 일반적인 물리화학적 성질로는 부피, 크기, 질량, 밀도, 경도, 전도도, 투자율, 자성, 가소성(가소성), 광투과도(투명도), 비열용량, 탄성, 가연성, 연소지지성, 산도, 알칼리도 등이 있습니다.

아래에서는 PBR과 관련된 재료 특성에 대해서만 설명합니다.

4.5.4.1 전도도

전도도는 물질 내에서 하전 입자의 움직임을 나타냅니다. 전하를 함유한 입자를 전하 운반체라고 하며 입자의 움직임은 전류를 형성합니다.

현재 세대에는 두 가지 이유가 있습니다.

  • 전기장의 영향을 받습니다.

  • 전하 캐리어의 불균일한 분포로 인한 확산 메커니즘.

전기 전도도에 따라 물질은 다음과 같이 나눌 수 있습니다.

  • 절연체: 유전체라고도 하며 일반적인 절연체에는 마른 목재, 플라스틱, 고무, 종이 등이 포함됩니다.

  • 반도체: 도체와 절연체 사이에 위치하며, 반도체의 전기 전도는 전계 작용과 확산이라는 두 가지 물리적 메커니즘에 의해 발생합니다. 일반적인 반도체에는 실리콘, 게르마늄, 갈륨 비소 등이 포함됩니다.

  • 도체: 강한 전기 전도성. 일반적인 도체에는 금속, 전해질, 액체 등이 포함됩니다.

  • 초전도체: 전도성이 매우 강하고 저항이 없으며 일반적으로 절대 영도 부근의 극한 조건에서만 나타납니다.

4.5.4.2 러프니스

러프니스는 물질의 미세한 표면 윤곽이 흐트러진 정도를 나타냅니다.

물체는 거칠기에 따라 다음과 같은 범주로 나눌 수 있습니다.

  • 매끄러운 물체: 거칠기는 매우 작고 거의 0이며 마찰 계수는 매우 작습니다. 미세한 표면 프로파일은 거의 직선이므로 스페큘러 반사가 발생하기 쉽습니다.

  • 반쯤 매끄러운 물체: 거칠기가 작고 마찰 계수가 작습니다. 미세한 표면 프로파일은 상대적으로 평평하여 스페큘러 반사와 디퓨즈 사이의 반사를 생성합니다.

  • 거친 물체: 거칠기는 매우 크고 1.0에 가깝고 마찰 계수는 매우 큽니다. 미세한 표면 프로파일이 매우 고르지 않아 디퓨즈가 발생합니다.

물체의 거칠기를 추정하는 방법에는 여러 가지가 있습니다.

  • Ra: 산술 평균 편차 방법, 공식:
Ra=1ni=1n|yi|
  • Rq: 제곱평균제곱근법, 공식:
Rq=1ni=1nyi2
  • Rsk: 편향된 분포 방법, 공식:
R_{sk} = \frac{1}{nR_{q^3&#125;&#125;\sum_{i=1}^n y_i^3
  • Rku: 첨도법, 공식:
R_{ku} = \frac{1}{nR_{q^4&#125;&#125;\sum_{i=1}^n y_i^4

RzDINRzJIS 방법도 있지만 가장 일반적으로 사용되는 방법은 Ra입니다.

4.5.4.3 반투명도

빛 투과율은 투명도라고도 알려져 있으며 빛이 물질을 통과할 수 있는 정도를 나타냅니다.

물체의 빛 투과율은 주로 재료의 내부 구조에 의한 외부 광자의 흡수 및 산란에 따라 달라집니다.

금속 물질은 가시광선 대역에서 조밀한 전자 궤도(에너지 밴드 포함)를 가지며 해당 에너지의 광자를 강하게 흡수하고 광자를 방출할 수 있습니다(동일 에너지 또는 더 작은 에너지). 즉, 표면이 빛을 강하게 반사하고 불투명할 수 있습니다.

물질 내부의 빛의 산란은 주로 내부 결함의 수에 따라 달라집니다. 결함이 많은 재료는 산란율이 높습니다. 일반 세라믹 재료는 다수의 미세 기공과 같은 결함으로 채워져 있습니다. 기공은 통과하는 빛을 강하게 산란시키므로 일반 세라믹은 불투명합니다. 다공성이 매우 낮은 세라믹 재료는 유리처럼 투명할 수 있습니다. 단결정(예: 천연 결정)과 액체(예: 물)는 규칙적인 내부 배열과 결함이 거의 없기 때문에 투명합니다.

4.5.4.4 이방성

등방성은 물질의 특정 지점의 물리적, 화학적 특성이 방향과 관련되어 있는지 여부를 나타냅니다. 방향과 무관하면 등방성이라고 하고, 그렇지 않으면 이방성이라고 합니다.

예를 들어, 맑고 잔잔한 물은 등방성입니다. 왜냐하면 물의 각 부분의 특성(밀도, 압력, 온도, 굴절률, 질량 등)이 방향과 무관하기 때문입니다. 불규칙한 연기나 안개는 이방성이며 동일한 부품이라도 밀도가 다르거나 방향이 다른 외부 힘이 있다는 것이 분명합니다.

컴퓨터 그래픽, 특히 실시간 렌더링 분야에서 객체는 균일성, 즉 등방성으로 단순화되는 경우가 많습니다. 또한 기하광학은 일반적으로 빛이 전파되는 매체를 등방성으로 취급합니다.

4.6 에너지 이론

4.6.1 에너지란 무엇인가?

에너지는 물체에 영향을 미치거나 가열하기 위해 물체로 전달되어야 하는 정량적 특성입니다. 에너지는 물질 운동의 변형을 측정하는 척도이자 작업을 수행하는 물리적 시스템의 능력을 측정하는 척도입니다.

에너지 단위는 일의 단위인 국제 단위계의 줄(J)과 동일합니다. 현미경 연구 분야에서는 전자 볼트(eV)가 일반적으로 단위로 사용됩니다.

4.6.2 에너지 유형

에너지는 다양한 형태로 존재하며 분야, 분야, 각도에 따라 다양한 범주를 갖습니다. 주요 내용은 다음과 같습니다.

  • 기계적 에너지: 물체의 움직임(병진, 회전)에 대한 거시적 에너지(운동에너지, 위치에너지)의 합입니다.

  • 전기 에너지: 전기장에 의해 발생하거나 저장되는 위치 에너지입니다.

  • 자기 에너지: 자기장에 의해 발생하거나 저장되는 위치 에너지입니다.

  • 중력 위치 에너지: 중력장에 의해 발생하거나 저장되는 위치 에너지입니다.

  • 화학에너지: 화학결합에 의해 발생하는 위치에너지입니다.

  • 이온화 에너지: 전자가 원자나 분자에 결합하여 발생하는 위치 에너지입니다.

  • 원자력: 원자를 결합하여 핵을 형성하고 핵 반응을 일으키는 위치 에너지입니다.

  • 글루온 결합 에너지: 쿼크를 결합하여 강입자를 형성하는 위치 에너지입니다.

  • 탄성 에너지: 재료(또는 그 용기)의 변형으로 인해 복원력이 발생하는 위치 에너지입니다.

  • 기계적 파동 에너지: 기계적 파동의 전파로 인한 탄성 재료의 운동 에너지 및 위치 에너지입니다.

  • 음파에너지: 음파는 기계적 파동의 일종입니다.

  • 방사 에너지: 빛을 포함하여 전자기 방사선에 의해 전파되는 장에 저장된 위치 에너지입니다.

  • 정지 에너지: 물체의 정지 질량에 의해 발생하는 위치 에너지입니다.

  • 열에너지: 입자의 미세한 움직임의 운동 에너지는 무질서한 등가 기계적 에너지입니다.

4.6.3 에너지 변환

에너지에는 여러 종류가 있으며 서로 변환될 수 있습니다.

에너지 변화는 삶의 모든 곳에서 볼 수 있습니다. 예를 들어, “태양에너지로 생산된 전기를 이용해 물을 끓이면 수증기가 계속 상승한다”는 식이다. 여기에는 많은 에너지 변환 프로세스가 포함됩니다.

  • 태양 내부의 핵에너지는 핵반응을 통해 햇빛의 복사에너지로 변환됩니다.

  • 태양광 발전소의 태양광 패널은 복사 에너지를 흡수하여 전기 에너지를 형성합니다.

  • 물을 끓이는 기구를 사용하여 전기 에너지를 물의 열 에너지로 변환합니다.

  • 수증기의 상승 운동은 중력 위치 에너지로 변환됩니다.

4.6.4 질량-에너지 등가

아인슈타인은 20세기 초에 유명한 질량-에너지 전환 공식을 제안했습니다.

E=Pc=mcc=mc2

E는 에너지, m은 물질의 나머지 질량, c는 진공에서 빛의 속도, 약 3×108m/s입니다.

질량-에너지 등가 공식은 정지 질량을 가진 모든 물질은 에너지로 변환될 수 있으며, 아주 적은 양의 물질은 매우 엄청난 양의 에너지로 변환될 수 있음을 보여줍니다.

예를 들어 물질 1kg이 에너지로 변환되면 다음과 같습니다.

E1kg\약1.0×(3×108)2=9×1016J

그 에너지는 다음과 같습니다.

  • 250억 킬로와트시(2000GWh)

  • 삼협수력발전소(세계 최대 발전소)의 분기별 발전량

  • 21.5조 킬로칼로리(21Pcal);

  • TNT 210,000톤

  • 휘발유 26억 3천만 리터.

물질이 에너지로 변환되면 매우 무섭다는 것을 알 수 있습니다. 작은 돌 하나면 작은 행성을 파괴할 수 있습니다.

다행스럽게도 현재 물질을 에너지로 변환하는 쉬운 방법은 없습니다. 그러나 핵폭발(원자폭탄, 중성자폭탄, 수소폭탄)은 질량에너지변환정리를 활용하지 않지만, 원자력이 발휘하는 위력은 충분히 무시무시하다.

4.6.5 에너지 보존

전통적인 물리학에서 에너지 보존 법칙은 닫힌 시스템에서 에너지가 허공에서 나타나거나 사라지지 않고 한 형태에서 다른 형태로만 변환될 뿐이며 에너지의 총량은 변하지 않는다는 것을 보여줍니다.

현대 물리학에서는 질량과 에너지가 서로 변환될 수 있으므로 에너지 보존은 에너지와 질량의 합이 변하지 않는다는 사실까지 확장됩니다.

Noether의 정리는 에너지 보존을 엄격하게 증명할 수 있으며, 영구 운동 기계가 실현 가능하지 않음을 보여줍니다.

예를 들어, 위 그림과 같이 빛이 물질의 표면에 닿으면 빛 에너지의 일부는 스페큘러 반사(노란색)되고, 일부는 산란(짙은 파란색)되고, 일부는 흡수되고(갈색), 일부는 투과(그림에 표시되지 않음)될 수 있습니다. 해당 에너지는 반사된 부분이 여전히 빛 에너지이고, 흡수된 부분이 열 에너지, 전기 에너지 등으로 변환되고, 투과된 부분이 여전히 빛 에너지라는 것입니다.

Ein=E+E+E+E

즉, 입사된 빛의 에너지는 반사(스페큘러 반사 및 산란 포함), 흡수, 투과 부분의 총 빛 에너지와 동일하며 에너지 보존 법칙을 따릅니다.

PBR의 BRDF도 이 보존 법칙을 따르고 러프니스 및 반사율과 같은 개념을 도입하여 원칙적으로 물리적으로 더 정확하고 렌더링 효과가 더 현실적으로 만듭니다.

4.7 PBR 및 광학

이번 장에서는 앞 절에서 언급한 광학이론과 PBR을 결합한 이론, 특히 물질과 빛의 상호작용 원리와 이론을 설명한다. 주로 2013년부터 2015년(특히 2015년)에 SIGGRAPH 오픈 클래스에서 Naty Hoffman이 연설한"물리학과 음영의 수학"** 주제를 참조합니다.

4.7.1 스펙트럼 전력 분배(SPD)

[4.2.5.3 빛의 전자기 이론](#4.2.5.3 빛의 전자기 이론)에 설명된 전자기 이론을 검토해 보겠습니다.

빛은 매질에서 특정 파장(파장)과 주파수의 에너지로 앞으로 진동하는 전자기파입니다. 전자기파는 전기장(Electric)과 자기장(Magnetic)으로 분해될 수 있으며, 서로 수직을 이루고 있습니다(아래 그림 참조).

사람이 볼 수 있는 빛의 파장은 400nm~780nm에 분포합니다. 가시광선의 파장은 거미줄의 폭과 유사하지만 사람의 머리카락 폭보다는 훨씬 작습니다(아래 그림).

위 사진: 가시광선 파장(사진 왼쪽)과 거미줄(사진 오른쪽 회색 사선), 사람 머리카락(사진 오른쪽 노란색 부분)의 폭 비교.

실제로 대부분의 빛에는 여러 대역의 전자기장이 포함되어 있으며 각 대역의 전자기장은 서로 다른 에너지를 포함합니다. 예를 들어 아래 사진의 500~550nm 대역의 전자기파는 왼쪽 상단의 **Spectral Power Distribution(SPD)**에서 녹색광의 에너지를 나타냅니다. 레이저는 단색광을 방출할 수 있습니다.

아래 그림의 왼쪽에 있는 R, G, B의 스펙트럼 에너지 분포에 해당 스케일링 계수를 곱합니다. 결과를 추가하면 아래 그림 오른쪽의 패턴이 됩니다.

이 원리는 극장에 설치된 R, G, B 레이저 프로젝션 시스템과 유사합니다.

위 그림은 에너지 분포 다이어그램을 보여줍니다. 이를 파형도로 표현하면 아래 그림과 같이 빛의 중첩과 간섭이 수반되기 때문에 더욱 복잡해 보입니다.

그러나 대부분의 광원은 단일 파장의 광파가 아니라 특정 폭을 갖는 연속적인 합성 광파이기 때문에 최종 중첩 파형은 더 복잡합니다. 예를 들어 표준 백색 광원 D65를 예로 들면 스펙트럼 에너지 분포도와 복합 파형은 다음과 같습니다.

흥미롭게도 아래 그림의 두 SPD는 서로 다르지만(상단은 연속 분포, 하단은 이산 RGB 분포) 인간 시각 이미징의 원리(자세한 내용은 [4.2.3 인간 눈의 가시광선 인식 원리](#4.2.3 인간 눈의 가시광선 인식 원리) 참조)와 딱 일치하므로 인간은 둘 사이의 차이를 인식하지 못합니다. 즉, 인간의 시각은 손실이 있고, 무한차원 SPD는 3차원 시각적 공간으로 단순화된다.

4.7.2 물질과 빛의 상호작용

나노미터 수준에서 전자기파 광선이 원자나 분자를 만나면 어떻게 될까요?

그 대답은 광파가 원자와 분자의 분극을 일으키고 양전하와 음전하를 분리하여 쌍극자를 형성한다는 것입니다. 이는 들어오는 광파가 흡수된다는 것을 의미합니다.

에너지를 흡수하여 분극화된 원자와 분자는 빠르게 회복되어 다시 외부로 방출되어 2차 광파를 형성하게 됩니다. 물론 흡수된 에너지의 일부는 열운동, 즉 열에너지로 변환될 수도 있다.

균일한 매질의 경우 빛은 직선을 따라 전파됩니다. 모든 물질은 원자 차원에서 완전히 균일할 수 없기 때문에 균일한 매체는 실제로는 추상적인 개념입니다.

렌더링 기술에서는 매크로 통계 및 조합을 사용하여 재료에 대한 매개변수를 제공합니다. 이 매개변수는 굴절률(IOR)이며 다음 두 부분으로 구성됩니다.

  • 한 부분은 매질에서 빛의 속도를 설명합니다.

  • 다른 부분은 매체에 흡수되는 빛의 비율을 설명합니다.

매체의 국부적으로 불균일한 부분은 입자(원자핵 등)로 모델링됩니다. 불연속 굴절률을 갖는 물질은 입사광을 산란시키고 산란된 빛은 모든 방향으로 향하게 됩니다.

이는 앞서 논의한 단일 분자 또는 원자의 분극과 유사하지만 이러한 입자가 결합되어 거시적 모델을 형성할 수 있습니다.

아래 그림은 흡수계수와 산란계수로 구성된 거시적 차원의 재료 성능도입니다.

가로축산란 계수입니다. 왼쪽에서 오른쪽으로 투명한 것부터 탁한 것까지 재료의 정도를 볼 수 있습니다. 세로축흡수 계수입니다. 아래쪽에서 위쪽으로 투명(빛이 완전히 투과되어 입사광과 거의 동일한 색상을 나타냄)에서 불투명(빛이 완전히 흡수되어 입사광과 다른 색상을 나타냄)까지 물질의 정도를 나타냅니다. 예를 들어 우유는 흡수계수가 낮고 산란계수가 높은 물질이기 때문에 입사광에 비추면 하얗고 탁하게 보입니다. 유색 액체는 특정 파장의 빛을 쉽게 흡수할 수 있지만 다른 파장에서는 쉽게 흡수할 수 없습니다.

광학적인 관점에서 가장 중요한 것은 모든 재료의 표면이 거칠다는 점이다. 적어도 원자 차원에서는 표면이 완전히 편평하지 않습니다. 원자 사이의 배열 거리가 광파의 배열 거리와 유사하거나 작을 경우 이전 장에서 논의한 회절 현상이 발생하게 됩니다.

Huygens-Fresnel 원리는 이 현상을 설명할 수 있습니다. 광파가 비슷한 파장을 가진 장애물을 만나면 "굴곡"으로 전파되어 장애물 뒤로 이동합니다.

나노미터 차원에서 Huygens-Fresnel 원리는 광파가 광학적으로 평평한 표면에 전파될 때도 적용됩니다. 들어오는 빛과 충돌할 때 각 입자는 구형 파동을 방출하는데, 일부는 강하고 일부는 약합니다. 이러한 비평행 구형파의 조합은 복잡한 파형을 형성하여 여러 방향에서 서로 다른 빛을 방출합니다.

나노구조가 작을수록 광파가 덜 회절됩니다. 입사광이 단일 원자와 충돌하면 작은 부분이 회절됩니다.

이제 기하학과 광선 광학으로 돌아가서 컴퓨터 그래픽에서 더 단순화되고 널리 사용됩니다. 한 가지 단순화 방법은 나노 규모의 불규칙성과 회절을 무시하고 광학적으로 평평한 표면을 마치 완전히 평평한 것처럼 처리하는 것입니다. 이로부터 기하학적 광학의 반사 및 굴절 법칙을 적용할 수 있습니다.

많은 재료의 표면은 매끄러워 보이지만 실제로는 그렇지 않습니다. 마이크로지오메트리의 경우에도 고르지 않습니다.

위 사진의 윗부분은 물체가 매끄러워서 미세한 표면도 더 규칙적으로 보이고, 반사되는 빛도 상대적으로 규칙적으로 보입니다. 거시적 표현은 반사광이 더 선명하고 반사된 그림이 반사된 물체의 윤곽을 더 쉽게 표현할 수 있다는 것입니다. 아래쪽 부분은 현미경적으로 더 불규칙하고 반사광의 방향이 더 불규칙하므로 거시적으로 표현하면 하이라이트가 흐려지고 반사된 물체를 명확하게 볼 수 없습니다.

매질로 굴절된 빛은 어떻게 되나요?

이 문제를 해결하려면 물질의 전도도를 분류한 다음 별도로 탐색해야 합니다.

  • 도체: 도체는 금속, 전해질 등 전도성이 높은 물질입니다. 입자 결합 특성으로 인해 굴절된 빛을 즉시 흡수하여 열 운동을 형성합니다.

  • 절연체(유전체): 유전체, 전도성이 없는 물질을 의미합니다. 이전 장에서 설명한 것처럼 굴절된 빛이 불투명 유전체에 들어간 후 작은 부분이 흡수되고 상당 부분이 매질 내부에서 여러 번 산란되었다가 표면에서 다시 방출되어 디퓨즈를 형성합니다.

매체 표면에서 다시 산란되는 빛은 서로 다른 산란 거리를 형성합니다. 산란 거리의 분포는 산란 입자의 밀도와 특성에 따라 달라집니다.

아래 그림과 같이 픽셀 크기(녹색으로 표시된 영역)가 산란 거리(노란색 선분)보다 크면 표면 아래 산란 효과를 무시할 수 있습니다.

서브서피스 스캐터링(SSS) 효과가 무시되므로 입사광 근처 영역은 Lambert 또는 Phong 조명 모델과 같은 고전적인 조명 계산 방법을 사용하여 점(아래 그림)으로 처리할 수 있습니다.

단일 지점으로 처리된 후 빛은 아래 그림과 같이 스페큘러 반사 및 디퓨즈(굴절, 흡수, 산란 및 표면으로의 빛 굴절 포함)의 두 부분으로 나눌 수 있습니다.

아래 그림과 같이 산란 범위(노란색 선분)가 픽셀 크기(녹색 원 영역)보다 크기 때문에 위의 단순화된 모델을 사용할 수 없으며, 서브서피스 스캐터링(SSS)(Subsurface Scattering) 렌더링 기술을 채택해야 합니다.

  • 반도체: 빛과 상호 작용하는 반도체의 특성은 금속과 비금속 사이에 있기 때문에 실제 렌더링에서는 반도체 특성을 시뮬레이션하기 위해 Dinis 원리의 메탈릭 계수가 일반적으로 사용됩니다.

4.7.3 BxDF

이전 섹션에서는 물질과 빛의 다양한 상황의 상호 작용 원리를 설명했습니다. 이 섹션에서는 BxDF의 주요 유형을 설명합니다.

현재 컴퓨터 그래픽 렌더링 분야에서 주요 물리 기반 렌더링 방법은 다음과 같습니다.

  • 조도: 전체 복사 에너지에 대한 광원의 스페큘러 반사 및 디퓨즈의 비율을 계산하여 색상을 계산합니다. 실시간 렌더링 분야에서는 가장 주류를 이루는 렌더링 방식입니다. Cook-Torrance를 포함하여 대부분의 BRDF는 이 방법을 기반으로 합니다.

  • 레이 트레이싱: 레이 트레이싱 기술입니다. 그 접근 방식은 카메라 위치와 렌더링 텍스처의 각 픽셀에서 광선을 구성하고 이를 화면에서 가상 세계로 방출하는 것입니다. 기하학적인 물체를 만날 때마다 조명이 계산되고 일정 비율의 에너지가 손실됩니다. 반사 광선과 굴절 광선 등으로 계속 분할되며 초기 광선과 모든 분할 광선의 에너지가 소진될 때까지 재귀적으로 계산됩니다.

이 방법은 비용이 많이 들고, 특히 장면 복잡도가 높을 때 영화 및 TV 제작, 애니메이션 제작, 디자인 산업 등과 같은 오프라인 렌더링에 자주 사용됩니다.

최근 몇 년 동안 NVIDIA의 RTX 시리즈와 AMD의 RX 시리즈 그래픽 카드가 등장하면서 이들의 공통 기능은 하드웨어 수준의 레이 트레이싱 지원으로, 고급 레이 트레이싱 기술을 실시간 렌더링 분야에 도입했습니다.

  • 경로 추적: 실제로 경로 추적은 향상된 레이 트레이싱 방법입니다. BRDF를 사용하여 여러 반사 광선을 무작위로 추적한 다음 이러한 광선의 기여도에 따라 점의 색상 값을 계산하는 Monte Carlo 방법을 도입한다는 점에서 레이 트레이싱과 다릅니다.

이 방법은 더 현실적이지만(아래 그림) 시간이 더 많이 걸리고 일반적으로 오프라인 렌더링 분야에서 사용됩니다.

방사성 Cook-Torrance BRDF 모델의 이론과 구현은 이전 장에서 자세히 설명했습니다. 실제로 Cook-Torrance 모델은 전체 렌더링 시스템에서 빙산의 일각에 불과합니다. 다음은 BRDF 조명 모델 시스템입니다.

공간적 제약과 이 글의 주제로 인해 라디오메트릭 방식을 기반으로 한 BxDF 조명 모델을 아래에서 소개하겠습니다.

BxDF는 다음 범주로 분류될 수 있습니다.

  • BRDF (양방향 반사 분포 함수): 불투명 재료의 조명 계산에 사용됩니다. Cook-Torrance는 BRDF의 구현 방법으로 이전 장에서 자세히 설명하였으므로 자세한 내용은 다루지 않겠습니다.

  • BTDF (양방향 전송 분포 함수): 투명 재질의 조명 계산에 사용됩니다. 굴절된 빛이 매질을 통과하여 다른 매질로 들어갈 때의 조도 계산 모델은 투명 매질에만 적용 가능합니다.

  • BSDF(양방향 산란 분포 함수): 실제로는 BRDF와 BTDF를 합성한 것입니다.

간단히 말해서 BSDF = BRDF + BTDF 공식으로 표현됩니다.

  • SVBRDF (공간적으로 변하는 양방향 반사 분포 함수): 두 개의 매개변수를 포함하는 Cauchy 분포가 기존의 가우스 분포 대신 미세 영역 BRDF(양방향 반사 분포 함수) 모델에 도입되었습니다. 동시에, 타겟 자체의 방사선 강도의 방향 의존성이 고려됩니다. 이를 바탕으로 장파 적외선 편파의 수학적 모델을 도출하고, 시뮬레이션 렌더링에 적합하도록 모델을 합리적인 범위 내에서 단순화하고 수정합니다.

  • BTF(양방향 텍스처 함수): 편평하지 않은 표면을 시뮬레이션하는 데 주로 사용되며 매개변수는 SVBRDF와 일치합니다. 그러나 BTF에는 그림자, 폐색, 상호 반사, 표면 아래 산란 등과 같은 비국소 산란 효과가 포함됩니다. BTF를 사용하여 표면의 각 점을 모델링하는 방법을 Apparent BRDFs(Surface Bidirection Reflection Distribution Functions)라고 합니다.

  • SSS (Subsurface Scattering, 3S라고도 함, Subsurface Scattering): 반투명이나 특정 투명도를 가진 물질(피부, 옥, 대리석, 양초 등)에 빛이 입사하여 내부적으로 산란된 후 표면을 통해 반사되는 것을 시뮬레이션하는 조명 시뮬레이션 기술입니다. 다음은 SSS로 시뮬레이션된 옥 렌더링입니다.

표면 산란에 대한 연구와 관련하여 더 좋은 것은 Jensen의 기사 "A Practical Model for Subsurface Light Transport"입니다. 이 기사는 보다 포괄적인 SSS 모델을 제안하고 이를 양방향 표면 산란 반사 분포 함수(BSSRDF)로 모델링합니다.

  • BSSRDF(양방향 표면 산란 반사 분포 함수): 투명한 재질을 시뮬레이션하는 데 자주 사용되며 현재 주류 기술입니다. BRDF와 차이점은 BSSRDF가 재료를 통한 광 투과 효과를 재현할 수 있고 다양한 광 입사 및 퇴출 위치를 지정할 수도 있다는 것입니다.

위에서 볼 수 있듯이 BxDF는 다양한 형태를 가지고 있지만 모두 방사능을 기반으로 한 조명 모델이기 때문에 최종적으로 다음과 같은 수식으로 추상화할 수 있다.

Lo(p,ωo)=Ωfr(p,ωi,ωo)Li(p,ωi)nωidωi

보다 간결하게 설명하면 p 지점에서 입사광 ωi의 색상 계산 공식은 다음과 같습니다.

p=×××=f(nnormal,ω,v)

공간 문제로 인해 이 기사에서는 BTDF, BSDF, SSS 및 BSSRDF에 대해 자세히 설명하지 않습니다. 관심 있는 분들은 추가 정보를 찾아보실 수 있습니다. 저자는 앞으로 추가적인 특별 주제를 공개할 수도 있습니다.

이 장의 끝에서 BRDF의 최종 조명 계산 결과는 기하학적 함수와 잉크 선택의 조합 결과라는 점을 언급할 가치가 있습니다.

잉크 알고리즘은 각 색상 구성 요소의 반사율을 계산하는 방법을 설명합니다. "A Multi-Ink Color-Separation Algorithm Maximizing Color Consistancy" 논문을 참고하세요.

5. 고급: PBR 상관 이론 및 도출

이전 장에서는 PBR의 핵심 원리인 광학 이론과 재료 상호 작용의 원리를 자세히 소개했습니다.

본 장에서는 PBR의 핵심 원리와 관련된 이론을 심도 있게 소개하고, 일부 공식을 추론하거나 정교화함으로써 독자들이 PBR의 관련 기술과 원리를 보다 철저하게 이해할 수 있도록 할 것이다.

주로 목표로:

  • 수석 프로그래머

  • PBR의 기본 원리와 이론을 완전하고 철저하게 이해하고 싶은 분

수리물리학은 수학과 물리학을 융합한 과목으로, 물리적 현상과 이론을 수학적 공식이나 이론을 이용하여 표현하는 것을 목표로 합니다. 이 장은 주로 수리 물리학과 관련이 있습니다.

5.1 미적분학

미적분학은 광복사 측정, 전자기장, 양장 등 많은 물리적 현상이나 문제를 해결할 수 있으므로 미적분학에 대한 기본 지식을 복습하는 것이 필요하다.

미적분학(Calculus)은 수학의 기본 과목이자 함수를 연구하는 고등 수학의 한 분야입니다. 포함된 주요 내용은 다음과 같습니다.

  • 미분화(미분화): 도함수에 대한 함수 및 연산의 변화율을 설명하는 일련의 이론입니다. 기능, 속도, 가속도 및 곡선 경사를 수집하여 통합된 기호 세트로 논의하고 계산할 수 있습니다. 포함된 것:

한계 이론

  • 파생상품

  • 차별화

  • 적분법(Integration): 면적, 부피 등을 정의하고 계산하는 일반적인 방법을 제공합니다. 포함 내용:

확실한 통합

  • 무기한 통합

5.1.1 차별화

5.1.1.1 기능 제한

  • 극한의 개념: y=f(x)가 주어진 함수라고 가정합니다. 독립 변수 x가 정의 영역의 특정 추세에 따라 변하는 경우, xa, 함수 값 및 특정 상수 A가 무한히 가까울 수 있는 경우(또는 동일할 수 있는 경우), f(x)는 이 변경 과정에서 한계를 갖는다고 하며 A는 해당한계**이며, 이는 limxaf(x)=A로 기록됩니다. 그렇지 않으면 다음과 같이 됩니다. f(x)에는 이 프로세스에 제한이 없습니다.

예를 들어, y=xf(x) 함수에는 아래와 같은 곡선이 있습니다. x가 0에 무한히 접근하면 y도 0에 접근한다는 것을 알 수 있습니다. 공식은 limx0xf(x)=0입니다.

  • 극한의 속성(limf(x)limg(x)이 모두 존재하고 C가 상수라고 가정):

limC=C

  • limxax=a

  • limCf(x)=Cf(x)

  • lim[f(x)±g(x)]=limf(x)±limg(x)

  • lim[f(x)g(x)]=limf(x)limg(x)

  • limf(x)g(x)=limf(x)limg(x)limg(x)0

  • limxaf(x)=Af(a+0)=f(a0)=A (극한과 왼쪽 및 오른쪽 극한 간의 관계)

  • 중요 제한:

삼각 함수와 관련된 중요한 제한 사항 1:

\lim_{x \to 0} \frac{\sin{x&#125;&#125;{x} = 1

​ 그 중 \frac{\sin{x}{x} 곡선은 다음과 같습니다.

xf(x)로 확장될 수 있습니다.

\lim_{x \to 0} \frac{\sin{f(x)&#125;&#125;{f(x)} = 1

이 중요한 극한을 사용하여 삼각 함수와 관련된 일련의 극한을 얻을 수 있습니다.

  • 자연 상수 e와 관련된 중요한 한계 2에는 두 가지 표현 형식이 있습니다.
limx(1+1x)x=elimx0(1+x)1x=e

​ 그 중 e는 무리수, e=2.718281828459045입니다.

xf(x)로 확장될 수 있습니다.

\begin{eqnarray*} \lim_{x \to \infty} (1+\frac{1}{f(x)})^{f(x)} &=& e \; (\lim_{x \to a}f(x) = \infty) \\

\end

5.1.1.2 파생상품

  • 파생상품의 정의:

y=f(x)x0x0+x에 정의되어 있다고 가정하면 함수의 증분은 y=f(x0+x)f(x0)입니다. 한도인 경우

limx0yx=limx0f(x0+x)f(x)x

존재하면 y=f(x)x0에서 미분 가능하다고 하며, 극한 값은 x0에서 f(x)미분(실제로 기울기, 변화율)이라고 하며 이는 다음 형식으로 기록될 수 있습니다.

f(x0)dfdx|x=x0y|x=x0dydx|x=x0
  • 파생 단계:

주어진 x에 대해 y=f(x0+x)f(x0)를 찾으세요.

  • yx를 계산하고 단순화합니다.

  • limx0yx를 구하세요.

예를 들어 y=f(x)=x2의 도함수를 구하는 작업은 다음 단계로 나뉩니다.

y=(x+x)2x=2xx+()2yx=2x+xlimx0yx=2x+x=2x

더 추상적으로, 거듭제곱 함수 f(x)=xα의 도함수는 다음과 같습니다.

(xα)=αxα1
  • 미분 규칙:

기본 연산 미분 규칙: u=u(x)v=v(x)xv(x)0의 미분 함수라고 가정하면 다음과 같습니다.

(u±v)=u±v(uv)=uv+uv(uv)=uvuvv2

C가 상수이고 [Cv(x)]=Cv(x)라고 가정합니다.

기타 일반적인 함수의 파생물:

(lnx)=1x(logax)=1xlna(sinx)=cosx(cosx)=sinx(tanx)=1cos2x=sec2x(cotx)=csc2x(cscx)=cscxcotx
  • 복합 함수 파생 규칙: y=f[h(x)]y=f(u)u=h(x)로 구성된 합성 함수이고 u=h(x)가 미분 가능하고 y=f(u)도 미분 가능하다고 가정하면 복합 함수 y=f[h(x)]의 도함수는 다음과 같습니다.
dydx=dydududx

다른 동등한 표현이 몇 가지 있습니다:

yx=yuux(f[h(x)])=f(u)|u=h(x)h(x)

위의 규칙은 연쇄 미분 규칙이라고도 하며, 이는 복합 함수의 도함수는 중간 변수에 중간 변수를 곱한 함수의 도함수와 같습니다.

독립 변수에 대한 파생 상품입니다.

  • 역함수의 미분: 역함수의 미분은 원래 함수의 미분의 역수와 같습니다.

더 구체적으로, 단조 함수 y=f(x)를 가정하면 그 역함수는 x=f1(y)이며 다음과 같습니다.

f'(x) = \frac{1}{f^{-1}(y)} 또는 \frac{dx}{dy} = \frac{1}{\frac{dy}{dx&#125;&#125;
  • 암시적 함수의 파생: 방정식 F(x,y)=0에서 yx의 함수라고 판단되면 이러한 함수를 암시적 함수라고 합니다.

암시적 함수 yx에 대해 미분 가능한 경우 x에 대한 함수 y의 도함수는 복합 함수의 유도 규칙에 따라 찾을 수 있습니다.

  • 고차 파생상품:

일반적으로 함수 y=f(x)의 도함수 y=f(x)는 여전히 x의 함수입니다. f(x)가 여전히 미분 가능한 경우 f(x)의 도함수는 y=f(x) 함수의 2차 도함수라고 하며 f(x) 또는 y로 표시됩니다. 다음 표현식도 사용할 수 있습니다.

y=(y)f(x)=(f(x))

2차 도함수가 여전히 미분 가능한 경우, 2차 도함수의 도함수는 f(x) 또는 y로 표시되는 함수 y=f(x)3차 도함수라고 합니다.

2차 이상의 파생상품을 총칭하여 고차 파생상품이라고 합니다.

5.1.1.3 차별화

  • 미분의 정의:

함수 y=f(x)가 점 x에서 미분 가능하다고 가정하고 x f(x)에서 함수 y=f(x)의 도함수 y=f(x)xxf(x)x에서 독립 변수의 증분을 함수의 미분이라고 합니다. x 지점에서 y=f(x)를 기록하고 dy, 즉 dy=f(x)x로 기록됩니다. 이때, y=f(x) 함수는 x 지점에서 미분 가능이라고 합니다.

독립변수 x의 미분은 함수 y=x의 미분으로 간주될 수 있습니다. 다음과 같은 방정식이 있습니다.

dy=dx=x\삼x=\삼x

따라서 y=f(x)의 미분은 dy=f(x)dx로 쓸 수 있으며 dydx=f(x)로 추론됩니다.

즉, 함수 y=f(x)의 미분 dy과 독립변수의 미분 dx의 몫은 함수 y=f(x)의 도함수입니다. 따라서 함수의 미분은 미분이라고도 합니다(Moments o_o!!의 마이크로몫 개념과 다르다는 점에 유의하세요).

즉, x에서 함수 y=f(x)미분 가능하고 미분 가능합니다.

  • 미분의 기하학적 의미:

아래 그림에서 볼 수 있듯이 MT는 곡선 y=f(x) 위의 점 M에서의 접선입니다. 그것과 x 축의 양의 방향 사이의 각도가 α이면 QP=MQtanα=xf(x0)이므로 dy=QP, 즉 x_0에 대한 y=f(x) 함수의 미분 dy=f(x)x이 됩니다. \삼x.

즉, 미분의 기하학적 의미는 곡선 위 점의 접선의 세로 좌표의 변화입니다.

  • 미분 공식 및 법칙:

미분 dy=f(x)dx, 즉 해당 미분을 얻으려면 함수의 도함수만 필요합니다.

따라서 미분과 미분을 구하는 방법을 총칭하여 미분법이라고 합니다.

파생 상품과 미분 상품 간의 공식과 규칙은 매우 일관성입니다.

미분식 미분 공식

(C)=0d(C)=0

(xu)=uxu1d(xu)=uxu1dx

(logax)=1xlnad(logax)=dxxlna

(lnx)=1xd(lnx)=1xdx

(ax)=axlnad(ax)=axlnadx

(sinx)=cosxd(sinx)=cosxdx

(cosx)=sinxd(cosx)=sinxdx

(tanx)=sec2xd((tanx)=sec2xdx

(cotx)=csc2xd(cotx)=csc2xdx

(\초x)=\초xtanxd(\초x)=\초xtanxdx

(cscx)=cscxcotxd(cscx)=cscxcotxdx

(\arcsin x)' = \frac{1}{\sqrt{1-x^2}d(\arcsin x) = \frac{1}{\sqrt{1-x^2}dx

(\arccos x)' = -\frac{1}{\sqrt{1-x^2}d(\arccos x) = -\frac{1}{\sqrt{1-x^2}dx

(arctanx)=11+x2d(arctanx)=11+x2dx

(arccotx)=11+x2d(arccotx)=11+x2dx

미분 규칙 미분법

$(u\pm v)' = u' \pm v' d(u\pm v) = du \pm dv $

(uv)=uv+uvd(uv)=vdu+udv

(uv)=uvuvv2d(uv)=vduudvv2

yx=yuuxdy=yuuxdx

  • 1차 미분 형식 불변성:

독립변수인지 중간변수인지에 관계없이 함수의 미분 형식은 항상 다음과 같습니다.

dy=f(u)du

이 속성은 1차 미분 형식 불변성입니다.

5.1.2 통합

5.1.2.1 무기한 적분

  • 원래 함수: I 구간에서 미분 함수 F(x)의 미분 함수는 f(x)입니다. 즉, xI일 때, 즉
F(x)=f(x)또는d(F(x))=f(x)dx

그러면 F(x)I 구간에서 f(x)원래 함수입니다.

  • 원시함수 존재 정리: 연속함수는 원시함수를 가져야 합니다.

  • 부정적분의 정의:

I 구간에서 임의의 상수 항을 갖는 함수 f(x)의 원래 함수는 구간 I에서 f(x)(또는 f(x)dx)의 부정 적분이라고 하며, 이는 다음과 같이 작성됩니다.

f(x)dx

​ 그 중 기호는 적분 기호, f(x)적분 함수, f(x)dx적분 식, x적분 변수라고 합니다.

함수의 부정 적분을 찾으려면 원래 함수와 임의의 상수만 찾으면 됩니다.

f(x)dx=f(x)+C
  • 부정적분의 속성:

[f(x)dx]=f(x) 또는 d[f(x)dx]=f(x)dx

  • F(x)dx=F(x)+C 또는 dF(x)=F(x)+C

위의 두 가지 성질로부터 미분연산 d과 부정적분연산 은 서로 역연산이라는 결론을 내릴 수 있습니다. 해당 기호가 서로 연결되면 상쇄될 수 있으며 취소 후에도 그 차이는 일정할 수 있습니다.

속기 공식: 먼저 누적한 다음 미분하면 형식은 변경되지 않습니다. 먼저 미분한 다음 누적하면 그 차이는 일정합니다.

  • [f(x)±g(x)]dx=f(x)dx±g(x)dx

  • kf(x)dx=kf(x)dx (k는 상수이고 k0)

적분변수와 무관한 상수 k에 대해서는 적분부호를 제안할 수 있다.

  • 공통점 표:

0dx=C

  • xndx=1n+1xn+1+C(n1)

  • 1xdx=ln|x|+

  • 11+x2dx=x+C

  • \int \frac{1}{\sqrt{1-x^2}dx = \arcsin x + C

  • sinxdx=cosx+C

  • cosxdx=sinx+C

  • sec2xdx=tanx+C

  • csc2xdx=cotx+C

  • tanxsecxdx=secx+C

  • cotxcscxdx=cscx+C

  • exdx=ex+C

  • axdx=1lnaax+C

  • tanxdx=ln|cosx|+C

  • cotxdx=ln|sinx|+C

  • secxdx=ln|secx+tanx|+C

  • cscxdx=ln|cscxcotx|+C

  • dxa2+x2=1aarctan|xa|+C

  • \int \frac{dx}{\sqrt{a^2 - x^2} = \arcsin\frac{x}{a} + C

  • dxx2a2=12aln|xax+a|+

  • \int \frac{dx}{\sqrt{x^2 - a^2} = \ln|x+\sqrt{x^2-a^2}| + C

  • \int \frac{dx}{\sqrt{a^2 + x^2} = \ln|x+\sqrt{x^2+a^2}| + C

  • 포인트 방식:

직접 적분 방법: 부정 적분의 네 가지 속성을 사용하여 부정 적분을 찾습니다.

예를 들어 cosxdx를 찾습니다.

(sinx)=cosx이므로 cosxdx=sinx+C입니다.

  • 대체 적분법:

f(u)에 원래 함수 F(u)가 있고 u=h(x)가 미분 가능하다고 가정하면 대체 공식이 있습니다.

f(h(x))d(h(x))=[f(u)du]u=h(x)=(F(u)+C)u=h(x)=F(h(x))+C
  • f(x)가 연속이고 x=h(t)의 도함수 h(t)도 연속이고 h(t)0이라고 가정합니다.
f(h(t))h(t)dt=G(t)+C,

그런 다음 대체 공식이 있습니다.

f(x)dx=[f[h(t)]h(t)dt]=(G(t)+C)t=h1(x)=G(h1(x)+C)

그중 t=h1(x)x=h(t)의 역함수입니다.

  • 부품 방식에 의한 통합:

부분 적분 방법은 두 함수의 곱의 파생 공식에서 파생되며 최종 형태는 다음과 같습니다.

udv=uvvdu

구분의 한 부분이 어렵다면 상대적으로 쉬울 수 있는 다른 부분을 시도해 볼 수 있습니다. 이것이 부분적 통합법의 역할이다.

5.1.2.2 확실한 통합

정적분은 적분학의 또 다른 중요한 개념입니다. 평면 도형의 면적, 곡선의 호 길이, 수압, 가변적인 힘에 의해 수행되는 작업 등과 같은 자연과학과 생산 실습의 많은 문제는 모두 정적분 문제에 기인할 수 있습니다.

컴퓨터 그래픽의 많은 계산 문제는 방사성 측정, 샘플링, 컨볼루션, 사전 계산 등과 같은 명확한 적분 문제에 기인합니다.

  • 정적분의 정의:

f(x)[a,b] 구간에 묶여 있다고 가정하고 [a,b]에 여러 점을 삽입합니다.

a = x_0 &lt; x_1 &lt; \;...\; &lt; x_n = b

간격 [a,b]n개의 작은 간격으로 나눕니다.

[x0,x1],[x1,x2],...,[xn1,xn]

각 작은 간격의 길이는 다음과 같습니다.

\삼x1=x1x0,\삼x2=x2x1,...,\삼xn1=xnxn1

각 작은 구간[xi1,xi]에서 임의의 점 ξi(xi1ξixi)을 선택하고 함수 값의 곱f(ξi)f(\xi_i)\triangle x_i.xi(i=1,2,...,n), 그런 다음 합계

S=i=1nf(ξi)xi

\lambda = \max\{\triangle x_1, \triangle x_2, \; ..., \; \triangle x_n}\}, λ0S의 극한 I(유한)이 존재하고 [a,b]의 나눗셈이 λi와 아무 관련이 없는 경우 함수는 다음과 같습니다. f(x)[a,b]에서 적분 가능하며, 이 극한 I는 구간 [a,b]에서 함수 f(x)정규 적분(적분으로 약칭)이라고 하며 다음과 같이 작성됩니다.

abf(x)dx,,abf(x)dx=limλ0i=1nf(ξi)xi=I

그 중 f(x)적분함수, f(x)dx적분식, x적분변수, a적분 하한, b적분 상한, [a,b]적분 구간이라고 합니다.

  • 정적분의 속성:

f(x)[a,b] 구간에서 연속이고 f(x)[a,b]에서 적분 가능하다고 가정합니다.

  • f(x)[a,b] 구간에 국한되어 있고 불연속 점의 수가 유한하다고 가정하면 f(x)[a,b]에 적분 가능합니다.

  • a=b,abf(x)dx,abf(x)dx=0일 때

  • a>b, abf(x)dx,abf(x)dx=baf(x)dx일 때

  • ab[f(x)±g(x)]dx=abf(x)dx±abg(x)dx

  • $ \int_a^b kf(x)dx = k\int_a^bf(x)dx$

  • a<c<b를 가정하면

abf(x)dx=acf(x)dx+cbf(x)dx
  • f(x)1, x[a,b]를 가정하고,
abf(x)dx=ba
  • f(x)0, x[a,b]a<b를 가정하면
abf(x)dx0
  • f(x)g(x), x[a,b]a<b를 가정하면 다음과 같습니다.
abf(x)dxabg(x)dx
  • 명확한 적분 가치 평가 정리: mf(x)M,x[a,b], 즉 m, M이 구간 [a,b]에서 f(x)의 최소값과 최대값인 경우
m(ba)abf(x)dxM(ba)
  • 유한 적분 평균값 정리: 함수 f(x)[a,b]에서 연속이면 다음을 만족하는 점 ξ[a,b]이 하나 이상 있습니다.
abf(x)dx=f(ξ)(ba)(aξb)
  • 함수 f(x)가 구간 [a,b]에서 연속이면 적분의 상한 함수는 다음과 같습니다.
\파(x)=abf(t)dt

이는 [a,b]에서 미분 가능하며, 그 도함수는

Φ(x)=ddxaxf(t)dt=f(x)(axb)
  • 함수 f(x)가 구간 [a,b]에서 연속이면 함수는 다음과 같습니다.
\파(x)=axf(t)dt

이는 [a,b] 구간에서 f(x)의 기본 함수입니다.

  • 뉴턴-라이프니츠 공식: 함수 F(x)가 연속이고 구간 [a,b]에서 f(x)의 기본 함수인 경우
abf(x)dx=F(x)|ab=F(b)F(a)

미적분학의 기본 공식이라고도 합니다. 이는 피적분 함수와 원래 함수 사이의 연결을 보여주며, 구간 [a,b]에서 연속 함수의 정적분은 구간 [a,b]에서 원래 함수의 증분과 동일함을 나타냅니다. 이는 정적분 계산을 위한 간단하고 효과적인 방법을 제공합니다.

  • 정적분법:

부정적분과 유사한 대체법부분적분법이 있습니다. 유일한 차이점은 간격 제한이 추가된다는 점이며 이에 대해서는 다시 설명하지 않습니다.

미적분학이 도입되는 곳입니다. 다변량 미적분학, 다중 미적분학, 무한 계열, 거듭제곱 계열 등과 같은 기타 고급 개념 및 속성은 별도로 또는 참고 문헌에서 찾을 수 있습니다.

5.2 방사선 측정, 방사선 측정

[3.1.3 반사율 방정식](#3.1.3 반사율 방정식) 및 [4.2.6 빛의 에너지](#4.2.6 빛의 에너지) 장에서는 이미 방사선 측정의 기본 개념, 대응 관계 및 공식을 나열했습니다. 이 섹션에서는 몇 가지 내용을 추가합니다.

5.2.1 입체각

2차원 평면 기하학에서 **라디안(rad)**은 각도 측정의 표준 단위로, 아래 그림과 같이 중심각과 해당 호 길이 사이의 관계를 나타냅니다.

위 그림은 원의 반지름이 호로 변환되는 방식과 중심각과 라디안의 해당 관계를 동적으로 설명합니다.

라디안은 각도의 크기만 측정하고 반지름과는 아무런 관련이 없으므로 라디안 계산 방법은 호의 길이를 원의 반지름으로 나눈 값입니다.

==

각도와 호 길이를 미분하는 경우 미분 표현을 사용할 수 있습니다(ds는 미분의 호 길이를 나타냄).

dθ=dsr

마찬가지로 3차원 입체 기하학에는 3차원 구의 중심각, 즉 입체각(거시적 기호\오, 미분 기호\오)을 측정하는 데 사용되는 라디안과 유사한 개념이 있습니다.

입체각의 정의는 다음 공식으로 표현됩니다.

=

위에서 볼 수 있듯이 입체각은 구의 반지름과 아무런 관련이 없습니다. 3차원 공간이고 1단위 입체각의 구의 표면적은 r2(위 그림)이므로 반지름의 영향 인자는 r2이며 이는 거시적 기호식으로 표현됩니다.

\오=Ar2sr

그 중 sr(스테라디안)은 입체각의 단위로 스테라디안 또는 스테라디안이라고 합니다.

입체각과 구의 표면적을 미분하면 미분 형식의 공식을 얻을 수 있습니다.

d\omega = \frac {dA}{r^{2&#125;&#125;

구형 캡의 면적 공식을 사용하여 구 반쪽의 입체각을 찾을 수 있습니다.

Ω=2πrrr2sr=2π sr

즉, 구 반쪽의 입체각은 2π sr이고 전체 구의 입체각은 4π sr입니다.

Ω=4π sr

5.2.2 복사 강도

복사 강도는 단위 입체각을 통과하는 복사속을 나타냅니다. 기호 I, 단위 W/sr, 미분 공식으로 표시:

I=dΦdω

이제 방사조도와 방사능이 이미 있는데 왜 방사 강도를 도입해야 합니까?

그 이유는 방사선을 계산할 때 특정 지점에서의 플럭스 밀도를 고려하는 경우가 있는데, 한 지점의 면적은 0이고 방사조도와 방사능의 공식을 사용할 수 없기 때문에 면적과 무관하게 방사선 강도를 도입하기 때문이다. 복사강도가 면적과 관계가 없는 이유는 입체각은 각도에만 관련될 뿐 구의 반지름, 거리, 면적과는 아무런 관련이 없기 때문이다.

즉, 점광원의 조도가 거리에 따라 감쇠되는 것과는 달리 입체각은 거리에 따라 변하지 않으므로 복사 강도는 거리에 따라 변하지 않습니다.

5.2.3 래디언스

복사율은 작은 방향에서 작은 표면에 닿는 자속, 즉 단위 입체각당 단위 면적당 복사 자속 밀도를 측정한 것입니다. 공식으로 표현:

L = \frac{d\Phi}{d\omega dA^{\bot&#125;&#125;

방사율은 실제로 재료의 색상입니다. 물리적인 색상을 기준으로 표면의 점 색상을 계산하면 방사율이 계산됩니다.

복사율은 거리에 따라 감소하지 않으며 이는 실제 물리적 원리와 일치합니다. 공기 간섭이 없으면 우리가 보는 물체의 색상은 거리에 따라 변하지 않습니다.

5.3 공식 도출

5.3.1 맥스웰 방정식

반사와 굴절의 법칙을 포함한 빛의 많은 현상이 맥스웰의 방정식으로 설명될 수 있기 때문에 우리는 그 신비를 밝혀낼 필요가 있습니다.

맥스웰 방정식은 전기장, 자기장, 전하 밀도 및 전류 밀도 간의 관계를 설명하는 편미분 방정식입니다. 맥스웰의 방정식을 사용하면 전자기파가 진공에서 빛의 속도로 전파된다는 사실을 추론하고 빛이 전자기파라고 추측할 수 있습니다.

실제로 맥스웰 방정식은 영국의 물리수학자 제임스 클러크 맥스웰(James Clerk Maxwell)이 제안했지만, 처음 제안되었을 때는 20개의 방정식과 20개의 변수가 있었습니다. 나중에 영국의 물리학자 올리버 헤비사이드(Oliver Heaviside)와 미국의 물리수학자 조시아 윌라드 깁스(Josiah Willard Gibbs)가 벡터 분석의 형태로 다시 공식화했는데, 이것이 오늘날 우리가 사용하는 형태입니다.

맥스웰 방정식과 로렌츠 힘 방정식은 고전 전자기학의 기본 방정식입니다. 이러한 기본방정식의 관련이론을 바탕으로 현대의 전력기술과 전자기술이 발전하였다.

이는 4개의 방정식으로 구성됩니다.

  • 가우스의 법칙(가우스의 법칙): 전기장과 공간 내 전하 분포 사이의 관계를 설명합니다.

  • 자기에 대한 가우스의 법칙(자기에 대한 가우스의 법칙): 자기장의 발산이 0과 같다는 것을 보여줍니다. 이는 어떤 영역에 들어가는 자기력선이 해당 영역을 떠나야 함을 의미합니다.

  • 패러데이의 법칙(패러데이의 법칙): 시간에 따라 변하는 자기장이 어떻게 전기장을 유도하는지 설명합니다.

  • 맥스웰이 추가된 맥스웰의 법칙(맥스웰이 추가된 앙페르의 법칙): 자기장을 생성하는 방법에는 두 가지가 있음을 나타냅니다. 하나는 전도 전류에 의한 것이고; 다른 하나는 시간에 따라 변하는 전기장 또는 변위 전류에 의한 것입니다.

5.3.1.1 가우스의 법칙

가우스의 법칙에 따르면 정전기장에서 닫힌 표면을 통과하는 전기장 플럭스는 닫힌 표면 내 전하의 대수적 합에만 관련되며 닫힌 표면 전하의 대수적 합을 진공 유전율로 나눈 것과 같습니다. 적분 형태로 표현된 공식:

ΦE=Qε0

그 중 ΦE는 닫힌 표면을 통과하는 전기장 플럭스, Q는 닫힌 표면의 총 전하, ε0은 진공에서의 유전율입니다.

더 엄격하고 닫힌 표면 S과 닫힌 표면에 포함된 부피 V를 도입하면 적분 형식의 공식이 있습니다.

ΦE=SEdA

그 중 E는 전기장, dA는 닫힌 표면의 매우 작은 면적, S는 닫힌 표면의 면적을 나타내며, 일부 문서에서는 S, S, S로 표기하는데 이는 모두 표면적을 표현한다.

또한 미분 형태로 표현될 수도 있습니다:

\삼E=ρε0

여기서 E는 전기장 발산이고, ρ는 전하 밀도입니다.

미분 형태는 미시적 차원, 거시적 차원에서 설명되므로 다음과 같이 표현될 수 있습니다.

D=εE

그 중 D는 전기장 발산을 나타내고, ε은 물질 유전율을 나타내고, E는 전기장을 나타낸다. 이 공식은 균일하고 등방성이며 분산되지 않은 선형 물질에만 적용할 수 있습니다.

5.3.1.2 자기에 대한 가우스의 법칙

가우스 자기법칙에 따르면 자기장의 발산은 0이므로 자기장은 나선형 벡터장이며 자기단극은 존재하지 않는다는 것도 추론할 수 있다(아래). 자기의 기본 실체는 자기 전하가 아니라 자기 쌍극자입니다.

미분 형식으로 공식을 사용하십시오.

\삼B=0

\삼B는 자기장의 발산을 나타냅니다.

마찬가지로 적분 형식을 사용할 수 있습니다.

δΩEdS=1ε0ΩρdV

5.3.1.3 패러데이의 법칙

패러데이의 법칙은 시간에 따라 변하는 자기장이 어떻게 전기장을 유도하는지 설명합니다. 적분 형태로, 폐루프에서 전하를 이동시키는 데 필요한 단위 전하당 작업량은 폐곡선을 통과하는 자속의 감소율과 같다고 명시되어 있습니다. 미분 형태:

Δ×E=δBδt

포인트 형식:

δEdl=ddtBdS

5.3.1.4 맥스웰 덧셈이 포함된 맥스웰-암페르의 법칙 (맥스웰 덧셈이 포함된 앙페르 법칙)

Maxwell-Ampere의 법칙에 따르면 두 가지 유형의 자기장이 있습니다.

  • 원래 암페어의 법칙인 전류를 통하게 함으로써;

  • Maxwell의 보정항에서 제안하는 변위 전류라고도 하는 시간에 따라 변하는 전기장에 따라 달라집니다.

미분 형태의 공식:

Δ×B=μ0(J+ε0δEδt)

적분 형식은 더 복잡합니다.

δBdl=μ0(JdS+ε0ddtEdS)

표준 LATEX은 닫힌 표면의 기호를 나타낼 수 없으므로 Wikipedia의 기호와 다소 다를 수 있습니다. 자세한 내용은 Wikipedia의 Maxwell 방정식을 참조하세요.

5.3.2 기하광학의 기본법칙 도출

기하광학에는 세 가지 기본 법칙이 있습니다.

  • 제1법칙: 입사파, 반사파, 굴절파의 파동 벡터와 경계면의 법선이 입사면에 포함됩니다(아래 그림).

  • 제2법칙: 반사각은 입사각과 같습니다. 이 법칙을 반성의 법칙이라고 합니다.

  • 세 번째 법칙: n1sinθ1=n2sinθ2, 스넬의 법칙 또는 굴절 법칙이라고도 합니다.

이는 Maxwell의 방정식에서 파생될 수 있습니다.

광파는 전자기 복사이며 Maxwell의 방정식과 그에 수반되는 경계 조건을 충족해야 합니다. 경계 조건 중 하나는 경계 근처에서 경계에 평행한 전기장의 성분이 연속성을 가져야 한다는 것입니다. 경계가 xy 평면이라고 가정하면 경계에는 다음이 있습니다.

E_&#123;&#123;||,i&#125;&#125;(x,y,0)+E_&#123;&#123;||,r&#125;&#125;(x,y,0)=E_&#123;&#123;||,t&#125;&#125;(x,y,0)

그 중 E||,i, E||,r, E||,t는 각각 입사파, 반사파, 굴절파(투과파)에서 경계에 평행한 전기장의 성분이다.

입사파가 주파수 ω인 단색 평면파라고 가정하면, 언제든지 경계조건을 만족하기 위해서는 반사파와 굴절파의 주파수가 ω가 되어야 합니다. E||,i, E||,rE||,t의 형식을 각각 다음과 같이 설정합니다.

E_{||,i}=E_{||,i0}\ e^{i{\mathbf {k}_{i}\cdot {\mathbf {r}-\omega t},

E_{||,r}=E_{||,r0}\ e^{i{\mathbf {k}_{r}\cdot {\mathbf {r}-\omega t},

E_{||,t}=E_{||,t0}\ e^{i{\mathbf {k}_{t}\cdot {\mathbf {r}-\omega t},

그 중 ki, {\mathbf {k}_{r}, {\mathbf {k}_{t}는 각각 입사파, 반사파, 굴절파의 파동 벡터 E||,i0, E||,r0이고, E||,t0는 각각 입사파, 반사파 및 굴절파의 진폭입니다(복소수 값일 수 있음).

경계(x,y,0)의 임의 위치에서 경계 조건을 충족하려면 위상 변화가 동일해야 하며 설정되어야 합니다.

kixx+kiyy=krxx+kryy=ktxx+ktyy.

그러므로,

kix=krx=ktx

kiy=kry=kty.

일반성을 잃지 않고 kiy=kry=kty=0이라고 가정하면 제1법칙이 성립되어 입사파, 반사파, 굴절파의 파동 벡터와 경계면의 법선이 입사면에 포함된다는 것을 즉시 추론할 수 있습니다.

파동 벡터의 x 성분의 동일성으로부터 우리는 다음을 얻습니다.

kisinθi=krsinθr.

동일한 매체에서는 ki=kr입니다. 따라서 제2법칙이 성립하며, 입사각 θi은 반사각 θr과 같습니다.

굴절률 n의 정의를 적용합니다.

n\ {\stackrel {def}{=}\ {\frac {c}{v}={\frac {ck}{\omega },

제3법칙이 성립한다고 추론할 수 있습니다.

nisinθi=ntsinθt;

그 중 ntθt는 각각 굴절매질의 굴절률과 굴절각이다.

입사파, 반사파, 굴절파의 위상 관계로부터 기하광학의 세 가지 기본 법칙을 도출할 수 있습니다.

또한, 페르마의 원리, 호이겐스의 원리, 병진대칭을 이용하여 유도할 수도 있습니다. 자세한 내용은 Wikipedia의 Snell의 법칙을 참조하세요.

5.3.3 Cook-Torrance BRDF 파생

이 섹션에서는 물리 기반 셰이딩의 공식 파생 부분인 BRDF를 참조합니다.

빛의 광선이 마이크로패싯을 비추고 입사광 방향 ωi, 시선 방향 ωo, 반사광에 기여하는 ωo 방향의 마이크로패싯 노멀이 반각 벡터 ωh라고 가정하면 이 광선의 미분 플럭스는 다음과 같습니다.

dΦh=Li(ωi)dωidA(ωh)=Li(ωi)dωicosθhdA(ωh)

그중 dA(ωh)는 법선이 반각 벡터 ωh인 미분 마이크로패싯 영역이고, dA(ωh)는 입사광 방향으로 dA(ωh)의 투영이며, θh는 입사광 ωi과 마이크로패싯 노멀 사이의 각도입니다. ωh.

Torrance-Sparrow는 미분 마이크로패싯적 dA(ωh)dA(ωh)=D(ωh)dωhdA로 정의합니다. Torrance-Sparrow는 처음 두 항을 ωh 방향의 단위 면적 마이크로평면의 미분 면적으로 해석합니다.

일련의 마이크로패싯 영역 dA에서 방향 ωh을 갖는 마이크로패싯 영역 dA(ωh)을 얻으려면 ωh 방향을 갖는 dA의 비율로 D(ωh)를 정의하면 되며 값 범위는 [0,1]입니다. 여기에 소개된 dωh의 실제 사용법은 나중에 논의하겠습니다.

위의 두 공식으로부터 다음을 얻을 수 있습니다.

dΦh=Li(ωi)dωicosθhD(ωh)dωhdA

마이크로패싯 반사광이 프레넬의 정리를 따른다고 가정하면 반사 플럭스는 다음과 같습니다.

dΦo=Fr(ωo)dΦh

반사 휘도는 위의 두 방정식에서 얻을 수 있습니다.

dLo(ωo)=dΦodωocosθodA=Fr(ωo)Li(ωi)dωicosθhD(ωh)dωhdAdωocosθodA

BRDF의 정의로부터 우리는 다음을 얻을 수 있습니다:

fr(ωi,ωo)=dLo(ωo)dEi(ωi)=dLo(ωo)Li(ωi)cosθidωi=Fr(ωo)cosθhD(ωh)dωhcosθocosθidωo

여기서 강조해야 할 몇 가지 측면이 있습니다.

  • θh는 입사 광선 ωi과 마이크로패싯 노멀 방향 ωh 사이의 각도입니다.

  • θi는 입사광 ωi과 매크로 표면 노멀 사이의 각도입니다.

  • θo는 반사광 ωo과 매크로 표면 노멀 사이의 각도입니다.

반사 방정식으로 돌아가서:

Lo(v)=Ωf(l,v)Li(l)cosθidωi

dωi의 적분이며 위 식의 분모에는 dωo가 포함됩니다. dωhdωo의 관계를 찾아 dωo를 제거할 수 있습니다. dωh를 삽입해도 방정식의 합리성에 영향을 미치지 않습니다. 왜냐하면 D(ωh)는 조정될 수 있고 이제 D(ωh)는 통합 수량이고 단위는 1/sr이기 때문입니다.

계속해서 dωhdωo 사이의 관계를 도출해 보세요.

위 그림에서 볼 수 있듯이 입사광은 마이크로패싯을 조사하고 I 지점에서 마이크로패싯의 단위 상부 반구와 교차하고 O 지점에서 마이크로패싯과 교차하며 반사된 빛은 점 R에서 단위 상부 반구와 교차하고 반사된 빔 입체각 dωo(그림에서 dωr)은 다음과 같습니다. 빔이 단위 상부 반구와 교차하는 영역 dAr, 노멀 입체각 dωh(그림의 dω)은 노멀 입체각이 단위 상반구와 교차하는 영역 dA\프과 동일하므로 dωhdωo를 찾는 것은 다음과 같습니다. dAdAr를 찾습니다.

연결선 IR과 노멀 nP 지점에서 교차한 다음 IR=2IP에서 교차합니다. dArdA의 비율은 IRIP와 같고 면적은 πr2이므로 반지름의 제곱에 비례하므로 dAr=4dA

연결선 OQ의 길이는 1이고 OP의 길이는 cosθi이므로

\frac{dA^{\프라임 \프라임&#125;&#125;{dA^{\프라임 \프라임 \프라임&#125;&#125; = \frac{1}{cos ^ 2 \theta_i ^ \프라임}

그리고 dA^{\프라임 \프라임} = \frac{dA^{\프라임}{cos \theta_i^{\프라임}

위의 공식으로부터 다음을 얻을 수 있습니다.dAdAr=14cosθi

위 그림의 θi은 실제로 마이크로패싯의 반각 θh이므로 dωhdωo=14cosθh입니다.

그러므로

fr(ωi,ωo)=Fr(ωo)D(ωh)4cosθocosθi

앞서 언급했듯이 ωh 방향의 모든 마이크로패싯이 빛을 받을 수 있는 것은 아니며(섀도잉) 반사된 모든 빛이 관찰자에게 도달할 수는 없습니다(마스킹). 기하학적 감쇠 계수 G의 영향을 고려하면 마침내 Cook-Torrance 공식을 얻습니다.

fr(ωi,ωo)=Fr(ωo)D(ωh)G(ωi,ωo)4cosθocosθi

5.4 사전 계산 기술

3장에서 Cook-Torrance 원리와 PBR 구현을 설명할 때 Cubemap, HDR 주변광 등과 같은 많은 사전 렌더링 기술이 언급되었습니다. 이 장에서는 실시간 조명 중 렌더링 소비를 줄이기 위해 시간이 많이 걸리는 부분을 미리 렌더링하는 이러한 사전 계산 또는 사전 컨볼루션 기술을 주로 설명합니다.

5.4.1 큐브맵 컨볼루션

큐브맵 컨볼루션은 장면의 조도에 대한 모든 확산 간접 조명의 적분을 오프라인 방식으로 미리 해결합니다. 통합 문제를 해결하려면 각 조각에 대해 반구Ω 내에서 가능한 모든 방향으로 장면의 방사선을 샘플링해야 합니다.

그러나 반구Ω의 가능한 모든 방향에서 환경의 조명을 샘플링하는 코드를 구현하는 것은 불가능하며 가능한 방향의 수는 이론적으로 무한합니다. 그러나 반구 내에서 균일하게 간격을 두거나 무작위로 취한 제한된 수의 방향 또는 샘플을 취하여 방향 수를 근사함으로써 상당히 정확한 방사 조도 근사치를 얻을 수 있으며, 따라서 이산 방법을 사용하여 적분 를 효과적으로 풀 수 있습니다.

이산 근사 방법을 사용하더라도 좋은 결과를 얻으려면 샘플 수가 여전히 매우 커야 하기 때문에 각 조각에 대해 이 작업을 실시간으로 수행하는 것은 여전히 ​​비용이 많이 듭니다. 따라서 사전 계산은 일반적으로 실시간 소비 문제를 해결하는 데 사용됩니다. 반구의 방향 Ω이 복사 조도를 캡처해야 하는 위치를 결정하므로, 샘플링된 모든 반구가 모든 나가는 방향 wo을 둘러싸도록 가능한 각 반구 방향에 대해 복사 조도를 미리 계산할 수 있습니다.

Lo(p,ωo)=kdcπΩLi(p,ωi)nωidωi

임의의 방향 벡터 wi가 주어지면 미리 계산된 방사조도 맵을 샘플링할 수 있습니다. 표면의 작은 패치에서 간접 확산(조사된) 빛의 양을 결정하려면 반구의 전체 방사조도에서 해당 표면 노멀 주위의 총 방사조도를 샘플링할 수 있습니다. 장면의 방사조도를 얻는 코드는 간단합니다.

cpp
vec3 irradiance = texture(irradianceMap, N);

방사조도 맵을 생성하려면 환경의 조명 컨볼루션을 큐브 맵으로 변환해야 합니다. 각 세그먼트에 대해 표면의 반구가 노멀 벡터 N을 따라 방향이 지정된 경우 큐브맵을 컨볼루션하는 것은 노멀 N을 따라 반구 Ω 내 각 방향의 총 평균 휘도 wi를 계산하는 것과 같습니다.

[3.3.1.2 From Sphere Map to Cubemap](#3.3.1.2 From Sphere Map to Cubemap)에서는 변환된 큐브맵을 직접 가져와 프래그먼트 셰이더에서 컨벌루션하고 6개 면 방향 모두에 대해 렌더링된 프레임 버퍼를 사용하여 계산 결과를 새 큐브맵에 넣을 수 있도록 구형 맵에서 큐브맵으로 변환하는 방법을 설명합니다. 구형 플롯을 큐브 플롯으로 변환하는 방법은 이미 설명되었으므로 유사한 접근 방식과 코드를 사용할 수 있습니다.

cpp
#version 330 core
out vec4 FragColor;
in vec3 localPos;

uniform samplerCube environmentMap;

const float PI = 3.14159265359;

void main()
{		
    // the sample direction equals the hemisphere's orientation 
    vec3 normal = normalize(localPos);
  
    vec3 irradiance = vec3(0.0);
  
    [...] // convolution code
  
    FragColor = vec4(irradiance, 1.0);
}

환경 맵을 사용하여 구형 HDR 환경 맵을 HDR 큐브 맵으로 변환합니다.

환경 맵을 컨볼루션하는 방법에는 여러 가지가 있습니다. 여기서는 반구의 각 큐브맵 픽셀에 대해 반구Ω 주위에 고정된 수의 샘플 방향 벡터가 생성되고 결과가 평균화됩니다. 고정된 수의 샘플 벡터가 반구 내부에 고르게 분포됩니다. 적분은 연속 함수이며 고정된 양의 샘플 벡터가 주어진 경우 적분 함수를 이산적으로 샘플링하는 것은 단지 근사치일 뿐입니다. 더 많은 샘플 벡터를 사용하면 통합이 실제 값에 더 가까워지지만 동시에 사전 계산 프로세스가 느려집니다.

입체각 dw 주위의 반사 방정식의 적분 은 처리하기 어렵기 때문에 등가 구면 좌표 θϕ가 사용됩니다.

각도 범위가 02π인 극 방위각 ϕ와 각도 범위가 012π인 앙각(\theta)을 사용하여 반구 링 사이를 샘플링하므로 반구를 쉽게 샘플링할 수 있습니다. 구면 각도를 사용한 반사 공식:

Lo(p,ϕo,θo)=kdcπϕ=02πθ=012πLi(p,ϕi,θi)cos(θ)sin(θ)dϕdθ

리만 합 방법과 주어진 n1, n2 구면 좌표 샘플링 수를 사용하여 적분을 다음 이산 버전으로 변환할 수 있습니다.

Lo(p,ϕo,θo)=kdcπ1n1n2ϕ=0n1θ=0n2Li(p,ϕi,θi)cos(θ)sin(θ)dϕdθ

두 개의 구면 값을 개별적으로 샘플링할 때 위 그림과 같이 고도θ가 높을수록 면적이 작아집니다. 면적 차이를 처리하지 않으면 누적 오류가 발생합니다. 더 작은 영역을 보상하기 위해 추가 sin 값을 추가하여 sinθ 가중치를 조정할 수 있습니다.

각 조각 호출의 통합 구형 좌표가 제공된 반구의 이산 샘플링은 다음 코드로 변환됩니다.

cpp
vec3 irradiance = vec3(0.0);  

vec3 up    = vec3(0.0, 1.0, 0.0);
vec3 right = cross(up, normal);
up         = cross(normal, right);

float sampleDelta = 0.025;
float nrSamples = 0.0; 
for(float phi = 0.0; phi < 2.0 * PI; phi += sampleDelta)
{
    for(float theta = 0.0; theta < 0.5 * PI; theta += sampleDelta)
    {
        // spherical to cartesian (in tangent space)
        vec3 tangentSample = vec3(sin(theta) * cos(phi),  sin(theta) * sin(phi), cos(theta));
        // tangent space to world
        vec3 sampleVec = tangentSample.x * right + tangentSample.y * up + tangentSample.z * normal;

        irradiance += texture(environmentMap, sampleVec).rgb * cos(theta) * sin(theta);
        nrSamples++;
    }
}
irradiance = PI * irradiance * (1.0 / float(nrSamples));

반구를 횡단하기 위해 고정된 샘플 델타 값을 지정함으로써 샘플 델타를 줄이거나 늘리면 정확도가 각각 증가하거나 감소합니다.

두 for 루프 내에서 구면 좌표를 가져와 3D 데카르트 샘플 벡터로 변환하고, 샘플을 탄젠트 공간에서 월드 공간으로 변환하고, 이 샘플 벡터를 사용하여 HDR 환경 맵을 직접 샘플링합니다. 루프가 끝나면 각 샘플 결과가 조도에 추가되고 총 샘플 수로 나누어 평균 샘플링 조도를 얻습니다. 스케일링된 샘플링 색상 값은 빛이 큰 각도에서 더 약하기 때문에 cos(theta)이고 높은 앙각에서 반구의 더 작은 샘플 영역을 보상하기 위한 sin(theta)입니다.

5.4.2 사전 필터링 HDR 환경 맵

사전 필터링된 환경 맵은 사전 컨벌루션된 방사조도 맵과 매우 유사합니다. 차이점은 거칠기를 고려해야 하며 더 거친 반사가 사전 필터링된 환경 맵의 다양한 밉 수준에 순차적으로 저장된다는 것입니다.

구면 좌표를 사용하여 반구 Ω에 고르게 분포된 샘플 벡터를 생성함으로써 환경 맵을 복잡하게 처리하는 방법입니다. 이 방법은 조사에는 적합하지만 스페큘러 반사에는 덜 효과적입니다. 스페큘러 반사의 경우 표면의 거칠기에 따라 통과하는 노멀 n 근처의 빛 반사가 더 거칠고 범위가 더 넓습니다.

밖으로 나가는 모든 가능한 빛 반사에 의해 형성된 모양을 반사 로브라고 합니다. 거칠기가 증가함에 따라 반사 로브의 크기도 증가합니다. 그리고 반사광 로브의 모양은 입사광 방향의 변화에 ​​따라 변합니다. 따라서 반사 로브 높이는 재료에 따라 달라집니다.

마이크로패싯 모델에 관해 이야기할 때, 반사 로브는 입사광 방향이 주어진 마이크로패싯의 중간 벡터로부터의 반사 방향으로 생각할 수 있습니다. 눈에 보이는 대부분의 빛이 궁극적으로 마이크로플레인 중간 벡터 주변의 반사 로브에 반사되면 이 방법으로 생성된 샘플 벡터가 의미가 있습니다. 이 프로세스가 중요도 샘플링입니다.

5.4.2.1 몬테카를로 통합 및 중요도 샘플링

중요도 샘플링의 중요성을 완전히 이해하려면 먼저 알려진 수학적 방법인 몬테카를로 통합을 조사해야 합니다.

몬테카를로 통합은 주로 통계와 확률 이론의 조합을 중심으로 진행됩니다. 모든 그룹을 고려하지 않고도 그룹의 통계나 중요도 문제를 개별적으로 해결하는 데 도움이 됩니다.

예를 들어, 한 국가의 모든 시민의 평균 키를 계산한다고 가정해 보겠습니다. 결과를 얻으려면 각 시민을 측정하고 평균 키를 얻으면 정확한 답을 얻을 수 있습니다. 그러나 대부분의 국가에는 인구가 많기 때문에 이는 현실적인 접근 방식이 아닙니다. 너무 많은 노력과 시간이 소요됩니다.

또 다른 접근 방식은 모집단에서 훨씬 작은 완전히 무작위(편향되지 않은) 하위 집합을 선택하고 키를 측정한 후 결과의 평균을 구하는 것입니다. 인구는 아마 100명 정도일 겁니다. 비록 정확한 답변만큼 정확하지는 않더라도 상대적으로 진실에 가까운 답변을 얻게 될 것입니다. 이를 대수의 법칙이라고 합니다. 이 접근 방식은 전체 모집단에서 실제로 무작위 표본을 제공하는 N의 더 작은 하위 집합을 측정하는 경우 결과가 실제 답에 상대적으로 가까워지고 표본 크기 N이 증가함에 따라 실제 결과에 더 가까워지는 것입니다.

몬테카를로 적분은 이러한 대수의 법칙을 기반으로 하며 적분을 풀 때 동일한 방법을 사용합니다. 가능한 모든(이론적으로 무한한) 표본 값 ​x에 대한 적분을 푸는 대신, 전체 모집단과 평균에서 무작위로 표본 값 ​​N을 생성하면 됩니다. N이 증가하면 얻은 결과는 적분의 정확한 답에 더 가까워집니다.

O=abf(x)dx=1Ni=0N1f(x)pdf(x)

적분을 풀기 위해 모집단 a에서 b까지 N으로 무작위 표본을 추출하고 이를 더한 다음 총 표본 수로 나누어 평균을 냅니다. pdf는 확률밀도함수(Probability Denity function)를 나타내며, 전체 표본 집합에서 특정 표본이 발생할 확률을 나타낸다. 예를 들어, 인구 높이의 PDF는 다음과 같습니다.

이 그래프에서 볼 수 있듯이 모집단에서 임의의 무작위 표본을 추출하면 키가 1.70인 사람을 표본으로 뽑을 확률은 더 높고, 키가 1.50인 표본을 뽑을 확률은 낮습니다.

몬테카를로 통합의 경우 일부 샘플은 다른 샘플보다 생성 확률이 더 높을 수 있습니다. 이것이 일반적인 몬테카를로 추정의 경우 pdf에 따라 샘플링된 값을 샘플링 확률로 나누는 이유입니다. 지금까지 적분을 추정하는 모든 예에서 결과 샘플은 균일하며 생성될 확률도 정확히 동일합니다. 지금까지의 추정치는 편향되지 않았습니다. 즉, 샘플 수가 증가함에 따라 결국 적분에 대한 정확한 솔루션으로 수렴하게 됩니다.

그러나 Monte Carlo의 일부 샘플은 편향되어 있습니다. 이는 생성된 샘플이 완전히 무작위가 아니라 특정 값이나 방향에 집중되어 있음을 의미합니다. 이러한 편향된 몬테카를로 추정값은 수렴 속도가 더 빠르며, 이는 정확한 값으로 더 빠르게 수렴한다는 의미입니다. 그러나 이 방법의 편향된 특성으로 인해 정확한 값으로 수렴되지 않을 수 있습니다. 결과가 시각적으로 허용되는 한 정확한 솔루션은 덜 중요하기 때문에 이는 특히 컴퓨터 그래픽에서 일반적으로 허용되는 균형입니다. 곧 살펴보겠지만 중요도 샘플링(편향 추정량 사용)은 특정 방향으로 편향된 샘플을 생성합니다. 이 경우 각 샘플을 해당 pdf로 곱하거나 나누어 이를 수행합니다.

몬테카를로 적분은 이산적이고 효율적인 방식으로 연속 적분을 근사하는 매우 직관적인 방법이기 때문에 컴퓨터 그래픽에서 매우 일반적입니다. 임의의 면적이나 부피를 샘플링(예: 반구Ω)하고, N 무작위 샘플 크기와 면적/부피 내 합계를 생성하고, 최종 결과와 비교하여 각 샘플의 무게를 측정합니다.

몬테 카를로 통합은 광범위한 수학적 주제이므로 여기서는 구체적으로 다루지 않겠습니다. 하지만 무작위 샘플을 생성하는 다양한 방법이 있다는 점은 언급하겠습니다. 기본적으로 각 샘플은 우리가 익숙했던 것처럼 완전히 무작위(의사 무작위)이지만, 준무작위 시퀀스의 특정 속성을 활용하여 여전히 무작위이지만 흥미로운 속성을 갖는 샘플 벡터를 생성할 수 있습니다. 예를 들어, 몬테 카를로를 불일치가 낮은 시퀀스와 통합하여 각 샘플이 보다 균등하게 분산된 무작위 샘플을 생성할 수 있습니다.

그림의 왼쪽: 완전한 의사 난수 시퀀스 생성을 위한 샘플링 지점입니다. 그림의 오른쪽: 저차 시퀀스 생성을 위한 샘플링 지점입니다. 오른쪽이 더 균일한 것을 볼 수 있습니다.

낮은 불일치 시퀀스를 사용하여 Monte Carlo 샘플 벡터를 생성하는 경우 이 프로세스를 Quasi-Monte Carlo 통합이라고 합니다. Quasi-Monte Carlo 방법은 수렴 속도가 더 빠르므로 성능이 중요한 응용 프로그램에 유용합니다.

몬테카를로 적분과 준몬테카를로 적분에 대한 새로운 지식을 바탕으로 더 빠른 수렴을 달성하는 데 사용할 수 있는 흥미로운 속성, 즉 중요도 샘플링이 있습니다. 빛의 스페큘러 반사의 경우, 반사된 빛 벡터는 표면의 거칠기에 따라 크기가 결정되는 스페큘러 반사 로브에 국한됩니다. 거울 외부에서 무작위로 생성된 임의의(준) 샘플이 거울 영역과 독립적이라는 점을 고려하면 편향된 몬테 카를로 추정을 희생하면서 샘플 생성을 거울 로브 내에 집중시키는 것이 합리적입니다.

중요도 샘플링은 마이크로패싯의 중간 벡터 주변의 거칠기에 의해 제한되는 일부 영역 내에서 샘플 벡터를 생성하는 방식으로 작동합니다. 준 몬테카를로 샘플링을 낮은 불일치 시퀀스와 결합하고 중요도 샘플링을 사용하여 샘플링 벡터를 편향함으로써 높은 수렴률을 얻습니다. 솔루션에 더 빨리 도달하기 때문에 적절한 근사치를 얻는 데 필요한 샘플 수가 더 적습니다. 따라서 이 조합을 사용하면 그래픽 응용 프로그램이 결과를 미리 계산하는 것보다 여전히 훨씬 느리더라도 실시간으로 반사 적분을 해결할 수 있습니다.

5.4.2.2 낮은 불일치 시퀀스

여기서, 간접 반사 방정식의 스페큘러 반사 부분은 Quasi-Monte Carlo 방법에 기반한 무작위 저난수 시퀀스를 통한 중요도 샘플링을 사용하여 미리 계산됩니다. 이 섹션에서 사용되는 시퀀스를 Hammersley 시퀀스라고 합니다. 해머슬리 수열은 b를 밑으로 하는 자연수 수열을 반전시키는 Van Der Corpus 수열을 기반으로 합니다.

몇 가지 깔끔한 트릭을 사용하면 Hammersley 샘플 셰이더 시퀀스를 얻는 데 사용할 Vander Corpus 시퀀스를 매우 효율적으로 생성할 수 있습니다. N은 전체 샘플입니다.

cpp
// 반전 의 시퀀스
float RadicalInverse_VdC(uint bits) 
{
    bits = (bits << 16u) | (bits >> 16u);
    bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);
    bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);
    bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);
    bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);
    return float(bits) * 2.3283064365386963e-10; // / 0x100000000
}
// ----------------------------------------------------------------------------
// 시퀀스
vec2 Hammersley(uint i, uint N)
{
    return vec2(float(i)/float(N), RadicalInverse_VdC(i));
}

GLSL 코드 Hammersley 함수는 총 샘플 세트 N로 불일치가 낮은 샘플 i를 제공합니다.

OpenGL을 사용하는 모든 드라이버가 비트 연산자(예: WebGL 및 OpenGL ES 2.0)를 지원하는 것은 아닙니다. 이 경우 비트 연산자에 의존하지 않는 Van Der Corpus Sequence의 대체 버전을 사용할 수 있습니다.

cpp
float VanDerCorpus(uint n, uint base)
{
    float invBase = 1.0 / float(base);
    float denom   = 1.0;
    float result  = 0.0;

    for(uint i = 0u; i < 32u; ++i)
    {
        if(n > 0u)
        {
            denom   = mod(float(n), 2.0);
            result += denom * invBase;
            invBase = invBase / 2.0;
            n       = uint(float(n) / 2.0);
        }
    }

    return result;
}
// ----------------------------------------------------------------------------
vec2 HammersleyNoBitOps(uint i, uint N)
{
    return vec2(float(i)/float(N), VanDerCorpus(i, 2u));
}

이전 하드웨어의 GLSL 루프 제한으로 인해 시퀀스는 32비트로 표시될 수 있는 모든 숫자를 통해 루프됩니다. 이 버전은 성능이 떨어지지만 모든 하드웨어에서 실행됩니다.

불일치가 낮은 시퀀스를 생성하는 방법에는 여러 가지가 있다는 점을 언급할 가치가 있습니다.

  • 난수

  • 부가적인 재발

  • 반 데르 코르푸트 시퀀스

  • Halton 시퀀스

  • 해머슬리 세트

-소볼 서열

  • 포아송 디스크 샘플링

자세한 내용은 낮은 불일치 시퀀스를 참조하세요.

5.4.2.3 GGX 중요도 샘플링

통합 반구\오에서 샘플 벡터를 균일하게 또는 무작위(몬테카를로) 생성하는 대신 마이크로패싯 중간 벡터의 일반적인 반사 방향으로 편향된 표면 러프니스를 기반으로 샘플 벡터를 생성합니다. 샘플링 프로세스는 이전 프로세스와 유사합니다. 큰 루프를 시작하고, 무작위(낮은 분산) 시퀀스 값을 생성하고, 시퀀스 값을 사용하여 탄젠트 공간에서 샘플 벡터를 생성하고, 월드 공간으로 변환하고 장면의 광도를 샘플링합니다. 차이점은 이제 샘플 벡터를 생성하기 위해 불일치가 낮은 시퀀스 값을 입력으로 사용한다는 것입니다.

cpp
const uint SAMPLE_COUNT = 4096u;
for(uint i = 0u; i < SAMPLE_COUNT; ++i)
{
	// 을(를) 활용하여 Hammersley시퀀스
    vec2 Xi = Hammersley(i, SAMPLE_COUNT);

또한 샘플 벡터를 구성하려면 특정 표면 러프니스의 반사 로브를 향하는 샘플 벡터의 방향을 지정하고 편향하는 방법이 필요합니다. [3.1.4 양방향 반사 분포 함수(BRDF)](#3.1.4 양방향 반사 분포 함수(BRDF)) 섹션에 설명된 대로 NDF를 얻을 수 있으며 Epic Games에서 설명한 대로 GGX NDF를 구형 샘플링 벡터와 결합할 수 있습니다.

cpp
vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness)
{
    float a = roughness*roughness;
	
    float phi = 2.0 * PI * Xi.x;
    float cosTheta = sqrt((1.0 - Xi.y) / (1.0 + (a*a - 1.0) * Xi.y));
    float sinTheta = sqrt(1.0 - cosTheta*cosTheta);
	
    // from spherical coordinates to cartesian coordinates
    vec3 H;
    H.x = cos(phi) * sinTheta;
    H.y = sin(phi) * sinTheta;
    H.z = cosTheta;
	
    // from tangent-space vector to world-space sample vector
    vec3 up        = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
    vec3 tangent   = normalize(cross(up, N));
    vec3 bitangent = cross(N, tangent);
	
    vec3 sampleVec = tangent * H.x + bitangent * H.y + N * H.z;
    return normalize(sampleVec);
}

이는 일부 입력 거칠기와 낮은 차이 시퀀스 값 Xi 및 예상되는 마이크로패싯 중간 벡터를 기반으로 하는 샘플 벡터를 제공합니다. Epic Games는 Disney 원칙 PBR 연구를 기반으로 더 나은 시각 효과를 위해 제곱 거칠기를 사용합니다.

불일치가 낮은 시퀀스를 사용한 Hammersley 시퀀스 및 샘플 생성은 최종 사전 필터링된 컨볼루션 셰이더를 제공했습니다.

cpp
#version 330 core
out vec4 FragColor;
in vec3 localPos;

uniform samplerCube environmentMap;
uniform float roughness;

const float PI = 3.14159265359;

float RadicalInverse_VdC(uint bits);
vec2 Hammersley(uint i, uint N);
vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness);
  
void main()
{		
    vec3 N = normalize(localPos);    
    vec3 R = N;
    vec3 V = R;

    const uint SAMPLE_COUNT = 1024u;
    float totalWeight = 0.0;   
    vec3 prefilteredColor = vec3(0.0);     
    for(uint i = 0u; i < SAMPLE_COUNT; ++i)
    {
        vec2 Xi = Hammersley(i, SAMPLE_COUNT);
        vec3 H  = ImportanceSampleGGX(Xi, N, roughness);
        vec3 L  = normalize(2.0 * dot(V, H) * H - V);

        float NdotL = max(dot(N, L), 0.0);
        if(NdotL > 0.0)
        {
            prefilteredColor += texture(environmentMap, L).rgb * NdotL;
            totalWeight      += NdotL;
        }
    }
    prefilteredColor = prefilteredColor / totalWeight;

    FragColor = vec4(prefilteredColor, 1.0);
}

사전 필터 큐브맵의 각 밉맵 수준(0.0~1.0)에서 달라지는 입력 거칠기를 기반으로 환경을 사전 필터링하고 결과를 prefilteredColor에 저장합니다. 사전 필터링된 결과 색상은 총 샘플 가중치로 나누어지며, 여기서 최종 결과에 미치는 영향이 적은 샘플(작은 NdotL의 경우)은 최종 가중치에 대한 가중치가 더 적습니다.

5.4.2.3 사전 필터링된 컨볼루션 결함

위의 사전 필터링된 이미지는 대부분의 경우 잘 작동하지만 항상 몇 가지 결함이 있습니다. 가장 일반적인 문제와 해결 방법이 아래에 나열되어 있습니다.

  • 큐브맵의 높은 러프니스 솔기

거친 표면이 있는 표면에서 사전 필터 맵을 샘플링한다는 것은 일부 낮은 밉 수준에서 사전 필터 맵을 샘플링한다는 의미입니다. 큐브맵을 샘플링할 때 OpenGL은 기본적으로 큐브맵 표면을 선형으로 보간하지 않습니다. 낮은 밉 레벨은 모두 낮은 해상도를 가지며 사전 필터 맵은 더 큰 샘플 로브로 구성되므로 큐브 면 간 필터링으로 인한 아티팩트가 매우 분명해집니다.

다행히 OpenGL은 GL_TEXTURE_CUBE_MAP_SEAMLESS를 활성화하여 큐브맵 면을 적절하게 필터링할 수 있는 옵션을 제공합니다.

cpp
glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS);

애플리케이션 시작 시 어딘가에서 이 속성을 활성화하면 이음새가 사라집니다.

  • 사전 필터링된 컨볼루션의 하이라이트

스페큘러 반사의 고주파 세부사항과 매우 다양한 광 강도로 인해 스페큘러 반사 컨볼루션은 HDR 환경에서 광범위하게 변화하는 반사 특성을 적절하게 해결하기 위해 많은 수의 샘플이 필요합니다. 우리는 많은 샘플을 채취했지만 일부 환경에서는 더 거친 밉 수준에서는 여전히 충분하지 않을 수 있습니다. 이 경우 밝은 영역 주위에 점선 패턴이 보이기 시작합니다.

한 가지 옵션은 샘플 수를 더 늘리는 것이지만 모든 환경에 충분하지는 않습니다. 이 아티팩트는 환경 맵을 직접 샘플링하지 않고(사전 필터링된 컨볼루션 중에) 대신 통합 PDF 및 거칠기를 기반으로 환경 맵의 밉 수준을 샘플링하여 줄일 수 있습니다.

cpp
float D   = DistributionGGX(NdotH, roughness);
float pdf = (D * NdotH / (4.0 * HdotV)) + 0.0001; 

float resolution = 512.0; // resolution of source cubemap (per face)
float saTexel  = 4.0 * PI / (6.0 * resolution * resolution);
float saSample = 1.0 / (float(SAMPLE_COUNT) * pdf + 0.0001);

float mipLevel = roughness == 0.0 ? 0.0 : 0.5 * log2(saSample / saTexel);

밉 레벨이 다음에서 샘플링되도록 환경 맵에서 삼선형 필터링을 활성화하는 것을 잊지 마십시오.

cpp
glBindTexture(GL_TEXTURE_CUBE_MAP, envCubemap);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

그런 다음 큐브맵의 기본 텍스처를 설정한 후 OpenGL이 밉맵을 생성하도록 합니다.

cpp
// convert HDR equirectangular environment map to cubemap equivalent
[...]
// then generate mipmaps
glBindTexture(GL_TEXTURE_CUBE_MAP, envCubemap);
glGenerateMipmap(GL_TEXTURE_CUBE_MAP);

이는 매우 잘 작동하며 거친 표면의 사전 필터링된 지도에서 대부분의 점을 제거할 수 있습니다.

5.4.3 미리 계산된 BRDF

사전 필터링된 환경이 실행되면 분할 및 근사화의 두 번째 부분인 BRDF에 집중할 수 있습니다. 거울 분할과 근사를 다시 간단히 살펴보겠습니다.

Lo(p,ωo)=ΩLi(p,ωi)dωiΩfr(p,ωi,ωo)nωidωi

우리는 다양한 러프니스 수준에서 사전 필터링된 맵에서 분할 및 근사의 왼쪽 부분을 미리 계산했습니다. 오른쪽은 BRDF 방정식 nωo, 표면 러프니스 및 프레넬의 각도 F0를 수집해야 합니다. 이는 반사성 BRDF를 순백색 환경 또는 1.0의 일정한 광도Li와 통합하는 것과 유사합니다. BRDF를 3개의 변수로 압축하는 것은 약간 많지만 반사 BRDF 방정식에서 F0를 이동할 수 있습니다.

Ωfr(p,ωi,ωo)nωidωi=Ωfr(p,ωi,ωo)F(ωo,h)F(ωo,h)nωidωi

F는 프레넬 방정식입니다. 프레넬 분모를 BRDF로 이동하면 다음과 같은 등가 방정식이 제공됩니다.

Ωfr(p,ωi,ωo)F(ωo,h)F(ωo,h)nωidωi

가장 오른쪽 F를 대체하기 위해 Fresnel-Schlick 근사 방법을 사용하면 다음을 얻을 수 있습니다.

Ωfr(p,ωi,ωo)F(ωo,h)(F0+(1F0)(1ωoh)5)nωidωi

또한 (1ωoh)5α로 바꾸면 F0을 더 쉽게 풀 수 있습니다.

Ωfr(p,ωi,ωo)F(ωo,h)(F0+(1F0)α)nωidωi=Ωfr(p,ωi,ωo)F(ωo,h)(F0+1αF0α)nωidωi=Ωfr(p,ωi,ωo)F(ωo,h)(F0(1α)+α)nωidωi

그런 다음 프레넬 함수 F를 두 개의 적분으로 분할합니다.

Ωfr(p,ωi,ωo)F(ωo,h)(F0(1α))nωidωi+Ωfr(p,ωi,ωo)F(ωo,h)(α)nωidωi

F0은 상수이므로 적분 부호 밖으로 이동할 수 있습니다. 다음으로 최종 BRDF 방정식을 얻기 위해 α를 원래 형식으로 다시 바꿉니다.

F0Ωfr(p,ωi,ωo)(1(1ωoh)5)nωidωi+Ωfr(p,ωi,ωo)(1ωoh)5nωidωi

두 결과 적분은 각각 F0의 스케일링과 오프셋을 나타냅니다. f(p,ωi,ωo)에는 이미 F 용어가 포함되어 있으므로 F 용어는 f$에서 모두 삭제됩니다!

초기 컨볼루션 환경 그래프와 유사한 방식으로 입력(n과 $\omega_o 사이의 각도 및 러프니스)에 대해 BRDF 방정식을 컨벌루션하고 컨볼루션 결과를 2D 조회 텍스처(LUT)에 저장할 수 있습니다.

BRDF 컨볼루션 셰이더는 2D 텍스처 좌표를 BRDF 컨볼루션(NdotV 및 러프니스)에 대한 입력으로 직접 사용하여 2D 평면에서 작동합니다. 컨볼루션 코드는 이제 BRDF 기하학적 함수와 Fresnel-Schlick의 근사에 따라 샘플 벡터를 처리한다는 점을 제외하면 사전 필터링된 컨볼루션과 거의 유사합니다.

cpp
vec2 IntegrateBRDF(float NdotV, float roughness)
{
    vec3 V;
    V.x = sqrt(1.0 - NdotV*NdotV);
    V.y = 0.0;
    V.z = NdotV;

    float A = 0.0;
    float B = 0.0;

    vec3 N = vec3(0.0, 0.0, 1.0);

    const uint SAMPLE_COUNT = 1024u;
    for(uint i = 0u; i < SAMPLE_COUNT; ++i)
    {
        vec2 Xi = Hammersley(i, SAMPLE_COUNT);
        vec3 H  = ImportanceSampleGGX(Xi, N, roughness);
        vec3 L  = normalize(2.0 * dot(V, H) * H - V);

        float NdotL = max(L.z, 0.0);
        float NdotH = max(H.z, 0.0);
        float VdotH = max(dot(V, H), 0.0);

        if(NdotL > 0.0)
        {
            float G = GeometrySmith(N, V, L, roughness);
            float G_Vis = (G * VdotH) / (NdotH * NdotV);
            float Fc = pow(1.0 - VdotH, 5.0);

            A += (1.0 - Fc) * G_Vis;
            B += Fc * G_Vis;
        }
    }
    A /= float(SAMPLE_COUNT);
    B /= float(SAMPLE_COUNT);
    return vec2(A, B);
}
// ----------------------------------------------------------------------------
void main() 
{
    vec2 integratedBRDF = IntegrateBRDF(TexCoords.x, TexCoords.y);
    FragColor = integratedBRDF;
}

위에서 볼 수 있듯이 BRDF 컨볼루션은 수학을 코드로 직접 변환한 것입니다. 각도 θ와 거칠기를 입력으로 받아 중요도 샘플링으로 샘플 벡터를 생성하고 이를 기하구조에서 처리한 후 BRDF의 프레넬 항을 도출하고 각 샘플에 대한 F0의 스케일과 오프셋을 출력하고 최종적으로 평균을 냅니다.

IBL과 함께 사용하면 BRDF의 기하학적 용어가 약간 다릅니다. 즉, 변수 k가 약간 다르게 해석됩니다.

k=(α+1)28kIBL=α22

BRDF 컨볼루션은 우리가 사용할 반사 IBL 적분의 일부이므로 kIBL를 Schlick-GGX 기하학 함수의 매개변수로 사용합니다.

cpp
float GeometrySchlickGGX(float NdotV, float roughness)
{
    float a = roughness;
    float k = (a * a) / 2.0; // k_IBL

    float nom   = NdotV;
    float denom = NdotV * (1.0 - k) + k;

    return nom / denom;
}
// ----------------------------------------------------------------------------
float GeometrySmith(vec3 N, vec3 V, vec3 L, float roughness)
{
    float NdotV = max(dot(N, V), 0.0);
    float NdotL = max(dot(N, L), 0.0);
    float ggx2 = GeometrySchlickGGX(NdotV, roughness);
    float ggx1 = GeometrySchlickGGX(NdotL, roughness);

    return ggx1 * ggx2;
}

분할 및 적분 컨볼루션의 BRDF 부분 렌더링 결과는 다음과 같습니다.

사전 필터링된 환경 맵과 BRDF 2D LUT를 사용하여 분할 합계 근사를 기반으로 간접 조명의 반사 부분의 적분을 계산할 수 있습니다. 그런 다음 간접광이나 주변 반사광을 결합하여 최종적으로 IBL 조명 결과를 계산합니다.

5.5 PBR 최적화

5.5.1 오프라인 렌더링 최적화

[5.4 사전 컴퓨팅 기술](#5.4 사전 컴퓨팅 기술) 장에서는 오프라인 렌더링을 위한 몇 가지 가속 기술을 언급합니다. 또한 일반적인 오프라인 기술에는 다음이 포함됩니다.

  • 로컬 정적 조명 베이킹

  • 글로벌 일루미네이션 베이킹

다음 하위 섹션에 설명된 방법을 사용하여 오프라인 렌더링 부분의 속도를 높일 수도 있습니다.

5.5.1.1 적분 공식 최적화

렌더링 공식을 최적화하기 위해 주로 [5.1 미적분학(Calculus)](#5.1 미적분학(Calculus))에 설명된 속성과 정리를 사용합니다.

  • 상수는 적분항 밖으로 이동됩니다.

  • 등가 필수 항목 추가

  • 별도의 적분항

-복잡한 항목을 대체하려면 근사법을 사용하세요.

구체적인 예시는 [5.4 사전컴퓨팅 기술](#5.4 사전컴퓨팅 기술)을 참고하시기 바랍니다.

5.5.1.2 하드웨어 통합

일반 렌더링 논리를 하드웨어 명령이나 내장 인터페이스에 통합하면 하드웨어 성능을 최대한 활용하여 렌더링을 가속화할 수 있습니다.

예를 들어, 레이 트레이싱 알고리즘은 GPU 그래픽 카드에 통합되어 있으며 nVidia의 차세대 RTX20 시리즈 그래픽 카드에는 레이 트레이싱 기술이 통합되어 렌더링 효율성이 더욱 높아집니다. Unreal Engine 4.22 버전에도 이 기능이 통합되어 있습니다.

5.5.1.3 병렬 렌더링

다중 스레드, 다중 프로세스 및 다중 장치 아키텍처를 통해 소비된 프레임 렌더링을 상각함으로써 각 프레임의 렌더링 시간이 크게 단축됩니다. 이 기술은 실시간 렌더링 분야에서도 점차 대중화되고 있습니다.

5.5.1.4 분산 렌더링

병렬 렌더링의 소규모 아키텍처와 달리 분산 렌더링은 일반적으로 영화 수준의 오프라인 렌더링 가속 요구 사항을 충족하기 위해 그래픽 워크스테이션 및 클러스터형 렌더링 클러스터와 같은 중대형 하드웨어 아키텍처에 의존합니다.

아래 그림은 "A MultiAgent System for Physically based Rendering Optimization"에서 제안한 다중 에이전트 가속 렌더링 아키텍처입니다.

5.5.2 실시간 렌더링 최적화

5.5.2.1 조명 모델 최적화

  • GGX 렘브란트 조명 계산

  • Schlick의 F0 근사 방법

  • Smith 기하학 마스킹 기능 블렌딩

  • 금속성의 디즈니 원리 선형 보간

위의 내용은 모두 이 기사의 이전 장에서 설명한 가속 알고리즘이며 성능에 민감한 실시간 렌더링 분야에 매우 필요합니다.

5.5.2.2 리소스 최적화

  • 여러 텍스처가 마스크 이미지로 결합됩니다. 여러 개의 독립적인 PBR 속성 마스크 맵을 하나로 결합합니다.

동일한 마스크 맵을 사용하여 PBR의 색상, 메탈릭, 러프니스 및 기타 속성을 동시에 제어합니다.

  • PBR 표준 매개변수의 사용을 줄입니다. 예를 들어, 금속 재질의 디퓨즈는 대부분 검은색이므로 추가 디퓨즈 맵이 필요하지 않습니다.

  • 기타 리소스 최적화: 재질, 모델, 렌더링 매개변수, 텍스처, PBR 매개변수 등 거의 모두 최적화할 여지가 있습니다.

5.5.2.3 기타 실시간 최적화

실시간 렌더링 분야에는 다음과 같이 시도하고 적용할 가치가 있는 최적화 방법이 많이 있습니다.

  • "Moving Frostbite to PBR"에서 제안된 IES 조명 시뮬레이션.

  • "Applying Visual Analytics to Physically-Based Rendering"에서 제안하는 시각적 분석 최적화.

5.5.3 모바일 최적화

모바일 기기와 PC의 일반적인 성능에는 일정한 차이가 있기 때문에 모바일 기기에 PBR을 적용할 때 성능 최적화의 필요성은 더욱 시급합니다.

이전 섹션에서 언급한 실시간 렌더링 최적화는 모바일 단말기에도 적용됩니다. 또한 모바일 단말기에 대해 몇 가지 특별한 최적화가 이루어질 수 있습니다.

  • 단순화된 조명 모델. 더 적은 수의 샘플 샘플과 더 단순화된 조명 계산 공식을 채택합니다.

  • 단순화된 셰이더. 소수의 셰이더 명령이나 단순화된 수학 연산을 통해 최적화를 달성할 수 있습니다.

  • 엔진의 모바일 버전에 대한 리소스 및 설정을 활성화합니다. Unity와 Unreal Engine은 모두 모바일 버전의 재료 라이브러리와 특수 구성을 제공합니다. 특별한 요구사항이 없다면 사용해 보세요.

  • 등급 전략. 다양한 수준의 장비에 대해 다양한 복잡성의 재료와 리소스를 사용하면 높음, 중간, 낮은 이미지 품질의 호환성 문제를 효과적으로 해결할 수 있습니다.

자세한 내용은 "PBR 최적화" 및 작성자가 작성한 또 다른 원본 기술 문서인 **"모바일 게임 성능 최적화를 위한 일반 기술"**을 참조하세요.

5.6 PBR의 미래

현 단계에서 하드웨어, 기술, 이론 및 기타 이유로 인해 PBR 기술은 많은 경우, 특히 실시간 렌더링 분야에서 대략적인 시뮬레이션 방법만 채택할 수 있으며 많은 중저가 PC 또는 모바일 장치에서도 PBR 기술을 실행할 수 없습니다.

그러나 이것이 PBR 기술의 미래 동향과 전망을 상상하는 데 방해가 되는 것은 아닙니다.

5.6.1 나노 수준 원리 기반

현재 대부분의 PBR은 마이크로패싯의 조명 모델을 기반으로 하며, 마이크로는 마이크로미터(106m)이며, 반사 모델은 회절, 간섭, 분산, 스펙트럼 에너지 분포 등과 같은 정밀한 물리적 모델을 무시하고 기하학적 광학으로 단순화됩니다.

지난 2년 동안 누군가 나노미터(나노, 109m) 수준을 기반으로 한 조명 모델을 제안했습니다. 먼저 마이크론 수준과의 차이점을 살펴볼 수 있습니다.

미세 기하학 나노기하학

로브 모양은 표면 통계에 따라 다릅니다(미크론 규모 NDF). 로브 모양은 표면 통계(나노 규모의 스펙트럼 에너지 분포)에 따라 달라집니다.

빛의 파장을 무시하라 빛의 파장에 크게 의존함

입사각은 가시성 확률을 통해 표면에 영향을 미칩니다. 입사각은 단축 확률을 통해 표면에 영향을 미칩니다.

즉, 나노 수준 이론은 SPD, 광파 파장 및 고급 표면 통계를 도입하여 조명 렌더링을 보다 물리적으로 정확하고 현실적으로 만듭니다.

나노 기하학은 빛의 파장, SPD 등을 도입하고 빛의 회절, 간섭, 분산 및 기타 현상을 고려하여 물리적으로 더욱 현실적으로 보이게 합니다.

물론 이 기술은 현재 영화 수준의 오프라인 렌더링에만 사용될 수 있어 실시간 렌더링 분야에 진출하기까지는 오랜 시간이 걸릴 것으로 보인다.

5.6.2 더욱 정확한 조명 모델

Cook-Torrance 및 BSSRDF를 포함한 현재 PBR 조명 모델은 대부분 1차원 곡선 피팅을 기반으로 합니다.

위 그림에서 볼 수 있듯이 1차원 곡선이기 때문에 모두 중심에서 주변으로 퍼지는 원형 모양이지만 원의 변화가 조금씩 다릅니다.

광파의 파장을 고려한 나노규모 SPD(스펙트럼 에너지 분포)가 도입되면 보다 복잡한 2차원 조명 모델 곡선이 도입될 수 있습니다.

위 그림에서 볼 수 있듯이 배광분포 곡선은 더 이상 원형이 아니고 탈지면과 유사한 복잡한 2차원 도형이 된다. 이것이 실제 세계에 더 가까운 조명 곡선 피팅입니다.

이 기술은 현재 매우 비싸지만 가까운 미래에는 점차 주류가 될 것이라고 믿습니다.

5.6.3 실시간 오프라인 기술

[5.4 사전 컴퓨팅 기술](#5.4 사전 컴퓨팅 기술)에서는 실시간 렌더링의 부담을 줄이기 위한 다양한 사전 렌더링 및 사전 컨볼루션 기술을 언급합니다. 더욱이 실시간 렌더링 부분에서는 많은 근사치와 단순화를 사용하여 조명이 물리적으로 정확하지 않고 사실적이지 않게 만듭니다.

향후 몇 년 내에 오프라인 렌더링 기술이 실시간 렌더링 분야에 점차 도입되어 실시간 렌더링을 통해 더욱 사실적인 렌더링 효과를 얻을 수 있게 될 것입니다.

여기에 언급된 오프라인 기술에는 조명 추적, 경로 추적, 전역 조명, 주변 조명, 로컬 정적 조명 및 구운 조명이 포함되지만 이에 국한되지는 않습니다.

이러한 기술이 실시간 렌더링 분야에 도입될 수 있다면 매우 흥미로울 것입니다. 최근 출시된 Unreal Engine 4.22 버전은 이미 실시간 레이 트레이싱 기술을 지원합니다.

단편영화 '트롤'은 영화 수준의 화질을 실시간으로 렌더링할 수 있는 언리얼 엔진 4.22의 새로운 레이 트레이싱 기능을 선보입니다.

이는 단지 시작일 뿐이며, 실시간 오프라인 기술의 속도는 앞으로 점점 더 빨라질 것이라고 믿습니다.

5.6.4 새로운 이론 및 기술

최근 그래픽 기술이 활발하게 발전하면서 PBR을 중심으로 한 새로운 기술과 이론이 활발하게 등장하고 있습니다. 나는 미래에도 그렇게 될 것이며, 새로운 이론과 기술이 기하급수적으로 발전을 가속화할 것이라고 믿습니다.

이러한 신흥 기술은 기본 물리학, 광학 원리, 수학적 모델, 알고리즘 및 데이터 구조, 컴퓨터 언어, 렌더링 기술, 그래픽 API, GPU 아키텍처 및 기타 소프트웨어 및 하드웨어 분야를 포괄합니다.

5.6.5 추가 적용 분야

앞으로는 기초이론과 소프트웨어, 하드웨어의 발전으로 PBR이 급속히 발전하여 더욱 널리 활용될 것이다. 수평 차원은 모든 계층을 포괄하고, 수직 차원은 중급 및 고급형 장치를 포괄합니다.

예를 들어 몰입형 4D 극장, 가상과 현실을 혼합한 게임 및 교육 상호 작용(아래 그림), 실제 인물 사진을 투사하는 팬텀 컨퍼런스, 영화 품질의 모바일 게임, 영화 수준의 아케이드 게임 등이 있습니다.

현재로서는 여전히 격차가 있지만 가까운 미래에는 PBR 기술의 도움으로 이러한 예측이 어느 정도 모든 사람에게 제시될 것이라고 믿습니다.

한마디로 PBR 기술의 향후 발전과 전망은 기대해볼 만하다.

육. 추신

6.1 보조 도구

일부 보조 도구는 직장이나 새로운 기술 개발의 효율성을 향상시킬 수 있습니다.

수학적 곡선 피팅 도구를 사용하면 매개변수가 지정된 후 함수의 결과를 직관적으로 확인할 수 있고 원하는 데이터를 얻을 수 있습니다.

곡선 피팅 도구를 사용하여 데이터 곡선의 변화를 시각적으로 표시합니다.

6.1.1 곡선 도구

  • MathLab: MathLab은 강력한 기능과 광범위한 사용자층을 갖춘 오랜 전통의 수학적 분석 및 모델링 도구입니다. 과학과 공학에 꼭 필요한 소프트웨어 중 하나입니다. 그래픽 렌더링의 곡선 맞춤에도 동일한 방법을 사용할 수 있습니다.

  • Mathematica: MathLab과 유사하지만 MathLab만큼 많은 기능을 가지고 있지는 않지만, 더 가볍고, 자체적인 초점을 가지고 있어 곡선 피팅에 매우 적합합니다.

  • Excel: 잘 읽으셨습니다. Excel은 단순 곡선을 맞추는 데에도 사용할 수 있습니다. 참고 자료의 많은 그림은 Excel에서 가져온 것입니다.

6.1.2 그리기 도구

  • GeoGebra: 강력하고 기본적으로 필요한 범례를 그릴 수 있으며 곡선 피팅에도 사용할 수 있습니다. 온라인 버전도 있습니다.

  • 기하학 스케치패드: 오랜 역사를 지닌 수학 그리기 소프트웨어이자 수학 교사의 필수 도구입니다.

6.1.3 작성 도구

  • 마크다운: 형식에 주의를 기울일 필요가 없는 표준 구문입니다. 간단한 마크업을 사용하면 복잡하고 변화무쌍한 혼합 그래픽과 텍스트 배열을 표현할 수 있어 작가는 지루한 서식 지정에서 벗어나 콘텐츠 제작에 더욱 집중할 수 있습니다. 이 글은 Markdown 형식을 기반으로 작성되었습니다.

  • LATEX: 변경 가능하고 복잡한 배열은 다양한 비정상적인 혼합 배열의 요구를 충족할 수 있으며 특히 수학 공식의 형식 표현에 적합합니다. 이 문서의 수식은 모두 *LATEX*를 기반으로 구현됩니다.

  • Typora: 마크다운 작성을 지원하는 텍스트 IDE입니다. 작고 유연하며 모든 기능을 갖추고 있습니다. 많은 양의 텍스트 작성을 지원하며 성능이 좋습니다. 추천할만한 가치가 있습니다.

6.1.4 BRDF 탐색기

디즈니 원칙이 출시되었을 때 BRDF의 다양한 공식 매개변수와 재료 속성을 보는 데 사용되는 BRDF Explorer가 출시되었습니다.

6.2 추가 정보

무엇? 이 글을 읽고도 아직도 만족하지 못하시나요?

그리고 여러분이 발견하기를 기다리는 수많은 참고 자료가 있습니다.

새오니안, 가자~~

특별 지침

  • 대부분의 사진은 참고 문헌과 인터넷에서 가져온 것이며 침해 및 삭제되었습니다.

  • 모든 참고문헌의 저자에게 감사와 경의를 표합니다.

  • 시간이 촉박하고 레벨이 제한되어 있어 실수가 불가피하니 정정 부탁드립니다.

  • 이 글의 링크를 공유하셔도 좋지만 무단 전재를 금지합니다!








📚 참고 자료 및 공식 링크 (References)


🔗 연관 지식 베이스 (Wiki & Tools)

Based on the legendary technical series by Timlly (0向往0 / 毛星云)