Tháng Sáu 30, 2020 linhntp

Tương tác - Sử dụng Arrays trong Flow

Tính đến viết bài này (3ds Max Interactive / Stingray 1.9) không có cách nào để trực tiếp sử dụng array (mảng) trong Flow, chúng ta chỉ có thể sử dụng chúng từ Lua. Nhưng sẽ rất tiện khi chúng được thực hiên tất cả trong Flow! Vì vậy, đây là loạt bài viết đầu tiên về các phương pháp khả thi sẽ cho phép bạn sử dụng Array.

Mục đích là để có một mảng với các vật liệu và gán chúng cho một số đối tượng chúng ta tạo ra trên Flow.

Trong bài viết này, tôi sẽ sử dụng node “script do string”, theo cách đó mọi thứ tôi thực hiện sẽ nằm trong flow.

Có hai phần với nó:

  1. Ở cấp độ khởi đầu, chúng tôi sẽ định hướng mảng, trong trường hợp này tôi muốn làm cho các giá trị mảng có thể dễ dàng chỉnh sửa nên tôi đã sử dụng các node “String Data” đưa vào node “Script Do String”. Một nhược điểm là số lượng input bị hạn chế, nhưng thật may vì tôi chỉ cần bốn input.

Trong node tôi sử dụng mã Lua sau để xây dựng array:

test_array={}; test_array[0]=select(1,…); test_array[1]=select(2,…); test_array[2]=select(3,…); test_array[3]=select(4,…);

  • Đầu tiên tôi cho test_array là một mảng.
  • Sau đó là dấu chấm phẩy để tôi có thể thêm nhiều lệnh trong cùng một chuỗi
  • Tiếp theo là thiết lập các giá trị cho bốn phần tử mảng: trong ngoặc vuông, chỉ mục và giá trị được truy xuất bằng hàm select (n,…) với các chỉ số từ 0 đến 3.
  1. Bây giờ mảng đã được định nghĩa và chúng ta có thể sử dụng nó,

 

Đầu tiên chúng tôi sử dụng các node flow bình thường để minh họa bốn đơn vị khi bạn nhấn phím 1 trên bàn phím:

  • Đặt “button name” của node “keyboard button” thành 1
  • Móc nó ra vào node “for loop”
  • Đặt giá trị bắt đầu và kết thúc của node “for loop” thành 0 và 3
  • “current value” của node “for loop” được nối với node X của node te “Vector from Component” – theo cách đó chúng được tạo cạnh nhau
  • Các đơn vị thực tế được tạo bởi node “Spawn Unit on Position” sẽ lấy dữ liệu chuỗi chứa tên đơn vị, vị trí chúng tôi đã tính toán trong node ” Spawn Unit on Position “. “Loop body” của node “For Loop” cần được nối với “Spawn” của node “Spawn Unit on Position”.
  • Một khi tất cả đã xong, chúng ta đến node “Script Do String” sử dụng “Spawned Unit”, tên khe vật liệu từ node “String Data” và “”Current Value” của node “For Loop” để chạy Lua code. “Spawned Unit” từ node “Spawn Unit of Position” cần được nối với node “In” của node “Script Do String” để mã Lua được kích hoạt.

Mã Lua được sử dụng tương đối đơn giản:

stingray.Unit.set_material(select(1,…), select(2,…), test_array[select(3,…)])

  • Hàm stingray.Unit.set_material cần ba tham số: 1. đơn vị, 2. tên khe vật liệu và 3. tên vật liệu chúng ta sẽ sử dụng trong khe này.
  • chúng ta có được đơn vị bằng cách gọi select (1, …) – vì vậy chúng ta cần nối thiết bị với arg 1
  • chúng ta nhận được khe vật liệu bằng cách gọi select (2, …) – vì vậy chúng ta cần cung cấp tên vị trí (mà bạn có thể kiểm tra trong trình chỉnh sửa đơn vị) để lập luận 2
  • chúng ta có được tên vật liệu thực tế bằng cách tra cứu index (mà chúng ta nhận được từ select (3, …)) trong mảng test_array – vì vậy chúng ta cần cung cấp giá trị hiện tại từ for loop với arg 3.

Để chạy nó ở cấp độ của riêng bạn, bạn cần cung cấp như sau:

  • bốn tài liệu, nhập đường dẫn của chúng (liên quan đến dự án) trong bốn node String Data” của phần “initialise array”
  • một đơn vị, nhập đường dẫn đó vào node “String Data” trên cùng của nhóm “use array values” và nhập tên khe vật liệu (mà bạn có thể tìm thấy trong phần tài liệu của trình soạn thảo đơn vị) trong node “String Data” dưới cùng ở cùng nhóm
  • Bạn có thể muốn thêm một node nhân hoặc chia trước “X” của “Vector from Components ” nếu đơn vị nhiều hơn 1.

iRender hy vọng, bài viết này đã phần nào giải thích và cho các bạn một cái nhìn gần gũi, rõ ràng hơn về cách sử dụng array (mảng) trong Flow. Hãy đăng ký ngay tại đây để trải nghiệm dịch vụ của chúng tôi!

, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
Contact

iRENDER FARM

GPU Cloud Service
Remote Render Farm
GPU Cloud for AI/DeepLearning
iRender International

INTEGRATIONS

Autodesk Maya
Autodesk 3DS Max
Blender
Cinema 4D
Houdini
Maxwell
Nvidia Iray
Lumion
KeyShot
UE4
Twinmotion
Redshift
Octane
Modo
LightWave 3D
LuxCore
And many more…

iRENDER TEAM

MONDAY – SUNDAY
Hotline: 0916 806 116
Zalo: 0916 806 116
Skype: iRender Support
Email: [email protected]
CÔNG TY CỔ PHẦN CÔNG
NGHỆ IRENDER VIỆT NAM
MST:0108787752
VPGD: Số 5, ngõ 82 Dịch Vọng Hậu, Cầu Giấy, Hà Nội.

Contact
0916806116 [email protected]