Original topic by Silicon Studio Japan at 2019. Additional extra declaring by JPLee at 2021.
물리적 기반 렌더링 (https://en.wikipedia.org/wiki/Physically_based_rendering)은 게임 개발의 표준 기술이 되었습니다. Roughness 및 Metallic과 같은 물리적 매개 변수를 기반으로 재질을 만드는 간단한 방법을 제공하며 다른 조명 조건에서 보기 좋게 보이도록 수정할 필요가 없습니다.
광원에 대한 유사한 물리적 기반 접근 방식은 아직은 보편적이지 않습니다.
하지만 이러한 물리적 기반 접근 방식이 없으면 아티스트는 임의의 밝기와 노출 값을 선택하고 "올바르게 보일 때까지"조정해야 합니다.
사진에서 캡처 한 이미지 기반 조명 (https://en.wikipedia.org/wiki/Image-based_lighting)은 해결책을 향한 단계이지만 수동으로 배치 된 광원의 문제를 해결하지는 못합니다.
다행스럽게도 버전 4.19부터 더 이상 고전적인 방법을 사용할 필요가 없습니다.
UE4는 실제 조명 단위와 실제 사진 노출 단위를 지원하므로 실제 밝기를 기반으로 조명을 설정할 수 있습니다. 이렇게하면 변경할 때마다 조명을 조정할 필요없이 원하는 몰입 형 조명 결과를 훨씬 쉽게 얻을 수 있습니다.
장면 렌더링.
태양과 램프가있는 장면을 상상해보십시오. 전통적인 접근 방식은 태양이 램프보다 4 배 더 많은 빛을 전달하도록하는 것입니다. 괜찮아 보일 수도 있습니다.
하지만 이제 램프를 다섯 개 더 추가한다고 상상해보십시오. 갑자기 램프가 태양보다 더 많은 빛을 제공합니다. 잘못된 것 같습니다. 따라서 램프 강도를 조정하고 장면 노출 설정을 조정하여 모든 균형을 맞 춥니 다. 즉, 광원을 추가 할 때마다 장면의 모든 광원을 조정해야합니다.
또한 전통적인 방식의 문제는 광원의 밝기가 물리적으로 현실적이지 않다는 것입니다.
실제로 태양은 일반적인 전구보다 약 60 배 더 많은 빛을 전달합니다. 하지만 물리적 기반 접근 방식을 사용한다면 태양과 램프에 사실적인 밝기를 사용하기 때문에 램프를 추가하거나 제거 할 때마다 조명을 다시 조정할 필요가 없습니다.
UE4에서 물리적으로 사실적인 조명 사용
UE4에서 물리적으로 사실적인 조명을 사용하려면 광원에 실제 단위를 사용하면됩니다. 버전 4.19부터 UE4는 Lumen, Candelas, Lux와 같은 실제 조명 단위를 지원합니다.
예를 들어 밝은 햇빛이 있는 장면을 만들고 싶다고 가정 해 보겠습니다. 실제 세계에서 햇빛은 약 120,000 lux 를 제공합니다. 게임에서 태양의 밝기를 120,000 lux 로 설정하면 태양이 현실과 일치합니다.
실제 조명에 대한 칸델라 및 루멘 등급은 자유롭게 사용할 수 있습니다. 예를 들어 아래 이미지는 Jackson LED 쇼핑 가이드(https://news.jacksonemc.com/led-light-bulb-shopping-guide)에서 가져온 것입니다. 이 게시물의 끝에는 더 많은 소스가 있습니다.
조명 유닛의 이해
루멘, 칸델라 및 럭스는 센티미터, 킬로그램 또는 초와 유사한 표준 (SI) 단위입니다.
lumen, candelas, lux 에 대하여..
루멘(lumen)은 광선속을 나타내는 SI 단위다. 여기서 광선속은, 쉽게 말해, "광원이 내보내는 빛의 양" 정도라 할 수 있다. Luminous flux를 번역한 것으로, 한자 표기로는 光線束, "빛줄기 묶음" 정도의 뜻이다. 일본 용어인 광속(光束)과 유사하며 뜻 전달이 잘 안되는 안좋은 번역이다. 반면 중국에서는光通量 이라 하며 이 쪽이 뜻이 더 잘 통한다. lumen은 라틴어로 빛이라는 뜻이다. 기호로는 lm을 쓴다.
루멘은 빛의 에너지가 아니라 인간의 눈에 실제로 보이는 밝기를 대상으로 한다. 그러므로 눈에 잘 안 보이는 자외선, 적외선 근처의 빛은 에너지 강도에 비해 루멘 값이 낮게 나오고, 눈이 가장 잘 반응하는 녹색 빛은 에너지 강도에 비해 루멘 값이 높다.
루멘의 정의는 또다른 SI 단위인 칸델라(cd)과 관련이 있다. 즉
1 lm = 1 cd·sr (sr 은 스테라디안. 일종의 입체 각도)
관찰자 주위 전방과 같은 공 모양은 4π의 입체각에 해당하므로, 1 칸델라의 촛불이 사방으로 빛을 비출 경우 (촛몸은 투명하다고 가정) 광선속은 1 cd * 4π 루멘이 된다.
루멘으로부터 유도되는 단위로 럭스가 있다. 럭스는 조도의 단위로서, 단위 면적 당의 루멘이다. 즉
lux = lumen / m2
쉽게 말해 단위 면적에 비춰지는 빛의 양이라 할 수 있다.
칸델라, 루멘, 럭스 모두 빛과 관련된 단위라 헷갈릴 수 있다. 서로 다른 단위인데, 정리하자면,
칸델라 : 단위 입체각도(1 스테라디안) 당 빛의 세기.
루멘 : 광원이 내보내는 빛의 총량. {주어진 광원의 칸델라 값} * {구면에서, 빛이 새어나갈 수 있도록 트여 있는 구간만큼의 입체각도. 전구의 경우, 해당 전구의 조사각(照射角)을 의미한다}
럭스 : 면적 당 루멘
루멘은 광속을 측정합니다. 이것은 광원의 전체적인 힘, 즉 모든 방향으로 방출되는 모든 빛의 합입니다.
칸델라는 광도를 측정합니다. 이것은 한 방향에서 광원의 힘입니다. 측정하는 방향에 따라 변경 될 수 있습니다. 예를 들어 스포트라이트는 한 방향으로 많은 빛을 내고 다른 방향으로는 빛을 덜 발산합니다.
럭스는 빛이 표면에 비추는 정도를 측정합니다.
루멘, 칸델라 및 럭스는 모두 서로에 대해 정의됩니다. 1 평방 미터의 거리에서 1 평방 미터의 면적에 균일하게 빛을 방출하는 1 루멘의 파워를 가진 광원은 1 칸델라의 강도를 갖는다. 이 광원에서 1 미터 떨어진 표면의 조명은 정확히 1 럭스입니다.
예를 들어, 모든 방향으로 균일하게 빛을 방출하는 1000 루멘 빛의 강도는 약 80 칸델라입니다. 이 광원에서 1 미터 떨어진 표면의 조명도 약 80 럭스입니다.
이 1000 루멘의 빛을 빔에 집중(최대한 한 방향으로...)하면 빛이 모든 방향으로 균일하게 방출 될 때보다 칸델라 강도가 훨씬 더 커집니다.
빛의 힘이 영역의 약 8 %에 집중되면 그 강도는 1000 칸델라가 됩니다. 이 광원에서 1 미터 떨어진 표면의 조명은 동일한 비율로 1000 럭스로 증가합니다.
단위 선택 방법
때때로 표준 조명 장치 뒤에있는 수학을 아는 것이 유용합니다. (걱정하지 마세요. 숫자가 마음에 들지 않으면 이 섹션을 건너 뛸 수 있습니다.)
하나의 루멘은 하나의 단위 면적 입체각에 걸쳐 하나의 칸델라로 정의됩니다. 이것은 다음과 같이 표현할 수 있습니다.
lm=cd⋅sr , 여기서 lm은 루멘, cd는 칸델라, sr은 스테라디안(steradians)입니다.
💡 전체 구는 4pi 스테 라디안으로 구성되어 있으므로 광도가 1 칸델라 인 포인트 라이트의 광속은 12.57 루멘 : 1 (cd) ⋅4π (sr) = 4π (cd⋅sr) = 12.57 (lm)입니다. 입체각(立體角)은 2차원의 각을 3차원으로 확장한 것이다. 입체각의 차원은 0이며, 단위로 스테라디안(sr)이나 평방도(deg2)를 사용한다.단위 입체각은 1/4pi 가 됩니다( 단위구의 최대입체각이 4pi 입니다 ). 스테라디안(영어: steradian 또는 square radian, 기호 sr)은 입체각의 국제 단위이다. 평면에서 각도를 나타내는 라디안처럼, 3차원 공간에서 각도로 나타나는 2차원의 영역을 나타낼 때 사용된다. 용어는 견고함을 의미하는 그리스어: στερεός 스테레오스[] 와 광선을 의미하는 라틴어: radius 라디우스[]에서 유래한다. 스테라디안은 라디안 처럼 무차원상수이다. 즉, 1 sr = m2·m-2 = 1. 구 전체의 입체각은 4PI sr이 된다.
여러분이 만약 설치한 라이트들의 칸델라가 표면에서 얼마나 멀리 떨어져 있는지 알고 있다면 다음 방정식을 사용하여 표면의 조명 (럭스)을 계산할 수 있습니다.
예제.
이 예제에서는 UE4 학습 섹션의 무료 반사 맵을 사용했습니다.
먼저 모든 정적 조명을 제거하고 Enlighten 사전 계산을 실행했습니다. Enlighten 조명을 위해 레벨을 준비하는 첫 번째 단계입니다.(https://enlighten.atlassian.net/wiki/spaces/UEF309/pages/598737473/From+static+to+dynamic+lighting)
다음으로, 태양 역할을 하는 방향성 라이트를 추가 한 다음, 초기 노출을 설정하기 위해 전역 포스트 프로세스 볼륨을 추가했습니다. 초기 조명 설정을 방해하지 않기 위해 Bloom 및 vignette와 같은 추가 조명 효과를 제거했습니다. 기준선에 만족하면 나중에 다시 추가 할 수 있습니다.
Eye Exposure correction (Unreal 문서)을 비활성화 하고 EV7의 노출 (Wikipedia)을 지정했습니다.
조명의 진정한 효과를 이해하고 싶기 때문입니다. 예를 들어, 태양의 강도를 두 배로 늘리면 태양이 두 배 더 밝을 것으로 예상합니다. 그러나 노출이 자동이면 더 밝은 빛을 보정하기 위해 이미지가 자동으로 조정됩니다. 이것은 오해의 소지가 있습니다.
20,000lux, 50,000lux 및 165,000lux의 세 가지 강도 값을 사용하도록 방향 조명을 설정했습니다. 이는 하루 중 다양한 시간대의 실외 조도에 대한 현실적인 값입니다. Enlighten은 부동 소수점 라이트 맵을 지원하기 때문에 이와 같이 정말 큰 숫자를 사용해도 여전히 훌륭한 결과를 얻을 수 있습니다. 아래 스크린 샷은 이러한 다른 값이있는 레벨을 보여줍니다.
이것은 좋은 시작입니다. 여기에서 램프와 같은 인공 광원을 추가하고 사실적인 밝기 값을 제공 할 수 있으며 항상 예측할 수있는 방식으로 조명에 영향을 미칩니다.
Case study: GDC demo
GDC 2018에서 우리는 실제 조명 장치를 활용하는 오픈 월드 레벨을 시연했습니다. 장면은 한낮의 밝은 태양부터 용암이 가득한 협곡까지 다양합니다. 모든 간접 조명은 Enlighten으로 만들어졌습니다.
이 데모는 하루 중 다른 시간을 순환함에 따라 낮과 밤의 다른 시간에 걸쳐 태양과 달에 대해 다른 밝기 값을 사용했습니다. 또한 Sky Light를 사용하여 음영 영역을 채우고 하늘색과 일치하도록 색상 채도를 추가했습니다.
문제 중 하나는 물리적 기반 조명 모델을 사용하지 않는 대기 산란, 신 광선 및 안개와 같은 다른 효과와 물리적 기반 조명의 균형을 맞추는 것이 었습니다. 대기 산란은 기본적으로 실제 세계와 다른 광도 수치를 사용하도록 구성되어 있기 때문에 특히 까다 롭습니다. 그러나 실제 숫자로 조명을 설정하면 올바른 효과를 얻을 때까지 다른 효과를 실험 할 수 있습니다.
달은 밤 장면의 주요 광원입니다. 실생활에서 달은 맑은 밤에 약 0.25 럭스를 생성하며, 태양에 의해 생성되는 20,000-120,000 럭스와 비교하면 꽤 어둡습니다.
이것은 실제 밝기 값을 사용하지 않고 어둡고 지루한 장면을 생성하는 한 가지 상황입니다. 대신 간접 조명을 강화하여 시각적 인 관심을 더하고 다양한 광원 (달, 천창 등)에 걸쳐 조명을 균일하게 강화하여 상대적 관계가 그대로 유지되도록했습니다.
이것이 실제 가치를 사용하는 진짜 요점입니다. 사실주의를 위해 사실성을 추구하는 것이 아니라 덜 사실적인 것을 추구하더라도 쉽게 조정할 수있는 시작점을 제공하는 것입니다. Enlighten을 사용하면 실시간으로 조명을 조정할 수 있으므로 반복과 실험을 통해 배울 수있는 좋은 방법입니다.
몇 가지 유용한 참고 자료
게임의 조명에 이러한 실제 값을 사용할 수 있습니다.
광도 단위
출처 : New England Light Pollution Advisory Group
Sunlight
Source: Wikipedia Daylight article
Moonlight
Source: Wikipedia Moonlight article
'UNREAL ENGINE' 카테고리의 다른 글
셰이더 함수 분석: Diffuse_Chan (0) | 2024.10.30 |
---|---|
[소식] Z-emotion 언리얼엔진 업데이트. (1) | 2024.09.27 |
텐센트 PUER TypeScript 라이브러리 (0) | 2024.07.30 |
애러 추적 : GetSingleLayerWaterMaterialOutput 에 대해서... (0) | 2024.06.28 |
Individually Controllable Ambient Cubemap Color.UE5 (0) | 2024.02.15 |