텍스쳐 리터칭을 위한
스카이림 텍스쳐 & 쉐이더 세팅 가이드
(원문 : Nifskope properties tutorial by Falkbeard)
NIF는 3D 오브젝트 정보뿐만 아니라 인게임 출력에 필요한 다양한 정보가 포함된 Gamebryo 전용 확장자입니다. Nifskope를 사용해 NIF 파일을 열어보면, 한 개의 NIF 파일에 여러 개의 오브젝트들이 들어가 있기도 하고, 각각의 오브젝트에 쓰이는 텍스처 경로, 쉐이더 설정, 인게임에서 다른 오브젝트들과 상호작용하기 위한 슬롯 설정과 히트 박스 설정은 물론, 심지어 해당 모델링 파일이 땅에 떨어졌을 때 어떤 소리를 출력할지 설정하는 항목도 들어있습니다. 이 때문에 호기심에 열어봤다가 많게는 수백 개에 달하는 항목들과 알 수없는 숫자들에 지레 겁을 먹고 모딩을 포기하는 분들도 적지 않으리라 생각합니다. 또한 스카이림 출시이래 6년이 되어가는 지금까지도 NIF 에 관한 한글 튜토리얼의 부재로 인해 매우 많은 모더들이 자신의 상상을 구현하는데 큰 어려움을 겪고 있습니다.
본 튜토리얼은 NIF파일의 전반적인 구조와 함께 텍스처 작업에서 모더 분들이 가장 많이 접하게 될 텍스처세트와 쉐이더 프로퍼티, 알파 프로퍼티를 중점으로 설명하여, 시각화 작업중에서 겪을 수 있는 어려움과 궁금증들을 해소하고자 작성되었습니다.
NiTriShape 의 일반적인 구조
NiTriShapeData 는 이름 그대로 오브젝트의 형태정보, 즉 메쉬 그 자체를 담당하는 부분입니다.
BSDismemberSkinInstance 는 베이스 메쉬(보통 바디)에 연결되는 슬롯 정보를 저장합니다.
BSLightingShaderProperty 는 텍스쳐와 라이팅관련 정보를 담고있습니다.
NiAlphaProperty 에는 게임에서 투명한 부분을 어떻게 처리할지에 대한 정보가 들어있습니다.
이 중 BSLightingShaderProperty 와 NiAlphaProperty 가 본 튜토리얼에서 중점적으로 다뤄질 내용입니다.
BSLightingShaderProperty
게임 엔진은 BSLightingShaderProperty 에 지정된 쉐이더 타입과 관련 플래그들, 각종 수치들과 BSShaderTextureSet 에 등록된 텍스쳐 리스트를 읽어와 모더가 구현하고자 했던 이펙트들을 오브젝트에 적용시켜 나타내 줍니다.
BSLightingShaderProperty(이하 '쉐이더 프로퍼티') 는 항상 하나의 BSShaderTextureSet(이하 '텍스쳐 세트')를 하위(자식) 개체로 가지고 있습니다. 여러 개의 쉐이더 프로퍼티가 한 개의 텍스쳐 세트를 공유하는 경우는 있으나 한 개의 쉐이더 프로퍼티가 여러 개의 텍스쳐 세트를 가지는 경우는 없습니다.
텍스쳐 세트를 보면 총 9줄의 입력란이 있으며, 각각의 입력란은 서로 다른 텍스쳐를 처리합니다. 즉, 만약 첫번째 란에 노말맵을, 두번째 란에 디퓨즈맵을 넣는다면, 메쉬는 형태를 알아보기 힘든 파란색 덩어리로 보이게 됩니다. 또한 텍스쳐 세트에서 텍스쳐 경로를 모두 맞게 잡아줬더라도, 쉐이더 프로퍼티에서 관련 설정을 잡아주지 않으면 게임 엔진은 해당 효과를 적용하지 않을 것입니다. 예를 들어 메쉬에 발광 효과를 내기 위해 디퓨즈와 노말맵, 글로우맵을 리스트의 올바른 입력란에 입력해주었더라도 쉐이더 프로퍼티에서 Glow Shader와 관련 플래그들을 설정해주지 않았다면, 해당 메쉬는 발광하지 않을 것입니다.
텍스쳐 세트가 쉐이더 프로퍼티에 종속되므로 쉐이더 프로퍼티를 먼저 설명하는 것이 맞겠으나, 본 튜토리얼은 이해를 돕기위해 텍스쳐 리스트의 각 슬롯에 들어가는 텍스쳐의 종류를 설명하고, 해당 효과를 주기 위해서는 쉐이더 프로퍼티에서 어떤 설정값을 주어야하는지 개별적으로 설명하도록 하겠습니다.
BSShaderTextureSet
9줄의 리스트가 각각 어떤 종류의 텍스쳐를 읽어오는지 설명하기에 앞서, 간략하게 텍스쳐와 UV맵에 대한 설명을 하도록 하겠습니다.
텍스쳐는 흔히 형태(메쉬)위에 그려지는 그림으로 비유되곤 합니다. 하지만 경우에 따라 텍스쳐는 단순히 평면적인 그림의 역할을 넘어서, 엔진에 내장된 쉐이더를 이용해 질감을 표현하고 3D정보를 보충해 주는 등 모델의 완성도를 높여주는데 있어 매우 중요한 역할을 합니다.
메쉬는 블렌더나 맥스같은 3D툴을 통해 각각의 면에 무엇을 그려넣을지 지정된 상태로 출력됩니다. 이 때 UV맵은 메쉬의 꼭지점들이 평면(텍스쳐)의 어디에 위치하는지 말해주는 역할을 하며, 실제 게임 화면에서는 UV맵의 위치정보를 이용해 메쉬의 표면에 텍스쳐를 투영시키게됩니다.
[2D 평면] - [연결다리] - [3D 공간]
[ Texture ] - [ UV map ] - [ Mesh ]
UV맵에 관한 내용이 불필요하고 이해하기 어렵게 보일 수 있겠으나, 3D오브젝트인 메쉬와 2D 오브젝트인 텍스쳐가 어떻게 연결되는 방식을 이해할 수 있어야 메쉬의 꼭지점을 움직였을때 텍스쳐가 늘어나고 일그러지는 현상을 이해할 수 있습니다. 다만 UV맵으로 인해 일어나는 문제점들 -예를들어 포팅과정에서의 실수로 인한 텍스쳐 어긋남, 이음새(Seam), 부분 텍스쳐 늘어짐 등의 문제들은 무겁고 복잡한 3D툴을 사용하지 않으면 해결하기 힘든 경우가 많고, Nifskope만을 이용해서 우리가 할 수 있는 수정작업은 한정적입니다.
Slot 01 – 디퓨즈맵, 알파채널은 투명도.
여기에 등록되는 텍스쳐는 오브젝트의 기본적인 색상 정보를 담고있습니다. 표면에 그려지는 그림같은 개념으로, 가장 이해하기 쉬운 부분중 하나입니다. 투명도 관련 정보는 디퓨즈맵의 알파채널에 저장됩니다. 후술할 다른 텍스쳐들은 디퓨즈맵을 통해 표면에 그려진 그림에 디테일과 각종 효과들을 넣기위한 도구라고 볼 수 있습니다.
저장 형식:
DXT1 - 투명도가 필요없을 경우 (알파채널이 없는경우) 해당 압축을 사용합니다.
DXT3 - 알파채널이 4bit 만을 요구할경우 해당압축을 사용합니다.
DXT5 - 알파채널이 8bit를 요구할경우 해당압축을 사용합니다.
└(실제파일은 4bit로 저장되어 DXT3와 용량은 동일하나 출력시 보간되어 8bit로 구현됩니다.)
쉐이더 프로퍼티 설정:
게임엔진이 디퓨즈를 정상적으로 읽어오고, 또 투명효과를 적용시키기 위해서는 필요한 설정을 해주어야만 합니다.
투명효과는 일반적으로 NITriShape에 NIAlphaProperty를 추가해주어야만 적용됩니다.
(NiTriShape 우클릭 > Node > Attach Property > NiAlphaProperty)
예외적으로 Shader Type에서 MultiLayer Parallax를 지정했을 경우 NIAlphaProperty가 없더라도 자동적으로 표현됩니다.
NiTriShapeData > Has Vertex Colors
NiTriShapeData > Vertex Colors
추가설정 :
투명도 조절 및 알파채널 구현 방식 관련 설정들입니다.
BSLightingShaderProperty > Alpha : 0 (완전 투명) ~ 1 (완전 불투명) 메쉬에 직접 투명성을 부여하는 설정입니다.
NiAlphaProperty > Flags : 추천 수치 4845, 4846. Threshold 80~100
└ NiAlphaProperty 플래그 관련 추가 설명 :
Flag 항목 왼쪽의 깃발 아이콘을 눌러 설정창을 불러올 수 있습니다.
Enable Blending : 항상 체크되어있어야 합니다.
일반 알파 연산
Source Blend Mode: Src Alpha
Destination Blend Mode: Inv Src Alpha
더하기 연산
Source Blend Mode: One
Destination Blend Mode: One
곱하기 연산
Source Blend Mode: Zero
Destination Blend Mode: Src Color
2배곱 연산
Source Blend Mode: Dst Color
Destination Blend Mode: Src Color
※ Alpha Testing 옵션
Alpha Test 기능은 알파채널의 그레이스케일에서 명암에 따라 불투명도를 나타내는 방식을 지정할 수 있습니다. 해당기능을 체크하지 않으면 기본설정에 따라 어두울수록 투명하게 나옵니다.
Less or Equal: 밝을 수록 투명하게 출력됩니다.
Greater or Equal: 어두울 수록 투명하게 출력됩니다 (기본설정)
Alpha Test Threshold: 0~255 (Black~White) 완전 투명으로 출력되는 경계점을 지정합니다.
※ 색 조합 공식
모델링 파일의 투명성 표현을 위해 비쳐보이는 물체와 색이 섞여 출력되어야 합니다.
본 내용은 전문적인 사전지식이 요구되므로 일반적인 모더분들은 숙지하고 있을 필요가 전혀 없습니다.
(Source * SourceBlendMode) + (Destination * DestinationBlendMode)
Source : 원 모델의 픽셀에 해당하는 색상 값
Destination : 뒷 편에 비쳐보이는 모델의 픽셀에 해당하는 색상 값
공식의 각 변수들은 사용자가 설정한 값 (블렌드 모드, 블렌더 변수) 에 의해 결정되며, 두 색상 값에 대응되는 변수를 각각 곱해준 뒤 합하여 최종 색상값을 출력하게 됩니다.
블렌드 모드 (블렌더 변수) :
One: 1을 곱해줍니다 (원 색상 그대로)
Zero: 0을 곱해줍니다
Src Color: Source 값을 곱해줍니다.
Inv Src Color: Source의 역수 값을 곱해줍니다.
Dst Color: Destination 값을 곱해줍니다.
Inv Dst Color: Destination의 역수 값을 곱해줍니다.
Src Alpha: 원 모델의 해당 픽셀이 가진 알파값을 곱해줍니다.
Inv Src Alpha: 원 모델의 해당 픽셀이 가진 알파의 역수 값을 곱해줍니다.
Dst Alpha: 비쳐보이는 모델의 해당 픽셀이 가진 알파값을 곱해줍니다.
Inv Dst Alpha: 비쳐보이는 모델의 해당 픽셀이 가진 알파의 역수값을 곱해줍니다.
Slot 02 – 노말맵, 알파채널은 반사광 설정(Specularity, 광택, 반사하는 정도)
노말맵은 메쉬의 표면에 명암을 통해 디테일한 깊이 표현을 주어, 크게는 굴곡부터 작게는 표면의 질감까지 모델링의 인게임 출력에 굉장히 큰 비중을 차지하는 텍스쳐 입니다.
노말맵은 머드박스, 지브러쉬, x노말, 마야, 크레이지 범프 등 다양한 프로그램으로 제작할 수 있으며, 제작과정은 보통 구워낸다(Baking)고 말합니다. RGB 세 채널에 각각 메쉬의 깊이 정보를 담고있는 노말맵은 보통 보라색과 파란색으로 그려지며, 엔진은 이를 이용해 메쉬의 표면에 그림자를 그려내는 방식으로 굴곡을 표현해 냅니다.
베데스다에서 사용하는 노말맵은 두가지가 있는데, 하나는 _msn(Model Space Normal) 이고 다른 하나는 _n (Tangent Space Normal) 입니다. _msn은 동적인 물체, 특히 인물 표현을 위해 베데스다에서 독자적으로 만든 노말맵 형식으로, 알파채널을 가지지 않습니다. 반면에 탄젠트 스페이스 노말(_n)은 기존의 노말맵이 사용하는 RGB채널 이외에, 알파채널에 물체의 광택을 표현하는 Specularity 정보를 추가적으로 저장하고 있습니다.
인게임은 물론 CKtool, Nifskope에서 노말맵이 정상적으로 출력되기 위해서는 NiTriShapeData > BS Num UV Sets 를 4097로 해주어야 합니다.
앞에 서술했다시피, 탄젠트 스페이스 노말(_n)의 알파채널은 물체의 투명성을 표현하지 않습니다. 그 대신에 밝거나 어두운 정도를 통해 해당 부분의 반사광이 얼마나 밝아야 하는지(Specularity)를 엔진에게 알려줍니다 (어두울 수록 무광이며 밝을 수록 유광 재질로 표현됩니다). 스카이림 내장 쉐이더에서 지원하는 반사광은 에나멜같은 질감으로 표현되며, 광택을 너무 많이 줄경우(알파채널을 너무 밝게할경우) 노말맵에 표현된 질감이 반사광에 묻힐 수 있습니다. 때문에 필자는 큐브맵을 이용한 반사광 표현을 훨씬 선호하며 노말맵의 알파채널은 되도록이면 어둡게 만들고 있습니다.
노말맵의 알파채널을 만드는 가장 쉬운 방법은 디퓨즈맵을 어둡게 만든다음 포토샵이나 김프(Gimp)를 이용해 해당 노말맵의 알파채널에 집어넣는 방법입니다. 다만 이 경우 밝은 색을 띈 부분은 개별적으로 어둡게 만들어주는 것을 추천합니다.
저장 형식:
DXT5 - 탄젠트 스페이스 노말 (_n)은 알파채널에 디테일한 표현력이 요구되므로 해당 압축옵션을 사용합니다.
8.8.8 - 모델 스페이스 노말 (_msn)은 알파채널이 없고 RGB채널에 고화질의 표현이 필요하므로 해당 압축옵션을 사용합니다.
쉐이더 프로퍼티 설정:
게임엔진이 탄젠트 스페이스 노말(_n)의 알파채널을 읽어와 광택표현에 사용하기 위해서는 Specular 플래그가 지정되어 있어야 합니다.
(BSLightingShaderProperty > Shader Flags 1: SLSF1_Specular)
모델 스페이스 노말(_msn) 적용시 추가적으로 BSLightingShaderProperty > Shader Flags 1: SLSF1_Model_Space_Normals 항목이 체크돼있어야 합니다.
반사광의 밝기와 색상, 너비를 조절할 수도 있습니다.
BSLightingShaderProperty > Specular Strength : 1이 기준치입니다. 숫자가 올라가면 반사광의 범위가 커지고 더 밝아집니다.
BSLightingShaderProperty > Specular Color : 반사광(하이라이트)의 색상을 지정합니다.
BSLightingShaderProperty > Glossiness : 0~999까지 입력가능합니다. 반사광의 너비(width)를 조절하여 광택을 조절합니다.
└ 80을 기준으로 숫자가 작아질수록 반사광의 범위는 더 넓어집니다.
추가설정 :
노말맵이 정상적으로 출력되려면 아래와같은 설정이 필요합니다.
NiTriShapeData >BS Num UV Sets = 4097
NiTriShapeData > Has Normals = yes
Slot 03 – 글로우맵(Glow, Emissive), 소프트 라이팅맵(Soft Lighting), 림 라이팅맵(RM Lighting), 혹은 (패럴렉스 Parallax 맵 사용시) 서브서페이스 칼라맵.
이 슬롯은 물체 표면의 부분적인 발광효과 (Emissive), 넓은 면적의 은은한 광원효과 (Soft Lighting), 테두리를 따라 빛나는 역광효과 (RIM Lighting) 같은 효과를 표현하는데 사용될 수 있습니다. 또한 아래 후술할 패럴렉스 맵을 사용할 경우 본 슬롯은 서브서페이스 색상을 지정하는 용도로 사용됩니다. 알파채널은 사용하지 않으며 해상도 요구가 비교적 낮은 편입니다. 효과를 원하지 않는 부분은 검정색으로 마스킹하는 방식으로 제작되며, 텍스쳐 제작시 발광 색상을 직접 그려 넣을 수 있습니다. 하지만 이렇게 칼라로 제작될 경우 해당 부위의 디퓨즈맵이 다소 묻힐 수 있으며, 때문에 흑백으로 제작하고 색은 쉐이더 프로퍼티의 Emissive Color 항목에서 설정해주는 방법이 보편적입니다. 보통 이름의 끝에 _g 를 붙여줍니다.
※ 패럴렉스 (Parallax) 기술 :
관찰자가 일정거리를 움직였을 시, 관찰자에게서 멀리 떨어진 물체는 가까운 물체에 비해 상대적으로 적게 움직인 듯이 보이는 '시차원리'를 이용해 입체감을 구현하는 기술입니다. 그레이 스케일의 패럴렉스맵을 기반으로, 디퓨즈맵을 알맞게 일그러뜨려 가상의 높낮이를 표현합니다. 디퓨즈맵의 표면에 그림자를 그려내는 노말맵보다 훨씬 뛰어난 입체감을 주지만, 그래픽카드에 요구되는 연산량이 훨씬 많아 잘 쓰이지 않습니다. 또한 디테일 표현이 자유로운 노말맵에 반해 디테일한 경계선을 표현하는데 큰 제한이 있습니다.
저장 형식:
DXT1 - 알파채널이 필요없기 때문에 해당 압축을 사용합니다. 1K 이하로 될 수 있는한 해상도를 줄여주는 것이 좋습니다.
쉐이더 프로퍼티 설정:
원하는 효과에 따라 플래그2 설정방법이 다릅니다.
BSLightingShaderProperty > Shader Type : Glow Shader
BSLightingShaderProperty > Emissive Color : 적용하려는 광원 효과의 색상을 지정해줄 수 있습니다.
BSLightingShaderProperty > Emissive Multiple : 0 보다 큰 숫자여야 합니다. 광원 효과의 밝기를 배수로 증가시킵니다.
BSLightingShaderProperty > Shader Flags 1 :
SLSF1_Own_Emit
※ SLSF1_Environment_Mapping 은 체크해제 되어있어야 합니다.
BSLightingShaderProperty > Shader Flags 2 :
SLSF2_Glow_Map : 단순 발광효과를 표현시 본 플래그만 지정해주면 됩니다.
Soft Lighting 사용 시 : SLSF2_Soft_Lighting 을 체크해 줍니다.
RIM Lighting 사용 시 : SLSF2_Rim_Lighting 을 체크해 줍니다. (림라이팅은 소프트 라이팅 효과를 포함합니다.)
Slot 04 – 높이맵(Height), 패럴렉스맵(Parallax)
4번 슬롯은 시차효과를 이용해 입체감을 만들어 내는 패럴렉스 맵을 입력할 수 있습니다 (패럴렉스 기술에 대한 설명은 Slot 03에서 관련 내용을 참조해주세요) . 해당 텍스쳐는 흑백으로 제작되며 알파채널은 사용하지 않습니다. 회색 (R127 G127 B127)을 기준점(높이 영점)으로잡고 픽셀의 밝기가 어두울수록 깊게 (Depth), 밝을수록 높게 (Height) 표현됩니다. 단순히 그림자를 그려내는 노말맵에 비해 입체감이 매우 뛰어나지만 연산 부담이 매우 높으며 디테일한 표현에는 약한편입니다. 보통 이름의 끝에 _p 가 붙습니다.
저장 형식:
DXT1 - 알파채널을 사용하지 않으므로 해당 압축방식을 사용합니다.
쉐이더 프로퍼티 설정:
BSLightingShaderProperty > Shader Type: Heightmap
BSLightingShaderProperty > Shader Flags 1: SLSF1_Parallax
추가설정 :
패럴렉스 기술은 스카이림의 기본 쉐이더에서는 지원하지 않습니다. 해당 기술을 적용하기 위해서는 ENB가 선행되어야 합니다.
Slot 05 – 큐브맵
현실에서 금속이나 거울같은 물체의 표면에는주위의 퐁경이 반사되어 보입니다. 이러한 효과를 내는 것은 환경 매핑(Environment Mapping)이라고 합니다. 게임속에서도 금속성 표면에 주위 풍경이 그대로 비쳐보인다면 매우 멋진 일이겠지만, 아쉽게도 인게임의 풍경을 반사시켜 보여주는 기술은 굉장히 높은 연산능력을 요구하며, 32비트 스카이림에서는 지원되지 않고 있습니다. 하지만 만약 우리가 가상의 풍경을 360도 전방위로 미리 찍어놓고 표면에 적당히 투영되도록 만든다면, 이런 반사 표현은 더이상 높은 연산능력을 요구하지 않게 될 것입니다. 이 때 '미리 찍어둔 가짜 풍경'의 역할을 하는 것이 바로 큐브맵입니다. 보통 큐브맵의 이름 끝에는 _e가 붙습니다.
큐브맵은 위에서 설명한 "가상의 풍경"을 정육면체의 형식으로 저장하고, 다시 각 면을 잘라내 오른쪽(+x), 왼쪽(-x), 위(+y), 아래(-y), 앞(+z), 뒤(-z) 의 순서로 배열한 텍스쳐입니다.
주의할 점은, 큐브맵만 넣어서는 반사효과가 적용되지 않습니다. 후술할 반사 마스크(Reflection Mask, 흔히 금속표현에 쓰이기 때문에 필자는 메탈맵이라고 부릅니다.)가 슬롯 6번에 추가되어야 하며, 반사 마스크는 해당 오브젝트의 어느부위에서 얼마나 큐브맵을 투영시킬 것인지 (얼마나 반사가 잘되는 것 처럼 표현할 것인지) 지정하는 역할을 합니다.
저장 형식:
DXT1 - 알파채널을 사용하지 않으므로 해당 포맷을 사용합니다.
※ 8.8.8 무손실로도 저장이 가능하나 이렇게 제작된 큐브맵은 스카이림 엔진에서 읽어오지 못합니다.
※ 저장할 때 전용 설정을 꼭 미리 해주어야합니다. (두번째 드래그 박스에서 CubeMap 선택, 우측의 체크박스에서 Mipmap 생성 안함 선택.)
쉐이더 프로퍼티 설정:
BSLightingShaderProperty > Shader Type: Environment Map
BSLightingShaderProperty > Shader Flags 1: SLSF1_Environment_Mapping
BSLightingShaderProperty > Shader Flags 2: SLSF2_Glow_Map : 해당 플래그는 해제되어있어야 합니다.
└ 한 오브젝트에 반사효과와 발광 효과를 모두 주고 싶다면, 쉐이더 타입이 환경맵핑(Environment Map)인 메쉬를 베이스로 깔고, 위에 밀착되는 메쉬를 한층 더 깔아준뒤, 발광효과를 원하는 부위를 제외한 나머지를 모두 투명하게 만든 디퓨즈를 읽어오도록 하고 (원본 텍스쳐가 알파채널이 없는 경우 NIAlphaproperty를 붙여주느냐 안붙여주느냐로 텍스쳐 공유 가능.), 글로우 맵을 적용시켜 주어야 합니다.
추가설정 :
BSLightingShaderProperty > Environmental Map Scale : 1을 기준으로 0 이상의 숫자만 입력가능합니다. 1보다 낮을 수록 반사의 강도가 약해지며, 1보다 높을 수록 반사의 강도가 증폭됩니다. 0.8 정도를 추천합니다.
※ 가끔 알 수 없는 메쉬 오류로 인해 반사표현이 제대로 되지 않는 경우가 있습니다. 현재까지 알아낸 바로는 아웃핏 스튜디오로 해당메쉬를 불러와서, 다시 저장(File > Export > To NIF...)하면 됩니다.
※ 노말맵의 알파채널에서 지정가능한 광택 효과보다 질감표현에 훨씬 유리합니다. 필자는 개인적으로 노말맵의 알파채널을 거의 검정색에 가깝게 만들고, 큐브맵을 이용해 반사광을 표현하고 있습니다.
Slot 06 – 반사 마스크 (Environment/Reflection Mask), 메탈맵(금속질감을 표현하는데 주로 사용되기 때문에 필자는 이렇게 부르고 있습니다. 정확한 명칭은 아닙니다.)
오브젝트의 특정표면이 얼마나 잘 반사하는지 (큐브맵을 얼마나 세게 투영할지) 지정해주는 텍스쳐입니다. 흑백으로 제작되며 밝을 수록 더 잘 반사하고 어두울수록 덜 반사합니다. 노말맵의 알파채널을 통해 표현되는 광택효과는 단순히 특정 색상의 하이라이트를 메쉬 표면에 그려넣는 방식으로 물광같은 효과를 내주지만, 반사마스크와 큐브맵을 조합해 표현한 반사효과는 큐브맵 속의 풍경을 메쉬 표면에 투영시키는 방식으로 훨씬 자연스러운 효과를 내줍니다. 여기서 한단계 더 나아가, 큐브맵에 풍경이 아닌 특정 재질이 빛을 받았을때 나타나는 현상을 그려넣어 질감이나 편광효과(무지개 효과)를 표현하는 것도 가능합니다.
이름의 끝에는 보통 _m이 붙습니다.
저장 형식:
DXT1 - 알파채널을 사용하지 않습니다.
쉐이더 프로퍼티 설정:
슬롯 5번에 큐브맵이 추가되어있어야 하며, 관련 세팅들 또한 선행되어야 합니다.
BSLightingShaderProperty > Shader Type : Environment
BSLightingShaderProperty > Shader Flags 1 > SLSF1_Environment_Mapping
BSLightingShaderProperty > Shader Flags 2 > SLSF2_EnvMap_Light_Fade
추가설정 :
메탈맵을 제작할 때 표면에 난 흠집이나 문양 등 부각시키고 싶은 부분이 있다면 해당 부위의 음영대비를 크게주는 것이 좋습니다.
Slot 07 – 서브서페이스 맵 (Subsurface Tint Map) 또는 (패럴랙스 사용시) 내부 레이어 디퓨즈맵 (Inner Layer Diffuse), (팰러랙스 사용시) 알파채널은 내피층의 깊이
서브서페이스 산란(scattering) 기술은 우유나 왁스같은 혼탁액, 또는 사람의 피부조직이나 잎사귀 같이 반투명한 표피층과 불투명한 내피층이 존재하는 물체를 표현하기 위해 개발된 기술입니다. 일반적으로 서브서페이스 쉐이더는 보이는 각도에 따라 디퓨즈와 서브서페이스 맵을 적절히 합성하여 내피층이 비쳐보이는 듯한 효과를 그려내나, 스카이림에 적용된 서브서페이스 쉐이더는 이런 고차원적인 연산대신에 반사광의 일부분에 내피층을 투영시키는 방식으로 이를 구현하고 있습니다.
'Ugly Bronze Shine' 으로 흔히 불리는 현상은 바로 이런 스카이림만의 서브서페이스 구현방식때문에 생겨나는 것으로, 서브서페이스 맵이 너무 밝아 그림자와 반사광 사이에 뚜렷한 경계선이 생기는 현상입니다.
일반적으로 이름의 끝에 _sk 를 붙입니다.
저장 형식:
DXT1 - 일반적으로 알파채널을 사용하지 않으므로 해당 포맷을 사용합니다.
DXT5- 팰러랙스 사용시 깊이 표현을 위해 알파채널을 읽어오므로 해당 포맷을 사용합니다.
쉐이더 프로퍼티 설정:
BSLightingShaderProperty > Shader Type : Skin Tint
BSLightingShaderProperty > Shader Flags 1 : SLSF1_FaceGen_RGB_Tint
추가설정 :
인게임의 recemanu 화면에서 설정가능한 피부의 투명도와는 별개로, 서브서페이스 맵의 밝기는 그림자와 반사광의 경계선에서 표현되는 내피층 투사 정도를 나타냅니다. 어두울 수록 잘 보이지 않게 되며, 보통 매우 어둡게 제작됩니다.
Slot 08 – 백라이트맵(Back Light)
앞의 Slot 04 에서 설명한 노말맵의 두가지 종류 중, 알파채널이 없는 모델 스페이스 노말 (_msn)을 사용하게 될경우 광택을 표현하는 텍스쳐를 추가적으로 입력해주는 슬롯 입니다. 흑백으로만 읽어와지며 밝을 수록 잘 반사하고, 어두울 수록 덜 반사합니다. 광택을 표현한다는 특성상 광택 맵(Specular Map) 으로 불리기도 하며, 이름의 끝에는 _s가 붙습니다.
저장 형식:
DXT1 - 알파채널을 읽어오지 않으므로 해당 포맷을 사용합니다.
8.8.8 - 예외적으로 매우 디테일한 표현을 위해 무손실 압축이 필요한 경우 해당 포맷을 사용합니다.
쉐이더 프로퍼티 설정:
BSLightingShaderProperty > Shader Flags 1: SLSF1_Model_Space_Normals : 모델 스페이스 노말(_msn) 적용시에만 읽어와집니다.
Slot 09 – 사용되지 않는 여분 슬롯입니다.
잘못된 부분이 있거나 추가하고 싶은 내용이 있다면 댓글로 꼭 알려주세요!
'Guides' 카테고리의 다른 글
[SE→LE] 애니메이션 백포팅 튜토리얼 (1) | 2020.09.01 |
---|---|
[LE/SE] COC 콘솔로 이동가능한 지역 id 목록 (0) | 2020.09.01 |
DDS 플러그인과 포맷별 손실 정리 (0) | 2020.07.06 |
낮은 명도로 텍스쳐 저장할때 칼라노이즈 해결법 (0) | 2019.11.12 |
엘7에 쌌던 정보글 + 스게 원본 정보글 (2) | 2016.02.07 |