Autonomous MetaHuman — sơ đồ hệ thống
Từ bộ scan đầu 4D tới MetaHuman chạy trong Unreal Engine, rồi quay lại Houdini để gắn tóc, quần áo, phụ kiện và biến đổi morph. Toàn bộ chạy headless, điều khiển từ một panel trong Houdini 22, ứng dụng độc lập hoặc dòng lệnh.
Các thành phần
Đầu vào
Bộ scan RealityScan (zip, thư mục OBJ hoặc OBJ rời) và một profile JSON cho mỗi bộ scan. Mỗi profile có thư mục dữ liệu, tài liệu và Content Unreal riêng nên không ghi đè lên nhau.
Tool Autonomous MetaHuman
Một widget PySide6 dùng cho cả Python Panel trong Houdini lẫn ứng dụng độc lập. Lớp core/ chỉ dùng thư viện chuẩn, nên chạy được ở mọi Python, kể cả trong Unreal sau này. Lớp houdini/ nạp gói DCC và so sánh scan.
build.py
41 bước có điều kiện "đã xong", truyền tham số và kết quả qua JSON, ghi lịch sử từng bước. Panel chạy nó như một tiến trình con và đọc tiến độ từ log.
hython + MetaHuman for Houdini
Xử lý hình học scan, bỏ tóc, đo màu da, ICP, chải tóc trên MH Groom Head, khớp rig mặt bằng RigLogic với numpy. Mỗi ảnh render chạy trong một tiến trình hython riêng (bộ vẽ Vulkan crash ở lần render thứ hai).
Unreal Editor headless
Chế độ commandlet cho các bước nhẹ. Chế độ offscreen (-RenderOffscreen) cho các bước cần Slate hoặc RHI: conform, build, render, xuất DCC, Level Sequence biểu cảm.
Dịch vụ MetaHuman
Auto-rig (joint và blend shape) cùng texture nguồn qua tài khoản Epic. Đây là bước duy nhất gửi dữ liệu ra khỏi máy, và chỉ gửi hình dạng nhân vật, không gửi scan gốc.
Quay lại Houdini
Gói DCC (head.dna, body.dna, Maps) → /obj/AMH_*: bề mặt đầu/thân, skeleton, nhân vật APEX, đầu cho groom, scan tham chiếu, biểu cảm dạng morph. Đơn vị là mét.
Tài liệu & thống kê
Lịch sử build → Markdown/HTML. Trang thống kê và trang này deploy lên Cloudflare Pages bằng wrangler.
Houdini Engine (sau này)
Khi Houdini và Unreal là các bản tương thích với plugin Houdini Engine, các bước houdini/ và hython có thể chạy dưới dạng HDA ngay trong Unreal.
Cấu trúc thư mục dự án
Dự án nằm ở F:\Unreal Projects\AutonomousMetaHuman, tổng 35,1 GB (đo lúc sinh trang).
Màu cho biết loại dữ liệu và việc nên làm với nó. Thanh dưới mỗi thư mục so với thư mục cấp trên lớn nhất.
AutonomousMetaHuman.uprojectPipeline/make_project.py.ConfigDefault*.ini của Unreal: Engine (renderer, Python), Editor, Game, Input. Cũng do make_project.py ghi.Pipelinebuild.py@stage chia 5 nhóm, mỗi bước có điều kiện “đã xong”. Truyền tham số qua args.json, nhận kết quả qua result.json, ghi history.jsonl. Tuỳ chọn: --config, --list --json, --force, --keep-going, --docs.config.jsondefault): thư mục scan nguồn, tên nhân vật, frame neutral và frame mũ, số điểm giảm lưới, tóc, đường dẫn Unreal và Houdini.profiles<tên>.json là một profile: chỉ ghi những khoá khác config.json, cùng data_dir, docs_dir, ue_content_root riêng để các bộ scan không ghi đè lên nhau.houprocess_scans (đổi trục, cắt, giảm lưới, chân dung), bald_target (bỏ tóc), skin_tone, iris_tone, landmarks_3d, verify_rig (RigLogic + numpy), compare_expressions, groom_workspace…ueimport_scans, landmarks_all, conform_character, rig_character, skin_apply, build_character, export_character, add_grooms, make_expression_anim, render_expressions…stats_site.pyDocs/site/stats/ từ lịch sử build.system_site.pysite_guide.py).SourceDataSourceData/Scans/ nằm trong .gitignore.Scansdefault, chép từ thư mục nguồn (G:\4DScanLab\SCAN2) bởi bước extract: mỗi frame một thư mục với OBJ, MTL và texture 8K. Bước extract chép lại được khi thư mục nguồn còn; hãy giữ thư mục nguồn.Processeddefault. Xoá được rồi chạy lại build.py, nhưng mất nhiều giờ.FrameNN.bgeo.sc đã xử lý, _canon.obj đưa vào Unreal, _conform.bin, _diffuse.png, _portrait.png, landmark 2D và 3D.*.jsonprocess.json, landmarks_all.json, neutral_selection.json (xếp hạng neutral), portrait_analysis.json, ue_conform*.json, ue_rig*.json._inspecthou_inspect)._bald_textures*_before trước khi chỉnh tông da._skin_grooms_groomGroom_<nhân vật>.hip và ảnh kiểm tra._render_exporthead.dna, body.dna, Maps, Masks) mà panel nạp vào Houdini._houdini.hip do panel tạo (nạp nhân vật, so sánh scan) và biểu cảm đã nướng thành morph._verify_verify_bald: cho nhân vật trọc)._landmarks3dhou_landmarks3d)._rig_verifyrig.png, heat.png, scan.png, rig_fit.bgeo.sc mỗi frame, ue_render/, compare_2d_3d. _rig_verify_2d là bản landmark 2D để so sánh.dnaprofiles<tên>/ với cùng cấu trúc Scans/ + Processed/, ví dụ SCAN2_v2.ContentAutonomousMetaHumandefault; profile khác nằm trong thư mục con cùng tên.ScansCharactersMHC_* (tóc scan, Bald, Bald_HouGroom).MetaHumansMetaHumansBald, MetaHumansHouGroom cho hai biến thể kia.AnimationsMapsL_ScanReview* và L_ScanExpressions.SCAN2_v2SCAN2_v2 (thêm _Smoke của bước kiểm tra).Grooms.abc chải trong Houdini, binding và wardrobe item.__ExternalActors__Docs.md là nguồn, .html sinh từ đó.workflow_assetsworkflow_autonomous_metahuman.html.historyhistory.jsonl: mỗi lần chạy một bước là một dòng (thời gian, trạng thái, số liệu).runs<thời điểm>/console.log: log đầy đủ của từng lần chạy.profilessitestats/ và ảnh img/. Deploy lên Cloudflare Pages.SavedSaved/Logs hữu ích khi một bước Unreal lỗi.IntermediateDerivedDataCache.wrangler.claudelaunch.json).Thư mục tool Documents\houdini22.0\Autonomous Metahuman (220 KB)
python/autonomous_metahumancoreproject.py (profile, thư mục, settings), scans.py (bảng frame, so sánh A/B), pipeline.py (nhóm bước, chạy build.py, đọc tiến độ).houdinihou: importer.py (gói DCC → /obj/AMH_*, nướng biểu cảm), compare.py (ICP + heat map), run_job.py (job cho hython khi chạy ngoài Houdini).uipanel.py: giao diện PySide6 dùng chung cho Python Panel và ứng dụng độc lập; app.py: cửa sổ độc lập.__main__.pygui, status, run (--profile, --project, --force).python_panelsAutonomousMetaHuman.pypanel: khai báo Python Panel autonomous_metahuman.toolbarautonomous_metahuman.shelf: AMH Panel, AMH Import, AMH Reload.run_standalone.batpy313 có PySide6 + numpy).settings.jsonREADME.mdREADME.html), ảnh trong docs/.../packages/AutonomousMetahuman.jsonAMH_TOOL, AMH_PROJECT, thêm python/ vào PYTHONPATH và tool vào HOUDINI_PATH.Intermediate, DerivedDataCache,
Saved/Autosaves. Sao lưu tối thiểu: Pipeline/, Config/, file .uproject,
thư mục tool và bộ scan nguồn; mọi thứ khác build.py tạo lại được (Content và Processed mất vài giờ).
Profile khác profile mặc định có dữ liệu riêng trong SourceData/profiles/<tên>,
Docs/profiles/<tên> và Content/AutonomousMetaHuman/<tên>.Cách dùng panel Autonomous MetaHuman
Panel là giao diện của pipeline: chọn profile, xem từng scan, chạy các bước headless và nạp kết quả về Houdini. Cùng một panel chạy trong Houdini 22 (Python Panel) hoặc độc lập ngoài Houdini.
1Mở panel
- Trong Houdini: package
packages/AutonomousMetahuman.jsontự nạp tool. Bấm AMH Panel trên shelf Autonomous MetaHuman, hoặc tạo pane tab Python Panel rồi chọn Autonomous MetaHuman. Có thể ghim pane vào desktop như mọi pane khác. - Không cần Houdini: chạy
run_standalone.bat gui. Các thao tác cần Houdini sẽ chạy trong hython và lưu ra file.hip. - Dòng lệnh:
run_standalone.bat status --profile SCAN2_v2, hoặcrun_standalone.bat run rig_verify --profile SCAN2_v2. - Shelf còn có AMH Import (nạp gói DCC mới nhất mà không cần mở panel) và AMH Reload (nạp lại mã khi sửa tool).

