<thead id="z7l1b"><nobr id="z7l1b"></nobr></thead>

    當前位置: 首頁 > 影視后期 > ae教程

    AE表達式基礎知識

    • 2016-03-02
    • 作者/來源:未知/網絡收集
    • 己被圍觀
    • 被點評
    關于表達式 當您想創建和鏈接復雜的動畫,但想避免手動創建數十乃至數百個關鍵幀時,請嘗試使用表達式。表達式是一小段軟件,它很像腳本,它的計算結果為某一特

    關于表達式                   

    當您想創建和鏈接復雜的動畫,但想避免手動創建數十乃至數百個關鍵幀時,請嘗試使用表達式。表達式是一小段軟件,它很像腳本,它的計算結果為某一特定時間點單個圖層屬性的單個值。腳本告知應用程序執行 某種操作,而表達式說明屬性是 什么內容。

    通過表達式,您可創建圖層屬性之間的關系,以及使用某一屬性的關鍵幀來動態制作其他圖層的動畫。例如,您可使用關聯器鏈接路徑屬性,以便蒙版能夠從筆刷筆觸或者形狀圖層對象中獲取其路徑。

    表達式語言基于標準的 JavaScript 語言,但您不必了解 JavaScript 就能使用表達式。您可以創建表達式,方法是使用關聯器或者復制簡單示例并修改示例以滿足您的需求。

    注意:           

    示例表達式的兩個來源是表達式采樣器模板項目(“文件”>“瀏覽模板項目”)以及“行為”類別中的動畫預設(“動畫”>“瀏覽預設”)。



    動畫預設可以包括表達式,甚至還可以完全由表達式組成。使用表達式而非關鍵幀的動畫預設有時稱為行為。

    在向某一屬性添加表達式后,可以繼續為該屬性添加或編輯關鍵幀。表達式可以采用某一屬性值(由其關鍵幀確定)并使用該值作為生成新的修改值的輸入。例如,除了已設置關鍵幀的運動外,圖層的旋轉屬性的以下表達式還會將旋轉屬性的值增大 90 度:

    ??value + 90

    某些方法(例如 wiggle)直接作用于已設置關鍵幀的屬性值。(請參閱屬性特性和方法(表達式引用)。)

    圖層的位置屬性的以下表達式會保留圖層的已設置關鍵幀的運動并使其稍微擺動一點:

    ??wiggle(10, 10)

    注意:           

    使用 wiggle 表達式通常比使用搖擺器更快速且更容易。



    當您制作文本動畫時,您可以使用表達式選擇器來指定您想要動畫屬性對每個文本字符產生多大程度的影響。您可以向動畫組添加一個或多個表達式選擇器,且該動畫組可以包含一個或多個屬性。

    添加、編輯和移除表達式                  

    您可以通過手動鍵入表達式或通過使用“表達式語言”菜單自己輸入整個表達式;您也可以使用關聯器創建表達式或者從某個示例或其他屬性中粘貼表達式。

    您可以在“時間軸”面板中使用表達式完成您的所有工作,但有時將關聯器拖動到“效果控件”面板的屬性中更為方便。您在表達式字段(時間圖表中一個可調整大小的文本字段)中輸入和編輯表達式。表達式字段顯示在圖層條模式中的屬性旁;表達式字段顯示在圖表編輯器模式中的圖表編輯器的底部。您可以在文本編輯器中編寫表達式,然后將其復制到表達式字段中。當您向圖層屬性添加表達式時,默認表達式將顯示在表達式字段中。默認表達式實際上不執行任何操作,它會將屬性值設置為其本身,這使您能輕松地自行微調表達式。

    圖層條模式下“時間軸”面板中的表達式界面

    A. “啟用表達式”開關 B. “顯示后表達式圖表”按鈕 C. 關聯器 D. “表達式語言”菜單 E. “表達式”字段

    當您在編輯表達式時,各種預覽均已掛起;一個紅色條顯示在等待您退出文本編輯模式的面板的底部。

    包含表達式的屬性的值顯示為紅色或粉紅色類型。

    開始使用表達式的一種好方法是使用關聯器創建簡單表達式,然后使用簡單數學運算(例如下表中所列的運算)調整表達式的行為:

    符號

    函數

    +

    -

    /

    *

    *-1

    執行與原來相反的操作,例如逆時針,而非順時針

    例如,可以通過在表達式結尾鍵入 *2 將結果增大一倍;也可以通過在表達式結尾鍵入 /2 將結果減小一半。

    在編制適合編輯的表達式時,可以結合這些簡單的運算以及更多運算。例如,可以將 /360*100 添加到表達式結尾以將其范圍從 0-360 更改到 0-100。如果您要將 360 度刻度盤的值轉換為按百分比計算的滑塊,此更改將很有幫助。

    “時間軸”面板中的“表達式語言”菜單包含可在表達式中使用的特定于 After Effects 的語言元素。此菜單有助于確定有效元素及其正確語法;可使用其作為可用元素的參考。當您從菜單中選擇任何對象、屬性或方法時,After Effects 會在表達式字段中的插入點將其自動插入。如果選中表達式字段中的文本,新表達式文本將替換所選文本。如果插入點不在表達式字段中,新表達式文本將替換該字段中的所有文本。

    “表達式語言”菜單列出了參數和默認值。此約定使您能夠輕松記得在編寫表達式時可以控制哪些元素。例如,在語言菜單中,“屬性”類別的擺動方法顯示為 wiggle(freq, amp, octaves=1, amp_mult=.5, t=time)。五個參數在 wiggle 后面的圓括號中列出。最后三個參數中的 = 表示使用這些參數是可選的。如果您沒有為其指定任何值,則它們將分別默認為 1、.5 以及當前時間。

    注意:           

    您必須將“表達式語言”菜單編寫的參數名稱替換為實際值。



    Paul Tuersley 在 AE Enhancer 論壇上提供了一個可向所選屬性自動添加 wiggle、smooth 和 loop 表達式的腳本。使用此腳本是初學者體驗表達式的一種好方法。

    Jeff Almasol 提供了一個可自動處理表達式并進行指定更改的腳本。例如,腳本可用于自動移除或啟用已停用表達式。有關更多信息,請訪問 Jeff Almasol 的 redefinery 網站。

    添加、禁用或移除表達式                  

    • 要向某屬性添加表達式,請在“時間軸”面板中選擇該屬性并選擇“動畫”>“添加表達式”或者按 Alt+Shift+= (Windows) 或 Option+Shift+= (Mac OS);或者按住 Alt 鍵并單擊 (Windows) 或按住 Option 鍵并單擊 (Mac OS)“時間軸”面板或“效果控件”面板中屬性名稱旁的秒表按鈕 。

    • 要暫時禁用表達式,請單擊“啟用表達式”開關 。當表達式處于禁用狀態時,此開關中會顯示一條斜杠 。

    • 要從某屬性中移除表達式,請在“時間軸”面板中選擇該屬性并選擇“動畫”>“移除表達式”,或者按住 Alt 鍵并單擊 (Windows) 或按住 Option 鍵并單擊 (Mac OS)“時間軸”面板或“效果控件”面板中屬性名稱旁的秒表按鈕。

    使用關聯器編輯表達式                  

    如果不熟悉 JavaScript 或 After Effects 表達式語言,您仍可以通過使用關聯器來利用表達式的功能。您可將關聯器  從一個屬性輕松拖動到另一屬性以將這些屬性與一個表達式相關聯,而表達式文本是在表達式字段中的插入點輸入的。如果選中表達式字段中的文本,新表達式文本將替換所選文本。如果插入點不在表達式字段中,新表達式文本將替換該字段中的所有文本。

    將關聯器拖動到屬性以創建指向該屬性值的鏈接。

    可以將關聯器拖動到屬性的名稱或值。如果拖動到屬性的名稱,則生成的表達式會將所有值作為一個整體顯示。例如,如果您將關聯器拖動到位置屬性的名稱,則會顯示如下表達式:

    ??thisComp.layer("Layer 1").transform.position

    如果將關聯器拖動到位置屬性的某個組件值(例如 y 值),則會顯示如下表達式,其中屬性的 x 和 y 坐標均已鏈接到位置屬性的 y 值:

    ??temp = thisComp.layer("Layer 1").transform.position[1]; ??[temp, temp]

    如果將關聯器拖動到的圖層、蒙版或效果在其本地上下文中不具有唯一名稱,則 After Effects 會對其重命名。例如,如果您在同一圖層上具有兩個或更多個名為“Mask”的蒙版,且您將關聯器拖動到其中之一,則 After Effects 會將其重命名為“Mask 2”。

    關聯器創建的表達式的格式由“以簡明英語編寫表達式拾取”首選項(“編輯”>“首選項”>“常規”(Windows) 或者“After Effects”>“首選項”>“常規”(Mac OS))確定。默認情況下,關聯器創建簡明英語表達式,這些表達式使用顯示在“時間軸”面板中的屬性名稱。因為這些名稱被編碼到應用程序中且未曾更改,所以這些表達式在 After Effects 以其他語言運行時可以運行。您可更改的任何屬性名稱均括在雙引號中且在任何語言中均保持一致。如果您不打算跨語言共享您的項目,則可取消選擇此首選項。此首選項不會影響效果名稱或效果屬性。

    以下是使用簡明英語的一個示例:

    ??thisComp.layer("Layer 1").transform.position

    以下是未使用簡明英語的同一表達式:

    ??thisComp.layer("Layer 1")("Transform")("Position")

    注意:           

    因為默認情況是使用簡明英語,所以本文檔在多數示例和插圖中使用簡明英語。



      • 將關聯器拖動到“時間軸”面板或“效果控件”面板中的其他屬性。

      • 根據需要,修改表達式字段中的默認表達式。

    注意:           

    如果您使用關聯器創建表達式以引用圖層,且該圖層與同一合成中的另一圖層名稱相同,則目標圖層的名稱會更改。新的圖層名稱是結尾有一數字的舊的圖層名稱。此更改是確保表達式清楚引用合成中的單個圖層所必需的。



    手動編輯表達式                  

      • 單擊表達式字段以進入文本編輯模式。

        注意:           

        在您進入文本編輯模式后,會選中整個表達式。要添加到表達式,請在表達式中單擊以放置插入點;否則,您將替換整個表達式。



      • 在表達式字段中鍵入和編輯文本,可以選擇使用“表達式語言”菜單。

        要查看多行表達式的更多部分,請拖動表達式字段的底部或頂部以調整其大小。

      • 要退出文本編輯模式并激活表達式,請執行下列操作之一:

        • 按數字小鍵盤上的 Enter 鍵。

        • 在表達式字段外部單擊。

    示例:使用表達式語言參考編寫表達式                  

    跟隨此示例一起學習如何使用 After Effects 表達式語言參考編寫表達式。此示例中創建的表達式將 Solid 2(實底 2)的位置屬性與 Solid 1(實底 1)的位置屬性相鏈接,Solid 2(實底 2)的移動與 Solid 1(實底 1)的移動偏移量為 2 秒。

      • 創建兩個實底圖層:實底 1 和實底 2。

      • 使用關鍵幀對實底 1 的位置屬性值進行動畫制作。(請參閱關于動畫、關鍵幀和表達式。)

      • 選擇實底 2 的位置屬性并選擇“動畫”>“添加表達式”或者按住 Alt 鍵并單擊 (Windows) 或按住 Option 鍵并單擊該屬性的秒表  按鈕。默認情況下將顯示以下表達式:

        ??transform.position
      • 直接在 transform.position 上鍵入以下內容:

        ??thisComp
      • 元素 thisComp 是一個全局屬性,其值是一個表示當前合成的合成對象。要確定表達式中的 thisComp,請查看 thisComp 返回值,該值位于 全局對象、屬性和方法(表達式參考)。

        請注意,thisComp 返回的是合成對象。接下來,查看 Comp 屬性和方法(表達式參考)以查看哪些屬性和方法可用于 Comp 對象。一種選項是 layer(index)。圓括號內的索引或數字指定您要使用的圖層。在此示例中,我們假定實底 1 是您的合成中的第一個圖層。要從活動合成中的第一個圖層中檢索值,請在表達式結尾鍵入 .layer(1),從而得到以下內容:

        ??thisComp.layer(1)
      • 此外,查看表達式元素參考以檢查 layer(index) 返回的是圖層對象。查看 圖層常規屬性和方法(表達式參考),并找出要使用的元素。例如,如果您要獲得圖層的位置屬性的值,請在表達式結尾鍵入 .position 以得到以下內容:

        ??thisComp.layer(1).position
      • 從圖層常規屬性和方法(表達式參考)中,可看到“位置”屬性返回性質。查找性質屬性和方法(表達式參考)并了解可向表達式添加一個時間因素。要添加特定時間,例如當前時間外加 2 秒,請在表達式結尾鍵入 .valueAtTime(time+2) 以得到以下內容:

        ??thisComp.layer(1).position.valueAtTime(time+2)
      • 從性質屬性和方法(表達式參考),了解 valueAtTime 方法返回的是數字或數列。當表達式返回數目、數組或布爾值(True 或 False)時,您無法再向該表達式添加屬性或方法(但如果需要,可以添加算術運算符,例如 +、-、* 和 /)。

    顯示表達式和表達式圖表                

    在圖表編輯器模式下,單個表達式字段在圖表編輯器底部顯示為可調整大小的框并且僅為所選屬性顯示該表達式。要同時顯示多個表達式字段,“時間軸”面板必須采用圖層條模式。

    要在圖層條模式和圖表編輯器模式之間切換,請按 Shift+F3 鍵。

    • 要僅顯示表達式的屬性,請選擇一個或多個圖層,然后按 EE。

    • 要在圖表編輯器中顯示表達式字段,請從圖表編輯器底部的“選擇圖表類型和選項” 菜單中選擇“顯示表達式編輯器”。在向屬性添加新的表達式后,將顯示表達式編輯器,而不管此設置如何。

    要調整表達式字段的大小,請向上或向下拖動其底邊緣。

    • 要了解表達式如何更改值或速度圖表,請在圖表編輯器中顯示值或速度圖表時,單擊“顯示后表達式圖表”按鈕 。

      暗淡的彩色圖表顯示應用表達式之前的值或速度,明亮的彩色圖表顯示應用表達式之后的值或速度。為位置屬性打開圖表疊加還會更改“合成”面板中顯示的運動路徑,以便您能夠查看受表達式影響的路徑。


    您可以使用“時間軸”面板中的搜索字段來搜索表達式以及屬性的其他組件。如果搜索字符串顯示在表達式中,則屬性及其包含的屬性組和圖層將顯示在篩選的搜索結果集中。

    為源文本編寫表達式                

    文本圖層的源文本屬性由表達式解釋為 JavaScript 字符串。您可以使用關聯器從其他文本圖層中檢索源文本;然而,只會使用目標圖層的第一個字符的樣式。

    有關 JavaScript 字符串對象的更多信息,請參閱 JavaScript 參考資源。

    可以在字符串表達式中使用“”開始一個新的文本行。例如,要將原始文本從一個圖層復制到同一圖層上,并在新行中用全部大寫的字符重復原始文本,請使用以下表達式:

    ??text.sourceText + "
    " + text.sourceText.toUpperCase()

    向合成添加文本圖層并向其源文本屬性添加表達式可能是檢查其他圖層的屬性值的一種非常好的方法。例如,源文本屬性的以下表達式以圖層堆積順序報告下一個圖層的不透明度屬性的名稱和值:

    ??thisComp.layer(index + 1).name + "
    Opacity = " + thisComp.layer(index + 1).opacity.value

    以下示例在設置其“視頻”開關的當前時間以堆積順序報告用作最高圖像圖層源的素材項目的名稱。

    ??source_footage_name = ""; ??for (i = 1; i <_ if="if"  continue="continue"  index="index"  time="time"  thiscomp.numlayers="thiscomp.numlayers"  my_layer="thisComp.layer(i);"  i="="  _="_"  my_layer.active="my_layer.active"  my_layer.hasvideo="my_layer.hasvideo" >= my_layer.inPoint &amp;&amp; time &lt; my_layer.outPoint){ ??????????try{ ??????????????source_footage_name = my_layer.source.name; ??????????}catch(err1){ ??????????????source_footage_name = my_layer.name ??????????} ??????????break; ??????} ??} ??source_footage_name</_>

    向表達式添加注釋                  

    如果您編寫復雜的表達式,并打算供您或其他人稍后使用,則應添加說明表達式的作用及其組件如何工作的注釋。

    • 在注釋開頭鍵入 //。將忽略 // 和行尾之間的任何文本。例如:??//這是注釋。

      有關這種注釋類型的示例,請參閱表達式示例:根據距離攝像機的距離,對 3D 圖層進行淡化不透明度處理。


    • 在注釋開頭鍵入 /* 并在注釋結尾鍵入 */。將忽略 /* 和 */ 之間的任何文本。例如:??/*這是多行注釋。*

      有關這種注釋類型的示例,請參閱保存并重新使用表達式。


    保存和重用表達式                

    在您編寫完表達式后,可以通過將其復制并粘貼到文本編輯應用程序或者通過將其保存在動畫預設或模板項目中來保存表達式以供日后使用。然而,因為表達式的編寫涉及項目中的其他圖層且可能會使用特定圖層名稱,所以有時必須修改表達式才能在項目之間傳遞表達式。

    您可以使用正常的 JavaScript 函數語法在表達式中定義自己的函數。在此示例中,定義了一個計算兩個值的平均值的函數,且最后一行使用以下函數:

    ??function average(a, b) ??{ ????return (a + b) / 2; ??} ??average(position, thisComp.layer(1).position);

    注意:           

    您必須在其中使用每個函數的每個表達式中確切定義該函數。沒有可以添加到的函數的全局庫。



    如果要保存表達式以便在其他項目中使用,則應向表達式添加注釋。(請參閱為表達式添加示例。)您還應使用變量以便能夠在一個位置更改值而無需在多個位置更改值。

    例如,此表達式開頭有一個說明表達式用途的多行注釋并且在聲明并初始化變量后有一個說明變量用途的簡短注釋:

    ??/* ?This expression on a Source Text property reports the name ??????of a layer and the value of its Opacity property. */ ??? ??var myLayerIndex = 1; // layer to inspect, initialized to 1, for top layer? ??? ??thisComp.layer(myLayerIndex).name + ": 
    Opacity = " + ??thisComp.layer(myLayerIndex).opacity.value

    您可以保存包括表達式的動畫預設并在其他項目中重用動畫預設,前提是表達式不引用其他項目中不存在的屬性。當您保存其中的屬性具有表達式但沒有關鍵幀的預設時,只會保存表達式。如果該屬性具有一個或多個關鍵幀,則保存的預設包含表達式以及所有關鍵幀值。

    您可以從圖層屬性復制表達式,可以包含也可以不包含該屬性的關鍵幀。

    • 要將表達式和關鍵幀從一個屬性復制到其他屬性,請在“時間軸”面板中選擇源圖層屬性,復制該圖層屬性,選擇目標圖層屬性,然后粘貼。

    • 要將表達式從一個屬性復制到其他屬性且不復制關鍵幀,請選擇源屬性,選擇“編輯”>“僅復制表達式”,選擇目標屬性,然后粘貼。

    當您要同時復制多個表達式并將其粘貼到一個或多個新圖層上時,或者當您要復制一個表達式并將其粘貼到多個圖層上時,復制不含關鍵幀的表達式非常有用。

    注意:           

    正如粘貼關鍵幀和其他項一樣,您通??梢詫⑵湔迟N到目標圖層,并且依賴 After Effects 確定哪個屬性應該是粘貼操作的目標。例如,這適用于將位置屬性從一個圖層復制到其他圖層,但如果要將表達式從位置屬性粘貼到縮放屬性,則您必須自己選擇目標屬性。



    Paul Tuersley 提供了 pt_ExpressEdit 腳本,用于管理和編輯表達式。

    表達式控制效果                  

    使用表達式控制效果,可通過使用表達式將屬性鏈接到控制,來添加一個可用于處理一個或多個屬性值的控制。單個控制可同時影響多個屬性。

    表達式控制效果的名稱指示其提供的屬性控制類型:角度控制、復選框控制、顏色控制、圖層控制、點控制、滑塊控制。After Effects CS5.5 和更高版本也提供了 3D 點控制。

    如果您從“動畫預設”>“形狀”>“背景”類別中應用動畫預設,則可以在“效果控件”面板中看到自定義的動畫形狀控制效果。此自定義效果是特別為這些動畫預設創建的專用表達式控制效果。您可以將此效果復制并粘貼到其他圖層,也可以將其另存為動畫預設本身以便能夠在其他位置應用。

    可以采用應用其他效果(例如將效果從“效果和預設”面板拖動到圖層上)的同樣方式將表達式控制效果應用到圖層。

    您可以將表達式控制效果應用于任何圖層;但是,將其應用于空圖層(您只需將其用作控制圖層)會非常有用。然后,可將表達式添加到其他圖層上的屬性以便從該控制中獲取輸入。例如,您可以將滑塊控制效果添加到空圖層 (Null 1) 中,然后將此表達式應用于多個圖層的位置屬性:

    ??position+[0,10*(index-1)*thisComp.layer("Null 1").effect("Slider Control")("Slider")]

    在此示例中,當您拖動滑塊時,具有此表達式的每個圖層都會移動。具有較高索引號(“時間軸”面板中朝向底部的圖層)的圖層的偏移量為 10 像素間隔,多于具有較低索引號的圖層。您可以在空圖層上為滑塊設置關鍵幀,且所有其他圖層會相應地進行動態化。

    重命名表達式控制效果的每個實例以表明其用途通常非常有用。例如,將顏色控制效果的實例重命名為天空顏色便于說明效果所控制的內容。您可以像重命名其他任何效果一樣重命名表達式控制效果的每個實例:在“時間軸”面板或“效果控件”面板中選擇它,并按主鍵盤上的 Enter 鍵 (Windows) 或 Return 鍵 (Mac OS)。

    要修改控制的范圍,請右鍵單擊 (Windows) 或按 Control 鍵并單擊 (Mac OS) 帶下劃線的控制屬性值,然后從上下文菜單中選擇“編輯值”。

    將表達式轉換為關鍵幀                

    在某些情況下,將表達式轉換為關鍵幀非常有用。例如,如果要凍結表達式中的值,您可將表達式轉換為關鍵幀,然后相應地調整關鍵幀;或者,如果計算表達式需要很長時間,您可將其轉換為關鍵幀,以便表達式能夠更快速地渲染。當您將表達式轉換為關鍵幀時,After Effects 會計算表達式,在每個幀創建一個關鍵幀,然后禁用該表達式。

      • 在“時間軸”面板中,選擇對其編寫表達式的屬性,然后選擇“動畫”>“關鍵幀輔助”>“將表達式轉換為關鍵幀”。

    表達式語言                  

    After Effects 表達式語言基于 JavaScript 1.2,具有擴展的內置對象集。After Effects 僅使用核心標準 JavaScript 1.2 語言,而不是 Web 瀏覽器特定的擴展項。After Effects 包含它自己的一組擴展對象(例如圖層、合成、素材和攝像機),您可將這些對象用于獲得 After Effects 項目中的大部分值。

    雖然表達式語言基于腳本語言,但是腳本和表達式之間存在一個微妙但很重要的區別:腳本告知應用程序執行 某種操作,而表達式說明屬性是 什么內容。

    有關 JavaScript 的更多信息,請參閱 JavaScript 參考資源。

    創建表達式時,須牢記下列幾點:

    • 表達式的值是計算的最后一個語句的值。

    • JavaScript 是區分大小寫的語言。

    • 需要分號來分隔語句或行。

    • 將忽略單詞之間的空格,字符串中的空格除外。

    在 JavaScript 中,存儲在對象中的值稱為屬性。但是,After Effects 使用術語屬性來指代“時間軸”面板中定義的圖層組件。因此,After Effects 稱 JavaScript 屬性 (property) 為方法或屬性 (attribute)。通常情況下,方法和屬性之間的區別是方法通常執行某些操作來創建其輸出(返回)值,而屬性則簡單地引用現有值來確定其輸出(返回)值。您可以通過查找方法名稱后面的圓括號(括住方法的任何輸入參數)輕松地將方法和屬性區分開來。

    對象是一個可包含其他對象、屬性和方法的項。例如,合成、圖層和素材項目都屬于對象。特別是,合成、圖層和素材項目都是全局對象,這意味著可以在任何上下文中引用它們而無需引用一些更高級別的對象。

    訪問屬性和方法                  

    您可以使用表達式語言訪問圖層屬性 (property) 的屬性 (attribute) 和方法。要訪問值,請使用由句號 (.) 運算符分隔的一系列對象引用。要串聯跨圖層級別的對象引用(例如,要引用效果屬性、蒙版或文本動畫),您也可以使用圓括號。例如,要將圖層 A 中的不透明度屬性與圖層 B 中的高斯模糊效果的模糊度屬性相關聯,請在表達式字段中為圖層 A 的不透明度屬性輸入以下表達式:

    ??thisComp.layer("Layer B").effect("Gaussian Blur")("Blurriness")

    從左到右讀取此表達式,可從較高級別進行,包含對象乃至特定屬性:

    • 使用的全局對象引用當前合成:thisComp。

    • 該合成中的特定圖層對象由其名稱引用:layer("Layer B")。

    • 該圖層中的特定效果對象由其名稱引用:effect("Gaussian Blur")。

    • 該效果中的特定效果屬性由其名稱引用:("Blurriness")。

    對于多維屬性的第 n 個組件(如效果控制點的 y 組件),請在結尾附加 [n],如下所示:

    ??thisComp.layer("Layer B").effect("Advanced Lightning")("Origin")[1]

    表達式的默認對象是對其編寫表達式的屬性,隨后是包含該表達式的圖層;因此,您無需指定屬性。例如,對圖層的位置屬性編寫的擺動表達式可以是以下任何一個:

    ??wiggle(5, 10) ??position.wiggle(5, 10)

    當從對其編寫表達式的圖層和屬性外部檢索圖層和屬性時,您確實需要包括圖層和屬性。例如,對圖層 B 的不透明度屬性編寫的表達式(將其鏈接到圖層 A 的旋轉屬性)將類似以下表達式:

    ??thisComp.layer("Layer A").rotation

    要了解其工作原理的更多示例,請使用關聯器將一個圖層屬性與另一屬性相關聯,并查看它創建的表達式。

    數組和多維屬性                

    數組是一類存儲一組有序數值的對象。數組表示為由逗號分隔且由括號括起的數值列表,如以下示例所示:

    ??[10, 23]

    您可以將數組對象分配給變量,從而輕松引用表達式的其他區域中的數組值。例如:

    ??myArray = [10, 23]

    數組對象的維度是數組中元素的數目。myArray 的維度是 2。After Effects 的不同屬性具有不同維度,具體取決于這些屬性具有的值參數的數目。在表達式語言中,屬性值是單個值(數值對象)或數組(數組對象)。

    下表提供了一些屬性及其維度的示例:

    維度

    屬性

    1

    旋轉 °

    不透明度 %

    2

    縮放 [x=寬度, y=高度]

    位置 [x, y]

    錨點 [x, y]

    音頻水平 [left, right]

    3

    縮放 [width, height, depth]

    3D 位置 [x, y, z]

    3D 錨點 [x, y, z]

    方向 [x, y, z]

    4

    顏色 [red, green, blue, alpha]

    您可以使用括號和索引號訪問數組對象的各個元素,以便指出您需要的元素。數組對象中的元素會從 0 開始建立索引。使用前面的示例,myArray[0] 是 10,而 myArray[1] 是 23。

    以下兩個表達式是等效的:

    ??[myArray[0], 5] ??[10, 5]

    位置屬性數組如下所示建立索引:

    • position[0] 是位置的 x 坐標。

    • position[1] 是位置的 y 坐標。

    • position[2] 是位置的 z 坐標。

    顏色表示為四維數組 [red, green, blue, alpha]。在顏色深度為 8 bpc 或 16 bpc 的項目中,顏色數組中的每個值都介于 0(黑色)到 1(白色)之間。例如,red 可以介于 0(無色)到 1(紅色)之間。因此,[0,0,0,0] 是黑色且透明,[1,1,1,1] 是白色且完全不透明。在顏色深度為 32 bpc 的項目中,允許小于 0 和大于 1 的值。

    如果您在數組對象中使用大于最高維度組件的索引的索引,則 After Effects 會返回錯誤。例如,myArray[2] 會引發錯誤,而position[2] 會返回位置的 z 坐標。

    After Effects 表達式語言中的許多屬性和方法將數組對象當作是參數或作為值返回它們。例如,thisLayer.position 是一個二維或三維的數組對象,具體取決于圖層是 2D 還是 3D 的。

    如果要編寫保留位置的動畫的 y 值而在 9 點修復 x 值的表達式,您將使用以下內容:

    ??y = position[1]; ??[9,y]

    以下內容更為簡明:

    ??[9, position[1]]

    這是一個要點,因此我們來看看另一個示例。如果要將圖層 A 中的 x 位置值與圖層 B 中的 y 位置值相結合,您將使用以下內容:

    ??x = thisComp.layer("Layer A").position[0];? ??y = thisComp.layer("Layer B").position[1];? ??[x,y]

    您可以創建僅引用 2D 或 3D 屬性的數組中的一個值的表達式。默認情況下,除非您另外指定,否則會使用第一個值。例如,如果您將關聯器從圖層 A 的旋轉屬性拖動到圖層 B 的縮放屬性,將顯示以下表達式:

    ??thisComp.layer("Layer B").scale[0]

    默認情況下,此表達式使用縮放屬性的第一個值,即寬度。如果您更喜歡使用高度值,請將關聯器直接拖動到第二個值而非屬性名稱,或者如下所示更改表達式:

    ??thisComp.layer("Layer B").scale[1]

    相反,如果您將關聯器從圖層 B 的縮放屬性拖動到圖層 A 的旋轉屬性,則 After Effects 會自動創建一個變量,將一維旋轉屬性值分配給該變量,然后將該變量用于縮放屬性的兩個維度:

    ??temp = thisComp.layer(1).transform.rotation; ??[temp, temp]

    矢量                  

    在 After Effects 中,許多屬性和方法都采用或返回矢量。如果數組表示空間中的一個點或方向,則 After Effects 將數組稱為矢量。例如,After Effects 將 position 描述為返回一個矢量。

    然而,雖然 audioLevels 等函數確實返回二維值(左聲道和右聲道級別),但因為它不表示點或方向,所以并不稱為矢量。After Effects 中的一些函數接受矢量參數,但通常僅在傳遞的值表示方向時才有用。例如,cross(vec1, vec2) 計算與輸入矢量成直角的第三個矢量。當 vec1 和 vec2 是兩個表示空間中的方向的矢量時,叉積非常有用,但如果它們僅表示兩個任意數值集合,則不那么有用。

    索引和標簽                  

    在 After Effects 中從 1 開始為 Layer、Effect 和 Mask 元素建立索引。例如,“時間軸”面板中的第一個圖層是 layer(1)。

    通常,如果移動了圖層、效果或蒙版,或者在產品更新和升級期間更改了參數,則最好使用圖層、效果或蒙版的名稱而不是編號,以避免混淆和錯誤。當您使用名稱時,請始終將其括在直引號中。例如,這些表達式中的第一個比第二個表達式更易于理解,即使您更改效果的順序,第一個表達式也將繼續運行:

    ??effect("Colorama").param("Get Phase From")? ??effect(1).param(2)

    表達式時間                  

    表達式中的時間始終采用合成時間(而不是圖層時間)并且以秒計算。任何表達式的默認時間是將計算表達式的當前合成時間。下列表達式均使用默認合成時間并返回相同值:

    ??thisComp.layer(1).position ??thisComp.layer(1).position.valueAtTime(time)

    要使用相對時間,請向 time 參數添加增量時間值。例如,要在當前時間之前 5 秒獲取位置值,請使用以下表達式:

    ??thisComp.layer(1).position.valueAtTime(time-5)

    對嵌套合成中屬性的默認時間引用使用原始默認合成時間,而不是重新映射的時間。但是,如果您使用 source 函數檢索屬性,則將使用重新映射的時間。


    例如,如果包含的合成中的圖層源是嵌套合成,且包含的合成中有重新映射的時間,則當您使用以下表達式獲取嵌套合成中圖層的位置值時,位置值將使用合成的默認時間:

    ??comp("nested composition").layer(1).position

    但是,如果您使用 source 函數訪問圖層 1,則位置值將使用重新映射的時間


    *CGahz.COM 收集整理,轉載請注明來自CG愛好者網(www.redlicoriceevents.com)

    分享到:

    更多精彩內容

    已有13條評論 發表評論

    亚洲性夜夜摸_天天摸夜夜擦视频大全_夜夜摸天天插_主页