갱신: 2026-09-13. SOMA는 전신 해부학과 손목의 합성 바이오신호를 탐색하는 연구용 시뮬레이터입니다.
시작 순서
- 상단의 시뮬레이터 메뉴에서 전신 트윈 또는 손목 센싱을 엽니다.
- 전신에서는 계통·자세·센서 위치를 선택하고, 손목에서는 자세와 전극 부착을 조정합니다.
- 파형과 조직 변위를 함께 관찰합니다. 표시 배율과 실제 신호 모델의 수치를 구분하세요.
- 실험 조건을 기록하고 필요한 데이터를 내보냅니다.
화면별 역할
- 전신 트윈: 해부학 계통, 보행·임상 작업, 피부 국소 단면과 센서 위치를 탐색합니다.
- 손목 센싱: 실제 아틀라스 손목, 유연한 전극 배열, 정전용량 파형·PPG·분석 결과를 비교합니다.
- 연구 기록: 구현 범위, CBP 확장 설계, 문헌, 검증 계획을 확인합니다.
- 사용 매뉴얼: 설치, 실행, 화면 조작과 문제 해결을 안내합니다.
문서 읽기
연구 기록의 문서 카드와 사용 매뉴얼의 문서 아이콘은 웹 뷰어를 엽니다. 목차로 항목을 이동하고 표와 코드 블록을 읽을 수 있습니다. 원본 파일이 필요하면 뷰어 상단의 Markdown 다운로드를 사용하세요. 파일은 한글을 보존하는 UTF-8 형식으로 내려받습니다.
모델 결과 읽기
혈압·SpO₂ 등의 표시값과 추정 결과는 합성 모델 또는 불러온 기록에 따라 해석해야 합니다. 화면의 정밀한 해부학 형태가 환자별 생리 모델이나 임상 정확도를 보장하지 않습니다. MRC 등 현재 분석 기능과 MVDR·ECG-PAT 연속 혈압계의 향후 연구 설계는 연구 기록에서 구분합니다.
언어 선택
상단의 한국어 / EN 버튼으로 언어를 바꿉니다. 선택은 같은 브라우저에 저장되어 다른 화면과 문서에도 적용됩니다. 언어를 바꾸면 페이지를 다시 불러오므로 진행 중인 실험은 필요한 데이터를 먼저 저장하세요. 웹 문서와 Markdown 다운로드도 선택한 언어를 따릅니다.
갱신: 2026-09-25. 전신 트윈 메뉴에서 엽니다.
성능 모드
화면 상단의 **성능 모드**에서 자동·저사양·균형·고화질을 선택합니다. 선택은 현재 브라우저에 저장됩니다.
- **자동**: 논리 프로세서가 4개 이하이거나, 브라우저가 보고한 메모리가 4GB 이하이면 저사양으로 시작합니다. 그 외에는 균형으로 시작하고, 초기 재생 중 낮은 FPS가 지속되면 저사양으로 전환합니다. 브라우저가 제공하지 않는 사양은 추정하지 않습니다.
- **저사양**: 최대 30FPS, 낮은 렌더 해상도와 전신 경량 모델을 사용합니다. 처음부터 저사양으로 시작하면 근육·신경은 꺼져 있으며 각각 다시 켤 수 있습니다.
- **균형**: 전신은 경량 모델로, 가까이 확대한 관심 영역은 정밀 모델로 표시합니다.
- **고화질**: 보이는 영역의 원래 정밀 모델을 불러옵니다. 다운로드와 메모리 사용량이 늘어날 수 있습니다.
수동 선택은 자동 성능 하향보다 우선합니다. 자동으로 되돌리면 기기 판단을 다시 적용합니다. 품질은 화면 표현을 조절하며 생리 신호 공식이나 CSV 샘플링을 바꾸지 않습니다. 일시정지 후 카메라가 멈추거나 다른 브라우저 탭으로 이동하면 불필요한 그리기를 중단합니다.
해부학과 피부
순환계, 장기·호흡계, 신경계, 골격계, 근육계 스위치와 불투명도를 조절합니다. 근육계는 좌우 전체 근육과 건·근막의 재질을 표시합니다. 피부계는 처음에 꺼져 있으며, 켜면 피부 불투명도와 국소 단면 선택을 제공합니다.
순환계 아래 **혈관** 스위치로 동맥·정맥만 별도로 켜고 끕니다. 위치는 **동맥 팽창** 버튼 앞이며 처음에는 켜져 있습니다. 심장은 순환계 스위치를 따릅니다. 순환계를 끄면 심장과 혈관을 함께 숨기고, 다시 켜면 혈관의 이전 선택을 유지합니다. 초기화와 맥동 보기는 혈관 표시를 켭니다.
편안 모드는 처음에 켜져 있습니다. 상단 원형 스위치로 성기 표시를 숨기는 기능이며, 센서 설정이나 생리 신호를 바꾸지 않습니다.
움직임
- 걷기·달리기: 공통 모션 캡처와 관절 리깅으로 움직입니다.
- 일어서기: 앉은 준비 자세에서 일어나 선 자세를 유지합니다.
- 앉았다 일어서기 반복: 반복 단계와 완료 횟수를 확인합니다.
- 손 쥐기: 준비·쥠·유지·이완 과정을 반복합니다. 쥐는 힘의 실측값은 아닙니다.
- 침대에 눕기: 현재 서 있는 위치 뒤에 놓인 침대에 앉고, 옆으로 누운 뒤 다리를 펴고 바로 눕습니다.
임상 작업은 작성된 운동학 시퀀스이며, 근력·혈압 반응·균형 능력을 예측하는 임상 검사는 아닙니다. 정지와 재생을 이용해 같은 단계를 비교할 수 있습니다.
센서와 화면 공간
센서는 여러 위치를 동시에 선택하거나 모두 해제할 수 있습니다. 신호 모달리티에 따라 설정과 파형이 바뀝니다. 좌우 패널은 접고 펼칠 수 있고 Active Sensor 안내창은 닫기 아이콘으로 닫습니다. 센서가 선택된 상태에서 데이터 내보내기를 사용합니다.
맥동과 호흡 보기
순환계의 동맥 팽창 1×/8×는 시각적 변형 배율입니다. 호흡에 따른 폐·간·복부 변형과 심장 수축은 공통 신체 동작과 연결된 근사입니다. 일부 장기 경계는 렌더링·기하 제약으로 보정되며 환자별 접촉 해석 결과는 아닙니다.
인사와 춤
움직임에서 오른손 인사 또는 재즈 댄스를 선택한다. 실제 CMU 모션 캡처를 현재 신체 리그에 맞춰 재생하며 반복과 기존 동작 사이의 전환을 부드럽게 연결한다. 인사에서는 오른손을 들어 흔들고, 춤은 Charleston 재즈 동작이다. 캡처에 없는 손가락 세부 움직임은 합성하지 않는다.
신경계와 혈관은 어깨·팔꿈치·손목 등 관절 주변에서 연속적으로 휘도록 연결한다. 상완신경총의 목 쪽 뿌리는 팔을 들어도 목의 고정점을 유지한다. 신경 장력이나 혈관 응력의 물리 해석을 의미하지는 않는다.
혈관 연결과 탄성 변형
열린 혈관 끝단의 위치·굵기·방향을 대조해 일치하는 원본 연결을 이어 준다. 연결부는 같은 관절 가중치를 사용하고 맥동·호흡 속성을 연속으로 보간한다. 대칭 복제 메시의 면 방향을 보정해 우측 혈관 표면 누락을 방지한다. 로딩 시 연결과 세분화를 준비하고 애니메이션은 GPU 스키닝으로 처리한다. 주변을 지나는 동맥과 정맥을 임의로 붙이지 않으며 원본에 없는 모세혈관이나 혈류 연결을 새로 만들어 낸 모델은 아니다. 형상 변형은 연구 시각화용이며 혈관 탄성 재료·혈류 FSI의 임상 교정 해석과 구분한다.
신경과 피부 경계
신경은 표시 중인 외피와 같은 피부 메시 및 최종 관절 자세를 기준으로 내부 위치를 보정합니다. 피부를 꺼도 이 경계는 유지됩니다. 피부 삼각형의 관절 가중치와 호흡 변형으로 신경의 내부 기준점을 이동시키고, 기준점에서 과도하게 이탈하거나 피부 면을 넘는 위치를 제한합니다. 목의 척추 연결부는 기존 고정점을 유지하고, 팔꿈치의 좁은 구간은 부드럽게 안쪽으로 맞춥니다. 피부 안쪽 여유는 시각화용 3 mm이며 조직 깊이에 비례해 국소 이동을 제한합니다. 신경을 삭제하거나 투명하게 숨기는 방식은 아닙니다. 이 제약은 형상 돌출 방지를 위한 운동학적 근사이며 신경 장력·마찰·조직 접촉의 임상 물성 해석은 아닙니다.
공통 톱 메뉴의 **성능 모드**에서 자동·저사양·균형·고화질을 선택합니다. 전신 트윈과 선택값을 공유하며 브라우저에 저장합니다. 저사양은 3D 최대 30FPS와 낮은 해상도, 균형은 전신 경량 모델과 확대 영역 정밀 모델, 고화질은 보이는 정밀 모델을 사용합니다. 자동은 기기 사양과 재생 중 프레임 속도로 판단합니다. CAP·ECG·ACC 생성 및 소켓 입력·융합 분석 주기는 성능 모드에 따라 바뀌지 않습니다.
시작하기
상단 전신 트윈 다음의 수면무호흡 메뉴를 연다. 명치 패치에는 C1·C2·C3 정전용량 전극과 ECG·3축 가속도계가 표시된다. 피부 버튼으로 외피를 확인하고 패치 확대 버튼으로 흉곽과 패치를 자세히 본다. 3D는 기존 전신 해부학 메시를 공유한다.
기본 입력은 합성 정전용량 3채널이다. 깨끗한 데이터가 약 20–32초 쌓이면 호흡수를 표시한다. ECG 베이스라인, 가속도, 호흡 소리 포락선, 레이더 변위를 선택하면 주기와 품질이 일치하는 채널을 결합한다. 표시된 품질은 주기성 지표이며 임상 정확도나 신뢰구간이 아니다.
왼쪽 수면, 오른쪽 수면, 뒤척이기, 바로 눕기를 선택할 수 있다. 3D 자세와 합성 센서는 같은 연속 체위 값을 사용한다. 뒤척이기는 64초 주기의 두 번의 전환과 안정 구간으로 구성된다. 수면 체위는 관절과 접촉을 제약한 제작 애니메이션이며, 수면 모션 캡처 자료를 사용했다는 뜻은 아니다.
패치 위치 조절
패치를 직접 드래그하거나 패치 이동 버튼을 켜고 가슴 앞면을 클릭한다. 패치 밖에서는 카메라를 회전할 수 있으며, 이동 모드를 끄면 일반 카메라 조작으로 돌아온다. 터치 드래그도 지원한다. 좌우 슬라이더는 환자 기준 오른쪽 8 cm부터 왼쪽 8 cm까지, 높이는 초기 명치 위치 기준 아래 6 cm부터 위 20 cm까지 조절한다. 옆으로 누워 패치가 가려지면 슬라이더로 조절할 수 있다. 둥근 화살표 아이콘은 패치만 초기 위치로 복원한다.
패치의 곡면은 실제 외피 삼각형에 부착되며 호흡과 체위 변화에 따라 같은 피부 위치를 유지한다. 위치는 내보내기 JSON의 patchPlacement에 atlas-bind 좌표(m, X는 환자의 왼쪽, Y는 위쪽)로 기록한다. 합성 모드에서는 세 전극의 실제 피부 좌표로 ECG 전위차와 국소 CAP 감도를 다시 계산한다. 이동 시 아티팩트 구간을 기록한다. 외부 소켓 신호는 위치 이동으로 수정하거나 합성하지 않는다.
물리 및 전기 모델
폐는 단일 구획의 운동 방정식 R·dV/dt + V/C_L = P_mus로 표현한다. V는 기능적 잔기량(FRC) 위 용적(L), C_L은 폐 순응도(L/cmH₂O), R은 기도 저항(cmH₂O·s/L)이다. 압력 구동과 이완, 기도 저항에 따라 용적과 기류를 적분한다. 흉곽 변위는 용적과 호흡 노력에 연결하며 정상 기본 조건에서 수 mm 크기로 설정한다.
각 전극의 유효 정전용량은 C_total = C_parasitic + ε₀·ε_eff·A_eff/d_eff로 계산한다. 흉벽 움직임에 의한 면적 변형, 유효 거리 변화, 접촉 움직임과 잡음을 반영한다. ε_eff, d_eff는 피부·지방·폐를 통과하는 실제 전기장 해석을 대신하는 교정 파라미터이다. 명치의 공면 전극이 폐에 평행판을 형성한다는 뜻이 아니며 절대 폐용적을 직접 측정했다는 주장도 아니다. 정밀 확장은 개인별 CT/MRI 분할과 전기장 FEM, 기류/폐활량계 동시 교정이 필요하다.
ECG는 P·Q·R·S·T별 3차원 전류 쌍극자 p를 합산하고, 균질 준정적 체적 도체의 전위 φ = p·r/(4πσ|r|³)를 전극별로 계산한다. r은 심장 소스에서 전극까지의 벡터(m), p는 A·m, σ는 S/m이며 표시 전위는 mV로 변환한다. C3−C1 전위차를 측정하고 C2를 기준으로 두는 연구용 배선 가정이다. 실제 장치 배선을 확인했다는 뜻은 아니다. 위치·방향에 따라 진폭, 극성, P/QRS/T 비율이 달라지며 거리만으로 단조 감소하지는 않는다. 호흡에 의한 심장 위치·방향과 국소 접촉 기저선 변화를 포함한다. 기본 전도도 0.2 S/m와 쌍극자 크기는 연구용 유효값이며 실제 ECG 교정을 대신하지 않는다.
CAP의 국소 결합은 실제 폐 5엽의 전면 메시에서 추출한 541개 표본과 각 전극의 피부 위치를 사용한다. 30 mm 공간 가중, 조직 깊이 감쇠, 복부 호흡 노력의 공간 분포, 피하지방 유효 두께를 적용해 국소 변위를 산출하고 A_eff와 d_eff에 반영한다. 공면 전극의 직접 유전 감도는 exp(−2π·depth/28 mm)로 감쇠하는 작은 항이다. 기본 명치 위치는 폐 아래이므로 주로 복부의 기계적 결합을 반영한다. 깊은 폐를 직접 정밀 측정하는 전기장 FEM이 아니다. 기본 지방 두께 8 mm 및 감쇠 길이는 교정 전 가정이다. scripts/build-sleep-anatomy.mjs가 입력 메시 해시와 감도용 공간 표본을 재생성한다.
가속도는 a_sensor = Rᵀ[g + α×r + ω×(ω×r) + a_resp] + noise로 체위·회전·국소 호흡 가속도를 조합한다. 패치 X는 전극 C1→C3, Y는 피부를 따라 머리 방향, Z는 피부 바깥 방향이다. 세 축 모두 중력과 잡음을 포함하며, 정지 시 벡터 크기는 약 9.81 m/s²이다. 호흡 융합은 세 축에서 유효한 주기성 후보를 평가해 가장 품질이 좋은 축 하나를 사용한다.
파형 읽기
CAP C1·C2·C3, ECG, ACC X·Y·Z, EDR을 각각 8개 행에 표시한다. CAP와 ACC는 같은 모달리티 안에서 같은 배율을 사용하되 각 채널의 중심은 다르며 숫자 축에 실제 단위를 표시한다. ECG는 ±0.5/1/2/5 mV 고정 범위를 선택한다. 범위 초과 시 CLIP을 표시하므로 패치 이동에 따른 진폭 차이를 자동 확대가 숨기지 않는다. 여러 외부 채널이 같은 종류로 들어오면 가장 최근 채널을 그리며, 분석에는 활성 채널들이 참여한다.
EDR은 획득 ECG의 200 ms·600 ms 인과적 중앙값 필터와 저주파 기저선 처리 결과다. 합성 목표 호흡수나 폐용적을 직접 그린 파형이 아니며 필터 지연을 포함한다. HR은 ECG 극성에 독립적인 적응 임계값 검출과 측정 박동 간격으로 구한다.
수면에서는 위쪽 팔을 몸 앞쪽으로 모으고 아래쪽 팔은 매트리스 방향으로 두는 연속 관절 자세를 사용한다. 팔을 몸통과 함께 공중으로 들어 올리던 추가 회전을 제거했다. 신체 외피의 지지 표본으로 침대 높이를 보정하며, 개인별 접촉 역학을 푸는 모션 캡처나 FEM은 아니다.
모든 설정값은 연구용 예시이다. 패치 치수, 유전 특성, 유효 거리, 기기 잡음과 동역학 파라미터를 실제 기기로 교정해야 한다.
호흡 추정과 레이블
정전용량은 세 전극 평균을 사용한다. ECG는 저주파 기저선을 추출하며 R파 검출에서 심박수를 별도로 계산한다. 가속도와 레이더, 오디오 특징도 각각 호흡 후보를 만든다. 최대 32초 버퍼를 균일 간격으로 재표본화하고 선형 드리프트를 제거한 뒤 6–35회/분 범위에서 자기상관 주기를 추정한다. 주기성 품질과 중앙 주기에 대한 일치도에 따라 후보를 선택하고 품질 제곱 가중치로 결합한다. 합성 모델의 목표 호흡수나 참조 용적은 추정기에 전달하지 않는다.
ACC의 움직임과 중력 변화, 정전용량의 급격한 변화, 카메라 움직임 특징을 아티팩트 분류에 사용한다. ACC와 카메라의 움직임 판별은 호흡 융합 스위치와 독립적으로 동작한다. 움직임 뒤 2.5초 보호 구간을 적용하고 새로운 깨끗한 구간에서 추정을 재개한다. 신호 소실, 긴 샘플 공백, 오래된 입력은 유효 호흡수로 채우지 않는다. 주기성이 낮은 경우 숫자를 숨긴다.
폐쇄성 시나리오는 매 60초의 25–43초 구간에서 기도 저항을 높이되 호흡 노력을 남긴다. 중추성 비교 시나리오는 같은 구간에서 호흡 구동을 없앤다. 표시된 이벤트 구간은 입력 시나리오의 참조이며 자동으로 확진한 사건이 아니다. CAP만으로 기류 소실, 임상 AHI, 수면 단계 또는 무호흡 유형을 확진하지 않는다.
소켓 입력
WebSocket / IP를 선택하고 WS 또는 WSS 게이트웨이 주소에 연결한다. 합성 모드와 외부 입력 모드는 버퍼를 분리하며 전환 시 초기화한다. 여러 기기의 채널을 한 연결로 수신한다. 최대 32개 채널 ID를 허용한다. 각 장치는 공통 세션 시작 시각을 기준으로 초 단위 타임스탬프를 사용해야 한다. 장치 시계 동기화와 전송 지연 보정은 게이트웨이의 책임이다.
JSON 패킷 예: {"version":1,"channel":"patch-1","kind":"cap","unit":"pF","t0":10.0,"fs":25,"samples":[[14.21,15.07,15.88],[14.23,15.09,15.90]]}
- version: 1. channel: 기기별 고유 문자열, 최대 64자. kind: 아래 종류 중 하나.
- t0: 첫 샘플의 세션 시각(초). fs: Hz, 1–2000. 다음 샘플 시각은 t0 + i/fs이다.
- samples: 패킷당 1–2000개. JSON 프레임 최대 1 MB. 채널별 시각 역전과 중복 패킷, 잘못된 단위·배열·비유한 값을 거부한다.
- cap: [C1,C2,C3], pF. ecg: 스칼라, mV. acc: [ax,ay,az], m/s2, 중력을 포함한다.
- breathAudio: 비음수 음성 RMS 포락선, rms. snore: 0–1 코골이 확률, probability.
- camera: 0–1 움직임 점수, motion. radar: [호흡방향 변위,x,y,z], mm. airflow: 부호 있는 기류, L/s.
- ACC는 패치 좌표의 XYZ를 모두 전송한다. 실제 기기 축과 단위를 게이트웨이에서 정렬한다. 융합은 주기성 품질이 좋은 축을 선택한다.
브라우저는 원시 TCP·RTSP·레이더 IQ 데이터를 직접 해석하지 않는다. 오디오 RMS, 코골이 확률, 영상 움직임 점수, 레이더 변위·위치는 기기/게이트웨이에서 추출해 전달한다. 원본 오디오/영상은 브라우저가 지원하는 HTTP(S) 파일/스트림 주소로 별도 모니터링할 수 있다. 이 버전에는 코골이 AI 분류기나 영상 자세 추정 모델이 포함되지 않는다.
로컬 게이트웨이
web 폴더에서 npm ci 후 npm run sleep:demo를 실행한다. 로컬 페이지에서 ws://localhost:8765/stream으로 연결하면 같은 물리 모델이 실제 소켓을 거쳐 들어온다. 장치 연결용은 npm run sleep:gateway를 실행한다. 생산자는 ws://localhost:8765/input에 위 JSON 패킷을 전송하고, 화면은 /stream에 연결한다. 데모 모드에서는 장치 입력을 받지 않는다.
기본 바인딩 주소는 127.0.0.1이다. LAN 수신이 필요하면 SOMA_SLEEP_HOST를 해당 인터페이스 주소로 설정하고 SOMA_SLEEP_PORT로 포트를 지정한다. Mac/Linux 예: SOMA_SLEEP_HOST=0.0.0.0 npm run sleep:gateway. Windows PowerShell 예: $env:SOMA_SLEEP_HOST='0.0.0.0'; npm run sleep:gateway.
공개 HTTPS 사이트에서는 WSS 게이트웨이를 사용한다. 로컬 데모의 HTTP 페이지에서는 WS를 사용할 수 있다. 이 샘플 게이트웨이는 로컬 연구용으로 인증이 없으므로 인터넷 공개는 인증과 TLS를 갖춘 게이트웨이를 사용한다. 브라우저 데이터는 이 페이지에서 처리되며 별도 클라우드 저장을 수행하지 않는다.
내보내기는 최근 12초의 원시 버퍼, 현재 추정 결과, 최근 레이블 전환(최대 500개)과 합성 설정을 JSON으로 저장한다. 전체 밤 기록 또는 전체 원본 미디어 저장 기능은 아니다.
근거와 검증 범위
명치 부위 정전용량 호흡 모니터링 연구: https://pubmed.ncbi.nlm.nih.gov/32643322/ . 해당 연구는 방법 선택의 참고이며 이 시뮬레이터의 정확도 근거로 사용하지 않는다.
ECG 합성 모델 참고: https://physionet.org/content/ecgsyn/1.0.0/ . 수면 호흡 사건과 노력/기류 구분 참고: https://pmc.ncbi.nlm.nih.gov/articles/PMC3459210/ . WebSocket 게이트웨이: https://github.com/websockets/ws . 입력 자료의 회사 정보, 임상 수치, 내부 일정은 공개 매뉴얼에 옮기지 않는다.
전위 모델 참고: 3차원 ECG 쌍극자 모델. 국소 정전용량과 흉벽 호흡 참고: 정전용량 호흡 패치 연구. 본 구현의 공간 커널 및 계수는 별도 연구용 근사이다.
공통 톱 메뉴의 **성능 모드**에서 자동·저사양·균형·고화질을 선택합니다. 손목 카드 내부의 중복 선택기는 표시하지 않습니다. 단독 실험 창에서는 창 맨 위에 표시합니다. 전신·수면 화면과 선택값을 공유하며 브라우저에 저장합니다. 아바타에는 전신과 같은 정밀도 전환을 적용하고, 손목·피부 단면에는 해상도와 30/60FPS 상한을 적용합니다. 손목의 세부 해부학 구조는 유지합니다. 고화질에서는 손목 그림자도 켭니다. 자동은 기기 사양과 재생 성능에 따라 낮춥니다. 신호 생성·수집·혈압 추정 설정은 바뀌지 않습니다.
갱신: 2026-09-13. Radial Artery Digital Twin 개요의 접기 버튼으로 아래 실험 공간을 넓힐 수 있습니다.
손목 보기 선택
해부학 레이어 드롭다운, 표시 변위, 피하지방은 3D 아래 한 줄에 있습니다. 영상 영역은 가로·세로 1:1입니다.
- 해부학 레이어: 원본 손·손목 뼈, 근육·힘줄, 혈관·신경과 반투명 피부를 표시합니다.
- 피부 외형: 피부 중심으로 표시합니다.
- 3D 조직 단면: 대표 조직 블록의 피부·지방·혈관·지지 구조를 봅니다.
- 표면 등고선: 변형된 조직 표면 높이를 등고선과 그리드로 봅니다.
S/T 단면은 해부학적 특징을 반영한 대표 조직 창이며 원본 손목 메시의 실제 Boolean 절단면은 아닙니다.
3D 회전과 확대
- 중앙 빈 곳에서 좌우 드래그: 동맥 길이축을 중심으로 손목을 굴립니다.
- Option(Alt)+좌우 드래그: 패치 위에서도 동맥축 회전을 사용할 수 있습니다.
- 상단에서 오른쪽 드래그: 시계 방향으로 회전합니다. 왼쪽은 반대입니다.
- 하단에서 오른쪽 드래그: 반시계 방향으로 회전합니다. 왼쪽은 반대입니다.
- 상단·하단에서 위아래 드래그: 현재 화면의 수평축을 중심으로 기울입니다.
- 좌우 가장자리 드래그: 물체가 드래그 방향을 따르도록 일반 회전합니다.
- 우클릭 드래그: 화면을 이동합니다. 휠: 확대·축소. 더블클릭: 카메라를 복원합니다.
동작은 드래그를 시작한 영역으로 고정됩니다. 도중에 다른 영역으로 넘어가도 회전 방식이 갑자기 바뀌지 않습니다. 패치 클릭은 패치 이동이 우선합니다.
전극 패치와 요골동맥
패치를 클릭해 끌거나 Shift+드래그로 이동합니다. 방향키는 0.5 mm, Shift+방향키는 2 mm 단위입니다. 3D 영역에 키보드 초점을 둔 뒤 쉼표와 마침표 키를 누르면 패치 부착 각도를 2.5°씩 조절합니다.
패드는 손목의 피부 곡면을 따라 감깁니다. 요골동맥 좌우 이동·깊이 조절은 3D 바로 아래 옵션에 있으며, 깊이의 양수는 피부 안쪽 방향입니다. 빨간 요골동맥은 이동할 때 손 쪽 경로와 연결을 유지하도록 휘어집니다.
정전용량 어레이 스냅샷의 흰 선은 현재 동맥 경로의 패치 좌표 투영입니다. 노란 추정선은 알고리즘 결과이므로 서로 일치하지 않을 수 있습니다. 자세와 팔 위치를 조정하면 기하·접촉 조건과 신호가 함께 바뀝니다.
초기화
손목 단면 제목 옆 ↺ 아이콘은 해부학 레이어, 표시 변위 1×, 피하지방 2.2 mm, 수동 혈관 이동 0, 패치 기본 위치·각도와 카메라를 복원합니다. 전극 배열 구성과 전체 신체 시뮬레이션 설정은 유지합니다.
갱신: 2026-09-13. 전신 트윈에서 피부계를 켜고 피부 또는 표시된 영역을 선택하면 가운데에 3D 단면 모달이 열립니다.
관찰 대상
12개 영역에 대표 피부·진피·지방 두께와 곡률이 설정되어 있습니다. 손목은 동맥과 건·뼈의 관계, 손끝은 두꺼운 표피와 지방 패드, 귓볼은 지방 조직 등 부위별 특징을 표현합니다.
각질·세포·콜라겐·지방 소엽과 샘의 미세 모습은 대부분 절단면의 절차적 텍스처입니다. 개별 세포를 분할한 환자 영상은 아닙니다. 전체 블록·등고선·진피·혈관 초점을 바꾸어 관찰합니다.
탄성 변화와 광학 경로
지방 두께와 맥동 표시 배율을 바꾸고 동맥 팽창 및 주변 조직의 이동을 비교합니다. 뼈와 힘줄 주변은 변형이 제한됩니다. 전신 피부 모달과 손목 센싱 전용 단면은 서로 다른 축약 변형 경로를 사용하므로 동일한 물성 해석으로 해석하지 않습니다.
광학 설정에서 파장과 반사·투과 방식을 비교합니다. 표시된 광 경로와 출구 에너지는 대표 산란·감쇠 모델의 시각화입니다. 실제 광검출기의 수광 효율, 환자별 광학 물성이나 검증된 SpO₂ 역산 결과는 아닙니다.
성능
별도의 WebGL 장면이 열리며 모달을 닫으면 그 장면의 자원을 해제합니다. 손목 페이지에서는 화면 밖의 3D 렌더링을 줄이지만, 고해상도 전신과 손목을 함께 표시하면 장치의 GPU에 따라 속도가 달라질 수 있습니다. 데모 서버 검증은 브라우저 FPS 측정을 포함하지 않습니다.
갱신: 2026-09-13. 배포 폴더는 빌드된 전신·손목 시뮬레이터와 매뉴얼을 포함합니다. 원본 프로젝트, Blender, Python, Cloudflare 계정은 데모 실행에 필요하지 않습니다.
지원 환경
- macOS 13.5 이상: Apple Silicon 또는 Intel.
- Windows 11 이상: x64. ARM64 장치는 x64 실행 환경을 사용하며 별도 실기기 확인이 필요합니다.
- Linux: glibc 2.35 이상, x64 또는 ARM64. Ubuntu 22.04 이상 권장. Alpine/musl은 지원하지 않습니다.
Node.js 24.21.0과 Wrangler 4.92.0을 고정합니다. Node는 공식 배포본의 SHA-256을 확인한 뒤 데모 폴더의 .runtime에 설치합니다. 전역 Node나 시스템 PATH는 변경하지 않습니다. 첫 설치에는 인터넷이 필요하며, 설치가 끝나면 데모 실행에 외부 계정이 필요하지 않습니다.
macOS
- ZIP을 쓰기 가능한 폴더에 완전히 풉니다.
Install-macOS.command를 실행합니다.Start-macOS.command를 실행하고 표시되는 로컬 주소를 엽니다.Verify-macOS.command로 별도 검증 서버를 띄워 페이지·스크립트·3D 모델 파일을 검사할 수 있습니다.
터미널에서도 bash Install-macOS.command, bash Start-macOS.command --port 3000, bash Verify-macOS.command --port 3001로 실행할 수 있습니다. 다운로드 파일 실행이 macOS에서 차단되면 내용을 확인한 뒤 터미널에서 해당 명령을 사용하세요.
Windows
Install-Windows.cmd, Start-Windows.cmd, Verify-Windows.cmd 순으로 사용합니다. 포트를 바꾸려면 터미널에서 Start-Windows.cmd -Port 3001을 실행합니다.
Windows 기본 PowerShell 5.1 이상을 사용합니다. 실행 정책 예외는 해당 PowerShell 프로세스에만 적용하며 시스템 정책을 변경하지 않습니다. 설치 프로그램은 관리자 권한이나 MSI 설치 없이 ZIP 형식의 Node를 폴더 안에 준비합니다.
Linux
bash Install-Linux.sh, bash Start-Linux.sh, bash Verify-Linux.sh --port 3001을 실행합니다. 셸은 Bash입니다. curl·tar·gzip이 없으면 설치 스크립트가 apt/dnf/zypper/pacman으로 필요한 다운로드 도구를 설치하며, 이 경우에만 root 또는 sudo가 필요합니다.
주소·종료·재실행
기본 주소는 http://127.0.0.1:3000입니다. 서버가 준비될 때까지 잠시 기다린 뒤 접속합니다. 중지는 터미널에서 Ctrl+C입니다. 이후에는 Start만 실행하면 됩니다. 설치는 재실행해도 같은 버전과 잠금 파일이면 기존 패키지를 재사용합니다.
다른 장치에서 접속할 데모는 macOS/Linux에서 --host 0.0.0.0, Windows에서 -BindHost 0.0.0.0을 지정하고 해당 컴퓨터의 LAN IP와 포트를 사용합니다. 기본값은 로컬 컴퓨터만 허용합니다. 방화벽 허용 여부는 OS에서 확인합니다.
검증과 문제 해결
Verify는 서버를 직접 시작하고 홈·전신·손목·연구·매뉴얼·원본 실험 화면, 페이지 스크립트와 실제 GLB를 검사한 뒤 종료합니다. 결과는 .runtime/verification.json, 서버 출력은 .runtime/verification-server.log입니다. 브라우저에서 실제 WebGL 렌더링이나 FPS를 검사하는 절차는 아닙니다.
- 포트 사용 중: 다른 포트를 지정합니다. 스크립트는 기존 서버를 종료하지 않습니다.
- 체크섬/파일 손상: ZIP을 새 폴더에 다시 풉니다.
- 설치 실패: 인터넷과 디스크 공간, 폴더 쓰기 권한을 확인한 뒤 Install을 다시 실행합니다.
- 모델이 안 보임: 최신 브라우저의 WebGL/하드웨어 가속을 확인합니다.
- 다른 OS로 이동: ZIP 원본을 사용하세요. 이미 설치된
node_modules와 .runtime을 OS 간 복사하지 않습니다.
모델 출처
모델의 출처와 이용 조건은 dist/client/models/ATTRIBUTION.md 및 동작 자산의 출처 문서에 보존됩니다. 이 패키지는 연구 데모이며 임상 정확도 또는 모든 자산의 상업 이용 권한을 보장하지 않습니다.
환경 근거
Node.js 24 공식 배포와 Wrangler 지원 환경을 기준으로 작성했습니다.
수면 센서 소켓 데모
설치가 끝난 데모 폴더에서도 npm run sleep:demo를 실행할 수 있다. 별도 터미널에서 실행한 뒤 수면무호흡 화면의 WebSocket / IP에 ws://localhost:8765/stream을 입력한다. 실제 장치는 npm run sleep:gateway의 /input으로 v1 JSON 패킷을 전송한다. 자세한 단위와 채널 형식은 웹 사용 매뉴얼의 수면무호흡 실험을 참고한다. 기본 게이트웨이는 이 컴퓨터에서만 접근하며 인터넷 공개용 인증 서비스가 아니다.