2Bố cục chung
3Trang Scan: xem và so sánh frame

Bộ lọc và banner
- Vai trò: mọi frame, neutral & mũ, biểu cảm đã khớp rig, chưa khớp rig.
- Xếp theo: tên, giống neutral nhất (theo
neutral_selection.json), rig lệch nhiều nhất, miệng mở nhiều nhất, marker dày nhất. - Ảnh: ảnh trên thẻ (chân dung, scan, rig khớp, heat map, render Unreal).
- Banner tóm tắt profile; nút CHẠY PIPELINE mở trang Chạy.
Thẻ frame
- Nhãn NEUTRAL / MŨ cho frame neutral và frame đội mũ lưới.
- Dòng phụ: sai lệch rig → scan (mm) và control mạnh nhất, hoặc số điểm nếu chưa khớp rig.
- Bấm một thẻ để xem chi tiết; thẻ đang chọn có viền xanh.
Khung chi tiết
- Năm nút ảnh: Ảnh chân dung, Scan, Rig khớp, Heat map sai lệch, UE render Unreal. Nút mờ là ảnh chưa có.
- Chip: vai trò, đã xử lý, có texture, 4 control mạnh nhất.
- 6 ô số liệu: số điểm, điểm neutral (thấp = giống neutral), độ mở miệng, mật độ marker, lệch lúc căn ban đầu, lệch sau khi khớp rig.
- Chọn neutral / Chọn frame mũ ghi
neutral_frame/cap_framevào profile. Chạy lại các bước sau đó để áp dụng.
_houdini/compare_A_B.hip.4Trang Cấu hình
- Dự án Unreal: thư mục có
Pipeline/build.pyvàconfig.json. Lưu vàosettings.jsoncủa tool. - Nguồn scan: thư mục scan (zip RealityScan, thư mục OBJ hoặc OBJ rời), frame neutral (trống = tự chọn), frame mũ (trống = bỏ nhóm đầu trọc), số điểm sau giảm lưới.
- Nhân vật: tên nhân vật có tóc scan và nhân vật đầu trọc, tóc Optional Content, melanin tóc.
- Thư mục & công cụ: thư mục Content trong Unreal, thư mục dữ liệu, tài liệu, Unreal Engine, Houdini (
$HFS). - Ô trống dùng giá trị của
config.json. Bấm LƯU CẤU HÌNH PROFILE; Mở file cấu hình mở JSON để sửa tay.

