공간을 매개로 신호를 송수신하는 시스템 패키지입니다. 객체 간 직접 참조 없이, 월드 공간 자체를 통신 채널로 활용합니다.
기존 Message System 또는 Tactiles System에서 이벤트 처리로 제안된 Mail Box 방식은 신호를 보내는 시점에 수신 객체가 살아있어야 하고, 그 객체를 통해 신호가 직·간접적으로 처리됩니다. 통상적인 상황에서는 이 방식이 안전하지만, 수신자가 누구인지 특정하기 어렵거나 신호를 보내는 쪽과 받는 쪽이 서로를 알지 못하는 추상적인 상황에는 대응하기 어렵습니다. Pheromone System은 이런 경우를 위해 공간에 힌트를 남기는 방식으로 제안되었습니다.
Pheromone System의 신호 모델은 마인크래프트의 레드스톤 회로와 유사합니다.
마인크래프트의 레드스톤 회로에서 레버와 피스톤은 서로를 직접 참조하지 않습니다. 레버가 당겨지면 블록이 놓인 공간을 따라 신호가 전달되고, 그 경로 위에 있는 장치가 반응합니다. 레버는 누가 받을지 모르고, 피스톤은 누가 보냈는지 모릅니다. 공간이 연결의 매개입니다.
Pheromone System도 동일합니다. 송신자는 월드 공간의 특정 위치에 신호를 남기고, 그 공간을 감지하는 시스템이 반응합니다. 누가 보냈는지, 누가 받을지 양쪽 모두 알 필요가 없습니다. 신호는 객체가 아닌 공간에 귀속됩니다.
공간에 남겨진 신호에는 TTL이 지정됩니다. TTL은 신호가 공간에 얼마나 오래 잔류할지를 결정합니다. TTL이 소진되면 신호는 자동으로 소멸하고, 이후 어떤 수신자도 감지할 수 없습니다.
공간에 분산된 신호를 효율적으로 조회하기 위해 ChunkedVolumeOctree를 사용합니다.
월드 공간을 일정 크기의 청크(Chunk)로 분할하고, 각 청크 내부는 옥트리(Octree) 구조로 세분화합니다. 이 두 단계 구조를 통해 광활한 월드에서도 특정 위치의 신호를 빠르게 조회할 수 있습니다.
신호가 없는 청크는 데이터 구조를 유지하지 않아 유휴 공간에 대한 메모리 낭비를 최소화합니다. 신호가 밀집된 영역에서는 옥트리 세분화가 조회 정밀도를 높여줍니다.
Pheromone System이 지향하는 핵심 설계 원칙입니다.