上下文
Cavalry 的架構實現了一些令人驚嘆且獨一無二的功能。從表面看,這意味著用更少的圖層就能完成更多的工作,但底層到底發生了什麼?
需要理解的核心概念是索引(Index)。索引只是一個傳遞給其他圖層的數字。Duplicator 的一個基本作用就是為它生成的 Shape 指派索引。這個索引可以被 Duplicator 和其他圖層用來決定位置、旋轉、顏色、邊數……幾乎任何東西。
假設用一個 Duplicator 建立了一欄 10 個矩形。

在這種情況下,Duplicator 產生了 10 個索引,並根據分佈(Distribution)設定為每個複製的 Shape 提供位置(本例中為 Grid,Height 為 350,Size Mode 為 Fit)。Index:0(第一個形狀)被分配到 Position Y 為 0,Index:9(第十個/最後一個形狀)被分配到 Position Y 為 350,其他 Shape 均勻分佈其間。
那麼如果把這個 Duplicator 添加到第二個 Duplicator 中會發生什麼?這裡第二個 Duplicator 被設定為 Grid,其中 Count X = 5,Count Y = 1。

索引會流向第二個 Duplicator 產生的形狀。當 Duplicator 被複製時,這個索引計數會持續在圖中傳遞。
以下是一個實際範例:
- 建立一個 Text Shape。
- 使用 String 屬性旁邊的
+按鈕加入一個 String Generator。 - 將 Generator 設定為 Value。
- 將 Text Shape 加入到一個 Duplicator。
- 在 Grid Distribution 上設定 Count 為 X = 1、Y = 10。
結果:一欄零。

表面上看,這裡沒有發生什麼有趣的事情 😉,但那只是因為我們還沒有要求 Duplicator 對索引做任何處理。所以讓我們讓它產生一些亂數值傳遞給 Number 屬性。
結果: 每個數字都是 0 到 10 之間的亂數(預設值)。

Duplicator 將亂數傳遞給每個副本。
以上之所以能夠實現,是因為 Duplicator 為每個數字提供了索引,而 Random Behaviour 利用了該上下文。
- Duplicator 向 String Generator 請求其 Number 屬性 10 次。
- 相應地,String Generator 向 Random 請求其 Number 屬性的值 10 次。
- 在這 10 次中,Random 接收到的 Index 值依次為:0, 1, 2, 3, 4, 5, 6, 7, 8, 9。
- 基於每個索引,Random 更改其 Seed 值以產生不同的結果。
這個思路可以應用於 Cavalry 中的任何屬性。讓我們用同樣的方法來影響 Polygon 的邊數。
- 建立一個 Polygon Shape。
- 將其加入到一個 Duplicator。
- 加入一個 Random Behaviour。
- 將 Minimum 設定為 3,Maximum 設定為 5。
- 連線 random.id→polygon.sides。

每個形狀被賦予 3 到 5 之間的亂數邊數。
這個概念可以用於 Noise Deformer、Color、Stroke Width、Path Length、Blur Filter、Asset Array、Dynamic Rendering……任何東西。可能性是無窮的!😎
切換為手動模式
标题为“切換為手動模式”的章节有時可能需要手動控制這些索引的指派方式。這分為兩個層級。首先是阻止 Duplicator 使用「傳入索引」。
以我們的矩形網格(複製的 Duplicator)為例:
- 在Attribute Editor中,取消勾選 Duplicator1 的 Advanced 標籤下的 Use Index Context。

現在 Duplicator1 的索引會傳遞給第二個 Duplicator。
要進一步推進這個想法,需要藉助 Context Index Utility。