Some checks failed
ci / build (push) Failing after 1m52s
각 워크를 서로 다른 클라이언트로 보고 0~6단계를 따로 돌았다(토큰 체계 신규 정의 = 전체 경로). 셋 모두 라이트/다크 반전을 .band-light / .band-dark 가 --band-* 를 재정의하는 규칙으로 정의해 하드 게이트 4를 통과시켰다 — 반전이 섹션마다의 기분이 아니라 두 클래스가 만드는 규칙이다. RFS — 실시간 유체 시뮬레이터 (rfs-cfd) 프리셋 darkroom-spec · 컨셉 "암실과 사양서" R1 luminary.ai · R2 teenage.engineering EP-133 · 보조 simscale.com (전부 실측) 히어로에서 브라우저가 실제로 Navier–Stokes 를 푼다. 순수 WebGL2, three.js 미사용. 이류 → 온도 소스 → 부력·설비 힘 → 발산 → 압력 Jacobi → 투영 → 파티클 전진. 격자 224×126 / 파티클 26,000 / Jacobi 22회, 좁은 화면은 절반으로 줄인다. prefers-reduced-motion 이면 시작하지 않고 그 자리에 RFS 실물 파티클 렌더가 남는다. 단위계로 세 번 실패했다: dt 를 프레임 단위로 넘겨 파티클이 0.2초 만에 소멸했고, 전부 급기구에서만 재생성해 실 한 가닥이 됐으며, 랙이 위로 뿜어 핫/콜드 아일이 갈라지지 않았다. dt 를 초로 못박고 속도를 초당 격자 셀로 통일해 해결했다. 수치는 전부 RFS 저장소 README 출처. 정확도 지표는 싣지 않았다 — 사내 검증 자료이고 현재 통과 상태가 아니다. 트웬티온스 (twentyoz-corp) 프리셋 field-record · 컨셉 "네 개의 현장" R1 samsara.com · R2 lars-mueller-publishers.com · R3 = 현행 twentyoz.kr 감사 현행 사이트 실측: 대비 실패 172개 요소(9~11px 가 3.61:1), 한글 폰트 미지정으로 한글이 시스템 기본으로 떨어짐, h1 자간 −0.06em(한글 상한의 세 배), 배경 #020202. 'Digital Genetics' 은유가 산업용 IoT 사업을 가리고 있었다. 유지한 자산은 radius 0 과 무채색·모노 기조. 첫 화면에 회사 이름 대신 현장 선택기를 뒀다 — 라디오 그룹이라 JS 0바이트이고 좌우 화살표 키가 그냥 먹는다. 파트너 19곳은 원본에 도메인 표기가 없어 나누지 않았다. 새벽청과 (saebyeok-cheonggwa) 프리셋 market-board · 컨셉 "오늘 새벽 두 시의 값" R1 natoora.com · R2 phillips.com · R3 제철 12개월 띠 커머스가 감추는 시세 변동을 히어로의 주인공으로 삼았다. 상품 사진은 아래로 내렸다. 경매 시각·경락가격·등급·당도 표시 규정을 조사해 카피의 근거로 썼다. 무화과 당도를 "—" 로 두고 값이 없는 게 아니라 표시가 허용되지 않는 품목이라고 적었다. 등락은 색이 아니라 ▲▼보합 기호가 먼저다. 표의 숫자가 예시임을 판 아래와 푸터 두 곳에 명시하고, 주소·전화는 비웠다(게이트 11). 사진 4장은 codex 내장 image_gen 생성물이며 합계 341KB. 검증: Astro 빌드 통과, verify 체인 L0~L6 10계층 전부 통과, showcase-audit 신규 3종 12/12 통과(320/390/768/1440). 성능 실측(RFS): JS 24KB · 총 704KB. 폰트만 530KB 로 예산(200KB) 초과 — 한글 웹폰트 자체가 원인이고 기존 cheongon-care 는 650KB 로 더 크다. 저장소 공통 baseline 이라 이번 판은 기록만 남기고 넘어간다. 기존 16종에서 발견된 70건(대비 미달·히어로 줄 수 초과)은 이번 범위를 넘어 design.md 에 목록만 남겼다.
545 lines
26 KiB
HTML
545 lines
26 KiB
HTML
<!doctype html>
|
||
<html lang="ko">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||
<title>RFS — 실시간 유체 시뮬레이터 · 데이터센터 열관리 GPU 엔진</title>
|
||
<meta
|
||
name="description"
|
||
content="GPU Compute Shader 위에서 도는 δ-SPH 엔진. 파티클 100,000개를 60 FPS 로 계산해 서버랙 발열과 항온항습기 냉각을 실시간으로 반영한다. 메시 재생성 없이 설비 배치를 그 자리에서 검증한다."
|
||
/>
|
||
<meta property="og:title" content="RFS — 실시간 유체 시뮬레이터" />
|
||
<meta
|
||
property="og:description"
|
||
content="설비를 옮기면 유동이 그 자리에서 바뀐다. 데이터센터 열관리를 위한 실시간 GPU 유체 시뮬레이션 엔진."
|
||
/>
|
||
<meta property="og:type" content="website" />
|
||
<meta name="theme-color" content="#0e1114" />
|
||
|
||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||
<link
|
||
rel="stylesheet"
|
||
href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css"
|
||
/>
|
||
<link
|
||
rel="stylesheet"
|
||
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&display=swap"
|
||
/>
|
||
<link rel="stylesheet" href="./styles/main.css" />
|
||
<link
|
||
rel="icon"
|
||
href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' fill='%230E1114'/%3E%3Cpath d='M4 21c4-6 8 4 12-2s8 3 12-3' stroke='%233E8FB0' stroke-width='2.4' fill='none' stroke-linecap='round'/%3E%3Cpath d='M4 27c4-6 8 4 12-2s8 3 12-3' stroke='%238CC152' stroke-width='2.4' fill='none' stroke-linecap='round' opacity='.75'/%3E%3C/svg%3E"
|
||
/>
|
||
</head>
|
||
|
||
<body>
|
||
<a class="skip-link" href="#main">본문으로 건너뛰기</a>
|
||
|
||
<header class="site-head">
|
||
<div class="wrap head-inner">
|
||
<a class="wordmark" href="#top">
|
||
<span class="wordmark-mark" aria-hidden="true">
|
||
<svg viewBox="0 0 28 20" role="presentation" focusable="false">
|
||
<path d="M2 13c3.5-5.5 7-1 10.5-5S21 5 26 3" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
|
||
<path d="M2 18c3.5-5.5 7-1 10.5-5S21 10 26 8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" opacity=".5" />
|
||
</svg>
|
||
</span>
|
||
<span class="wordmark-text">RFS</span>
|
||
</a>
|
||
|
||
<nav class="nav" aria-label="주요 섹션">
|
||
<a href="#solver">솔버</a>
|
||
<a href="#equipment">장비</a>
|
||
<a href="#visualization">시각화</a>
|
||
<a href="#adopt">도입</a>
|
||
</nav>
|
||
|
||
<p class="head-meta mono">v0.13.0</p>
|
||
</div>
|
||
</header>
|
||
|
||
<main id="main">
|
||
<!-- ══════════════════════════════════════════════════════════
|
||
1 · 히어로 — 암실. 실제로 도는 열유동이 첫 화면을 덮는다
|
||
══════════════════════════════════════════════════════════ -->
|
||
<section class="band band-dark hero" id="top" aria-labelledby="heroHeading">
|
||
<div class="hero-stage" data-field-shell data-field-state="loading">
|
||
<canvas id="thermalField" aria-hidden="true"></canvas>
|
||
|
||
<!-- WebGL 이 없거나 모션을 줄이는 설정이면 이 렌더가 남는다.
|
||
폴백이 아니라 결과물이다 — RFS 실물의 파티클 뷰다 -->
|
||
<img
|
||
class="hero-fallback"
|
||
src="./assets/sph-sideview.webp"
|
||
width="691"
|
||
height="437"
|
||
alt="RFS 실물 파티클 뷰 — 서버랙을 통과한 공기가 데워져 위로 오르는 측면 단면"
|
||
/>
|
||
|
||
<div class="hero-grid" aria-hidden="true"></div>
|
||
|
||
<!-- 장비 형상. 셰이더가 쓰는 좌표와 같은 값을 CSS 변수로 넘긴다 —
|
||
그림과 라벨이 어긋나면 라벨이 거짓말이 된다 -->
|
||
<div class="stage-solid stage-rack" aria-hidden="true"></div>
|
||
<div class="stage-solid stage-fwu" aria-hidden="true"></div>
|
||
|
||
<div class="hero-scrim" aria-hidden="true"></div>
|
||
|
||
<div class="stage-tag stage-tag-fwu" aria-hidden="true"><span>FWU 급기</span></div>
|
||
<div class="stage-tag stage-tag-rack" aria-hidden="true"><span>서버랙</span></div>
|
||
</div>
|
||
|
||
<div class="wrap hero-copy">
|
||
<h1 id="heroHeading">
|
||
메시를 다시<br />
|
||
만들지 않는다
|
||
</h1>
|
||
<p class="hero-lead">
|
||
설비를 옮기면 유동이 그 자리에서 바뀐다. 데이터센터 열관리를 위한 실시간 GPU 유체
|
||
시뮬레이터.
|
||
</p>
|
||
|
||
<div class="hero-controls">
|
||
<div class="ctl">
|
||
<div class="ctl-head">
|
||
<label for="ctlLoad">서버랙 부하</label>
|
||
<output class="mono" id="outLoad" for="ctlLoad">70%</output>
|
||
</div>
|
||
<input type="range" id="ctlLoad" min="0" max="100" step="5" value="70" />
|
||
</div>
|
||
<div class="ctl">
|
||
<div class="ctl-head">
|
||
<label for="ctlSupply">FWU 급기량</label>
|
||
<output class="mono" id="outSupply" for="ctlSupply">65%</output>
|
||
</div>
|
||
<input type="range" id="ctlSupply" min="0" max="100" step="5" value="65" />
|
||
</div>
|
||
</div>
|
||
|
||
<p class="hero-note">
|
||
위 화면은 브라우저에서 도는 <strong>2D 축소판</strong>이다. 슬라이더를 움직이거나 화면을
|
||
문지르면 유동이 즉시 반응한다. 실물 RFS 는 Unity 6.4 위에서 3D δ-SPH 를 돌린다 —
|
||
파티클 100,000개, 60 FPS.
|
||
</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ══════════════════════════════════════════════════════════
|
||
2 · 문제 — 왜 기존 CFD 로는 안 되는가
|
||
══════════════════════════════════════════════════════════ -->
|
||
<section class="band band-light section-problem" id="problem" aria-labelledby="problemHeading">
|
||
<div class="wrap split">
|
||
<div class="split-lead">
|
||
<h2 id="problemHeading">
|
||
해가 나올 즈음에는<br />이미 다른 결정을 내린 뒤다
|
||
</h2>
|
||
</div>
|
||
<div class="split-body">
|
||
<p>
|
||
범용 CFD 도구는 시뮬레이션 한 건에 수 시간에서 수 일이 걸린다. 랙 한 대를 옮길 때마다
|
||
메시를 다시 만들고 처음부터 다시 풀어야 하므로, 운영 중에 답을 얻는 용도로는 쓰이지
|
||
않는다. 그래서 현장의 배치 변경은 대개 계산이 아니라 경험으로 결정된다.
|
||
</p>
|
||
<p>
|
||
RFS 는 정확도의 상한을 낮추는 대신 <strong>회신 시간</strong>을 바꾼 도구다.
|
||
발열량을 올리고, 급기 밸브를 조이고, 랙을 한 칸 옮기는 조작이 같은 화면 안에서
|
||
유동에 반영된다. 검증할 것이 "결과 파일"이 아니라 "지금 보고 있는 장면"이 된다.
|
||
</p>
|
||
<dl class="contrast">
|
||
<div>
|
||
<dt>범용 CFD 도구</dt>
|
||
<dd>배치를 바꾸면 메시 재생성 → 재계산. 한 건에 수 시간~수 일</dd>
|
||
</div>
|
||
<div>
|
||
<dt>RFS</dt>
|
||
<dd>배치·발열·제어 변경이 같은 세션 안에서 유동에 반영된다</dd>
|
||
</div>
|
||
</dl>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ══════════════════════════════════════════════════════════
|
||
3 · 솔버 — 암실. 사양을 숨기지 않는다
|
||
══════════════════════════════════════════════════════════ -->
|
||
<section class="band band-dark section-solver" id="solver" aria-labelledby="solverHeading">
|
||
<div class="wrap">
|
||
<p class="eyebrow">유체 엔진</p>
|
||
<h2 id="solverHeading">GPU Compute Shader 위의 δ-SPH</h2>
|
||
<p class="section-lead">
|
||
격자를 깔지 않는다. 공기를 입자로 놓고 이웃 입자끼리 밀도·압력·열을 주고받게 한다.
|
||
벽이 움직여도 격자를 다시 만들 일이 없다 — 실시간이 가능한 이유가 여기에 있다.
|
||
</p>
|
||
|
||
<ul class="spec-ledger">
|
||
<li>
|
||
<p class="spec-name">보간 커널</p>
|
||
<p class="spec-value">Wendland C2</p>
|
||
<p class="spec-note">Poly6·Spiky 혼용을 걷어내고 단일 경로로 통일했다</p>
|
||
</li>
|
||
<li>
|
||
<p class="spec-name">상태방정식</p>
|
||
<p class="spec-value">Tait</p>
|
||
<p class="spec-note">약압축성 가정. 압력 반복 없이 밀도에서 압력을 직접 얻는다</p>
|
||
</li>
|
||
<li>
|
||
<p class="spec-name">벽면 경계</p>
|
||
<p class="spec-value">Adami Ghost Particle</p>
|
||
<p class="spec-note">엣지·코너까지 덮는다. 경계에서 입자가 새던 결함을 해소한 방식</p>
|
||
</li>
|
||
<li>
|
||
<p class="spec-name">시간 적분</p>
|
||
<p class="spec-value">CFL 적응 서브스텝</p>
|
||
<p class="spec-note">유속이 빨라지면 스텝을 자동으로 잘게 쪼갠다</p>
|
||
</li>
|
||
<li>
|
||
<p class="spec-name">배속</p>
|
||
<p class="spec-value">0.1× — 10×</p>
|
||
<p class="spec-note">배속을 바꿔도 같은 물리 결과가 나오도록 시간 불변을 보장한다</p>
|
||
</li>
|
||
<li>
|
||
<p class="spec-name">열·습도</p>
|
||
<p class="spec-value">입자 간 전도 + 부력</p>
|
||
<p class="spec-note">습공기 밀도 보정을 포함한다</p>
|
||
</li>
|
||
<li>
|
||
<p class="spec-name">주기 경계</p>
|
||
<p class="spec-value">PBC · 최소 이미지 규약</p>
|
||
<p class="spec-note">셀 래핑으로 무한 반복 공간을 다룬다</p>
|
||
</li>
|
||
<li>
|
||
<p class="spec-name">이웃 탐색</p>
|
||
<p class="spec-value">공간 해시 그리드</p>
|
||
<p class="spec-note">SpatialHash 커널 1개가 전담한다</p>
|
||
</li>
|
||
</ul>
|
||
|
||
<div class="figures">
|
||
<figure>
|
||
<p class="fig-num mono">01</p>
|
||
<p class="fig-title">GPU 커널</p>
|
||
<p class="fig-val mono">53<span>+</span></p>
|
||
<p class="fig-note">Compute Shader 10개 · HLSL 67개로 분할</p>
|
||
</figure>
|
||
<figure>
|
||
<p class="fig-num mono">02</p>
|
||
<p class="fig-title">파티클</p>
|
||
<p class="fig-val mono">100,000</p>
|
||
<p class="fig-note">최대 512,000. 60 FPS 안정 구간 기준</p>
|
||
</figure>
|
||
<figure>
|
||
<p class="fig-num mono">03</p>
|
||
<p class="fig-title">파티클 1개의 크기</p>
|
||
<p class="fig-val mono">20<span>B</span></p>
|
||
<p class="fig-note">AoS 를 SoA 6개 버퍼로 갈라 얻은 값</p>
|
||
</figure>
|
||
<figure>
|
||
<p class="fig-num mono">04</p>
|
||
<p class="fig-title">테스트</p>
|
||
<p class="fig-val mono">2,000<span>+</span></p>
|
||
<p class="fig-note">499개 파일 · EditMode · PlayMode · Performance</p>
|
||
</figure>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ══════════════════════════════════════════════════════════
|
||
4 · 장비 — 라이트. 이 제품이 아는 물건들
|
||
══════════════════════════════════════════════════════════ -->
|
||
<section class="band band-light section-equipment" id="equipment" aria-labelledby="equipHeading">
|
||
<div class="wrap">
|
||
<h2 id="equipHeading">전산실에 있는 물건을 그대로 안다</h2>
|
||
<p class="section-lead">
|
||
유동만 푸는 것으로는 답이 안 나온다. 열을 만드는 것과 식히는 것이 각자의 제어 논리를
|
||
가지고 장 안에 들어가 있어야 배치 변경이 의미를 갖는다.
|
||
</p>
|
||
|
||
<div class="equip-list">
|
||
<article>
|
||
<h3>항온항습기 <span class="tag mono">FWU</span></h3>
|
||
<p>
|
||
PID 자동 제어로 목표 온도를 좇는다. 열교환은 ε-NTU 로 계산하고,
|
||
프리쿨링·쿨링 밸브와 댐퍼 모드를 각각 조작할 수 있다.
|
||
</p>
|
||
</article>
|
||
<article>
|
||
<h3>서버랙</h3>
|
||
<p>
|
||
CFM 기반으로 통과 공기에 열을 싣는다. 동적 전력 프로파일 5종을 갖고 있고,
|
||
장애 상황을 만들어 그때 열이 어디로 가는지 볼 수 있다.
|
||
</p>
|
||
</article>
|
||
<article>
|
||
<h3>팬 · 댐퍼 · 냉각코일</h3>
|
||
<p>
|
||
듀얼 원뿔 존 모델로 GPU 파티클 물리에 직접 개입한다.
|
||
후처리로 그린 화살표가 아니라 실제로 입자를 민다.
|
||
</p>
|
||
</article>
|
||
<article>
|
||
<h3>온도계</h3>
|
||
<p>
|
||
물리 기반 센서 응답 특성을 갖는다. 값이 즉시 튀지 않고 실제 계기처럼 따라온다.
|
||
Cool Zone 과 Hot Zone 을 자동으로 분류한다.
|
||
</p>
|
||
</article>
|
||
<article>
|
||
<h3>급기구 · 배기구</h3>
|
||
<p>
|
||
CFD inlet / outlet 패턴을 따른다. 경계에 걸린 파티클을 자동으로 재배치해
|
||
유입·유출이 끊기지 않게 한다.
|
||
</p>
|
||
</article>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ══════════════════════════════════════════════════════════
|
||
5 · 시각화 — 암실. 실제 렌더를 그대로 싣는다
|
||
══════════════════════════════════════════════════════════ -->
|
||
<section class="band band-dark section-vis" id="visualization" aria-labelledby="visHeading">
|
||
<div class="wrap">
|
||
<p class="eyebrow">보이는 방식</p>
|
||
<h2 id="visHeading">읽는 방법을 네 가지로 나눈다</h2>
|
||
|
||
<div class="vis-layout">
|
||
<ol class="vis-list">
|
||
<li>
|
||
<h3>파티클</h3>
|
||
<p>온도로 색을 매핑하고 발광과 LOD 를 건다. 공기가 어디서 데워지는지 그대로 보인다.</p>
|
||
</li>
|
||
<li>
|
||
<h3>트레일</h3>
|
||
<p>Ring Buffer 로 궤적을 남긴다. 한 순간이 아니라 지나온 경로를 본다.</p>
|
||
</li>
|
||
<li>
|
||
<h3>히트맵 슬라이스</h3>
|
||
<p>
|
||
온도·속도·압력·밀도·습도 다섯 물리량의 단면을 5패스 GPU 파이프라인으로 그린다.
|
||
<span class="mono">X</span> · <span class="mono">Y</span> ·
|
||
<span class="mono">Z</span> 키로 축을 바꾼다.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<h3>벡터 필드</h3>
|
||
<p>화살표 글리프와 스트림라인을 GPU 인스턴싱으로 띄운다. 방향과 세기를 함께 읽는다.</p>
|
||
</li>
|
||
</ol>
|
||
|
||
<div class="vis-shots">
|
||
<figure>
|
||
<img
|
||
src="./assets/sph-topview.webp"
|
||
width="689"
|
||
height="680"
|
||
loading="lazy"
|
||
decoding="async"
|
||
alt="RFS 상면 뷰 — 랙 상부에서 데워진 입자가 초록으로 퍼지고 주변 저온 입자는 청록으로 남는다"
|
||
/>
|
||
<figcaption>상면 · 랙 상부의 열기둥</figcaption>
|
||
</figure>
|
||
<figure>
|
||
<img
|
||
src="./assets/sph-sideview.webp"
|
||
width="691"
|
||
height="437"
|
||
loading="lazy"
|
||
decoding="async"
|
||
alt="RFS 측면 뷰 — 랙을 통과하며 데워진 공기가 오른쪽으로 밀려 나가는 단면"
|
||
/>
|
||
<figcaption>측면 · 랙을 통과한 공기</figcaption>
|
||
</figure>
|
||
<p class="shots-note">
|
||
두 장 모두 RFS 실물의 파티클 뷰다. 저온이 청록, 고온이 초록이다 —
|
||
이 페이지 첫 화면의 색도 같은 규칙을 쓴다.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ══════════════════════════════════════════════════════════
|
||
6 · 에디터 — 라이트
|
||
══════════════════════════════════════════════════════════ -->
|
||
<section class="band band-light section-editor" id="editor" aria-labelledby="editorHeading">
|
||
<div class="wrap split">
|
||
<div class="split-lead">
|
||
<h2 id="editorHeading">시뮬레이터가 아니라 작업 환경이다</h2>
|
||
<p class="section-lead">
|
||
배치를 바꿔 보려면 배치를 바꿀 수 있어야 한다. RFS Editor 는 Unity UI Toolkit 으로 만든
|
||
런타임 편집 환경이고, 시뮬레이션이 도는 채로 물건을 옮긴다.
|
||
</p>
|
||
</div>
|
||
<div class="split-body">
|
||
<dl class="feature-rows">
|
||
<div>
|
||
<dt>오브젝트 편집</dt>
|
||
<dd>이동·회전·스케일 핸들, 다중 선택, Undo / Redo, 드래그 앤 드롭 배치</dd>
|
||
</div>
|
||
<div>
|
||
<dt>속성 패널</dt>
|
||
<dd>실시간 속성 편집. 관제 시스템의 XD 태그를 여기서 바인딩한다</dd>
|
||
</div>
|
||
<div>
|
||
<dt>리플레이</dt>
|
||
<dd>
|
||
CSV 또는 XD API 를 데이터소스로 삼아 시계열을 재생하고, 실측 대비 정확도 리포트를
|
||
만든다
|
||
</dd>
|
||
</div>
|
||
<div>
|
||
<dt>AI Advisor</dt>
|
||
<dd>
|
||
26개 규칙의 Rule Engine 과 LLM 프로바이더 4종(Anthropic · OpenAI · Gemini ·
|
||
로컬 Ollama) 연동
|
||
</dd>
|
||
</div>
|
||
<div>
|
||
<dt>모니터링</dt>
|
||
<dd>PUE · COP · 전력 · CO₂ 대시보드, MetricsHUD 7섹션 26메트릭</dd>
|
||
</div>
|
||
<div>
|
||
<dt>프로젝트</dt>
|
||
<dd>생성·저장·불러오기, 다중 씬, glTF / GLB 3D 모델 임포트</dd>
|
||
</div>
|
||
</dl>
|
||
|
||
<div class="keys">
|
||
<p class="keys-title">손에 익는 키</p>
|
||
<ul>
|
||
<li><kbd>Space</kbd> 일시정지 · 재개</li>
|
||
<li><kbd>H</kbd> 히트맵</li>
|
||
<li><kbd>X</kbd><kbd>Y</kbd><kbd>Z</kbd> 슬라이스 축</li>
|
||
<li><kbd>F3</kbd> 성능 통계</li>
|
||
<li><kbd>Tab</kbd> UI 접기</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ══════════════════════════════════════════════════════════
|
||
7 · 아키텍처 — 라이트. 5계층
|
||
══════════════════════════════════════════════════════════ -->
|
||
<section class="band band-dark section-arch" id="architecture" aria-labelledby="archHeading">
|
||
<div class="wrap">
|
||
<h2 id="archHeading">다섯 켜</h2>
|
||
<ol class="layers">
|
||
<li>
|
||
<p class="layer-id mono">L1</p>
|
||
<p class="layer-name">애플리케이션</p>
|
||
<p class="layer-body">RFS Editor · Simulation3D · AI Advisor · 리플레이</p>
|
||
</li>
|
||
<li>
|
||
<p class="layer-id mono">L2</p>
|
||
<p class="layer-name">파이프라인 · 컨트롤러</p>
|
||
<p class="layer-body">SimulationPipeline → 스테이지 10개 → 컨트롤러 26개</p>
|
||
</li>
|
||
<li>
|
||
<p class="layer-id mono">L3</p>
|
||
<p class="layer-name">GPU 컴퓨트</p>
|
||
<p class="layer-body">
|
||
SPHCore 8 · DomainExt 14 · SpatialHash 1 · TempGrid 8 · ObjectGrid 7 ·
|
||
Integration 5 · Scatter 4 · Trail 2 · GlobalSDF 3 · Coil 1
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p class="layer-id mono">L4</p>
|
||
<p class="layer-name">데이터 버퍼</p>
|
||
<p class="layer-body">SoA 버퍼 6개 · ParticleData 20B · 충돌 메시 데이터</p>
|
||
</li>
|
||
<li>
|
||
<p class="layer-id mono">L5</p>
|
||
<p class="layer-name">외부 통신</p>
|
||
<p class="layer-body">Socket.IO v2 (RFS-XD 관제 연동) · REST API · CSV 내보내기</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ══════════════════════════════════════════════════════════
|
||
8 · 도입 — 라이트. 요구사양과 연락
|
||
══════════════════════════════════════════════════════════ -->
|
||
<section class="band band-light section-adopt" id="adopt" aria-labelledby="adoptHeading">
|
||
<div class="wrap split">
|
||
<div class="split-lead">
|
||
<h2 id="adoptHeading">돌려 보려면 무엇이 필요한가</h2>
|
||
<p class="section-lead">
|
||
DirectCompute 를 쓰므로 NVIDIA GPU 를 권장한다. 아래는 개발 저장소가 명시한 값
|
||
그대로다.
|
||
</p>
|
||
</div>
|
||
<div class="split-body">
|
||
<table class="req">
|
||
<caption class="sr-only">RFS 시스템 요구사항 — 최소 사양과 권장 사양</caption>
|
||
<thead>
|
||
<tr>
|
||
<th scope="col">항목</th>
|
||
<th scope="col">최소</th>
|
||
<th scope="col">권장</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<th scope="row">운영체제</th>
|
||
<td>Windows 10 64bit</td>
|
||
<td>Windows 11</td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">GPU</th>
|
||
<td>GTX 1660 · VRAM 6GB</td>
|
||
<td>RTX 3060 이상 · VRAM 8GB 이상</td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">메모리</th>
|
||
<td>16 GB</td>
|
||
<td>16 GB 이상</td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">엔진</th>
|
||
<td colspan="2">Unity 6.4 (6000.4.5f1) · URP 17.2</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<div class="adopt-cta">
|
||
<p>
|
||
도입 검토·기술 문의는 개발사인 트웬티온스로 연락하면 된다.
|
||
제품은 독점 소프트웨어이고, 평가판 제공 여부는 협의 사항이다.
|
||
</p>
|
||
<a class="btn" href="mailto:hello@twentyoz.kr?subject=RFS%20%EB%8F%84%EC%9E%85%20%EB%AC%B8%EC%9D%98">
|
||
RFS 도입 문의
|
||
</a>
|
||
<p class="adopt-fine mono">hello@twentyoz.kr · 070-4353-1190</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</main>
|
||
|
||
<footer class="band band-dark site-foot">
|
||
<div class="wrap foot-inner">
|
||
<div>
|
||
<p class="foot-name">RFS — Realtime Fluid Simulator</p>
|
||
<p class="foot-line">데이터센터 열관리를 위한 실시간 GPU 유체 시뮬레이션 엔진</p>
|
||
</div>
|
||
<dl class="foot-meta mono">
|
||
<div><dt>버전</dt><dd>0.13.0</dd></div>
|
||
<div><dt>엔진</dt><dd>Unity 6.4 · URP 17.2</dd></div>
|
||
<div><dt>개발</dt><dd>Twentyoz Co., Ltd.</dd></div>
|
||
<div><dt>라이선스</dt><dd>Proprietary</dd></div>
|
||
</dl>
|
||
</div>
|
||
<div class="wrap foot-fine">
|
||
<p>
|
||
이 페이지의 수치는 RFS 개발 저장소의 README 에 적힌 값을 옮긴 것이다.
|
||
실측 조건이 붙지 않은 정확도 지표는 싣지 않았다.
|
||
</p>
|
||
</div>
|
||
</footer>
|
||
|
||
<script src="./scripts/thermal-field.js" defer></script>
|
||
</body>
|
||
</html>
|