Roblox: 참조 영상 그대로 재현은(는) 무엇을 하나요?
사용자의 기준은 "영상 그대로" 입니다. 사용자는 창작된 이펙트나 메커니즘, 부자연스러운 애니메이션, 영상에 없는 장식을 거부합니다. 아래 모든 내용은 영상을 기준으로 삼고, 기억이 아닌 영상과 대조하여 검증하도록 안내합니다.
도구: Roblox Studio MCP (execute_luau, search_asset, insert_asset, upload_image, screen_capture, start_stop_play, user_keyboard_input, user_mouse_input, get_console_output, multi_edit), Blender MCP (execute_blender_code — 프레임 추출 및 VFX 제작), PowerShell/Bash.
0. 기본 원칙
- 영상에 보이는 것만 재현합니다. 불분명하면 더 많은 프레임을 확인하고, 그래도 모르겠으면 묻습니다. 빈칸을 임의로 채우지 마세요.
- 텍스처/이미지: 직접 그리지 마세요. 먼저 Creator Store를 사용하세요. 비슷한 것이 없으면 참조 영상을 바탕으로 Blender에서 에셋을 제작하고(§4), 사용자에게 그렇게 했다고 알리세요.
- 기본 트리거는 키 입력입니다 (지정되지 않은 경우 어떤 키인지 물어보세요).
- 요청받지 않은 장식(회전, 만화 같은 뒤집기)은 넣지 마세요. 사용자가 명시적으로 싫어했습니다.
- 다른 게임의 브랜딩, 이름, UI 아트, 불법 복제 에셋을 사용하지 말고, 기존 게임 전체를 복제하지 마세요. 특정 게임과 동일한 게임을 만들라는 요청을 받으면, 보여진 구체적인 메커니즘/이펙트만 재현하고 그렇게 말하세요.
1. 프레임 추출 및 분석
- Blender를 통해 프레임을 렌더링합니다 (ffmpeg는 보통 없음):
scripts/extract_frames.py를execute_blender_code로 보내고VIDEO/OUT을 설정합니다. 임시 씬을 사용하므로 사용자의 .blend 파일은 건드리지 않습니다. Windows에서는OUT경로를 짧게 유지하세요 (MAX_PATH). scripts/contact_sheet.ps1 -Dir <OUT>→ 4×4 라벨링된 시트. 모든 시트를 읽은 다음, 컷, 임팩트, UI 변경, 입력이 있는 모든 부분에서 단일 프레임을 엽니다. 빠른 메커니즘은 측정할 시점 주변에서STEP = 1을 사용하세요.- 무엇을 만들지 결정합니다: VFX/컷신, 게임플레이 시스템, 또는 둘 다 (대부분의 전투 동작은 둘 다에 해당: 무엇이 일어날지 결정하는 시스템 + 그것을 보여주는 VFX).
- 빌드하기 전에 사양을 작성합니다 — 이후 검증의 기준이 됩니다:
- 비트 시트 (VFX): 시간(프레임/fps), 카메라, 모든 이펙트(모양, 색상, 텍스처, 크기, 수명, 개수), 각 캐릭터의 포즈, 후처리 효과를 한 줄에 하나씩 기록.
- 시스템 사양 (메커니즘): 입력, 상태와 전이, 타이밍(준비/활성/회복/쿨다운, 프레임 단위), 거리와 속도(~5 스터드 R15 바디 기준), 화면에 표시되는 숫자, UI 및 해당 애니메이션, 다른 플레이어에게 보이는 것.
references/systems.md참조.
2. 플레이스 검사
search_game_tree + Lighting, StarterPlayer, ReplicatedStorage, ServerScriptService의 빠른 덤프. 사용자의 기존 프레임워크(전투 모듈, 리모트, 데이터 저장소, UI 키트)를 병행 구축하지 말고 재사용하며, 코드 스타일에 맞춥니다.
3. Creator Store 에셋
search_asset(범위creator_store,priceFilter: free)를 각 요소당 3~5개의 다른 표현으로 실행합니다. 후보를 시각적으로 비교합니다:scripts/asset_sheet.ps1이 라벨링된 썸네일 시트를 만들어 참조 프레임과 함께 읽을 수 있게 합니다.- Decal 에셋 ID는 이미지 ID가 아닙니다: 파티클/GUI에서 사용하기 전에
game:GetObjects("rbxassetid://"..id)[1].Texture(Edit datamodel)로 확인하세요. - 무료 모델에는 종종 백도어가 포함되어 있습니다. Model을 삽입한 후 모든
LuaSourceContainer를 나열하고, 필요한 것만 남기고 나머지는 삭제하세요. - 실제 아바타를 더미/적으로 사용:
Players:CreateHumanoidModelFromUserId(Players:GetUserIdFromNameAsync(name))이 Edit에서 작동합니다. HRP를 고정하고, 발을 바닥에 놓고, Animate 스크립트를 제외한 모든 스크립트를 제거하세요.
4. Blender에서 VFX를 제작해야 하는 경우
기본적으로 Roblox 네이티브 이펙트(파티클, 빔, 트레일, 파트, GUI)를 사용합니다. 저렴하고, 조정 가능하며, 실시간 렌더링됩니다. 참조 영상에 네이티브로 근사하기 어려운 것이 있을 때 Blender로 전환합니다:
| 참조 영상에 표시된 것 | Blender 출력 | Roblox로 가져오는 방법 |
|---|---|---|
| 두꺼운 3D 베기 초승달, 꼬인 나선, 충격파 돔, 스파이크, 깊이가 있는 지면 균열 | UV가 있는 메시 (+ 그라데이션/노이즈 텍스처) | 내보낸 데이터로부터 EditableMesh 빌드, 또는 3D Importer |
| 수작업/애니메이션 연기, 불, 폭발, 에너지 버스트, 임팩트 프레임 | 렌더링된 플립북 스프라이트 시트 (투명 PNG) | upload_image → ParticleEmitter 플립북 / ImageLabel |
| 복잡한 텍스처 (노이즈 트레일, 그라데이션 램프, 소용돌이 맵) | 렌더링된 PNG | upload_image → Beam/Trail/Texture |
파이프라인(씬 설정, 플립북 렌더링 + 그리드 패킹, 메시를 Luau로 내보내기, localhost 업로드, EditableMesh 빌더, 타임라인에서 메시 애니메이션)은 references/blender_vfx.md를 읽으세요.
5. 빌드
- VFX / 컷신: 타임라인(이벤트, 카메라 샷, 프레임별 업데이터, 타임라인 시간 지연, 워프 존, 일시 정지)과 정리 스택, 그리고 시전자와 대상의 키프레임 바디로 구동되는 클라이언트 ModuleScript 하나.
references/engine.md의 뼈대를 복사하세요. - 시스템: 서버 권한 — 클라이언트는 RemoteEvent를 통해 의도를 보내고, 서버는 (쿨다운, 상태, 범위, 속도 제한)을 검증한 후 결과를 적용하며, 클라이언트는 피드백을 렌더링합니다. 폴더 구조와 시스템별 레시피는
references/systems.md에 있습니다. - 둘 다: 서버는 히트/데미지/상태를 결정하고 클라이언트에 발사합니다. 각 클라이언트는 VFX 모듈을 재생합니다. 타이밍은 하나의 공유 설정에 유지하여 메커니즘과 시각 효과가 동기화되도록 합니다.
6. 생동감 있는 애니메이션
정적인 포즈는 "떡"처럼 보입니다. 효과적인 방법:
- 포즈가 아닌 키프레임 트랙 — 캐릭터당 수십 개의 키; 각 키 = 포즈 + 오버라이드 + 이징(easing) 으로의 전환.
- 모든 공격: 예비 동작 (Quad.In) → 타격 (Exponential.Out, 40–70 ms) → 과도 (Quad) → 안정 (Sine.InOut). 대상에 적중할 때마다: 반동 키 + 감쇠하는 흔들림 임펄스.
- 매 프레임 생동감 추가: 호흡, 모든 관절의 느린 노이즈 드리프트, 히트 쉐이크, 떨림.
- 대상에 퍼포먼스를 부여하세요 (놀람, 반동, 비틀거림, 쓰러짐: 무릎, 손, 옆으로). 영상에 없으면 공중제비는 넣지 마세요.
- 스토리 비트를 영상의 컷에 맞추고, 페이싱에 대해 물어보며
TimeWarp존을 사용해 느린 구간을 만드세요.
7. 참조 영상과 검증
- 플레이테스트. 타임라인:
PauseAt으로 단계별로 이동하고 각 비트를 해당 참조 프레임 옆에 스크린샷합니다. 시스템:user_keyboard_input/user_mouse_input으로 입력을 구동하고,Client와Server데이터모델 모두에서 상태를 읽고, 사양(숫자 — 감이 아닌)에 대해 타이밍(os.clock)과 거리를 측정합니다. - 디버그 카메라는
Enum.RenderPriority.Last.Value에서; 일시 정지 중에는 파티클을 지우고 빔/GUI를 비활성화하여 몸체를 볼 수 있습니다. execute_luau는 자체 VM에서 실행됩니다:require는 별도의 모듈 인스턴스를 반환합니다 — 게임 상태(속성, 앵커링, CameraType)를 관찰하고 모듈 필드는 보지 마세요.- 실제 입력으로 마무리한 후, 정리/복원과 깨끗한
get_console_output을 확인하세요.
8. 주의사항
빌드하기 전에 references/gotchas.md를 읽으세요 — 보이지 않는 1-세그먼트 빔, 다크-헤일로 플레어, DepthOfField 번짐, Expo vs Exponential, 조인트 변환이 PreSimulation에서만 렌더링되는 문제, AnimationConstraint 릭, 바디 크기 조정 + 바닥 고정, 지형 수심, 오버레이가 물에 반사되는 현상, 네트워킹 함정 등.
9. 보고서
각 비트/메커니즘이 지금 하는 일 (타임스탬프 또는 상태별), 사용된 에셋 (스토어 ID, Blender 제작 에셋 및 업로드된 ID), 일치시킬 수 없었던 것과 그 이유, 조정 가능한 값이 있는 위치 (설정 모듈, Cutscene.Poses/Tracks, TimeWarp), 그리고 플레이스를 저장하라는 알림 (Ctrl+S).