perpet

wave function collapse test

 

맵생성 뿐 아니라 , 모델 오브잭트 자동 생성을 하고 싶다.

 

추가적으로 딥러닝을 응용해서 시도 하고 싶다.

 

 

 

 

github.com/perpet99/DeBroglie

 

perpet99/DeBroglie

DeBroglie is a C# library implementing the Wave Function Collapse algorithm with support for additional non-local constraints, and other useful features. - perpet99/DeBroglie

github.com

 

github.com/perpet99/WaveFunctionCollapse

 

perpet99/WaveFunctionCollapse

Bitmap & tilemap generation from a single example with the help of ideas from quantum mechanics - perpet99/WaveFunctionCollapse

github.com

 

언리얼 길찾기 A* 모듈 테스트

 

https://github.com/perpet99/UnrealAStar

 

 

테스트 컴퓨터 기준 기본값으로 데디서버에 1000 - 2000 npc 이상뛰우면 프레임이 떨어지기 시작합니다.

게임로직은 원쓰레드로 돌기때문에 한계를 가집니다.

 

추가적으로 피직스관련 옵션 애니메이션 시뮬레이트 기능등 여러가지 기능을 끄면 3-4 배 이상 퍼포먼스를 향상시킬수있습니다.

 

몇일전 다른프로젝트 서버 파트에서 서로다른 디비끼리 트랜잭션을 걸면 부하가 심하다고 하여 게임서버가 이것을 직접 구현하기를 원한다는 요청이 들어왔다.
나도 최근까지 이 이슈를 직접 접하지 않았기 때문에 고민하지 않다가 언젠가는 나도 이문제를 해결해야할 솔루션을 찾아야해서 고민을 해봤다.

예를 들어 문제를 풀어보겠다.
유저끼리 아이템거래를 하려고 하고 a 유저가 b 유저에게 아이템을 주라는 명령어를 내렸다고 치자
이때 a 디비 테이블에  item 이    b 디비 테이블에 이동이 되야한다고 하고
 a디비와 b디비 는 서로 다른 회사라 디비안에서 스토어드 프로시저로 트랜잭션을 걸어 이동을 못시키고 프로그램으로
아이템을 옮겨야한다고 하자 억지스러워보이지만 하여간 중요한간 트랜잭션을 게임서버가 해결해줘야하는 이슈가 생긴다는 과정을 하는것이다.
이동중 서버가 다운이 되거나 오류가 있으면 롤백이 되거나 재부팅시 완료가 제대로 이뤄져야한다고 하자.

내가 생각한 방법은
1. a디비테이블에 아이템을 같은 디비에 sendTemp 테이블을 만들어 그곳에 이동시킨다.(트랜잭션이동)
2. b디비테이블에 receiveTemp테이블을 만들어서 아이템이 어느테이블에 들어갈지에대한 정보를 넣는다.
3. sendTemp 테이블에 이동할 그아이템을 지운다
4. b디비테이블에 receiveTemp 테이블을 해당유저테이블에 이동시킨다.(트랜잭션이동)

이과정을 거치면 중간에 다운이 되여도 다시 복구나 재실행이 가능하다고 본다.
게임서버가 다운이 되고 재실행되면 밑에 가,나 작업을 수행한다.

가.  a디비테이블에  sendTemp 에 이동할 아이템이 있는지 보고 있으면 위에 2번과정을 진행한다. receiveTemp에 이미 이동할 아이템정보가 있다해도 덮어버린후
      진행한다. (이경우는 위에서 1,2번이 작동한후 서버가 다운됬을때 끝나지 않은 작업을 마무리해줌)
나. b디비테이블에 receiveTemp 테이블에 이동해올 아이템정보가 있는지 본다. 있으면 위 4번과정을 진행한다. ( 이경우는 서버가 위에서 3번 과정을 거친후 다운되 였을때 작업을 마무리해줌)