跳到內容

上下文

Cavalry 的架構實現了一些令人驚嘆且獨一無二的功能。從表面看,這意味著用更少的圖層就能完成更多的工作,但底層到底發生了什麼?

需要理解的核心概念是索引(Index)。索引只是一個傳遞給其他圖層的數字。Duplicator 的一個基本作用就是為它生成的 Shape 指派索引。這個索引可以被 Duplicator 和其他圖層用來決定位置、旋轉、顏色、邊數……幾乎任何東西。

假設用一個 Duplicator 建立了一欄 10 個矩形。

在這種情況下,Duplicator 產生了 10 個索引,並根據分佈(Distribution)設定為每個複製的 Shape 提供位置(本例中為 GridHeight350Size ModeFit)。Index:0(第一個形狀)被分配到 Position Y0Index:9(第十個/最後一個形狀)被分配到 Position Y350,其他 Shape 均勻分佈其間。

那麼如果把這個 Duplicator 添加到第二個 Duplicator 中會發生什麼?這裡第二個 Duplicator 被設定為 Grid,其中 Count X = 5Count Y = 1

索引會流向第二個 Duplicator 產生的形狀。當 Duplicator 被複製時,這個索引計數會持續在圖中傳遞。

以下是一個實際範例:

  1. 建立一個 Text Shape
  2. 使用 String 屬性旁邊的 + 按鈕加入一個 String Generator
  3. Generator 設定為 Value
  4. Text Shape 加入到一個 Duplicator
  5. Grid Distribution 上設定 CountX = 1Y = 10

結果:一欄零。

表面上看,這裡沒有發生什麼有趣的事情 😉,但那只是因為我們還沒有要求 Duplicator 對索引做任何處理。所以讓我們讓它產生一些亂數值傳遞給 Number 屬性。

  1. 建立一個 Random Behaviour。
  2. 連線 random.id→stringGenerator.number。

結果: 每個數字都是 0 到 10 之間的亂數(預設值)。

Duplicator 將亂數傳遞給每個副本。

以上之所以能夠實現,是因為 Duplicator 為每個數字提供了索引,而 Random Behaviour 利用了該上下文。

  • DuplicatorString Generator 請求其 Number 屬性 10 次。
  • 相應地,String GeneratorRandom 請求其 Number 屬性的值 10 次。
  • 在這 10 次中,Random 接收到的 Index 值依次為:0, 1, 2, 3, 4, 5, 6, 7, 8, 9。
  • 基於每個索引,Random 更改其 Seed 值以產生不同的結果。

這個思路可以應用於 Cavalry 中的任何屬性。讓我們用同樣的方法來影響 Polygon 的邊數。

  1. 建立一個 Polygon Shape。
  2. 將其加入到一個 Duplicator
  3. 加入一個 Random Behaviour。
  4. Minimum 設定為 3Maximum 設定為 5
  5. 連線 random.id→polygon.sides。

每個形狀被賦予 3 到 5 之間的亂數邊數。

這個概念可以用於 Noise Deformer、Color、Stroke Width、Path Length、Blur Filter、Asset Array、Dynamic Rendering……任何東西。可能性是無窮的!😎

有時可能需要手動控制這些索引的指派方式。這分為兩個層級。首先是阻止 Duplicator 使用「傳入索引」。

以我們的矩形網格(複製的 Duplicator)為例:

  1. Attribute Editor中,取消勾選 Duplicator1 的 Advanced 標籤下的 Use Index Context

現在 Duplicator1 的索引會傳遞給第二個 Duplicator。

要進一步推進這個想法,需要藉助 Context Index Utility。