저희 스튜디오 루덴스는 다음의 게임을 개발하여 Steam 출시를 목표로 하고 있습니다.
🎬 《Project Biosphere Director》 핵심 기획 요약서
“플레이어는 시(詩)를 읽고, 시스템은 수학(數學)으로 계산한다. 데이터는 대양이고, 화면은 창문이며, 플레이어는 그 파동을 바라보는 관찰자다.”
“가장 강한 생물을 만드는 게임이 아니라, 내가 만든 생물이 나의 통제를 벗어나도 살아남을 수 있는 세계를 만드는 게임.”
1. 플레이어의 경험 (현상, 現象) : 《내가 개입하는 BBC 생태 다큐멘터리》
신이 아닌 다큐멘터리 감독: 플레이어는 세계를 만들고 생명을 명령하는 창조자가 아닙니다 [인용: 4, 5]. 하나의 종을 선택하고, 그 종이 세계 안에서 살아남는 위대한 과정을 관찰하는 관조적 개입자입니다 [인용: 4, 5]. 플레이어가 할 수 있는 것은 환경과 유전적 가능성을 조정하는 것뿐이며, 이후의 모든 결과는 생태계가 결정합니다 [인용: 4].
살아남는 '종의 서사' : 목표는 가장 강한 생물을 만드는 것이 아닙니다 [인용: 4]. 주어진 세계가 변할 때마다
자신의 종이 새로운 환경에 적응하고, 경쟁자와 공존하거나 대립하며, 비어 있는 생태적 공간을 찾아 끝까지 살아남는 '종의 서사'를 감상하는 것입니다 [인용: 4].
미학이 곧 생태학이 되는 경험: 외형 커스터마이징은 단순한 꾸미기가 아닙니다 [인용: 4, 5]. 선택한 무늬와 신체 구조는 생물의 생존 방식과 직결됩니다 [인용: 4, 5]. 반점은 위장을 제공하고, 특정 색은 위협도를 변화시키며, 뿔은 경쟁력을 높이는 동시에 움직임을 제한합니다 [인용: 4, 5]. 아름답게 만드는 행위와 살아남게 만드는 행위가 하나의 선택으로 합쳐집니다 [인용: 4].
경외감으로서의 실패: 이 세계에서 멸종과 실패는 게임오버가 아닙니다. 다음 플레이의 자산이 되는 '화석 및 유전자 데이터'로 영원히 기록되며, 멸종 직전 한 마리가 남았을 때의 'Last Stand' 연출을 통해 다큐멘터리 특유의 비장미와 경외감을 플레이어에게 선사합니다.
2. 시스템의 설계 방식 (본질, 本質) : 《이중 구조 아키텍처 (Dual-Layer)》
2-1. Layer 1 : 데이터 오션 (Data Ocean)
군집 단위 행렬 연산: 저사양 환경에서도 수만 마리의 생태계를 구동하기 위해 개체 간 개별 물리 충돌 연산은 100% 배제합니다 [인용: 5]. 오직 수치 통계와 포식자 군집 × 사냥 효율 × 피식자 군집 × 회피 효율 = 에너지 이동량이라는 연속값 연산으로만 세계를 계산합니다 [인용: 5].
인위적 패치가 없는 자율 평형 시스템: 개발자가 숫자를 조절해 억지로 균형을 맞추지 않습니다 [인용: 4, 5]. 오직 '에너지 수지타산 수식'에 의해서만 모든 생존 and 멸종이 결정됩니다 [인용: 5]. 몸집이 커지면 기저 대사량(Kleiber's Law)이 폭증하고, 빨라지면 활동 비용이 기하급수적으로 증가합니다 [인용: 4, 5]. 무작정 강력한 형질을 쌓는 것은 진화가 아니라 대사비 폭증으로 인한 1세대 만의 대멸종(에너지 파산)을 부르는 함정입니다 [인용: 4, 5]. 모든 형질에는 가격이 있고, 세계는 그 가격을 대신 지불해주지 않습니다 [인용: 4].
진화는 강화가 아니라 '에너지의 재배치' : 유전 형질(Traits)은 장비가 아닙니다 [인용: 4, 5]. 새로운 능력을 얻는다는 것은 몸의 에너지를 다른 곳에서 빼앗아와 재배치하는 행위입니다 [인용: 4, 5]. 더 강한 이빨을 얻으면 소화에서 이득을 보지만 대사비가 오릅니다 [인용: 4, 5]. 따라서 무엇을 얻을 것인가보다 무엇을 포기(퇴화)할 것인가가 핵심 알고리즘이 되며, 퇴화 시 에너지를 회수하는 선택이 유기적으로 맞물립니다 [인용: 4].
2-2. Layer 2 : 렌더링 윈도우 (Rendering Window)
결정론적 역변환 (Inverse Mapping): 시스템 내부의 무미건조한 통계 데이터를 개별 개체의 행동 빈도와 애니메이션 가중치로 역변환합니다. 화면 속 개체들은 군집이 쓴 수학적 시나리오를 연기하는 결정론적 배우들일 뿐입니다.
PopulationState 브릿지 마커: 1레이어에서 계산된 대사량과 생존율 변동폭은 energyStatus, reproductionPotential, mortalityRisk라는 3가지 상태 데이터로 압축되어 2레이어로 전송됩니다.
SpeciesBehaviorProfile 필터링: 프록시 개체들은 이 상태 마커를 자신의 유전 성격 필터(FearResponse, HungerResponse, SocialPreference)에 통과시켜 최종 액션을 산출합니다. 수학적으로 멸종 위기(High Risk)에 처했을 때, 유전 성격이 FLOCKING인 종은 화면에서 똘똘 뭉치는 연출을 하고, FLEE_INDIVIDUAL인 종은 사방으로 흩어지는 연기 가중치를 수행합니다.
🛠️ [실전 구동 예시]
using System;
using Unity.Mathematics; // Unity DOTS 환경 가정 (일반 C# struct로 대체 가능)
namespace ProjectLudens.Environment.Layer1
{
/// <summary>
/// Layer 1 거시 환경 솔버: 이류-확산 방정식(Advection-Diffusion Equation) 기반
/// 기온, 습도, 자원 밀도 등의 환경 변수가 바람(이류)과 전도(확산)에 의해 어떻게 변하는지 계산
/// </summary>
public class MacroEnvironmentFluidSolver
{
private int _gridWidth;
private int _gridHeight;
private float _cellSize;
// 환경 변수 배열 (예: 0=기온, 1=습도, 2=자원밀도)
private float[] _currentState;
private float[] _previousState;
private float2[] _flowField; // 바람 또는 지형 경사 벡터
public MacroEnvironmentFluidSolver(int width, int height, float cellSize)
{
_gridWidth = width;
_gridHeight = height;
_cellSize = cellSize;
int totalCells = width * height;
_currentState = new float[totalCells];
_previousState = new float[totalCells];
_flowField = new float2[totalCells];
}
/// <summary>
/// 단일 시간 스텝(dt)에 대한 유체 방정식 연산 수행
/// </summary>
public void SolveStep(float dt, float diffusionRate, int variableIndex)
{
// DOD(Data-Oriented Design) 최적화를 위해 1차원 배열 인덱스로 접근
int width = _gridWidth;
int height = _gridHeight;
float dx = _cellSize;
float dx2 = dx * dx;
// 경계면(Boundary)을 제외한 내부 셀만 연산
for (int j = 1; j < height - 1; j++)
{
for (int i = 1; i < width - 1; i++)
{
int idx = j * width + i;
float u_curr = _currentState[idx];
// 1. 이류 (Advection): 바람이나 지형에 의한 환경 변수의 이동
// Upwind Scheme (상류 풍향 차분법) 적용하여 수치적 안정성 확보
float2 flow = _flowField[idx];
float advX = flow.x > 0
? flow.x * (u_curr - _currentState[idx - 1]) / dx
: flow.x * (_currentState[idx + 1] - u_curr) / dx;
float advY = flow.y > 0
? flow.y * (u_curr - _currentState[idx - width]) / dx
: flow.y * (_currentState[idx + width] - u_curr) / dx;
float advectionTerm = -(advX + advY);
// 2. 확산 (Diffusion): 열전도, 습기 확산, 자원 자연 분포 등
// 라플라시안(Laplacian) 5점 차분법 적용
float laplacian = (
_currentState[idx + 1] +
_currentState[idx - 1] +
_currentState[idx + width] +
_currentState[idx - width] -
4.0f * u_curr
) / dx2;
float diffusionTerm = diffusionRate * laplacian;
// 3. 소스/싱크 (Source/Sink): 태양열, 강수, 데스존 자원 소모 등 외부 요인
float sourceTerm = CalculateLocalSourceTerm(i, j, variableIndex);
// 4. 오일러 명시적 방법(Explicit Euler)을 통한 다음 상태 갱신
// ∂u/∂t + ∇·(u*v) = ∇·(D*∇u) + S
_previousState[idx] = u_curr + dt * (advectionTerm + diffusionTerm + sourceTerm);
}
}
// 배열 스왑 (Swap Buffers) - 메모리 할당 없이 포인터만 교체
Swap(ref _currentState, ref _previousState);
}
/// <summary>
/// 국소 소스/싱크 항 계산 (Layer 2 개체군 또는 기후 이벤트와 연결되는 인터페이스)
/// </summary>
private float CalculateLocalSourceTerm(int x, int y, int variableIndex)
{
// TODO: 아르케의 개념 데이터에 따라 구현
// 예: 열대 기후 건기 -> 수자원(변수 1) 싱크 항 크게 적용
// 예: 데스존 -> 개체군 밀집도에 비례하여 자원(변수 2) 소모 항 적용
return 0.0f;
}
private void Swap(ref float[] a, ref float[] b)
{
float[] temp = a;
a = b;
b = temp;
}
// 외부에서 바람 벡터나 초기 값을 주입하기 위한 퍼블릭 인터페이스
public void SetFlowField(int idx, float2 flow) => _flowField[idx] = flow;
public void SetInitialState(int idx, float value) => _currentState[idx] = value;
public float GetCurrentValue(int idx) => _currentState[idx];
}
}
3. 진화의 군비 경쟁과 무한한 확장성
가장 무서운 적은 플레이어가 만든다: 플레이어가 번성하여 생태계 질량 임계점을 넘으면, 플레이어 종의 유전 테크를 미러링하는 카피캣 종이 난입하고, 플레이어 종의 수학적 약점만을 저격하도록 설계된 천적(Nemesis) 종이 백엔드에서 강제 각성합니다 [인용: 4, 5]. 플레이어의 성공 자체가 새로운 생태적 문제를 발생시키는 구조입니다 [인용: 4].
4. 상업적 확장성
진화적 확장의 콘텐츠화: 본 프로젝트는 생명 진화의 다양한 방향성을 기반으로 지속적인 콘텐츠 확장이 가능한 구조를 가집니다. 조류의 3차원 비행, 고래의 심해 적응, 공룡의 질량 확장, 곤충의 군집 알고리즘과 같은 진화적 변화는 단순한 신규 생물 추가가 아니라 새로운 환경, 행동 방식, 생존 전략을 도입하는 독립적인 확장 단위로 활용될 수 있습니다.
장기적 생태계 확장 구조: 이를 통해 각 확장 콘텐츠는 기존 생태계와 연결되면서도 새로운 플레이 경험을 제공하며, 프로젝트의 핵심 철학인 '생명은 새로운 조건에 적응하며 변화한다' 는 원칙을 유지한 장기적인 콘텐츠 확장 구조를 형성합니다.
프로젝트 크루 모집 공고
본 프로젝트는 단순 참여자가 아닌 각 분야의 전문성을 바탕으로 프로젝트의 방향과 구조를 함께 만들어가는 공동 창업자를 모집합니다.
1. 모집 방향
각 크루는 자신의 전문 분야에 대한 독립적인 의사결정 권한과 책임을 가지며, 서로의 전문성을 연결하여 하나의 프로젝트를 완성합니다.
2. 프로젝트 진행 현황
현재 프로젝트는 핵심 시스템 구조와 방향성을 설계하는 단계입니다.
초기 크루 합류 이후 생태계 시뮬레이션 구조, 핵심 시스템, 확장 가능한 콘텐츠 기반 구축을 목표로 합니다.
3. 모집 분야 및 역할 정의
AI / 시뮬레이션 프로그래머
생태계 시뮬레이션의 핵심 알고리즘과 시스템 구조를 설계하고 구현
평가: 별도의 알고리즘 설계 문제를 이메일로 송부
테크니컬 아티스트
플레이어가 오래 관찰하는 화면과 시각적 경험을 설계
평가: 대표 화면 구성안의 기본 스케치 형식으로 제출
세부 기획자
Trait 설계, Trait Tree 구성, 환경 설계, 생태 지위 설계를 담당
평가: 자유로운 Trait Tree 구성을 제출
음향 디자이너
공개된 저작권 문제가 없는 자원을 활용 재해석하여 프로젝트의 음향 경험을 설계
평가: 샘플 음악 1개 제출.
운영 어드바이저 평가 과제
향후 크루 모집을 위한 모집 전략 및 모집 과정 설계
프로젝트의 현재 단계에서 필요한 우선 과제와 실행 순서에 대한 조언
기획·개발진과 함께 프로젝트의 현실적인 개발·운영 가능성 검토
향후 스튜디오 설립 및 팀 확장을 위한 조직 운영 체계 수립
평가 : 앞에 소개된 기획을 바탕으로 펀드를 받는다고 가정 기획서를 작성
4. 참여 가치 및 지분 보상
공동 창업자 구조
모든 크루는 공동 창업자로서 동등한 지위를 가집니다.
각 크루는 자신의 전문 분야에 대한 독립적인 의사결정 권한과 책임을 가지며, 프로젝트는 각 분야의 전문성을 존중하는 협력 구조로 운영합니다.
참여 형태의 자율성
프로젝트 참여자는 기존 활동과 병행하여 참여할 수 있으며, 성장 이후 전업 전환 여부도 개인의 자유로운 판단에 따릅니다.
지분 및 권리 운영 원칙
모든 크루는 지분 비율에 따른 권리와 책임을 가집니다.
프로젝트 과정에서 발생하는 IP 및 주요 권리는 공동 창업 구조와 지분 비율에 따라 관리합니다.
각 크루의 지분은 프로젝트 참여 기간 동안 존중되며 공동 창업자로서의 권리를 보장합니다.
창업자: 28.57%
모든 크루: 14.29%
5. 지원 방법
관심이 있으신 분은 이력서와 과제 수행물(AI / 시뮬레이션 프로그래머는 이력서를 보내주시면 과제를 이메일로 전송해 드립니다)을 다음의 이메일로 함께 보내주시기 바랍니다.
제출해 주신 자료를 검토한 후 개별적으로 연락드리겠습니다.