소개
게임 텍스처를 커스텀 png 파일로 바꿀 수 있습니다.
이 모드를 사용하면 다음을 교체할 수 있습니다.
- 플레이어 모델 텍스처
- 아이템 인벤토리 아이콘
- 갑옷, 무기 및 도구와 같은 장비 텍스처
- 지형과 물 텍스처
- 환경 텍스처
- 월드 오브젝트 텍스처, 게임 월드의 거의 모든 것
또한 이제 레이어를 지원하므로 동일한 바닐라 텍스처에 여러 텍스처를 겹쳐 적용할 수 있습니다 (아래 레이어 항목 참조).
나만의 커스텀 텍스처를 만들려면 기본적인 독해력이 필요합니다!
그렇게 어렵지는 않지만 도움을 요청하기 전에 아래의 모든 정보를 주의 깊게 읽으십시오.
다운로드
[1] 기본 사용법
레퍼런스를 위한 바닐라 텍스처를 추출하기 위해 Asset Studio를 사용합니다.
텍스처는 아래 경로의 파일에 있습니다.
[발하임 설치 경로]\valheim_Data\sharedassets\
텍스처를 교체하려면 아래 경로에 적절한 이름 형식(아래에서 설명)으로 png 파일을 추가 한 다음 게임을 로드하면 됩니다.
[발하임 설치 경로]\BepInEx\plugins\CustomTextures\
텍스처를 하위 폴더로 구성할 수도 있습니다!
텍스처 팩을 발행하는 경우, 쉽게 설치 및 제거할 수 있도록 이 작업을 수행하는 것이 좋습니다.
또한 텍스처 팩을 발행하는 경우, zip 파일을 만들기 전에 텍스처를 "CustomTextures 폴더"에 넣으면 Vortex에서 자동으로 설치할 수 있습니다!
인게임에서 월드 텍스처를 다시 로드하는 핫키 (기본값: Page Down)가 있습니다.
참고: 이는 어떠한 바닐라 텍스처도 리로드 하지 않습니다. 따라서 커스텀 텍스처 파일을 지울 경우, 게임을 재시작해서 바닐라 텍스트를 로드하십시오.
아래는 커스텀 리텍스처 사용법 영상입니다. (영문)
[2] 필터 모드
발하임 텍스처는 포인트 필터링을 사용하여, 가까이에서 보면 픽셀화 되어 보입니다. 고해상도 텍스처에 이중 선형 또는 삼선 형 필터링을 사용하려면, 이중 선형(bilinear) 또는 삼선 형(trilinear)이라는 하위 폴더에 텍스처를 배치하면 모드가 해당 텍스처에 대한 필터 모드를 변경합니다 (선택한 경우 하위 폴더에 있을 수 있음).
[3] 파일 네이밍 요약
파일 이름은 최대 4 개의 부분으로 구성됩니다.
접두어(prefixes), 식별자(identifiers), 속성 이름 (property names) 및 레이어 이름(layer names)입니다.
이와 관련한 많은 정보를 얻으려면 장면 덤프(Scene Dump) 항목을 참고하십시오.
파일 이름은 일반적으로 다음과 같이 만들 수 있습니다.
접두어(prefix), 밑줄(_), 식별자(identifier), 속성 이름(property name) 순서입니다.
선택적으로 레이어 이름(layer name)이 밑줄(_)과 함께 따라올 수 있습니다. (레이어 항목에서 참고하십시오.)
즉 아래와 같이 생성됩니다.
<prefix>_<identifier><propertyName>.png
또는 레이어가 추가되는 경우는 아래와 같습니다.
<prefix>_<identifier><propertyName>_<layerName>.png
이와 같은 이름으로 파일을 만든 후, "CustomTextures 폴더" 어딘가에 배치합니다.
속성 이름은 일반적으로 밑줄로 시작되므로 잊지 마십시오.
또한 Windows에서 파일 확장자를 숨기는 경우 끝에 .png를 추가하지 마십시오.
그렇지 않으면 작동하지 않는 <prefix>_<identifier><propertyName>.png.png라는 파일이 생성됩니다.
다음은 네 부분의 각각에 대한 설명입니다.
접두사(Prefixes)
수정되는 항목의 유형에 따라 다음과 같은 접두사가 붙습니다.
- player_model - 플레이어 텍스처
- atlas_item_icons - 인벤토리
- object - 오브젝트 텍스처
- armor - 갑옷 텍스처
- zone - 물 텍스처
- terrain - 지형 텍스처
- environment - 환경 텍스처
- location - 특별한 장소
오브젝트, 물, 지형, 환경 및 위치 텍스처의 경우 다음과 같이 접두사를 추가될 수 있습니다.
- <prefix>renderer - 특정 명명된 항목에 대한 명명된 렌더러에 대한 텍스처를 바꾸기 위한 것입니다.
- <prefix>mat - 특정 명명된 재료의 텍스처를 교체하는 데 사용됩니다.
- <prefix>renderermat - 특정 명명된 사물에 대한 특정 명명된 렌더러에 대한 텍스처를 교체하는 데 사용됩니다.
- <prefix>texture - 지정된 특정 항목에 대해 명명된 특정 텍스처를 대체하기 위한 것입니다.
예:
environmentrenderermat_branch_yggdrasil_branch (Instance)_MainTex.png
는 YggdrasilBranch 환경 오브젝트의 branch 렌더러에 있는 ygdrasil_branch 재료의 메인 텍스처를 대체합니다.
또한 구성 요소 이름을 기준으로 다음 접두사를 사용할 수 있습니다.
- texture - 텍스처를 전체적으로 교체(지원되는 경우)
- renderer - 명명된 렌더러에서 텍스처를 교체
- mat - 명명된 재료의 텍스처를 교체
따라서 위의 작업을 보다 쉽게 수행할 수 있는 방법은 다음과 같습니다.
texture_yggbark_d_MainTex.png
메인 텍스처일 경우 어디서든 yggbark_d 텍스처를 대체할 수 있습니다.
식별자(Identifiers)
씬(scene) 덤프에서 위의 접두사와 함께 사용되는 식별자를 찾을 수 있습니다.
자세한 내용은 아래의 각 세부 섹션에서 확인할 수 있습니다.
속성 이름(Property Names)
씬 덤프에서도 속성 이름을 찾을 수 있습니다.
주로 _MainTex 및 _BumpMap 또는 _SkinBumpMap을 교체하고자 할 것입니다.
레이어 이름(Layer Names)
아래 레이어(Layer)를 참조하십시오.
[4] 교체 타입
각 교체 타입에 대한 세부 사항은 다음과 같습니다.
플레이어 텍스처(Player Textures)
기본 플레이어 캐릭터 텍스처의 경우 다음 구문을 사용합니다.
player_model_<modelNumber><suffix>.png
<modelNumber>를 남성의 경우 0, 여성의 경우 1로 변경합니다.
ex) player_model_1_MainTex.png
아이템 인벤토리 아이콘(Item Inventory Icons)
이것은 게임 내 아이템을 나타 내기 위해 인벤토리에 표시되는 작은 이미지입니다. sactx-2048x2048-Uncompressed-IconAtlas-61238c20 #845라는 단일 그래픽에 모두 있습니다.
인벤토리 아이콘 시트를 교체하려면, 다음과 같은 해당 시트를 작성하십시오.
atlas_item_icons.png
크기에 맞게 조정되므로 모든 해상도를 사용할 수 있습니다.
레이어를 사용하여 단일 아이템 아이콘을 바꿀 수도 있습니다 (Layers below 참조).
오브젝트 및 갑옷 텍스처(Object and Armor Textures)
참고: 이제 장비 및 월드 오브젝트는 모두 오브젝트로 간주됩니다. 모드는 이전 버전과의 호환성을 위해 items_ 접두사를 계속 인식합니다.
플레이어 모델과 인벤토리 아이콘 외에, 이 모드가 영향을 미치는 다른 모든 것은 오브젝트로 간주됩니다.
예를 들어:
- 석탄 및 목재와 같은 자원
- 망치 및 경운기와 같은 도구
- 식물, 나무, 관목
- 빌딩 블록
- 적
갑옷은 플레이어가 그것을 입었을 때 오브젝트가 어떻게 보이는지에 대한 것입니다 (나머지 잡동사니를 땅에 던지는 것과 반대로).
이 모든 것에 대한 일반적인 파일 이름 구문은 다음과 같습니다.
<prefix>_<identifier><suffix>.png
접두사(Prefixes):
이제 오브젝트 및 갑옷에 대한 다음 접두사가 구현되었습니다.
- object - 특정 월드 오브젝트 타입에서 <suffix> 타입의 모든 텍스처를 변경하는 데 사용됩니다. <identifier>는 오브젝트 생성 이름이어야 합니다.
- objectrenderer (objectmesh도 작동하지만, 가치가 떨어짐) - 특정 오브젝트의 특정 렌더러에서 <suffix> 타입의 모든 텍스처를 변경하는 데 사용됩니다. <identifier> (Identifiers 참조)는 밑줄로 구분된 오브젝트 이름과 렌더러 이름이어야 합니다. <objectName>_<rendererName>
- objecttexture - 특정 오브젝트의 모든 렌더러에서 <suffix> 타입의 특정 명명된 텍스처를 변경하는 데 사용됩니다. <identifier> (Identifier 참조)는 밑줄로 구분된 오브젝트 이름과 텍스처 이름이어야 합니다. <objectName>_<textureName>
- objectmat - 특정 오브젝트에서 특별히 명명된 모든 재료의 텍스처를 변경하는 데 사용됩니다. <identifier> (Identifier 참조)는 밑줄로 구분된 오브젝트 이름과 재료 이름이어야 합니다. <objectName>_<materialName>
- objectrenderermat - 특정 오브젝트의 특별히 명명된 렌더러에서 특정 명명된 재료의 텍스처를 변경하는 데 사용됩니다. <identifier> (Identifier 참조)는 밑줄로 구분된 오브잭트 이름과 재료 이름이어야 합니다. <objectName>_<rendererName>_<materialName>
- texture - 해당 텍스처를 사용하는 모든 오브젝트 및 아이템에서 <suffix> 타입의 특정 텍스처의 모든 인스턴스를 변경하는 데 사용됩니다. <identifier> (Identifier 참조)는 텍스처 이름이어야 합니다 (내 보낸 파일 이름 일 필요는 없습니다!).
- renderer - 모든 오브젝트 및 아이템에 대한 특정 렌더러의 모든 인스턴스에서 <suffix> 타입의 텍스처를 변경하는 데 사용됩니다. <identifier> (Identifier 참조)는 렌더러 이름이어야 합니다.
- mat - 모든 오브젝트 및 아이템에 대한 특정 재료의 모든 인스턴스에서 <suffix> 타입의 텍스처를 변경하는 데 사용됩니다. <identifier> (Identifier 참조)는 재료 이름이어야 합니다.
- armor - 갑옷 아이템의 가슴이나 다리를 변경하는 데 사용됩니다. 갑옷의 나머지 부분은 이것보다는 object_ 의 영향을 받습니다.
접미사(Suffixes):
참고: 접미사가 개편되었습니다. _texture 및 _bump의 이전 접미사는 여전히 인식되지만 실제 속성 이름으로 바꿔야 합니다.
접미사는 "속성"이라고 하는 대체 할 텍스처를 모드에 알려줍니다.
장면 덤프는 오브젝트의 각 재료에 대한 속성 목록을 제공합니다.
ArmorIronChest 오브젝트에는 SkinnedMeshRenderers가 1개 있습니다
object ArmorIronChest has 1 SkinnedMeshRenderers:
SkinnedMeshRenderer name: IronArmor
smr IronArmor has 1 materials
IronArmorChest_mat (Instance):
properties:
_MainTex IronArmorChest_d
_BumpMap IronArmorChest_n
_EmissionMap
_MetallicGlossMap IronArmorChest_m
_StyleTex
armor ArmorIronChest has Material:
Armor name: IronArmorPlayer_chest
properties:
_MainTex
_ChestBumpMap IronArmorChestPlayer_n
_ChestMetal IronArmorChestPlayer_m
_ChestTex IronArmorChestPlayer_d
_LegsBumpMap
_LegsMetal
_LegsTex
_SkinBumpMap
이 오브젝트에는 스키닝 된 메시 렌더러와 갑옷 재료가 모두 있습니다. 그것들은 분리되어 있습니다.
오브젝트는 플레이어에게 붙어있는 모든 멋진 비트(bits)입니다.
갑옷은 플레이어의 다리와 가슴에 붙여지는 텍스처입니다.
각 속성은 텍스처 이름 (있는 경우)과 함께 표시됩니다. 오브젝트의 _MainTex 이름은 IronArmorChest_d입니다.
_MainTex는 메인 텍스처를 나타냅니다. 대체로 대체하고 싶은 것입니다. 그러나 갑옷의 경우, _MainTex를 교체해도 아무 효과가 없을 수 있습니다. 투명한 텍스처로 교체하는 것이 가장 좋은 것 같습니다. 실제 방어구를 변경하려면, _ChestTex 및(또는) _LegsTex를 사용하고 실제 방어구 영역만 덮고 있는지 확인해야 합니다 (예를 들어 내보낸 IronArmorChestPlayer_m.png 참조). 따라서 다음을 생성할 수 있습니다.
object_ArmorIronChest_MainTex.png
armor_ArmorIronChest_ChestTex.png
갑옷은 복잡하고 실험하기 가장 좋습니다!
식별자(Identifiers)
오브젝트의 식별자를 얻으려면 여기에 있는 생성 목록의 이름을 사용하십시오.
또한 위에서 언급 한 장면 덤프에도 있습니다.
물 및 지형 텍스처(Water and Terrain Textures)
물과 지형 텍스처는 오브젝트와 유사한 구문을 사용합니다.
<prefix>_<identifier><suffix>.png
물(Water)
물 텍스처는 영역 오브젝트 내부에 있으므로, 장면 덤프에서 다음을 볼 수 있습니다.
zone _GameMain has 2 MeshRenderers:
MeshRenderer name: WaterSurface
mr WaterSurface has 1 materials
water (Instance):
properties:
_FoamTex foam
_Normal nRHPu
_FoamHighTex foam_highres
_NormalFine normalmap2
_RandomFoamTex random_foam
MeshRenderer name: sub_water_opak_thingyu
mr sub_water_opak_thingyu has 1 materials
water_bottomplane (Instance):
properties:
여기서 접두사는 zone이므로 다음을 사용하십시오.
zone__GameMain_FoamTex.png (언더 바가 두 개입니다!)
지형(Terrain)
영역(zone) 아이템 바로 뒤에 다음이 표시됩니다.
terrain _GameMain, prefab _Zone (UnityEngine.GameObject)
properties:
_MainTex grass
_NoiseTex Noise
_ClearedMaskTex
_CliffNormal gouacherock_big_n
_CultivatedNormal cultivated_n
_DiffuseTex0 diffuse0
_DirtNormal dirt_normal_generated
_ForestNormal forest_n
_GrassNormal grass_normal_generated
_PavedNormal paved_n
_RockNormal gouacherock_n
_SnowNormal snow_normal
여기서 접두사는 terrain이므로 다음을 사용하십시오.
terrain__GameMain_DiffuseTex0.png
diffuse0 텍스처에는 서로 다른 지형 타입이 있는 16 개의 타일이 있는 것처럼 보입니다. 스크린 샷에서 사용 예를 볼 수 있습니다.
환경 텍스처(Environment Textures)
환경 텍스처는 비, 구름, 안개, 하늘에 있는 큰 나무와 같은 것입니다.
장면 덤프는 다음을 보여줍니다.
environment YggdrasilBranch has 1 MeshRenderers:
MeshRenderer name: branch
mr branch has 2 materials
yggdrasil_branch (Instance):
properties:
_MainTex yggbark_d
_BumpMap yggbark_n
_EmissiveTex yggdrasil_emissive
_MossTex ygg_moss
_EmissiveMaskTex yggdrasil_emissivmask
_RefractionNormal
yggdrasil_branch_leafs (Instance):
properties:
_MainTex ygg_leaf_d
_BumpMap ygg_leaf_n
_EmissiveTex
_MossTex
_EmissiveMaskTex
_RefractionNormal
따라서 위에서 언급했듯이:
environmentrenderermat_branch_yggdrasil_branch (Instance)_MainTex.png
YggdrasilBranch 환경 오브젝트의 branch 렌더러에 있는 yggdrasil_branch (인스턴스) 재료의 메인 텍스처를 대체합니다.
특별 위치(Special Locations)
위치 프리 팹(조립식 건물)은 나머지 게임 모델과 분리되어 있으므로 별도로 처리해야 합니다. 렌더러가 많기 때문에, 반복하는 데 많은 시간이 걸릴 수 있습니다. 이러한 이유로, 구성(config)에서 위치 교체를 비활성화할 수 있습니다. 또한 위치는 location 접두사를 사용해야 합니다 (texture_는 효과가 없음).
레이어(Layers)
레이어를 사용하면 기존 또는 수정된 텍스처 위에 부분 텍스처를 적용할 수 있습니다. 스프라이트를 제외한 모든 경우에는 동일한 방식으로 작동합니다.
텍스처 레이어(Texture Layers)
스프라이트 시트 이외의 항목에 레이어를 추가하려면, 위의 해당 섹션에서 해당 텍스처의 타입을 교체하는 것과 동일한 구문을 사용하고 끝에 _<YourLayerName>을 추가합니다. 따라서 RealEyes라는 모드의 플레이어 눈 텍스처는 다음과 같습니다.
player_model_0_MainTex_RealEyes.png
<YourLayerName>은 고유하고 밑줄을 포함하지 않는 한, 원하는 대로 설정할 수 있습니다.
스프리트 레이어(Sprite Layers)
아이템 아이콘 시트의 스프라이트 레이어는 다르게 작동하여, 스프라이트 시트의 패치를 완전히 덮어씁니다. 결과적으로 스프라이트 레이어 png는 교체하려는 패치의 크기 여야 합니다. 아이템 아이콘 레이어의 파일 형식은 다음과 같습니다.
atlas_item_icons_<startX>_<startY>_<sheetWidth>_<sheetHeight>.png
이는 업스케일 된 텍스처로 작업할 수 있기 때문에, 작업 중인 이론적 시트의 크기를 모드에 알려야 합니다. 모드는 기존 시트 (또는 다른 텍스처로 대체된 시트)와 비교하여 레이어 텍스처의 크기를 파악합니다. 예를 들어 나무 방패 텍스처를 대체하기 위해 다음과 같은 64x64 픽셀 png를 사용합니다.
atlas_item_icons_1224_1840_2048_2048.png
이것은 내 png가 2048x2048 픽셀의 큰 시트 (바닐라 시트 크기와 동일)이며 기존 시트를 왼쪽 상단 모서리에, 픽셀 1224x1840으로 시작하는 내 64x64 픽셀 png로 대체한다는 것을 알려줍니다.
예제(Examples)
장면 덤프에서 예를 들어 보겠습니다.
object VikingShip has 1 SkinnedMeshRenderers:
SkinnedMeshRenderer name: sail_full
smr sail_full has 1 materials
sail (Instance):
properties:
_MainTex sail_diffuse
_BumpMap sail_normal
_EmissiveTex
_MossTex
수행하려는 작업에 따라 사용할 접두사(prefix)와 식별자(identifier)를 선택할 수 있습니다:
1. 오브젝트 타입에 모든 텍스처 설정
object_VikingShip_MainTex.png
이것은 오브젝트에 있는 모든 재료의 메인 텍스처를 대체하므로, 오브젝트가 여러 텍스처를 사용하는 경우 제대로 작동하지 않을 수 있습니다. 선박에도 MeshRenderer가 많이 있기 때문에, 우리 예제에서는 잘 작동하지 않습니다. 범프 맵을 변경 하려면 다음을 사용할 수 있습니다:
object_VikingShip_BumpMap.png
2. 텍스처의 모든 인스턴스 설정
texture_sail_diffuse_MainTex.png
이름이 sail_diffuse 인 모든 텍스처를 대체하므로, 해당 텍스처를 사용하는 모든 오브젝트가 영향을 받습니다. 우리의 예에서는 다른 선박 타입의 돛도 해당 텍스처를 사용하는 경우 대체합니다.
3. 오브젝트 타입에 단일 메시에 대한 텍스처 설정
objectrenderer_VikingShip_sail_full_MainTex.png
이것은 모든 VikingShip 오브젝트에서 sail_full이라는 렌더러의 텍스처가 대체됩니다.
4. 오브젝트 타입에 이름으로 텍스처 설정
objecttexture_VikingShip_sail_diffuse_MainTex.png
이것은 모든 VikingShip 오브젝트에서 sail_diffuse라는 이름의 텍스처를 대체합니다.
5. 부분 텍스처 레이어 설정
위의 예제에서, 끝에 레이어 이름을 추가하면 부분 레이어로 추가할 수 있습니다. 따라서 바이킹 선박의 돛에 데칼을 추가하려면 다음과 같이 할 수 있습니다:
objecttexture_VikingShip_sail_diffuse_MainTex_CoolSkullAndCrossBones.png
환경 설정(Config)
이 모드로 게임을 한 번 실행하면 환경 설정 파일이 생성됩니다.
BepInEx/config/aedenthorn.CustomTextures.cfg
텍스트 편집기를 사용하여 이 파일을 편집하거나, Config Manager를 사용하여 게임 내에서 이 파일을 편집하여 환경 설정값을 조정할 수 있습니다.
장면 덤프(Scene Dump)
위의 이름을 만드는데 필요한 모든 정보를 얻으려면, 환경 설정 옵션 DumpSceneTextures를 true로 설정한 다음, 게임을 실행하고 월드에 한번 로드합니다. 그러면 BepInEx/plugins/CustomTextures/scene_dump.txt 파일이 생성되어야 합니다. 텍스처를 덤프 한 후, 다시 false로 설정할 수 있습니다. 그렇지 않으면, 게임을 실행할 때마다 파일이 다시 생성됩니다.
[5] 설치 순서
방법 1 - Vortex
1. 해당 모드를 볼텍스를 사용하여 설치합니다.
2. 게임을 즐깁니다.
방법 2 - BepInEx
1. BepInEx를 설치합니다.
2. 해당 모드를 다운로드하고 아래 경로에 압축 해제합니다.
[발하임 설치 경로]\BepInEx\plugins\
3. 게임을 즐깁니다.