[안내] 이 글은 모드/스킨을 직접 만드는 방법을 숙지하고 계신분들을 위한 글이므로 관련 지식이 없는분들이 사용할 수 있는 종류의 자료가 아닙니다.

잊혀질만하면 나타나서 무언가 올리는 추가아이템입니다.

옛날옛적(?), 광원 이펙트를 소개해드린 바가 있습니다.

당시 연구가 귀찮아서 PointLightDefinitionComponent만 소개시켜드렸는데 그 뒤로 다른분들께서 SpotLightDefinitionComponent도 다뤄주셨더라구요.

이것들을 캐릭터 본체에 달아놓으면 주변이 밝아져서 어두운 맵에서 몹을 못 보는 불상사를 피할 수 있는 장점이 있습니다.

하지만 단점도 분명히 존재했는데요, 한 장소에 한 명만 있으면 적당히 밝지만 여러명이 몰리면 너무 밝고, 렉도 걸리는 느낌이 생깁니다.

파티플레이에서만 광원이 여러개가 움직이면서 서로 간섭하기때문에 벌어지는 참사라고 볼 수 있습니다.

이 꼴을 안 보려면 어떻게 해야할까 매번 시즌 초에 맨땅파티에서 고민하다가 집어치우곤 했는데, 이번에 우연히 기회가 되어서 해당 부분을 기저부터 해결할 방법은 없을까 생각해보게 되었습니다.

결론부터 말하면 방법은 있습니다. 캐릭터 본체에 광원을 다는 것보단 손이 좀 더 많이 가지만, 없던 광원이 추가되는 것이 아니어서 렉이 증가하거나 플레이어 수에 영향을 받지 않습니다

여기서 등판하는것이 바로 설명되지 않았던 마지막 광원, DirectionalLightDefinitionComponent 과 이것들을 품고 있는 VisualDataDefinition입니다.

일단 경로는 hd/env/vis 아래 json 파일들입니다.
여기의 모든 파일이 해당되지만, 현실적인 이유에서 몇 가지 파일은 건너뛰시면 됩니다.
- 파일명에 test 가 들어가는 모든 유형: 사용 안 됨
- denofevil_vis.json: 악의 소굴 퀘스트 관련
- 파일명이 ui_ 로 시작하는 모든 유형: 인게임이 아니라 캐릭 선택창 등에서 발현됩니다.
- mastter_vis.json: 수정해도 상관 없으나, 이름과 달리 아무곳에서도 효과를 발휘하지 않는 것 같습니다.

수정해야 하는 값도 단순합니다. 여기서 예시로 들고 있는 값은 아래 스크린샷 예시에 맞춘 부분 참고바랍니다.

1. name이 vis_data인 Entity의 components 중에 type이 VisualDataComponent 인 것들이 있습니다. 이 component에서 iblIntensity 값이 일정 값 미만인 것들을 원하는 값으로 설정해주세요. 광량 처리가 늘어납니다. (아래 스크린샷에서는 1.5를 채택하고 있는데 그로 인해 굉장히 밝습니다)
2. 1번과 동일한 component에서 fogPlayerRadius 값을 150.0 이상 180.0 이하 중 원하는 값으로 설정해주세요. 플레이어 주변의 fog of war가 생기지 않는 범위를 넓혀줍니다. (아래 스크린샷은 180.0을 채택하고 있습니다)
3. name이 global_fill_light인 Entity의 components 중에 type이 DirectionalLightDefinitionComponent 인 것이 있습니다. 이 component에서 power를 15.0 이상 30.0 이하 정도로 설정해주세요. 해당 VisualData가 적용되는 맵의 기본 광원으로 작동합니다. (아래 스크린샷은 30.0을 채택하고 있습니다)

다음은 실제 적용 스크린샷 몇 점입니다. (캐릭터 본체에 광원은 붙이지 않았습니다)




예시파일 관련
파일 수정할것이 너무너무 많아서 고통받는분들이 많으신것 같아서 예시를 두 가지 세팅 말고도 여러가지 버전으로 첨부합니다. 압축을 한 묶음으로 하면 용량이 크다고 인벤이 냅다 글 올리다가 뻗어버려서 파일을 둘로 쪼개서 압축하고, 7z 파일은 또 못 올린다고 징징거려서 이중압축 합니다. vispack1.7z.zip, vispack2.7z.zip 에서 원하는 값을 찾아서 사용해주세요. iblIntensity 기준으로 압축파일을 분리했습니다.

가령 경로가 ibl_1.0 아래 fog_150.0 아래 fill_15.0 아래의 경로의 파일들을 사용하면 iblIntensity를 일괄로 1.0, fogPlayerRadius 값을 일괄로 150.0, global_fill_light의 power를 15.0 를 최소값으로 일괄수정한 버전이 있는 형태입니다. 원하는 밝기를 골라서 쓰시면 될 것 같습니다. 이 프리셋으로 맘에 안 드시는 분도 있으실 수 있을 것 같지만, 이것 외의 추가적인 버전을 만들어서 올리기엔 첨부파일 용량이 부족한 등의 여러가지 애로사항이 있으므로 안타깝지만 자력으로 해결해주시기 바랍니다.

디아블로 등장 관련
혼돈의 성역에서 디아블로가 등장할때, 사용되던 VisualData가 act4_diab_{dawn1,dawn2_day,dusk1,dusk2,night,dawn1,dawn2}.json 에서 diabloappears_vis.json 으로 변경되면서 빛의 방향등이 바뀌는 실시간 애니메이션이 발생합니다. 문제점은 바뀌면서 플레이어의 기본광량을 3000 가까이 올려버린다는 부분입니다. 상당한 눈뽕과 렉이 발생하는 것이 확인되어서 수정법 또한 공유합니다.

해당 문제는 diabloappears_vis.json에서 playerUnitLightPower 값을 5125.0 에서 2125.0 으로 낮추면 거의 해결됩니다. (첨부파일로 들어간 버전들은 모두 해당 값이 2125.0을 넘지 못하게 자동수정 해둔 상태입니다)

알려진 문제
조금 거리가 떨어진 곳의 몹이 코난 범인마냥 시커멓게 보이는 문제가 있습니다. 수정법이 있을거같긴 한데 굳이 연구는 안 하고 있습니다. (귀찮음...)


타 스킨에 사용하는 경우: 제 작업물은 CC BY-NC 4.0 DEED를 지키면 자유롭게 사용하실 수 있습니다. 관련 설명은  https://creativecommons.org/licenses/by-nc/4.0/deed.ko 를 참조해주세요.