물리기반 렌더링은 최근 실시간 렌더링에서 매우 흥미롭지만, 다소 모호하기도 합니다. PBR이라는 단어는 자주 사용되기도 하지만 떄로는 여러 의미적 혼란을 주기도 합니다.
짧게 표현하자면: 많은 것들을 내포하고 있고, 상황에 따라 다르게 표현 될 수 있습니다.
이 글은 PBR이 무엇을 표현하는지 그리고 이전 렌더링 방식과 어떻게 다른지 충분히 설명하고자 합니다.
이 문서의 앞부분은 PBR을 처음 접하는 사람들을 위한 문서이며, 수학공식, 코드는 다루지 않을 예정입니다.
그리고 뒷 부분에서는 실제 논문을 같이 분석하면서 읽어볼 예정입니다.
물리 기반 셰이딩 시스템을 이전과 다르게 만드는 핵심은 빛과 표면의 거동에 대해 더 구체적으로 사고한다는 점입니다. 셰이딩 기술이 충분히 발전하면서, 과거의 단순화된 근사치들은 이제 버릴 수 있게 되었고, 그것과 함께 예전의 아트 제작 방식도 바뀌고 있습니다. 따라서 엔지니어와 아티스트 모두 이러한 변화의 이유를 알 필요가 있습니다.
우리는 먼저 기초적인 부분부터 정의를 내려야 새로 운 점을 강조 할 수 있습니다. 이미 알고 있는 내용 일 수도 있지만, 조금만 참고 읽어 내려가면 충분히 가치 있는 시간이 될것입니다. 그리고 마지막으로 대부분의 Computer Science 분야에서 용어를 번역하다 보면 오히려 이해를 방해하는 경우가 생깁니다. 특정 기술적 용어 같은 경우 해당 용어를 설명하는 그림을 보여주고 원어 그대로 표현하도록 하겠습니다.
Diffusion & Reflection
Diffusion(확산), Reflection(반사)는 각각 diffuse, specular 라고도 불립니다. 표면과 빛의 상호작용을 가장 기본적으로 표현 하는 2가지 개념입니다. 대부분의 사람들은 이 개념둘을 일상생활에서 직관적으로 알고 있습니다. 하지만 물리적으로는 어떻게 동작하는지 잘 모르는 경우가 많습니다.
빛이 어떤 표면 경계에 닿으면, 일부는 Refelction되어 표면에서 튕겨 나가게 됩니다. 이는 공을 땅이나 바닥에 힘껏 던지면 튕겨져 나가는 것과 매우 유사합니다. 물체의표면이 매끄러울수록 반사된 물체를 선명하게 보여줍니다. 거울 처럼요. 흔히 사용 되는 용어인 specular는 라틴어에서 거울을 뜻하는 단어입니다.
그래서 영어에서는 Mirrorness 보다는 Specularity이라는 표현이 덜 어색하게 느껴지기도 합니다.
그러나 모든 빛이 포면에서 반사 되는 것은 아닙니다. 보통 일부는 표면 안쪽으로 들어가며, 그 안에서 재질에 의해 흡수되거나(대개 열로 반환됨), 내부에서 Scattered(산란)됩니다. 아래 그림이 대표적인 scttered 의 예시입니다. 컵안의 물을 지난 빛이 퍼져서 종이에 빚혀지고 있습니다.
이렇게 내부에서 산란된 빛 일부가 다시 표면 밖으로 나와 눈이나 카메라에 잡히는 것을 Diffuse Light, Diffusion, Subsurface Scattering 이라고 표현 합니다.
Absoption(흡수)와 Scattering(산란)은 매우 복잡합니다. 빛의 파장에 따라서 달라집니다. 파장은 파동이 한번 진동하여 원래의 위상으로 돌아올 때까지의 거리를 의미합니다. 이 때문에 색을 띠게 되는 것이죠. 예를 들어 어떤 물체가 대부분의 빛을 흡수하고 파란색만 Scttering 시킨다면, 그 물체는 파랑색으로 보입니다.
Scattered 는 대체로 무작위적으로 퍼지지만 동시에 전 방향에 고르게 퍼집니다. 어느 방향에서 보더라도 거의 동일하게 보입니다. 이는 거울과는 완전 다른 특징입니다.
이러한 근사치를 사용하는 셰이더는 사실 입력값 하나만 있으면 충분합니다. 그것이 바로 Albedo입니다. Albedo는 표면에서 다시 산란되어 나오는 빛의 색상 비율을 나타내는 색(Color)입니다. 즉 물체가 반사하는 색의 비율을 정의하는 값이라고 할 수 있죠.
Translucency(반투명) & Transparency(투명)
어떤 경우에는 diffusion이 더 복잡해지기도 합니다. 예를 들어, 피부나 왁스처럼 빛이 더 깊은 거리까지 산란하는 재질이 있습니다. 이런 경우 단순히 색상만으로는 표현하기 어렵고, 조명받는 물체의 형태와 두께까지 고려해야 합니다.
만약 물체가 충분히 얇다면, 빛이 뒷면까지 산란되어 빠져나가는 것을 볼 수 있고, 이를 **반투명(Translucent)**이라고 부릅니다.
확산 정도가 더 낮아지는 경우(예: 유리)에는 산란이 거의 일어나지 않아, 한쪽 면에서 들어온 이미지가 다른 쪽으로 거의 손실 없이 그대로 통과할 수 있습니다. 이것을 **투명(Transparent)**이라고 합니다.
이러한 특성은 일반적인 “표면 근처에서의 확산”과는 충분히 달라서, 보통 이를 시뮬레이션하기 위해서는 **별도의 셰이더(Shader)**가 필요합니다.
에너지 보존(Energy Conservation)
지금까지의 설명을 통해 중요한 결론을 내릴 수 있습니다. 바로 **반사(reflection)**와 **확산(diffusion)**은 서로 배타적이라는 점입니다. 왜냐하면, 빛이 확산되려면 우선 빛이 표면을 뚫고 들어가야 하기 때문입니다. 즉, 표면에서 반사되지 않아야(diffuse가 발생하려면 reflect가 일어나지 않아야) 확산이 가능하다는 것이죠.
셰이딩 용어로는 이를 **“에너지 보존(Energy Conservation)”**이라고 부릅니다. 간단히 말해, 표면에서 나오는 빛의 총량은 원래 들어온 빛보다 결코 밝을 수 없다는 뜻입니다.
셰이딩 시스템에서 이를 구현하는 것은 비교적 쉽습니다. 반사된 빛을 먼저 계산하고, 남은 빛만 확산에 사용하면 됩니다. 즉, 반사가 강한 물체는 표면을 뚫고 들어가는 빛이 거의 없기 때문에 확산광이 매우 약하거나 아예 나타나지 않습니다. 반대로, 물체가 밝은 확산광을 보인다면, 그 물체는 높은 반사율을 가질 수 없습니다.
이러한 형태의 에너지 보존은 물리 기반 셰이딩에서 매우 중요한 요소입니다. 이를 통해 아티스트는 재질의 **반사율(reflectivity)**과 알베도(albedo) 값을 다룰 때 물리 법칙을 무심코 위반하지 않게 됩니다. (물리 법칙을 어기면 보통 결과물이 부자연스럽게 보입니다.)
코드 차원에서 이런 제약을 강제로 적용하지 않아도, 멋진 비주얼을 만들 수는 있습니다. 그러나 이러한 제약을 두는 것은 일종의 “방파제” 역할을 해주어, 아티스트가 물리 법칙을 지나치게 벗어나거나, 조명 조건이 달라졌을 때 일관성을 잃지 않도록 방지해 줍니다.
Metals(금속성)
Electrically conductive materials (전도성 재질), 특히 금속은 몇 가지 이유로 특별히 언급할 가치가 있습니다.
첫째, 금속은 insulators non conductive(절연체-비전도체)에 비해 훨씬 더 높은 반사율을 가집니다. conductive 는 보통 **60~90%**의 반사율을 보이는 반면, insulators 는 일반적으로 0~20% 수준에 머뭅니다. 이처럼 높은 반사율 때문에 빛이 내부로 거의 침투하지 못해 산란이 일어나지 않고, 금속은 매우 반짝거리는(shiny) 외형을 가지게 됩니다.
둘째, conductive의 반사율은 가시광선 스펙트럼에 따라 달라지기도 합니다. 이 때문에 금속의 반사는 특정한 색조(tint)를 띨 수 있습니다. 이 현상은 모든 금속에서 흔한 것은 아니지만, 금, 구리, 황동처럼 일상적인 재질에서도 나타납니다. 반면, insulators 의 반사는 일반적으로 색을 띠지 않고 무채색입니다.
셋째, conductive 는 표면을 통과한 빛을 산란 시키기보다는 대부분 흡수합니다. 따라서 이론적으로 금속은 **확산광(diffuse light)**을 보이지 않아야 합니다. 하지만 실제로는 표면에 산화물이나 다른 잔여물이 존재하기 때문에, 소량의 산란이 발생하기도 합니다.
이러한 금속과 다른 모든 재질의 이중성 때문에, 일부 렌더링 시스템에서는 **“Metalness”**라는 직접적인 입력값을 사용합니다. 이런 시스템에서는 아티스트가 단순히 알베도(albedo)와 반사율(reflectivity)를 지정하는 대신, 재질이 금속처럼 동작하는 정도를 수치로 입력하게 됩니다. 이는 재질 제작을 좀 더 단순하게 만드는 방법으로 선호되기도 하지만, 반드시 PBR(물리 기반 렌더링)의 핵심 특징이라고 할 수는 없습니다.
Fresnel(프레넬)
오귀스탱 장 프레넬(Augustin-Jean Fresnel)은 우리가 잊기 어려운 옛 물리학자 중 한 명입니다. 그 이유는 그가 처음으로 정확히 설명한 여러 광학 현상에 그의 이름이 붙어 있기 때문입니다. 빛의 반사를 논할 때 그의 이름이 빠지기란 힘들죠.
컴퓨터 그래픽스에서 **프레넬(Fresnel)**이라는 말은 입사각에 따라 달라지는 반사율을 의미합니다. 구체적으로, 빛이 표면에 비스듬히(가까운 각도) 닿을 때는 정면으로 닿을 때보다 반사될 가능성이 훨씬 높습니다.
Steep angle (큰 각도, 정면에 가까움)
빛이 표면에 거의 수직으로 들어오면, 대부분 표면 안쪽으로 들어가서 **확산(diffuse)**되거나 흡수됩니다. 그래서 반사가 약해 보입니다.
Shallow angle (작은 각도, 비스듬히 들어옴)
빛이 표면에 비스듬히 닿으면, 표면 안쪽으로 들어가지 않고 거의 다 **반사(specular)**되어 나옵니다. 그래서 강한 반사가 나타나죠.
즉, 올바른 프레넬 효과를 적용하면 물체의 가장자리 근처가 더 밝게 반사되어 보이게 됩니다. 사실 이 개념은 오래전부터 그래픽스에 도입되었지만, PBR 셰이더에서는 프레넬 방정식의 계산을 보다 정확히 적용한 점이 중요한 차이입니다.
첫 번째 중요한 점은, 모든 재질은 비스듬히 볼 때(가장자리) 완전 반사(total reflectivity)를 보인다는 것입니다. 즉, 매끄러운 물체라면 재질에 상관없이, 가장자리에서는 완벽한 (색이 없는) 거울처럼 반사합니다. 믿기 어려울 수도 있지만, 물리적으로는 명확합니다.
두 번째 관찰은, 각도에 따른 반사율의 변화 곡선은 재질별로 크게 다르지 않다는 점입니다. 금속이 가장 특이한 경우이지만, 이것도 수학적으로 처리 가능합니다.
이 말은 곧, 현실감을 추구한다면 아티스트가 프레넬 효과를 직접 제어할 필요는 줄어든다는 뜻입니다. 최소한 이제 우리는 기본값을 어디에 설정해야 하는지 확실히 알게 되었습니다.
이것은 콘텐츠 제작 측면에서도 좋은 소식입니다. 이제 셰이딩 시스템이 프레넬 효과를 거의 전적으로 처리할 수 있기 때문이죠. 이제 남은건 몇가지 뿐입니다. 재질 속성에서 Gloss(광택), Reflectivity(반사율) 입니다.
PBR 워크플로에서는 아티스트가 **“기본 반사율(Base Reflectivity)”**만 지정하면 됩니다. 이것이 재질이 최소한으로 반사하는 빛의 양과 색을 정의합니다. 이후 렌더링 단계에서 프레넬 효과가 이 값을 기반으로 작동하여, 비스듬한 각도에서 최대 100% (완전한 흰색)까지 반사율을 높입니다. 즉, 아티스트는 기반 값만 제공하고, 프레넬 방정식이 나머지를 맡아 각도에 따라 반사성을 강화해 주는 것이죠.
단, 한 가지 큰 주의사항이 있습니다. 표면이 거칠어질수록 프레넬 효과는 눈에 띄지 않게 된다는 점입니다. 이 상호작용에 대한 더 자세한 내용은 뒤에서 설명됩니다.
미세 표면(Microsurface)
앞서 설명한 **반사(reflection)**와 **확산(diffusion)**은 모두 표면의 방향(orientation)에 따라 달라집니다. 큰 스케일에서는 mesh의 형태가 이를 결정하며, 작은 디테일은 **노멀맵(normal map)**을 통해 보완할 수 있습니다. 이 정보를 활용하면 렌더링 시스템은 확산과 반사를 꽤 잘 표현할 수 있습니다.
하지만 여전히 중요한 요소 하나가 빠져 있습니다. 대부분의 실제 표면은 매우 작은 결함을 가지고 있습니다. 눈으로는 보이지 않을 정도의 미세한 홈, 금, 혹은 돌기들이 존재하며, 이는 어떤 해상도의 노멀맵으로도 직접 표현하기에는 너무 작습니다. 비록 육안으로는 보이지 않지만, 이 미세한 특징들은 빛의 확산과 반사에 분명한 영향을 미칩니다.
이 미세 표면 디테일은 특히 **반사(reflection)**에 큰 영향을 줍니다. (subsurface diffusion [피하 산란]과 같은 확산에는 크게 영향을 주지 않으므로 여기서는 다루지 않습니다.) 위 그림에서 보듯, 평행하게 들어오는 빛줄기가 거친 표면에 반사될 때 서로 다른 방향으로 퍼집니다. 각 광선이 닿는 위치마다 표면의 미세 방향이 다르기 때문입니다. 공과 벽의 비유로 보자면, 매끄러운 벽이 아닌 바위 절벽에 공을 던지는 것과 비슷합니다. 공은 여전히 튕겨나가지만, 방향은 예측 불가능하게 됩니다. 즉, 표면이 거칠수록 반사광은 더 퍼지고 흐릿(blurry)하게 보이게 됩니다.
문제는, 이런 미세 표면의 특징을 하나하나 계산해서 셰이딩에 반영하는 것은 아트 제작, 메모리, 연산 비용 측면에서 불가능하다는 점입니다. 그렇다면 어떻게 해야 할까요?
해답은 간단합니다. 미세 표면 디테일을 직접 묘사하려는 대신, 그 정도를 일반적인 척도로 정의하는 겁니다. 이 척도를 통해 매우 정확하지는 않더라도 현실과 유사한 결과를 만들어낼 수 있습니다. 이 값은 흔히 Gloss(광택), Smoothness(매끄러움), **Roughness(거칠기)**라 불립니다. 이는 텍스처 맵이나 재질의 상수 값으로 지정할 수 있습니다.
이 미세 표면 디테일은 모든 재질에서 중요한 속성입니다. 현실 세계의 물체 대부분은 다양한 정도의 미세한 표면 특징을 가지고 있기 때문입니다. Gloss 맵핑 자체는 새로운 개념이 아니지만, 물리 기반 셰이딩(PBR)에서 핵심적인 역할을 합니다. 그 이유는, 미세 표면의 특징이 빛의 반사에 지대한 영향을 끼치기 때문입니다. 앞으로 살펴보겠지만, PBR 셰이딩 시스템은 이러한 미세 표면 특성과 관련된 여러 가지 부분에서 개선된 접근 방식을 제공합니다.
에너지 보존(Energy Conservation) Again
이제 가상의 셰이딩 시스템이 **미세 표면 디테일(microsurface detail)**을 고려하여, 반사광을 적절히 퍼뜨리게 되었다고 합시다. 이때 반드시 주의해야 할 점은, 올바른 양의 빛을 반사해야 한다는 것입니다. 불행히도 과거의 많은 렌더링 시스템은 이 부분을 제대로 구현하지 못해서, 표면의 거칠기(roughness)에 따라 빛을 너무 많이 혹은 너무 적게 반사하곤 했습니다.
올바르게 식을 균형 맞추면, 렌더러는 다음과 같이 보여야 합니다:
•
거친 표면(rough surface): 반사 하이라이트가 넓게 퍼지지만, 상대적으로 어둡게 보임.
•
매끄러운 표면(smooth surface): 반사 하이라이트가 작고 날카롭지만, 더 밝게 보임.
여기서 핵심은 **밝기 차이(apparent brightness)**입니다. 사실 두 표면 모두 같은 양의 빛을 반사하고 있습니다. 다만,
•
거친 표면은 반사광을 여러 방향으로 분산 시키기 때문에 흐리고 어둡게 보이고,
•
매끄러운 표면은 좁고 집중된 “빛”을 반사하기 때문에 더 선명하고 밝게 보이는 것입니다.
즉, 이전에 다루었던 확산/반사 균형에 더해, 여기서는 미세 표면에 따른 반사광 분배라는 또 다른 형태의 에너지 보존이 지켜져야 합니다. 이를 제대로 구현하는 것이야말로, 어떤 렌더러가 진정으로 “물리 기반(physically-based)”이라 불리기 위해 꼭 필요한 중요한 요소 중 하나입니다.
All Hail Microsurface
앞에서 배운 내용을 토대로 아주 중요한 사실에 도달할 수 있습니다. 바로, **미세 표면(gloss/roughness)**이 반사의 밝기에 직접적인 영향을 준다는 것입니다.
즉, 아티스트는 (gloss map, roughness map)에 직접 스크래치, 흠집, 마모된 부분, 광택 있는 부분 등을 그려 넣을 수 있으며, PBR 시스템은 단순히 반사 형태의 변화만 보여주는 것이 아니라, 상대적인 밝기 변화까지 표현해줍니다. 더 이상 별도의 “Specular Map(spec mask)”나 반사율(reflectivity) 조정이 필요하지 않습니다.
이것은 의미가 큽니다. 실제 세계에서 물리적으로 서로 연관된 두 가지 속성(미세 표면 디테일과 반사율)이 처음으로 아트 콘텐츠 제작과 렌더링 과정에서 올바르게 연결된 것입니다. 이는 앞서 설명한 확산/반사 에너지 균형과도 유사합니다. 원래라면 두 값을 각각 독립적으로 만들 수 있었겠지만, 실제로는 서로 연관되어 있기 때문에 따로 관리하면 오히려 더 어렵고 비효율적입니다.
또한, 실제 재질을 조사해 보면 반사율 값 자체는 그다지 크게 변하지 않는다는 사실을 알 수 있습니다(앞서 언급한 전도성 부분 참조). 예를 들어, 물과 진흙은 반사율이 비슷하지만, 진흙은 표면이 거칠고 웅덩이는 매우 매끄럽기 때문에, 두 표면의 반사는 전혀 다르게 보입니다. PBR 시스템에서 이런 장면을 제작한다면, 아티스트는 반사율을 조정하기보다는 gloss map/roughness map을 통해 차이를 표현하는 것이 올바른 접근입니다.
미세 표면 특성은 이 외에도 반사에 미묘한 영향을 줍니다. 예를 들어, **“가장자리가 더 밝게 보이는 프레넬 효과(Fresnel)”**는 표면이 거칠어질수록 약해집니다. 표면이 거칠면 프레넬 반사가 난잡하게 흩어져서, 보는 사람이 뚜렷하게 구분하지 못하게 되는 것이죠. 또한, 큰 요철이나 오목한 미세 표면 구조는 빛을 “가둬두어”, 표면 안에서 여러 번 반사되게 만들고, 이 과정에서 흡수가 늘어나 최종적으로는 밝기가 줄어듭니다.
렌더링 시스템마다 이런 디테일을 처리하는 방식과 정도는 조금씩 다르지만, 거친 표면일수록 반사가 더 어둡게 보인다는 큰 흐름은 동일합니다.
Conclusion
물론 물리 기반 렌더링 주제에 대해 더 많은 이야기가 있습니다; 이 문서는 기본적인 소개만 다루었습니다. 아직 읽지 않으셨다면, Joe Wilson의 PBR 아트워크 제작에 관한 튜토리얼을 읽어보세요. 더 기술적인 정보를 원하시는 분들에게는 다음과 같은 자료들을 추천해 드립니다:
•
John Hable’s excellent blog post: Everything Is Shiny
•
John Hable’s even better blog post: Everything Has Fresnel
•
Sébastien Lagarde’s summary of Rendering Remember Me
•
•
•
Always worth mentioning: The Importance of Being Linear
참고자