Pose Driver Connect๋Š” Maya์—์„œ ์ œ์ž‘ํ•œ RBF(Radial Basis Function) ๊ธฐ๋ฐ˜์˜ 2์ฐจ ํฌ์ฆˆ ๊ณต๊ฐ„ ๋ณด๊ฐ„ ์‹œ์Šคํ…œ์„ ์–ธ๋ฆฌ์–ผ ์—”์ง„์œผ๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ž…๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์บ๋ฆญํ„ฐ์˜ ๊ด€์ ˆ ํšŒ์ „์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ๋ณ€ํ˜•๋˜๋Š” ๊ทผ์œก๊ณผ ํ”ผ๋ถ€์˜ ์›€์ง์ž„์„ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์„ค์น˜๋ถ€ํ„ฐ ์‹ค์ œ ์ ์šฉ๊นŒ์ง€์˜ ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

1. Installation And Setup

Pose Driver Connect UE ์„ค์น˜

  • ์–ธ๋ฆฌ์–ผ ์—”์ง„ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์—์„œ โ€œPose Driver Connectโ€๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ค์น˜ ๊ฒฝ๋กœ:ย ๋“œ๋ผ์ด๋ธŒ/UE_5.x/Engine/Plugins/Marketplace/PoseDriverConnect
  • ์–ธ๋ฆฌ์–ผ ์—”์ง„์„ ์žฌ์‹œ์ž‘ํ•œ ํ›„ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฉ”๋‰ด์—์„œ ํ™œ์„ฑํ™” ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Pose Driver Connect Maya ์„ค์น˜

  • ์–ธ๋ฆฌ์–ผ ์—”์ง„ ์„ค์น˜ ๊ฒฝ๋กœ์—์„œย PoseDriverConnect.zipย ํŒŒ์ผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
    • ๊ฒฝ๋กœ:ย ๋“œ๋ผ์ด๋ธŒ/UE_5.x/Engine/Plugins/Marketplace/PoseDriverConnect/Content
  • ํ•ด๋‹น zip ํŒŒ์ผ์„ย ๋ฌธ์„œ/Maya/modulesย ํด๋”์— ๋ณต์ œํ•˜๊ณ  ์••์ถ•์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
  • Maya๋ฅผ ์žฌ์‹œ์ž‘ํ•œ ํ›„, Script Editor์—์„œ ๋‹ค์Œ Python ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Pose Wrangler๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
from epic_pose_wrangler import main
pose_wrangler_instance = main.PoseWrangler()

2. Create Secondary Animation in Maya

RBF ์†”๋ฒ„ ๊ธฐ๋ณธ ๊ฐœ๋…

RBF(Radial Basis Function) ์†”๋ฒ„๋Š” ํ•˜๋‚˜์˜ ๊ด€์ ˆ(Driver)์˜ ํšŒ์ „ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์—ฌ๋Ÿฌ ๊ด€์ ˆ(Driven)์„ ์ž๋™์œผ๋กœ ๋ณ€ํ˜•์‹œํ‚ค๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒ”์„ ์˜ฌ๋ฆด ๋•Œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์‡„๊ณจ, ๊ฒฌ๊ฐ‘๊ณจ, ๊ทผ์œก๋“ค์ด ํ•จ๊ป˜ ์›€์ง์ด๋Š” ๊ฒƒ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

RBF ์†”๋ฒ„ ์„ค์ •ํ•˜๊ธฐ

  • Pose Wrangler UI๋ฅผ ์—ด๊ณ  ์ƒˆ๋กœ์šด RBF ์†”๋ฒ„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ ์ฒด ๋ถ€์œ„๋ณ„๋กœ ์†”๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค (์˜ˆ: Upper_Arm_R, Lower_Arm_R, Clavicle_R ๋“ฑ).
  • ๊ฐ ์†”๋ฒ„์—์„œ ๋‹ค์Œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • Solver: ์ฃผ์ถ•์ด ๋˜๋Š” ๊ด€์ ˆ(์˜ˆ: ์‡„๊ณจ)
    • Driven Transforms: ํ•จ๊ป˜ ์›€์ง์—ฌ์•ผ ํ•˜๋Š” ๊ด€์ ˆ๋“ค(์˜ˆ: ์Šน๋ชจ๊ทผ, ๊ฒฌ๊ฐ‘๊ณจ, ํ‰๊ทผ, ๊ด‘๋ฐฐ๊ทผ)