5Trang Chạy: pipeline headless

- Ô nhóm ở trên: số bước đã xong / tổng. Viền xanh lá = xong cả nhóm, viền vàng = xong một phần. Bấm ô để chọn hoặc bỏ chọn cả nhóm.
- Cây bước: tích từng bước; cột trạng thái (✅ ok, ❌ failed, ⏭️ skipped), lần chạy cuối, số giây, mô tả. Di chuột lên bước lỗi để xem lỗi.
- CHẠY BƯỚC CÒN THIẾU chỉ chạy các bước đã chọn mà chưa xong. Chạy lại đã chọn chạy lại kể cả bước đã xong.
- Chip Tiếp tục khi có bước lỗi =
--keep-going. Dừng kết thúc cả cây tiến trình (build.py, hython, Unreal).
- Thanh tiến độ đếm bước xong; dòng dưới hiện bước đang chạy và tiến độ chi tiết (dòng
[AMH]của script). - Log là đầu ra của
build.py; bản đầy đủ nằm ởDocs/runs/<thời điểm>/console.log. - Lịch sử build mở
BUILD_HISTORY.htmlcủa profile. - Nên đóng dự án trong Unreal Editor khi chạy các bước Unreal: chúng mở cùng dự án ở chế độ headless.
6Trang Houdini: nạp MetaHuman về Houdini
- Thẻ gói DCC: mỗi nhân vật đã xuất từ Unreal (
head.dna,body.dna, số map). Chưa có thì bấm Xuất DCC từ Unreal (headless) (bướcbald_export). - Chip chọn phần cần tạo: Nhân vật APEX (pose / animation), Đầu cho groom (
groom::mh_head), Scan tham chiếu, Biểu cảm → morph (từ kết quảrig_verify). - NẠP VÀO HOUDINI tạo
/obj/AMH_<nhân vật>bằng MetaHuman for Houdini và mở network đó. Ngoài Houdini: lưu_houdini/<nhân vật>.hip. - Mở scene groom .hip mở scene chải tóc của bước
bald_groom_houdini.

