2024/02 4

AI 스케줄링

AI Scheduling 게임이 균등한 프레임을 뽑기 위해서는 다양한 작업들이 제한된 시간 내에 수행되어야 한다. AI역시 마찬가지인데, 이를 제한된 시간 내에 처리하기 위해서는 다음의 3가지 요소가 필요하다. AI 작업들에 적절한 시간을 분배하는 것 AI 작업을 여러 프레임에 걸쳐서 수행할 수 있는 알고리즘 AI 작업간에 우선순위 Frequency 작업을 스케줄링하는 가장 간단한 방법 중 하나는 빈도(frequency)를 이용하는 것이다. 스케줄러는 매 프레임마다 어떤 작업을 수행할 것인지를 결정한다. 이때 작업들은 각자 frequency를 가지고 있으며 스케줄러는 이 값을 이용하여 작업을 수행한다. 가령 어떤 작업의 frequency가 5프레임이라면, 스케줄러는 해당 작업을 5프레임마다 한 번 수행한..

Game AI 2024.02.25

의사 난수

의사 난수 프로그래밍에서 난수란 세 가지 카테고리로 나눌 수 있다. (거의) 진짜 난수 : 특별한 하드웨어로 만드는 난수들. 각종 물리 실험이나 장비등에 쓰임 암호학 난수(해시값 등) : 사실 난수는 아니지만 예측불가능하고 충분히 잘 분포됨. 보통의 의사난수 : Seed가 필요하며, 생성되는 난수들이 결정적(deterministic)임. 생성되는 난수들을 이용하여 역으로 Seed를 구할 수 있음 의사 난수 생성기는 Seed값에 따라 생성되는 난수들이 결정적이기 때문에, 이를 잘 활용하면 유용하다. 때로는 게임 전체에서 단 하나의 난수 생성기를 사용하기 보다는 분야별로 여러 개의 난수 생성기를 사용하는 것이 좋을 수 있다. 가령 절차적인 맵을 생성하는 게임에서 단 하나의 난수 생성기만 사용한다면 플레이어가..

Game AI 2024.02.18

엔진 지원 시스템

시스템 클래스 생성 게임에서 사용되는 각종 매니저와 같은 싱글톤 혹은 정적 클래스들은 어떻게 생성하고 파괴해야 할까? 이런 클래스들을 생성/파괴할 때는 클래스들끼리의 의존성을 고려해야 한다. 유일한 클래스를 생성하는 메서드를 정의한 다음 의존성에 맞게 호출. //class RenderManager //... static RenderManager& get() { static RenderManager sSingleton; return sSingleton; } RenderManager() { VideoManager::get(); TextureManager::get(); //... } //... 그러나 위와 같은 방법은 아래와 같은 단점이 있다. 파괴 순서를 제어할 수 없어 파괴 과정에서 의존성이 훼손될 수 있..

게임엔진/일반 2024.02.11

인공 신경망

기초 인공 신경망의 핵심은 한 네트워크에 있는 인공 뉴런들이 다른 인공 뉴런의 부분 집합과 상호작용 하는 것이다. mulit layer perceptron(MLP)은 인공 신경망 아키텍쳐 중 하나인데, perceptron은 인공 신경망에서 사용되는 인공 뉴런을 뜻한다. MLP는 이전 레이어의 모든 노드로부터 인풋을 받아 다음 레이어에 있는 모든 노드에 아웃풋을 전달한다. 이런 네트워크를 feedfoward 네트워크라 부른다. 프로그래머로부터 입력을 받는 레이어를 input layer로, 그리고 네트워크를 통해 쓸만한 정보를 출력하는 레이어를 output layer라 부른다. feedfoward 네트워크 내부의 레이어들끼리 루프가 있을 수 있는데 이런 경우 recurrent network라 부르며, 매우 ..

Game AI 2024.02.04