PBR 텍스쳐맵이란?
PBR은 물리 기반 렌더링(Physically based rendering)의 약자로
PBR텍스쳐맵은 PBR 머터리얼을 비트맵방식으로 저장해 불러오는 방식이다.
예를들어 16x16픽셀의 해상도의 Smooth맵이 있고
가장 왼쪽 모서리에 픽셀이 검은색일 경우
해당 텍스쳐맵을 사용하는 텍스쳐의 가장 왼쪽 모서리의 픽셀의 거칠기는 0으로 적용된다.
자바에선 Optifine같은 셰이더 모드를 통해 적용할 수 있으며
베드락에선 디퍼드 렌더링 및 광선 추적 옵션에서 사용이 가능하다.
글 업데이트 내역
2024.05.04 / 가시성 수정및 일부 내용 추가
PBR 텍스쳐 포맷
마인크래프트에 PBR 머터리얼을 적용하기 위해선
정해진 포맷에 맞춰 저장해야한다.
주로 흑백으로 이루어진 텍스쳐맵을
한 텍스쳐에 RGB채널에 저장하는 방식을 쓰며
포토샵을 주로 사용하나 Krita나 GIMP등을 써도 상관은 없다.
자바
자바에서는 Specular과 Normal텍스쳐에 RGBA채널에 유저들이 만든 포맷을 통해
적용하게 되는데 과거에는 OldPBR을 이용하였으나 현제는 Lab PBR을 이용한다.
각 포맷에 대한 문서는 아래에서 확인이 가능하다. (Old PBR은 공식문서가 따로 존재하지 않는다.)
참고로 이때 Normal과 Specular텍스쳐 자체는 PBR과는 아무관련이 없다.
LabPBR같은경우 일반인은 저장방식을 이해하기 어렵기 때문에
Pixelgraph라는 PBR리소스팩 제작툴을 사용하는걸 추천한다.
베드락
베드락은 MER텍스쳐와 Normal텍스쳐또는 Height텍스쳐를 사용하게 된다.
자세한건 아래의 공식문서에서 확인이 가능하다.
참고로 과거애는 베드락 RTX 를 줄여서 bRTX PBR이라 불렀으나
현제는 디퍼드 렌더링에서 또한 사용이 가능하게되어
Bedrock PBR이라고만 부른다.
(그렇다고해서 이것이 공식 명칭인것은 아니다. 해당 포맷을 부르는 이름은 다양하다.)
위 문서가 마이크로소프트측의 공식문서이긴하나
디퍼드 렌더링 이후에 생긴 문서로 이전 Geforce에서 작성된
구 공식문서에만 써져있는게 있다.
이는 나중에 글로 따로 정리할 예정이다.
Normal
- LabPBR, OldPBR, Bedrock PBR에서 사용됨
텍스쳐에 지는 음영및 빛과 사물의 반사각을 정하는 텍스쳐로
RGB에 각각 X, Y, Z값을 지니고 있다.
OpenGL의 노멀은 Blue 채널(Y) 값이 낮아질 수록 위로 면이 위로가고
DirectX의 노멀은 Blue 채널(Y) 값이 높아질 수록 위로 면이 위로가고
Bedrock PBR, Old PBR에서는 OpenGL,
LabPBR에서는 DirectX 노멀을 사용한다.
위가 민트색이면 DirectX, 보라색이면 OpenGL라고 외워두면 편하다.
만약 제작한 또는 다운받은 노멀맵이 원하는게 아니라면
이미지 편집프로그램으로 Blue 채널을 반전시켜주기만 하면 된다.
참고로 OpenGL과 DirectX는 그래픽 라이브러리로
셰이더를 직접 작성할것이 아니라면 노멀을 이해하는데 크게 필요하진 않다.
참고로 DirectX 노멀을 사용한다고 해서 셰이더가 DirectX로 만들어진것은 아니다.
마인크래프트의 셰이더는 OpenGL GLSL로 작성된다.
LabPBR
LabPBR에서는 Blue 채널의 z값을 사용하지 않으며
대신 그자리에 Ambient Occlusion이 사용된다.
Old PBR, Bedrock PBR
노멀 텍스쳐에 변형 없이 그대로 사용된다.
Height
- LabPBR, OldPBR, Bedrock PBR에서 사용됨
높이를 정하는 텍스쳐맵으로
흰색일수록 높고 검은색일수록 낮은 값이다.
Height Map은 주로 Parallax Occlusion Mapping(POM)에 사용된다.
POM은 쉽게 말해 텍스쳐를 3D로 보이게 해주는 매핑이다.
PBR자료를 찾아다닐경우 똑같이 생긴 Displacement와 Bump라는것을 찾을 수 있는데
Displacement map은 사용되는 의미는 다르나
형식은 동일하기때문에 Height와 혼용하여 사용해도 상관 없다.
Bump map의 경우 형식은 동일하나
사용되는 의도가 다르기 때문에 Height로 사용하는걸 비추천한다.
대신 노멀 대신에 사용되는 텍스쳐기 때문에 프로그램을
이용해 노멀로 변환해 사용할 수는 있다.
Lab PBR, Old PBR
Lab PBR, Old PBR에서는 Normal 텍스쳐에 알파채널에 저장된다.
단, 이경우 높이를 70퍼센트정도 낮춰서 저장해야하며
가장 높은 픽셀의 높이가 낮을경우 텍스쳐가 다른 블록간의 연결성이 안좋아지기 때문에
조정을 하는것이 좋다.
참고로 PixelGraph에서는 Auto Height를 쓰면 자동으로 해결된다.
만약 Substance Desgner를 쓰고있다면 Auto levels 노드를 쓰면 된다.
Bedrock PBR
Bedrock PBR에서는 특이하게 Bump처럼 적용된다.
픽셀을 해상도 가로세로256에 맞춰 노멀을 생성해 높이를 표현한다.
저해상도를 위한 기능이며 고해상도에서는 Normal을 쓰는것이 좋다.
만약 Normal맵과 Height맵이 동시에 적용되어있으면
Normal을 우선으로 적용된다.
Ambient Oclusion (AO)
- LabPBR에서 사용됨
차폐의 정도에 따른 음영을 표현하는 텍스쳐맵으로
흑백으로 적용된다.
쉽게 설명해 물체가 각져 빛이 들어오지 않는 사이의 그림자를 표현하는 텍스쳐이다.
주로 곱하기로 적용되나
주변 빛의 환경에 따라 적용을 조절하는 셰이더도 있다.
참고로 AO를 지원하지 않는 셰이더도 있으니
이곳에서 확인해보아야 한다.
https://wiki.shaderlabs.org/wiki/LabPBR_Supported_Packs
Lab PBR
Normal 텍스쳐의 Blue 채널에 들어간다.
이후 Normal의 z는 셰이더 내에서 따로 공식에 따라 생성해 사용한다.
Old PBR, Bedrock PBR
만약 Old PBR이나 Bedrock PBR에 사용할려면
컬러 텍스쳐에 곱하기 레이어로 합쳐서 적용하면 어느정도 효과를 얻을 수 있으나
좀 비전문적인 방법으로 Roughness(Smoothness)에 합쳐버리는 방법도 있다.
실제로 AO는 음영이진 부분이라서 빛이 잘 들어오지 않기 때문에
빛의 반사가 잘 일어나지 않아 어느정도 효과가 있는 방법이다.
Smoothness (Roughness)
- LabPBR, OldPBR, Bedrock PBR에서 사용됨
텍스쳐의 거칠기를 설정하는 텍스쳐맵이다.
Smoothness의 경우 흰색으로 갈 수록 매끄럽고
Roughness의 경우 검은색으로 갈 수록 매끄럽다.
사실상 같은 역할로 씌이기 때문에
서로 색을 반전해서 써도 상관없다.
매끄러울수록 빛의 반사율이 높아지고
거칠수록 반사율이 낮아지고 빛이 산란된다.
최대로 매끄럽게 할경우 반사율이 높은 플라스틱같은 재질이 되며
최대로 거칠게 할경우 반사율이 적은 나무 껍질같은데에 사용이 가능하다.
Old PBR, Lab PBR
Old PBR, Lab PBR은 Smoothness를 사용하며
Specular 텍스쳐의 Red 채널에 저장된다.
Bedrock PBR
Bedrock PBR에 경우 Roughness를 사용하며
mer(Matallic - Emissive - Rough)텍스쳐의 Blue채널에 저장된다.
Metallic
- LabPBR, OldPBR, Bedrock PBR에서 사용됨
텍스쳐의 금속정도를 설정하는 텍스쳐맵으로
흰색일수록 금속 정도가 높아진다.
주변 사물의 반사도가 컬러텍스쳐를 뒤집어 쓰는 방식으로 적용되며
원리상 금속 정도가 높을수록 컬러 텍스쳐는 검게 된다.
Rough에서 최대한 매끄럽게 한 후 Metallic을 최대로 높히면 빛의 반사율과 사물의 반사율이
최대가 되기때문에 거울이 되며
Metallic을 높히고 Rough(거칠기)을 높혀 무광 금속같은 재질도 표현이 가능하다.
Old PBR
Old PBR에서는 Specular 텍스쳐의 Green채널에 저장된다.
LabPBR
LabPBR에서는 Specular 텍스쳐의 Green 채널에서
230에서 255사이값에 저장된다.
Bedrock PBR
Bedrock PBR에서는
mer(Matallic - Emissive - Rough)텍스쳐의 Red채널에 저장된다.
F0
LabPBR에서 사용됨
텍스쳐에서 프레넬효과가 적용될 정도를 지정하는 머터리얼이다.
프레넬 효과란 쉽게말해서
보는 각도에 따라 반사율이 달라지는 것을 의미한다.
예를 들어서 공원에 잔잔한 호수가 있다고 치면
만약 호수를 완전히 90도 위에서 바라보게 되면 바닥이 잘 보이지만
만약 호수를 옆에서 비스듬이 보게된다면
주변의 벤치나 나무등등이 반사되어 호수의 바닥이 잘 안보이게 된다.
이처럼 옆에서 보게될수록 반사율이 증가하게 되는것을 프레넬 효과라고 한다.
F0는
Specular 텍스쳐의 Green 채널에서
0부터 229사이값에 저장된다.
Emissive
- LabPBR, OldPBR, Bedrock PBR에서 사용됨
블록에서 빛이나는 정도를 설정하는 텍스쳐맵이다.
흰색일 수록 빛이 나게된다.
셰이더에 따라 적용 방식이 다른데
대부분의 바닐라 빛을 사용하는 셰이더는
단순히 텍스쳐상 빛이 나기만 하고 주변 빛에 영향을 주지 않으며
빛나는 블록에 적용시 Bloom효과등에 영향을 주게 된다.
Kappa나 Rethinking Voxel같은 자체적인 빛 시스템을 갖고있는 셰이더의 경우
설정을 통해 Emissive텍스쳐에서 자체적인 빛을 발산하도록 할 수 있다.
참고로 Optifine의 Emission 텍스쳐는 PBR텍스쳐맵과 상관이 없다.
Old PBR
Old PBR에서는 Specular 텍스쳐의 Blue 채널에 저장된다.
Lab PBR
Lab PBR에서는 Specular 텍스의 Alpha 채널에 0 에서 254사이값에 저장된다.
Bedrock PBR
mer(Matallic - Emissive - Rough)텍스쳐의 Green채널에 저장된다.
Sub Surface Scattering (SSS)
- LabPBR에서 사용됨
빛이 표면에 닿았을때 산란되는 정도를 지정하는 텍스쳐맵으로
흰색일수록 빛이 더 넓게 산란된다.
주로 얇은 종이, 촛불, 피부를 표현하는데 사용된다.
SSS는
Specular 텍스쳐의 Blue 채널에서
65부터 225사이값에 저장된다.
Porocity
LabPBR에서 사용됨
Porocity 거의 업계에서 쓰의지 않는 PBR 머터리얼로
사실상 LabPBR에서만 볼 수 있다.
재질이 물을 흡수할 수 있는 량을 지정한다.
값이 높을수록 비가올때
더 색이 어두워지고 해당 셰이더에서 젖음 효과에 의한 반사율을 따르게된다.
Porocity는
Specular 텍스쳐의 Blue 채널에서
0부터 64사이값에 저장된다.
'마인크래프트 - 리소스팩 > [ 개발, 자료 ]' 카테고리의 다른 글
리소스팩/데이터팩 설명을 꾸며보자 (0) | 2025.01.07 |
---|---|
베드락 리소스팩 개발자들을 위한 blocks.json 설명하는 문서 (1) | 2023.11.23 |
Old PBR 머터리얼 포맷 (0) | 2023.09.28 |