SA가 가볍다고는 할 수 없다. 하지만 엄청 무겁다고 할 수는 없는데, 관련해서 조금 설명 해주려고 함

1.5에선 렌더링 코드가 좀 바뀌어서 틀릴수는 있는데 그래도 적어봄.


SA 성능은 3줄요약 있으니 귀찮으면 그거 읽으셈


https://gall.dcinside.com/m/rimworld/511723

해당 글을 보면 틱보단 단순 프레임 먹는 모드 관련 설명이 있는데


SA도 여기에 가까움

물리 기능을 제외하면 배속에 상관없이 프레임 단위로 돌아가도록 처리되어있기 때문에,

만약 3프레임 까일게 배속 돌린다고 40 프레임 까먹는게 아니라, 그대로 3프레임 까먹는다는 소리임


심지어 안보고 있으면 (화면 밖에 있으면) 부하가 발생 안함




간혈적으로 프레임이 확 떨어지는 구간이 있는데, 주로 겜 처음 켰을 때 그럼

SA는 캐릭터의 사이즈마다 텍스쳐를 선택해서 가져오고, 사이즈가 1대1 대응이 아니라, 어디까지 텍스쳐가 지원하는지 확인하고
미지원인 부분은 건너뛰면서 지원하기 때문에(안그러면 중간 사이즈에서 옷 뚫고 튀어나오는 참사 일어남) 이걸 확인하는 작업이 돌아감

이 과정이 처음은 해당 의상 검색을 다 돌리지만, 검색결과는 저장해 두기 때문에

그래서 겜 처음 켰을 땐 검색하고 정리하느라 렉걸렸다가 점차 줄어들게 되어있음.



림월드 "렌더링" 비용 자체는 별로 안무거움.

보통 뭘 렌더링 어떻게 렌더링 할지 가져올 때 렉걸리는데, SA는 의상이 바뀌거나 사이즈가 바뀌거나 했을 때 그릴 데이터를 초기화 하기 때문에 그럴 때마다 부하가 발생함. 물론 이건 위 문단으로, 나중엔 초기화 해도 좀 더 빠르게 돌아감


첫 시작 때나 첫 상단 도착 때, 렉걸리는 이유가 그거임. 초기화 할 정보가 갑자기 몰려서 



만약, 의상정보나 렌더링 초기화를 상시적으로 걸어버리는 모드가 있다면,

SA가 다시 연산해야 하는 경우가 늘어나서 프레임이 좀 더 떨어질 수 있음.


다만 SA도 대충 만든 모드는 아니라서, 렌더링 정보 초기화를 걸어도 의상 정보가 안바꼈으면 저장한 데이터를 다시 사용하는 방어수단이 있기 때문에, 그렇게 프레임이 떨어지진 않음.



다만 위 내용들은 컴퓨터 잘 아는 사람은 느끼고 있겠지만

"정보 저장"이 많음. 이건 다 램을 쳐먹는다는 소리임.


그리고 SAR은 텍스쳐가 엄청 많고 고해상도로 있기 때문에 이것도 약점으로 작동함.



원래 SA 원본은 텍스쳐 해상도도 그렇게 높지 않고, 많이 담고 있진 않아서 메모리 사용량이 압도적으로 많지는 않았음.

하지만 SAR으로, 커뮤니티 프로젝트로 변경되면서 의상텍스쳐 수 자체도 늘어나고, 해상도도 늘어나게 되었음.


그 결과 메모리 먹는게 엄청나게 되었음...







SA 성능 3줄 요약


  1. SA는 물리 옵션을 키지 않는 이상, 틱이 아니라 프레임 단위로 작동해서 배속 영향이 거의 없다.
  2. SA에서 가끔 렉걸리는건 의상-사이즈 검색 때문이고, 검색 결과는 저장되기 때문에 점차 렉이 줄어든다
  3. SAR에선 안그래도 텍스쳐 메모리 먹는게 많아서, SAR는 cpu 보단 메모리(램) 부하가 큰 모드다.