ํฌ์ฆˆ ์ƒ์„ฑ ๋ฐ ์กฐ์ •

  • Driver๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํšŒ์ „ ์ถ•์˜ ๋ฒ”์œ„๋ฅผ ์ถฉ๋ถ„ํžˆ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํฌ์ฆˆ๋ฅผ ๋ฐฐ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃผ์š” ๋ฐฉํ–ฅ ๋ณ„๋กœ ์ตœ์†Œ 4๊ฐ€์ง€ ๋ฐ”์ธ๋“œํฌ์ฆˆ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค (Up, Down, Forward, Back).
  • ๊ฐ ํฌ์ฆˆ ์ƒ์„ฑ ์ ˆ์ฐจ.
    1. Driver ๊ด€์ ˆ์„ ์›ํ•˜๋Š” ๊ฐ๋„๋กœ ํšŒ์ „์‹œํ‚ต๋‹ˆ๋‹ค.
    2. Driven ๊ด€์ ˆ๋“ค์„ ์ˆ˜๋™์œผ๋กœ ์กฐ์ •ํ•˜์—ฌ ๊ฐ€์žฅ ์ž์—ฐ์Šค๋Ÿฌ์šด ํ˜•ํƒœ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    3. โ€œAdd Poseโ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ํ•ด๋‹น ํฌ์ฆˆ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ค‘๊ฐ„ ํฌ์ฆˆ๋Š” RBF ์‹œ์Šคํ…œ์ด ์ž๋™์œผ๋กœ ๋ณด๊ฐ„ํ•˜์—ฌ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ์ถ• ํŠธ๋žœ์Šคํผ์„ ๋ฐ”๋ฅธ ๊ฐ๋„๋กœ ๋ณ€๊ฒฝํ›„ ์ข…์†๋œ ํ”„๋žœ์Šคํผ์„ ์ด๋™ํ•˜์—ฌ ๋ณด๊ธฐ์— ๊ฐ€์žฅ ์ž์—ฐ์Šค๋Ÿฌ์šด ํฌ์ฆˆ๋ฅผ ๋งŒ๋“ฌ

Solver Setting

Fuction Type

๋ณด๊ฐ„ ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

Automatic Radius Value

  • ๋ชจ๋“  ํฌ์ฆˆ ๊ฐ„์˜ ์ ˆ๋Œ€ ๊ฑฐ๋ฆฌ ํ‰๊ท ๊ฐ’์„ ์ž๋™์œผ๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๊ฐ’์ด RBF์˜ ์˜ํ–ฅ ๋ฒ”์œ„๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์ˆ˜๋™ ์กฐ์ •๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ž๋™ ๊ณ„์‚ฐ ๊ฐ’์„ ๋จผ์ € ์‚ฌ์šฉํ•ด๋ณด๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

Normalize Method

OnlyNormalizeAboveOne Weight๊ฐ€ 1์ด ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ์—๋งŒ 1๋กœ ์ •๊ทœํ™”ํ•ฉ๋‹ˆ๋‹ค.

AlwaysNormalize ํ•ญ์ƒ weight ํ•ฉ์„ 1๋กœ ๋งž์ถฅ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋” ์•ˆ์ •์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Distance Method

  • Eculidean: ํ‘œ์ค€ N์ฐจ์› ๊ฑฐ๋ฆฌ ์ธก์ • ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • Quaternion: ์ž…๋ ฅ์„ ์ฟผํ„ฐ๋‹ˆ์–ธ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ํšŒ์ „๊ฑฐ๋ฆฌ๋ฅผ ๋” ์ •ํ™•ํ•˜๊ฒŒ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • SwingAngle: Twist Axis๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์ถ•๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉํ–ฅ ๋ณ€ํ™”๋งŒ ๊ฐ์ง€Epic Games์˜ ๋ฉ”ํƒ€ํœด๋จผ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • TwistAngle:ย Twist Axis์—์„œ ์ง€์ •๋œ ์ถ•์˜ ํšŒ์ „๋งŒ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.

