1. ENB 개념 이해하기


ENB BORIS VORONTSOV 라는 러시아 개발자가 만든 게임 그래픽 수정툴 이며 TES Skyrim, TES Oblivian, Fallout , GTA 등 여러 게임을 지원하는 프로그램을 말함.


ENB는 게임이 그래픽 렌더 함수를 호출할 때, 이를 수정하고 추가적인 효과들을 더하는 방식으로 작동한다.


따라서 ENB라고 단순히 언급하는 것은 엄밀히 옳지 않은 말로, "스카이림 SE ENB" 등 으로 어떤 게임의 ENB인지 적어야 맞는데 뭐 알다시피 통상적으로 대충 ENB라고 표현.



위 아카콘에 그려진 캐릭터는 ENB 개발자 BORIS VORONTSOV 자캐 입니다.


ENB는 enbdev.com 에서 베포중. News 항목을 클릭하여 업데이트 내역을 볼 수 있으며,  레퍼런스 ENB를 다운로드 받을 수 있다.


BORIS VORONTSOVenbdev.com 에서 직접 베포하는 레퍼런스 ENB는 dll 파일과 여러 fx 파일 ,ini 파일로 이루어져 있다.

(그림1, 그림2 참조) 


 그림1) Skyrim SE 용 레퍼런스 ENB 를 압축 해제 후 보이는 폴더



그림2) Skyrim SE 용 레퍼런스 ENB 압축 해제후 본 파일 들 dll 파일 2개가 바이너리



ENB의 메인 코드들은 dll 파일 안에 들어있으며, dll 파일 2개는 게임이 설치된 폴더 내에 위치해야 작동한다.

이 dll 파일 2개를 ENB 바이너리 라고 한다. (그림 3 참조)


그림3) 게임 설치 폴더에 위치한 ENB 바이너리.


그러나 ENB 바이너리만 놓아서는 ENB의 세부 설정을 이용할 수 없으며. 기타 .fx 확장자와 ini 파일도 중요하다.


.fx 확장자는 그래픽 코드가 들어으며,  다이렉트x 코드가 위치한다.

레퍼런스 ENB에는 BORIS VORONTSOV 이 간단히 만들어 놓은 레퍼런스 코드가 들어간다. (그림4 참조)


그림4) DOF 레퍼런스 코드


이 .fx 파일 코드의 변수를 UI 형식으로 지정 가능한데 UI 형식으로 지정한 변수들을 따로 빼 놓아서 파일화 시킨 것이 ini 파일입니다, 대부분 UI에 들어간다. (그림 5 참조)

따라서 ini 파일에는 변수를 조정함으로써 그래픽 코드의 작동 방식을 바꿀 수 있다.


그림5) 레퍼런스 DOF 코드 ini, 여기서 몇몇 변수 값을 바꿀 수 있다.


2. ENB 프리셋 개념 이해하기


BORIS VORONTSOV 가 ENB를 만들면서 그린 그림은, 자신은 ENB라는 기술적인 뼈대만 제공하고 , 세부적인 표현들은 다른 사람들이 채워서, 프리셋들이 만들어지길 바랬음.


사람들은 레퍼런스 ENB를 커스텀하거나 아니면 새로운 그래픽 코드를 추가하하여 새로운 쉐이더를 만든다던가 등, 여러 가지 수정으로 자신들만의 프리셋을 만들 수 있다.  이런 다른 사람의 커스텀이 들어간 ENB 를 ENB 프리셋이라 한다.



그림 6)많은 수의 ENB 프리셋들이 넥서스에 있다.


픽호, 코난 ENB도 ENB 프리셋임. 

좀 많이 마개조된 코드를 사용함.




3. ENB 가 제공하는 핵심 기능


ENB 는 여러 가지 기능들을 제공하며, 스카이림 SE ENB 를 기준으로 설명, 여기선 간략하게 설명하고, 추후 세부적으로 설명해봄.


스카이림 SE ENB 기준, 바이너리가 제공하는 기능에 대해 간략히 소개하면.


시스템 적 기능 

1. FPS 제한 기능

2. 수직 동기화 기능

3. 간단한 안티에일리어싱

4. 포맷 변경이 가능한 스크린샷 기능

5. 게임 DOF 비활성화 기능 ( 게임 자체 DOF를 Ini에서 꺼버리게 되면 물 속이 투명해지는 현상으로 ini에서 DOF를 끄지 않아도 DOF가 비활성화됨)

6. 단축키 기능 - 부가 기능과 연결된 여러 단축키를 제공함 

7. 게임 내부 시간 수정 가능  --> 게임의 실제 시간에 간섭하는게 아니고, ENB 쉐이더 기준 시간대를 변경한다는 소리.


게임 광원 기능

1. 게임의 일부 광원 세기, 색깔 조절 기능 (직광 세기, 직광 컬러필터 , 주변광 채도, 횃불의 세기, 불의 강도 등 )

2. 임의 일부 오브젝트 강도 조절 기능 (구름의 강도, 안개의 강도, 안개 컬러필터, 별의 강도, 오로라의 강도)

3. 위 기능을 게임 내부 날씨와 연동하여 인덱싱 가능하게한 날씨 기능 제공 


그러나 게임 광원은 LE ENB 수준 만큼 수정할 수는 없음.


게임에 없는 추가 쉐이더 기능

1. 게임 자체 렌더 프로세싱 비활성화 후 enbeffect에 적힌 프로세싱으로 교체.