아마 프레임드랍이 심한 분들은 보통 다른 모드나 하드웨어 스펙상으로 램이 부족해서 그랬을 가능성이 커보입니다.

간혈적 렉걸리는것도 프레임드랍이긴 해서 이건 뭐 할말 없음 ㅠㅠ



SA2 최적화 관련해서

SA2는 SA를 다시 만드는 거라서 코드 전체가 다 바뀌고 있음.

위 내용을 인지하고 개발하고 있기 때문에 변화된 내용들이 있는데


일단 검색 속도가 훨씬 빨라졌음.

내부적으로 검색 방법을 완전히 바꿨기 때문에, 검색 속도가 좀 더 빨라지고, 검색 결과를 다시 읽어오는 속도도 엄청 빨라짐 


string 기반으로 검색 및 검색 결과를 가져오던 대부분을 기타 int, enum 검색으로 바꿨기 때문에

이론 상으로는 검색 속도만 따지면 3~5배 이상 빨라졌을 거임. 

(이론상인 이유는 애초에 모드가 미완성이라 비교 못함. 그리고 애초에 1.5가 1.4보다 느림)


그리고 텍스쳐 메모리도 좀 더 엄격하고 유연하게 관리하기 위해 렌더링 쪽도 수정되고 규칙도 정했음.

(다만 당장은 개인 프로젝트인데 이것도 커뮤니티 프로젝트로 변경되면 어떻게 될지 모름)


지금은 몸통만 512, 작은 바디파츠는 128~256, 의상은 256으로 기준을 정했고.

의상도 의상별로 죄다 텍스쳐를 만드는게 아니라, 조합식으로 바뀌어서, 돌려쓸 수 있도록 했음.

그리고 모드나 dlc로 생긴 추가 의상 정보도 해당 모드가 있을 때 로드하도록 작업하고 있음 (불필요한 텍스쳐 로드 제외)


그냥 메모리 관리 좀 더 빡세게 할거라는 이야기임.

이건 이론 상으로는 SA 모드 자체에서 발생하는 메모리를 SAR 대비 50%~95% 줄일 수 있음.





그리고 SA2에선 의상 렌더링이 파츠로 나뉘면서 발생한 장점이 있는데



이런게 가능해졌고


배 처리도 가능해 졌음. 이건 텍스쳐 돌려 쓴거 그대로 적용한 예시고


의상마다 별도 텍스쳐 지정도 가능해서 이렇게 가능




그리고 SA2에서 실험하고 있는게 있는데


기본 몸통마저 파츠를 세분화 해서

좀 더 유연한 처리가 가능하게 하는 거임.


다만 이건 자연스러워 보이게 하려면 너무 어렵고 해서 순위는 높지 않음.

최적화 적으로도 관리를 어떻게 해야 할지 감 잡기 어렵기도 하고


난 이거보다 팔다리 먼저 만들고 싶음



글을 마치며


SA2는 코드를 아에 엎었고, 텍스쳐도 엎었음.

그리고 1.5에서 렌더링이 바뀌어서 프로젝트도 내부적으로 3번이나 엎음.

1.4때 한번, 1.5 공개 때 한번, DLC 나오고 한번 더...


그래서 오래 걸리고 있음


그리고 림잡 없이도 돌아갈 수 있도록 만들어보고 있음

직접 양지로 모드를 올릴 일은 없겠지만, sfw 세팅도 개발 중임. (걍 꼭지랑 거시기 끄는 느낌 정도)


야하게 쓰고 싶은게 아니라, 단순히 여성 남성 분리랑, 추가 해보고 싶은 팔다리까지 생각하면

성인 모드로 쓰고 싶진 않은 니즈가 충분히 발생할 수 있겠다고 생각해서 그럼.



5~6월에 베타? 공개를 목표로 두고 작업하고 있고, SA에 있던 기능들이 꽤 빠져 있을 거임. 대신 신기능도 있고


물론 현생도 살아야 하기 때문에 어떻게 될지는 모르는 일이지만