Pose Exporter

  • Up Axis: Z Axis๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค(์–ธ๋ฆฌ์–ผ ์—”์ง„์˜ ๊ธฐ๋ณธ ์ขŒํ‘œ๊ณ„์™€ ์ผ์น˜).
  • Export as Delta: ํ™œ์„ฑํ™”โœ…๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋™์ผํ•œ ์Šค์ผˆ๋ ˆํ†ค ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ์บ๋ฆญํ„ฐ์—๋„ RBF ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ž‘์—… ํšจ์œจ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
  • ์ต์ŠคํฌํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‘ ๊ฐ€์ง€ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค:
    • JSON ํŒŒ์ผ: RBF ์„ค์ • ์ •๋ณด(์†”๋ฒ„ ํƒ€์ž…, ํฌ์ฆˆ ๋ฐ์ดํ„ฐ, Weight ๋“ฑ)
    • FBX ํŒŒ์ผ: ๊ฐ ํฌ์ฆˆ์˜ ์‹ค์ œ ๋ณ€ํ˜• ๋ฐ์ดํ„ฐ

3. Import Secondary Animation in UE

์–ธ๋ฆฌ์–ผ ์—”์ง„ ์„ค์ •

  • โš™๏ธPlugins โ†’ Pose Driver Connect Enable โœ…

์ž„ํฌํŠธ ์„ค์ •

  • ์ƒ๋‹จ ๋ฉ”๋‰ด์—์„œย Tools โ†’ Pose Driver Connect๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • RBF Json File- JsonํŒŒ์ผ ์ง€์ •
    • FBX Source Directory: FBXํŒŒ์ผ์ด ํฌํ•จ๋œ ํŒŒ์ผ ๊ฒฝ๋กœ์ง€์ •
    • FBX Import Directory: Unreal project> contect์—์„œ ์ž„ํฌํŠธํ•  ํด๋” ๊ฒฝ๋กœ์ง€์ •

Animation Blueprint์—์„œ ์„ค์ •

  • ์บ๋ฆญํ„ฐ์˜ Animation Blueprint๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
  • AnimGraph์— ๋‹ค์Œ ๋…ธ๋“œ๋“ค์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค:
    1. RBF Solveย ๋…ธ๋“œ: Maya์—์„œ ์ƒ์„ฑํ•œ RBF ๋กœ์ง์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    2. Pose Assetย ๋…ธ๋“œ: ์ž„ํฌํŠธํ•œ ํฌ์ฆˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
      • ์ž„ํฌํŠธ๋œ Pose Asset์˜ Additive Type์„ โ€œLocal Space Additiveโ€๋กœ ์„ค์ •ํ•˜๊ณ , Reference Pose๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    3. Apply Additiveย ๋…ธ๋“œ: ๊ธฐ์กด ์• ๋‹ˆ๋ฉ”์ด์…˜์— RBF ๊ฒฐ๊ณผ๋ฅผ ์ถ”๊ฐ€๋กœ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋ฐ ๋ฏธ์„ธ์กฐ์ •

  • ์บ๋ฆญํ„ฐ๋ฅผ ์‹ค์ œ๋กœ ์›€์ง์—ฌ๋ณด๋ฉด์„œ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ณ€ํ˜•์ด ์ผ์–ด๋‚˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ํ•„์š”ํ•œ ๊ฒฝ์šฐ Maya๋กœ ๋Œ์•„๊ฐ€ ํฌ์ฆˆ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋‹ค์‹œ ์ต์ŠคํฌํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Radius ๊ฐ’์ด๋‚˜ Normalize Method๋ฅผ ์กฐ์ •ํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