PBR 재질: 금속·거칠기로 현실감 만들기
금속인가, 표면이 거친가. 이 두 질문만으로 3D 재질이 진짜처럼 보이는 이유와 텍스처 맵 연결법을 익힙니다.
한국어English

기준: Blender 5.2 LTS 공식 매뉴얼과 Khronos glTF 2.0 공식 명세. 메뉴 이름은 영어 화면 기준입니다.
3D 그림이 어딘가 '가짜 같다'고 느껴질 때, 원인은 모양보다 재질인 경우가 많습니다. 요즘 3D 프로그램과 게임 엔진은 대부분 PBR이라는 규칙으로 재질을 만듭니다. PBR의 바탕은 뜻밖에 단순합니다. "이 물체는 금속인가?"와 "표면이 얼마나 거친가?" 두 질문에 답하면 재질의 절반 이상이 정해집니다. 이 글에서는 PBR이 무엇인지, 금속성(Metallic)과 거칠기(Roughness)가 빛을 어떻게 바꾸는지, 여러 장의 텍스처 맵을 Blender에서 바르게 연결하는 법, 그리고 자주 하는 실수를 설명합니다.
PBR: 빛의 규칙을 따르는 재질
PBR은 Physically Based Rendering, 우리말로 물리 기반 렌더링의 줄임말입니다. 렌더링은 3D 장면을 한 장의 그림으로 만드는 과정이고, PBR은 그때 재질을 "빛이 실제 물체에 닿으면 어떻게 되는가"라는 물리 규칙에 맞춰 표현하자는 약속입니다.
예전에는 반짝임을 원하는 곳에 하이라이트 색을 직접 칠하는 식으로 재질을 만들기도 했습니다. 그러면 조명을 바꾸는 순간 그 반짝임이 엉뚱한 곳에 남아 어색해집니다. PBR은 반대로 물체의 성질만 적어 두고, 빛이 어떻게 튕길지는 렌더 엔진이 계산하게 합니다. 요리로 치면 완성된 요리 사진을 붙이는 대신 재료와 조리법을 적어 두는 것입니다. 조명(불 세기)이 바뀌어도 조리법이 맞으면 결과가 자연스럽습니다.
이 약속 덕분에 프로그램끼리 재질을 주고받기도 쉬워졌습니다. 3D 파일 표준인 glTF 2.0은 PBR에서 널리 쓰이는 표현을 바탕으로 한 금속성-거칠기 모델(metallic-roughness)을 씁니다. 플랫폼이 달라도 일관되게 렌더되게 하려는 것입니다. Blender의 기본 재질 노드인 Principled BSDF도 OpenPBR Surface라는 공개 재질 규격을 바탕으로 하고, 다른 프로그램의 비슷한 PBR 셰이더와 호환되는 값을 씁니다.
첫 번째 질문: 금속 여부
빛이 물체 표면에 닿으면 크게 두 갈래로 나뉩니다. 겉면에서 바로 튕겨 나가는 빛(반사)과, 표면 안으로 들어갔다가 흩어져 나오는 빛입니다. 금속과 비금속은 이 두 갈래의 비율이 완전히 다릅니다.
- 비금속(플라스틱, 나무, 돌, 천 등): 비금속은 들어온 빛의 대부분을 안으로 들입니다. 유리나 물은 그 빛이 그대로 통과해 투명하고, 플라스틱처럼 속에 작은 입자가 가득한 물질은 빛이 입자에 흡수되고 흩어지면서 색이 생깁니다. 그 위에 겉면에서 튕기는 얇은 반사가 한 겹 더해집니다.
- 금속(금, 은, 구리, 철 등): 금속은 빛의 대부분을 반사하고 아주 조금만 흡수합니다. 그래서 금속의 색은 '속에서 흩어진 빛'이 아니라 반사광 자체의 색입니다. 금반지가 노랗게 빛나는 이유입니다.
이 차이 때문에 같은 Base Color(바탕색) 값도 뜻이 달라집니다. 금속일 때 바탕색은 정면에서 본 반사색이고, 비금속일 때는 속에서 흩어져 나오는 색(확산색)입니다. glTF에서는 비금속의 정면 반사 세기를 따로 정하지 않고 약 4%(0.04)로 고정합니다. Blender도 같은 흐름입니다. Metallic이 0이면 확산되는 바탕층 위에 반사층이 얹힌 재질이 되고, 1이면 확산 없이 바탕색으로 물든 반사만 남습니다.
비유하면 이렇습니다. 비금속은 색 알갱이가 가득 든 젤리입니다. 빛이 젤리 속으로 들어가 이리저리 부딪친 뒤 젤리 색을 띠고 나오고, 겉면에는 살짝 반짝이는 막이 있습니다. 금속은 색이 입혀진 거울입니다. 빛이 속으로 들어가지 못하고 겉에서 거의 다 튕겨 나옵니다.
금속성의 기본: 0 아니면 1
Metallic 칸은 0에서 1 사이 어떤 값이든 넣을 수 있지만, 보통 재질은 금속이거나 비금속입니다. 금속성 텍스처도 대개 1.0과 0.0으로 금속 영역과 비금속 영역을 나눕니다. 중간값은 픽셀 하나에 금속과 비금속 경계가 걸친 경우처럼 예외적인 상황을 위한 것입니다.
그래서 "조금 반짝이게 하고 싶다"는 이유로 플라스틱에 Metallic 0.3을 넣는 것은 흔한 실수입니다. 반짝임은 금속성이 아니라 다음에 볼 거칠기로 조절하는 편이 물리 규칙에 맞습니다. 페인트가 벗겨진 쇠 난간처럼 한 물체 안에 금속과 비금속이 섞여 있다면, 중간값 대신 흰색(금속)과 검은색(비금속)으로 칠한 금속성 텍스처로 영역을 나눕니다.
두 번째 질문: 표면의 거칠기
Roughness(거칠기)는 반사가 얼마나 또렷한지를 정합니다. 0.0이면 완전히 선명한 반사, 1.0이면 퍼진 반사입니다.
원리는 마이크로패싯(microfacet), 곧 눈에 보이지 않을 만큼 작은 면들로 설명합니다. PBR 셰이더는 금속·비금속 반사를 모두 이 모델로 계산합니다. 매끈해 보이는 표면도 확대하면 아주 작은 면들이 모여 있습니다. 이 작은 면들이 모두 같은 방향을 보고 있으면 빛이 한 방향으로 가지런히 튕겨 거울처럼 선명한 반사가 되고, 제각각 기울어 있으면 빛이 여러 방향으로 흩어져 뿌옇고 넓은 반짝임이 됩니다.
바람 없는 호수와 물결치는 호수를 떠올려 보세요. 잔잔한 호수에는 산이 거울처럼 비치지만, 물결이 일면 반사가 부서져 넓게 번진 빛 덩어리만 보입니다. 물 자체는 같은데 표면 상태만 달라진 것입니다. 거칠기도 마찬가지로 재질의 '종류'가 아니라 '표면 상태'를 정합니다. 그래서 같은 금속이라도 거칠기를 0.1로 두면 새 숟가락, 0.6으로 두면 오래 쓴 무쇠 냄비 같은 느낌이 납니다(숫자는 느낌을 설명하기 위한 예시입니다).
금속성과 거칠기를 조합하면 다음과 같은 네 칸이 나옵니다.
| 거칠기 낮음(매끈) | 거칠기 높음(거침) | |
|---|---|---|
| 비금속 | 광택 플라스틱, 니스 칠한 나무 | 분필, 벽돌, 면 티셔츠 |
| 금속 | 크롬 도금, 새 숟가락 | 무광 처리한 알루미늄, 오래 쓴 무쇠 냄비 |
현실의 물체는 대부분 조금씩 거칩니다. 거칠기 0은 완벽한 거울에 가까우므로, 물체가 지나치게 반들거려 보이면 거칠기를 먼저 올려 보세요.
알아 두면 좋은 반사 규칙 두 가지
- 비금속의 흰 반사: 현실에서 비금속의 반사광은 흰색이고, 물체 색이 물들지 않습니다. 빨간 플라스틱 공의 반짝이는 점이 빨갛지 않고 하얀 이유입니다. 반사광에 색이 도는 것은 금속의 특징입니다.
- 비스듬한 각도의 강한 반사: 보는 각도가 비스듬할수록 반사가 강해지고, 아주 비스듬하면 어떤 재질이든 반사가 흰색에 가까워집니다. 호수를 발밑으로 내려다보면 물속이 보이지만, 멀리 수평선 쪽을 보면 하늘이 비쳐 보이는 것과 같습니다. 이것을 프레넬 효과(Fresnel)라고 하며, PBR 셰이더가 알아서 계산하므로 따로 칠할 필요가 없습니다.
텍스처 맵: 값을 그림으로 칠하기
실제 물체는 한 곳도 똑같지 않습니다. 벽돌은 벽돌 부분과 줄눈(시멘트) 부분의 색과 거칠기가 다르고, 표면에는 작은 요철도 있습니다. 그래서 PBR 재질은 값을 숫자 하나 대신 그림(텍스처 맵)으로 넣는 경우가 많습니다. 흰색일수록 1, 검은색일수록 0이라는 식으로, 그림의 밝기가 곳곳의 값이 됩니다.
자주 만나는 맵은 다음과 같습니다.
| 맵 이름 | 담는 것 | Blender에서 연결할 곳 | 이미지 색 공간 |
|---|---|---|---|
| Base Color(알베도) | 바탕색 | Principled BSDF의 Base Color | sRGB(색) |
| Roughness | 곳곳의 거칠기, 흑백 | Roughness | Non-Color |
| Metallic | 금속 영역, 흑백 | Metallic | Non-Color |
| Normal(노멀) | 작은 요철의 방향, 보랏빛 | Normal Map 노드를 거쳐 Normal | Non-Color |
| Ambient Occlusion(AO) | 틈새의 그늘 | 없음(주로 게임 엔진·glTF용) | Non-Color |
노멀 맵은 물체의 모양을 실제로 바꾸지 않고, 빛이 닿는 방향만 속여서 요철이 있는 것처럼 보이게 합니다. 평평한 종이에 그린 입체 착시 그림과 비슷합니다. AO 맵은 틈새처럼 주변 빛이 덜 들어오는 곳을 담습니다. Blender의 Principled BSDF에는 AO 맵을 꽂는 입력이 없습니다. glTF에서는 이 맵이 주변에서 오는 간접광만 줄이고, 직접광에는 영향을 주지 않습니다.
가장 흔한 실수: 데이터 그림을 '색'으로 읽기
표의 마지막 칸을 눈여겨보세요. 거칠기, 금속성, 노멀 맵은 겉보기엔 그림이지만 사실 색이 아니라 숫자를 담은 데이터입니다. 그래서 Image Texture 노드의 Color Space 칸에서 Non-Color로 지정해야 합니다. Non-Color는 어떤 색 변환도 하지 않고 값을 그대로 읽는 설정입니다.
이 설정을 빠뜨리면 Blender가 그림을 '사람 눈에 맞춘 색(sRGB)'으로 여기고 밝기 곡선을 한 번 더 적용합니다. 그러면 거칠기 값이 원래와 달라져 재질이 지나치게 반들거리거나 탁해지고, 노멀 맵은 요철 방향이 틀어집니다. 자로 잰 치수를 적은 메모를 누군가 "보기 좋게" 고쳐 적은 것과 같습니다. 색 공간이 무엇인지는 색 관리 입문 가이드에서 더 자세히 다룹니다.
glTF도 같은 구분을 합니다. 바탕색 텍스처는 sRGB로 인코딩하고, 금속성·거칠기 텍스처는 선형(linear), 곧 변환 없는 값으로 저장하도록 정해 두었습니다.
Blender에서 PBR 텍스처 연결하기
텍스처 세트를 받았다면 다음 순서로 연결합니다. 노드를 읽는 법(소켓과 선)이 낯설다면 셰이더 노드와 재질 가이드를 먼저 보세요.
- 물체를 선택하고 화면 맨 위의 Shading 탭을 눌러 Shading 작업 공간으로 갑니다. 아래쪽 셰이더 편집기(Shader Editor)의 New 버튼으로 새 재질을 만들면 Principled BSDF가 Material Output에 연결된 채로 나옵니다.
- 셰이더 편집기에서
Shift+A를 누르고 Texture ‣ Image Texture를 골라, 맵마다 Image Texture 노드를 하나씩 추가하고 이미지 파일을 엽니다. - Base Color 맵의 Color 출력을 Principled BSDF의 Base Color에 잇습니다. 색 공간은 sRGB 그대로 둡니다.
- Roughness 맵과 Metallic 맵은 각각 Roughness, Metallic 입력에 잇고, 두 Image Texture 노드의 Color Space를 Non-Color로 바꿉니다.
- 노멀 맵은 바로 잇지 않습니다. Normal Map 노드를 추가해 Image Texture의 Color를 Normal Map 노드의 Color에, Normal Map 노드의 Normal 출력을 Principled BSDF의 Normal에 잇습니다. 이 Image Texture도 Non-Color로 바꿉니다.
- 요철이 너무 강하거나 약하면 Normal Map 노드의 Strength로 조절합니다.
노멀 맵에는 알아 둘 것이 하나 더 있습니다. Blender는 기본적으로 초록 채널의 위쪽 방향을 위로 보는 OpenGL 방식을 쓰고, 일부 다른 프로그램은 반대인 DirectX 방식을 씁니다. 요철이 들어가야 할 곳이 튀어나와 보인다면 Normal Map 노드의 Convention 설정을 DirectX로 바꿔 보세요. 또 UV 맵이 여러 개인 물체라면 텍스처가 쓰는 UV 맵과 Normal Map 노드의 UV 맵이 같아야 합니다.
glTF로 내보낼 때: 한 장에 두 값 담기
glTF는 거칠기와 금속성을 한 장의 그림에 채널을 나눠 담도록 정합니다. 초록(G) 채널에는 거칠기, 파랑(B) 채널에는 금속성이 들어가고, 빨강(R) 채널은 이 계산에 쓰지 않습니다. 게임 엔진용 텍스처 세트에서 이상한 색이 섞인 그림을 보면 대개 이렇게 채널을 나눠 담은 것입니다. glTF를 포함한 3D 파일 형식의 차이는 3D 파일 형식 비교 가이드에서 다룹니다.
그 밖의 층: 코트, 시엔, 서브서피스
Principled BSDF에는 금속성과 거칠기 외에도 여러 층이 있습니다. 기본층(금속, 확산, 서브서피스, 투과) 위에 선택 사항인 코트가 있고, 그 위에 시엔이 얹힙니다.
- 코트(Coat): 자동차 도장, 래커처럼 표면 위의 투명한 막입니다. 물리 기반 재질에서는 Weight를 보통 0 또는 1로 둡니다.
- 시엔(Sheen): 아주 가는 섬유를 흉내 냅니다. 천의 가장자리에 도는 벨벳 같은 빛이나 물체에 앉은 먼지 표현에 씁니다.
- 서브서피스(Subsurface): 피부, 우유, 밀랍처럼 빛이 표면 바로 아래로 스며들어 부드럽게 보이는 재질입니다. 이것도 Weight를 보통 0 또는 1로 둡니다.
처음에는 Base Color, Metallic, Roughness, Normal 네 가지만 제대로 맞춰도 대부분의 재질이 충분히 그럴듯해집니다.
자주 하는 실수 정리
- "조금 반짝이게 하려고 Metallic을 0.3으로 올렸다." 금속성은 0 또는 1이 기본입니다. 반짝임은 거칠기를 낮춰서 조절하세요.
- "거칠기 맵을 연결했더니 재질이 이상하게 번들거린다." Image Texture의 Color Space가 sRGB로 남아 있는지 확인하고 Non-Color로 바꾸세요.
- "노멀 맵을 Base Color처럼 바로 Normal에 이었다." 노멀 맵은 Normal Map 노드를 거쳐야 합니다.
- "요철이 거꾸로 보인다." 노멀 맵의 OpenGL/DirectX 방식이 다를 수 있습니다. Convention을 확인하세요.
- "금속인데 바탕색을 어둡게 칠했다." 금속의 바탕색은 반사색입니다. 금속은 빛을 대부분 반사하므로, 금속 부분이 지나치게 어둡다면 바탕색 값을 다시 보세요.
- "PBR이면 무조건 사실적이어야 한다." PBR은 빛의 규칙일 뿐입니다. 로우폴리 작업처럼 단색 장난감 느낌의 재질도 금속성과 거칠기만 잘 정하면 조명 아래에서 자연스럽게 보입니다.
참고 자료
- Khronos Group, glTF 2.0 Specification (3.9 Materials, Appendix B: BRDF Implementation) — https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html
- Blender 5.2 LTS Manual, Principled BSDF — https://docs.blender.org/manual/en/5.2/render/shader_nodes/shader/principled.html
- Blender 5.2 LTS Manual, Color Spaces — https://docs.blender.org/manual/en/5.2/render/color_management/color_spaces.html
- Blender 5.2 LTS Manual, Normal Map Node — https://docs.blender.org/manual/en/5.2/render/shader_nodes/vector/normal_map.html
- Blender 5.2 LTS Manual, Image Texture Node — https://docs.blender.org/manual/en/5.2/render/shader_nodes/textures/image.html
- Blender 5.2 LTS Manual, Materials Introduction — https://docs.blender.org/manual/en/5.2/render/materials/introduction.html