2. 스카이림 그래픽에 존재하지 않는 Adaptation 기술 추가, 코드 교체 가능.

3. 스카이림 자체 빛번짐 효과 (Bloom) 비활성화 후 enbbloom.fx에 적힌 프로세싱으로 교체.

4.  후처리 필터 enbeffectpostpass.fx 에 적힌 프로세싱 추가

5. 전처리 필터 enbeffectprepass.fx  에 적힌 프로세싱 추가 

6. 렌즈 효과 enblens.fx에 적힌 프로세싱 추가

7. DOF enbdepthoffield.fx 에 적힌 프로세싱 추가.

8. 태양 글레어 효과 enbeffectsunsprite.fx에 적힌 프로세싱 추가

9.  물 아래, 렌즈 효과 enbunderwater.fx에 적힌 프로세싱 추가.

10. 자체 SSAO 추가 

12. 새부 그림자 렌더링 추가

13. 물표면 (Wet Surface) 렌더링 추가

14. 빛 반사 표현 Imagebaselighting 렌더링 추가

15. 게임 자체 유사 갓레이 Sunray 추가

16. 하늘을 채우는 유사 갓레이 VoulumatricRay 추가

17. NormalmappingShadow 추가 --> 추가된지 얼마 안됬는데 이해가 안가는 기술.

18. 일부 오브젝트와 캐릭터의 피부 생기를 더해주는 그래픽 효과인 Subfacescattering 추가

19. 게임 자체 파티클 효과를 후킹하여 광원 효과를 더해주는 Complexparticlelighting

20. 화염 효과에 고품질 렌더링 처리를 더해주는 Complexfirelighting --> 개적화라 주로 꺼놓음.


등 추가적인 쉐이더를 제공하나, 레퍼런스 코드는 한계가 있다,

 예를 들어 렌즈 효과같은 경우 렌즈 이펙트 이미지를 자기 자캐로 박아버려서, 레퍼런스 ENB를 설치 후 렌즈를 키면  요런게 나온다..

스카이림 초기 때 네이버 카페 같은데 가면 일주일에 한 번씩 저거 물어보는 질문글이 나왔던 거 같음.


어쩃든 ENB 레퍼런스 코드는 거의 사용되지 않는다고 보면 되고, 대부분 Marty McFly , Kyokushinoyama ,Kingeric1992 , Lonelykistune 등 그래픽 코드를 잘 다루는 외국 사람들이 (Reshade 개발자들도 포함) 수년간 서로 소통하고 공유하고 연구하여 구축된 코드들을 사용함


게임 자체 그래픽 렌더 강도, 색깔 수정

1. 스카이림 자체 갓레이 강도, 색깔 수정 가능 --> 조절이 힘들긴 해도 잘 건들면 엄청 이쁘다.

2. 스카이림 자체 SSAO 강도 수정 가능 --> ENB SSAO+IL이 더 좋아서 끄라고 함

3. 스카이림 자체 선글레어 효과 강도 수정 가능 --> 구려서 거의 죽여놓음 이건 ini로 꺼야함, 강도 죽여놓으면 나름 이쁘기도?

4. 스카이림 자체 렌즈 플레어 강도 수정 가능 --> 매우 매우 구려서 그냥 강도 0으로 해놓고 끄라함

5. 스카이림 자체 반사 효과, SSR (Screen Space Reflection) 후킹 후 품질 개선



그림7) ENB 가이드에서 SSAO나 Lens Flare 같은거 괜히 끄라고 하는게 아니다.


대강 한번 읽어보자.


4. ENB 프리셋 만들기?, 가이드 글을 쓰는 이유.


위에 글을 좀 읽었다면, 감이 올텐데, 


ENB를 이더 수준에서 다시 직접 만드는 것은 현실적으로 다이렉트x 코드를 매우 매우 매우 잘 만지는 사람이 아니면 불가능 하다고 생각하고, 실제로 코드를 잘 만든다 해도, 아에 팀을 짜서 꾸려야 할 만큼 매우 난이도가 높은 작업이라고 생각함.


그래서 쉐이더는 다른 사람들이 만든 것을 그대로 가져다 쓰는 것을 추천하고,. 실제로 대부분의 ENB들이 이렇게 개발되어 왔고 지금도 개발 중임. (쉐이더가 다른 것처럼 보이는 쉐이더도 실제로 뜯어보면 위에 Mcfly 같은 괴수들이 만든 코드 커스텀해서 쓰는 정도.)


그래서, 쉐이더를 어떻게 만들까 걱정하는건 별로 의마가 없고, 그 쉐이더가 제공하는 기능을 이해하고, ENB 자체에서 제공하는 기능을 이해하고, 다룰 수 있는게 더 중요.


그런데 이는 ENB를 수정한다는 것하고 사실상 똑같음, 그래서 짤 찍을 때 ENB 건들고, 바꾸고 그런 것도 ENB 제작하고 한 끝 차이임


컨셉이 정해진 사람들, ENB를 조절, 수정하고 싶지만, 어떻게 해야되는지 모르는 사람들을 위해서, 세부 가이드를 앞으로 더 쓸 계획임.




가이드글을 첫 글을 썼는데.

상당히 세부적으로 쓸 계획이라 어떻게 될지는 모르겠네.

그 일단 다음 글은 ENB HELPER하고 날씨모드 와 상호작용 방식과 날씨 시스템 구축법에 대해 글을 쓸거고 

본격적인 트윅은 3편에서나 쓸 듯? 


심심할 때 마다 끼적거릴 거라 시간은 걸릴 거 같음.