| Node | Dùng để |
|---|---|
OUT_REST | Mọi lưới và material ở tư thế nghỉ |
OUT_HEAD · OUT_BODY | Bề mặt để gắn tóc, quần áo Vellum, phụ kiện |
OUT_SKELETON · apex_character | Joint; nhân vật APEX để pose và animation |
OUT_GROOM_HEAD | Đầu chuẩn của MetaHuman for Houdini để chải tóc |
SCAN_REFERENCE | Scan gốc đặt đúng vị trí để đối chiếu |
EXPRESSIONS · OUT_MORPH_TARGETS | Frame 1 = nghỉ, sau đó từng biểu cảm; morph delta_<frame> |
Đơn vị trong Houdini là mét (DNA và scan dùng cm, importer nhân 0,01).
7Trang Tài liệu
8Quy trình cho một bộ scan mới
- Bấm + cạnh Profile: đặt tên, chọn thư mục scan nguồn, nhập frame mũ nếu có.
- Trang Chạy: bấm ô nhóm 1 · Scan → CHẠY BƯỚC CÒN THIẾU (khoảng 20 phút).
- Trang Scan: kiểm tra frame neutral tự chọn và frame mũ; đổi bằng Chọn neutral / Chọn frame mũ nếu cần.
- Trang Chạy: chọn nhóm 2 đến 5 → CHẠY BƯỚC CÒN THIẾU (khoảng 1 giờ 15 phút cho cả bộ 15 frame).
- Trang Scan: chọn ảnh Heat / UE để xem rig khớp từng biểu cảm tốt đến đâu.
- Trang Houdini: NẠP VÀO HOUDINI, rồi gắn tóc, quần áo, phụ kiện lên
OUT_HEAD/OUT_BODY.
9Khi có lỗi
| Thông báo | Cách xử lý |
|---|---|
| Không thấy Pipeline/build.py + config.json | Trang Cấu hình → chọn đúng thư mục dự án → Tải lại. |
| Không đọc được trạng thái các bước | Panel không chạy được Python cho build.py; đặt python_exe trong settings.json của tool. |
| Không thấy hython | Đặt Houdini ($HFS) trong trang Cấu hình (chỉ cần khi chạy ngoài Houdini). |
| Đang chạy, hãy đợi hoặc bấm Dừng | Mỗi lần chỉ chạy một hàng đợi; đợi xong hoặc bấm Dừng. |
| Bước Unreal lỗi | Đóng Unreal Editor nếu đang mở dự án; xem Saved/Logs và log của lần chạy trong Docs/runs. |
| Chưa có gói DCC | Trang Houdini → Xuất DCC từ Unreal (headless). |
