ساخت یک Blender Add-on برای تبدیل یک مدل assembled به یک Exploded View و ایجاد انیمیشن رفت و برگشت بین این دو حالت.
هدف اصلی این ابزار، استفاده در رندر و انیمیشن محصولات مکانیکی و الکترونیکی است؛ برای مثال:
- تجهیزات صنعتی
- قطعات مکانیکی
- PCB و محصولات الکترونیکی
- Enclosure
- موتور و گیربکس
- تجهیزات شبکه
- محصولات قابل مونتاژ
Workflow مورد نظر:
Assembled Model
↓
Explode Animation
↓
Exploded View
↓
Assemble Animation
↓
Assembled Model
کاربر یک مدل کامل را در Blender وارد میکند.
مثلاً:
Screw
│
Washer
│
┌─────────┐
│ Cover │
└─────────┘
│
┌─────────┐
│ PCB │
└─────────┘
│
┌─────────┐
│ Case │
└─────────┘
کاربر وضعیت فعلی را به عنوان Assembly Position ذخیره میکند.
سپس با انتخاب گزینه Explode، قطعات از محل اصلی خود فاصله میگیرند:
Screw
↑
Washer
↑
Cover
↑
PCB
↑
Case
این حرکت باید به صورت Animation ساخته شود.
سپس با Assemble:
Exploded
↓
Animation
↓
Assembled
قطعات دقیقاً به Transform اولیه خود برمیگردند.
Add-on نباید در نسخه اول تلاش کند مفهوم مکانیکی Assembly را از روی مدل حدس بزند.
یعنی لازم نیست بفهمد:
- این پیچ متعلق به کدام سوراخ است
- این واشر روی کدام شفت قرار دارد
- این قطعه باید داخل کدام قطعه قرار بگیرد
در نسخه اول، وضعیت فعلی مدل به عنوان Ground Truth ذخیره میشود.
برای هر Object این اطلاعات ذخیره میشود:
- Location
- Rotation
- Scale
بنابراین:
Current Transform
↓
Save Assembly State
↓
Generate Exploded Transform
و هنگام Assemble:
Exploded Transform
↓
Saved Assembly Transform
یک پنل در:
3D Viewport
→ Sidebar (N)
→ Exploded
قرار بگیرد.
ساختار پیشنهادی:
┌──────────────────────────────┐
│ EXPLODED ASSEMBLY STUDIO │
├──────────────────────────────┤
│ Source │
│ │
│ ○ Selected Objects │
│ ○ Collection │
│ │
├──────────────────────────────┤
│ Explosion │
│ │
│ Distance: [ 2.0 ] │
│ Direction: [From Center]│
│ │
│ Rotation: [ 0° ] │
│ Rotation Axis: [ Z ] │
│ │
├──────────────────────────────┤
│ Animation │
│ │
│ Start Frame: [ 1 ] │
│ End Frame: [ 60 ] │
│ Interpolation: [Bezier] │
│ │
├──────────────────────────────┤
│ Assembly State │
│ │
│ [ Set Assembly Position ] │
│ │
│ [ EXPLODE ] [ ASSEMBLE ] │
│ │
│ [ Clear Animation ] │
└──────────────────────────────┘
دو روش برای انتخاب قطعات:
فقط Mesh Objectهایی که کاربر انتخاب کرده است.
مثلاً:
Select:
- PCB
- Case
- Cover
- Screws
- Heatsink
و سپس Explode.
کاربر یک Collection انتخاب میکند.
مثلاً:
PRODUCT_ASSEMBLY
├── Case
├── PCB
├── Heatsink
├── Fan
├── Screws
├── Connector
└── Cover
Add-on تمام Mesh Objectهای داخل Collection را پردازش میکند.
حداقل سه حالت:
مرکز Assembly محاسبه شود.
برای هر Object:
Direction = Object Center - Assembly Center
سپس Object در همان جهت حرکت کند.
مثال:
↑
│
←──── ● ────→
│
↓
این حالت باید حالت پیشفرض باشد.
کاربر انتخاب کند:
X
Y
Z
قطعات در راستای Axis انتخابشده Explode شوند.
هر Object بر اساس Local Axis خودش حرکت کند.
برای مثال:
Local Z
↑
│
[Object]
این حالت برای قطعات مکانیکی جهتدار بسیار مفید است.
پارامتر:
Explode Distance
مشخص میکند قطعات چه مقدار از محل اصلی خود فاصله بگیرند.
مثلاً:
Distance = 0.5
Distance = 1.0
Distance = 2.0
Distance = 5.0
Distance باید بر اساس Unit سیستم Blender کار کند.
نسخه اول باید دو Animation بسازد.
Frame 1
↓
Assembled
Frame 60
↓
Exploded
Frame 1
↓
Exploded
Frame 60
↓
Assembled
کاربر بتواند:
- Start Frame
- End Frame
- Interpolation
را تغییر دهد.
حداقل:
Bezier
Linear
Sine
پیشنهاد پیشفرض:
Bezier
برای حرکت نرم و حرفهای.
امکان اضافه کردن Rotation اختیاری.
مثلاً:
Rotation = 45°
Axis = Z
در هنگام Explode، Object علاوه بر Translation کمی Rotate شود.
این قابلیت برای رندرهای تبلیغاتی بسیار مفید است.
مثلاً:
↗
[PCB]
↻
↓
[PCB]
این بخش بسیار مهم است.
قبل از ایجاد Animation باید برای هر Object اطلاعات زیر ذخیره شود:
Assembly Location
Assembly Rotation
Assembly Scale
بنابراین حتی اگر کاربر چند بار Explode و Assemble کند، مدل نباید از محل اصلی خود خارج شود.
نسخه اول بهتر است Objectهای Parent شده را با احتیاط پردازش کند.
اگر Object دارای Parent باشد:
Parent
│
├── Child A
├── Child B
└── Child C
Transform باید به شکلی مدیریت شود که حرکت World Space خراب نشود.
در نسخههای بعدی میتوان سیستم مخصوص Hierarchy طراحی کرد.
این قابلیت برای نسخه دوم پیشنهاد میشود.
هدف:
1 → Bottom Case
2 → PCB
3 → Connector
4 → Heatsink
5 → Cover
6 → Screws
Add-on بتواند برای قطعات ترتیب ایجاد کند.
روشهای احتمالی:
قطعات بر اساس فاصله از مرکز مرتب شوند.
کاربر Objectها را به ترتیب انتخاب کند.
ترتیب بر اساس ترتیب Objectها در Collection باشد.
نسخههای بعدی میتوانند به جای یک حرکت ساده، چند مرحله بسازند.
مثلاً:
Stage 1
Remove Cover
Stage 2
Move PCB
Stage 3
Remove Heatsink
Stage 4
Remove Connector
Stage 5
Separate Screws
Timeline:
1────30────60────90────120────150
Cover
PCB
Heatsink
Connector
Screws
این برای ویدیوهای صنعتی بسیار جذاب خواهد بود.
در نسخه پیشرفته، هر Object میتواند یک Order داشته باشد:
Object Order
--------------------
Case 1
PCB 2
Heatsink 3
Connector 4
Cover 5
Screw 6
و Animation به صورت Sequential ساخته شود.
در آینده Add-on میتواند برای Product Visualization نیز امکانات داشته باشد.
مثلاً:
- Camera Preset
- Studio Lighting
- Depth of Field
- Product Turntable
- Exploded View Camera
- Orthographic Technical Camera
یکی از اهداف مهم آینده، پشتیبانی بهتر از مدلهای CAD است.
مدل ممکن است از:
- STEP
- IGES
- SolidWorks
- Fusion 360
- Inventor
- FreeCAD
به Blender منتقل شود.
در حالت ایدهآل، Add-on بتواند Hierarchy قطعات را حفظ کند.
مثلاً:
Assembly
├── Housing
│ ├── Screw
│ └── Cover
│
├── Electronics
│ ├── PCB
│ └── Connector
│
└── Mechanical
├── Shaft
├── Bearing
└── Gear
در نسخه پیشرفته میتوان سیستم Constraint اضافه کرد.
مثلاً:
Mate
Align
Insert
Concentric
Distance
Angle
هدف:
Part A
+
Part B
↓
Constraint
↓
Correct Assembly Position
اما این بخش نباید در نسخه اول پیادهسازی شود.
تمام عملیات باید با Blender Undo سازگار باشند.
همچنین Add-on نباید:
- Mesh را تغییر دهد
- Material را تغییر دهد
- Object را حذف کند
- Origin را تغییر دهد
مگر اینکه کاربر صراحتاً درخواست کند.
تمرکز نسخه اول فقط:
Transform
+
Animation
باشد.
- Selected Objects
- Collection
- Save Assembly State
- Explode
- Assemble
- Reverse workflow
- Distance
- From Center
- World Axis
- Local Axis
- Start/End Frame
- Bezier/Linear/Sine
- Optional Rotation
- Clear Animation
- Auto Sequence
- Manual Sequence
- Per-object distance
- Staggered animation
- Better hierarchy support
- Assembly stages
- Constraint system
- CAD hierarchy support
- Exploded-view camera
- Technical drawing mode
- Product visualization presets
- CAD-aware assembly
- Automatic part relationships
- Smart constraints
- Advanced procedural exploded animations
نسخه اول زمانی موفق است که کاربر بتواند:
- یک Assembly را وارد Blender کند.
- قطعات را در حالت assembled قرار دهد.
- قطعات را انتخاب کند یا Collection را انتخاب کند.
- روی
Set Assembly Positionکلیک کند. - مقدار Explode Distance را تعیین کند.
- روی
Explodeکلیک کند. - Animation در Timeline ایجاد شود.
- با Play، قطعات از هم جدا شوند.
- روی
Assembleکلیک کند. - قطعات دوباره دقیقاً به محل اولیه برگردند.
بدون اینکه مدل اصلی خراب شود.
این Add-on نباید صرفاً یک Script کوچک برای Explode کردن Objectها باشد.
هدف بلندمدت:
تبدیل Blender به یک ابزار حرفهای برای Product Assembly Visualization.
یعنی چیزی بین:
CAD Assembly
+
Blender Visualization
+
Motion Graphics
+
Technical Animation
با تمرکز ویژه روی محصولات مکانیکی و الکترونیکی.
نام فعلی:
Exploded Assembly Studio
نامهای جایگزین:
- Assembly Motion
- Explode Studio
- AssemblyFX
- ExplodeKit
- Product Assembly Animator
- CAD Explode Studio
- Assembly Animator for Blender
پیشنهاد فعلی برای توسعه:
Exploded Assembly Studio
زیرا بعداً میتواند به یک ابزار بزرگتر برای Product Visualization تبدیل شود.