Expressions הוא אחד הנושאים ש-99% מהמדריכים בעברית עושים ברמה של גוגל טרנסלייט. המציאות: Expression הוא שורת קוד אחת שיכולה להחליף 50 keyframes, ליצור אקראיות שנראית חיה, ולחבר תכונות של שכבות באופן שייצור אנימציות בלתי אפשריות ידנית. כל זה — בלי רקע בתכנות. בואו נסביר את זה נכון בפעם הראשונה.
Expression הוא שורת קוד שמחליפה keyframes. במקום להגדיר ידנית "בזמן 0 הערך הוא X, בזמן 1 הערך הוא Y" — כותבים נוסחה, ואפטר מחשב את הערך לכל זמן אוטומטית.
אפטר מבוסס על JavaScript — שפת תכנות מוכרת, רצה בכל דפדפן. Expression הוא פונקציה קטנה שמחזירה ערך. ערך שהיא מחזירה = הערך של התכונה באותו רגע. פשוט ככה.
דוגמה קונקרטית — רוצים ששכבה תרעיד לבד בלי שום keyframe. בלי Expression: 60 keyframes אקראיים. עם Expression: שורה אחת — wiggle(3, 20). אפטר יצייר 60 keyframes אקראיים תחת המכסה, בכל פריים.
רוב ה-Expressions היעילים הם 1-2 שורות. אפילו בלי רקע בתכנות — אחרי שלומדים 5 פונקציות עיקריות, אפשר לבנות 80% מההתנהגויות המורכבות. זה לא "תכנות" — זו שימוש בפונקציות מוכנות.
Expression לא נוסף דרך תפריט — מוסיפים אותו ישירות על תכונה. כל תכונה (Position, Scale, Opacity, וכו') יכולה לקבל Expression במקום keyframes.
אם לתכונה יש גם Keyframes וגם Expression — ה-Expression גובר. ה-Keyframes עדיין קיימים אבל לא משפיעים על הערך. לחזור ל-keyframes: Alt+קליק על שעון העצר פעם נוספת — ה-Expression מושבת.
5 פונקציות שמכסות 80% מה-expressions שמשתמשים בהם בעבודה אמיתית. לומדים אותן — ופתאום אפטר שונה.
יוצר תנועה אקראית. frequency = כמה פעמים בשנייה (Hz). amount = עד כמה רחוק מהערך המקורי.
// רעידה עדינה wiggle(2, 10); // רעידה חזקה של מצלמה wiggle(8, 50);
מניחים על Position של שכבה — השכבה מתחילה לרעוד. על Rotation — רעידה של סיבוב. על Scale — רעידה של גודל.
משתנה מובנה שמחזיר את הזמן הנוכחי בשניות. מתחיל ב-0 ועולה לאורך הקומפוזיציה.
// סיבוב מתמיד — 360° בשנייה time * 360; // זז ימינה בקצב קבוע [time * 100, 540];
מצוין לתנועות קבועות בקצב — סיבוב אינסופי, קרוסלה, נהר גולש.
מאפשר לזוג keyframes לחזור על עצמם אינסוף. מאוד שימושי לאנימציות רצות.
// אם יש 2 keyframes, הם חוזרים על עצמם בלופ loopOut("cycle"); // "pingpong" = הולך קדימה ואז אחורה loopOut("pingpong");
יצרו 2 keyframes (למשל Y = 540 בזמן 0, Y = 440 בזמן 1), הוסיפו את ה-expression — הריצה תמשיך ללא סוף.
ממפה ערך מטווח לטווח. שימושי לקישורים מותאמים בין תכונות.
// Opacity יורד מ-100 ל-0 כשה-Position X עובר מ-0 ל-1000 var x = transform.position[0]; linear(x, 0, 1000, 100, 0);
חושב על זה כ"תרגום טווחים": כשהשכבה נעה שמאלה, ה-opacity יורד אוטומטית. בלי keyframes.
המספר של השכבה בטיימליין (1, 2, 3, ...). מאוד שימושי כשרוצים delay אוטומטי בין שכבות זהות.
// כל שכבה מתחילה עם delay של 0.1 שנייה לפי המיקום var delay = (index - 1) * 0.1; valueAtTime(time - delay);
משכפלים שכבה 10 פעמים, כל אחת מקבלת delay אוטומטית — ריכוך אנימציה שנראית מקצועית.
אל תזכרו את התחביר המדויק. תזכרו רק שהפונקציות האלה קיימות. כשצריכים אותן — Ctrl+F (חיפוש בגוגל: "wiggle expression after effects") מביא את התחביר המדויק. הידע החשוב הוא לדעת שהכלי קיים, לא לשנן תחביר.
אחד השימושים העוצמתיים ביותר של Expression הוא לחבר תכונה של שכבה אחת לתכונה של שכבה אחרת.
דוגמה: אתם רוצים ש-Opacity של שכבה ב' תהיה תמיד חצי מה-Opacity של שכבה א'. בלי Expression — תצטרכו להנפיש את שתיהן. עם Expression — קישור אחד, וכל שינוי בשכבה א' משפיע אוטומטית על ב'.
// גרירה מ-Opacity של שכבה ב' ל-Opacity של שכבה א' thisComp.layer("Layer A").transform.opacity;
עכשיו שכבה ב' תמיד יש לה את אותו Opacity כמו A. רוצים חצי? מוסיפים פעולה מתמטית:
thisComp.layer("Layer A").transform.opacity * 0.5;
שתי פונקציות מתמטיות שיוצרות תנועה הרמונית — שמרגישה הרבה יותר טבעית מ-wiggle אקראי.
פונקציית sine — מחזירה ערך שנע בין -1 ל-1 בצורה חלקה ותקופתית. שילוב עם time יוצר אוסילציה.
// צף למעלה ולמטה — אוסילציה של 50px ב-1Hz var y = 540 + Math.sin(time * 2 * Math.PI) * 50; [960, y];
פירוש: time * 2 * PI = תדר של שני "גלים" בשנייה. sin(...) = ערך בין -1 ל-1. כפל ב-50 = תנועה של ±50px. מוסיף ל-Y הבסיסי (540).
זהה ל-sin — אבל מתחיל מ-1 (במקום 0). שימושי לתנועה מעגלית.
// תנועה מעגלית — מקיף את המרכז ב-rádio 100px var cx = 960, cy = 540; var x = cx + Math.cos(time) * 100; var y = cy + Math.sin(time) * 100; [x, y];
Math.sin וMath.cos הן הבסיס של כל תנועה הרמונית — לב פועם, נשימה, גלי מים, מטוטלת. ברגע שתבינו את הדפוס הזה, תוכלו לבנות תנועות מורכבות שבלתי אפשריות ליצור ידנית. לא "יותר טוב מ-wiggle" — פשוט שונה מהותית. Wiggle אקראי, sin/cos צפוי.
הקוד לא תמיד עובד בפעם הראשונה. זה חלק מהמשחק. הנה איך מזהים ומתקנים שגיאות.
אפטר מציג סימן משולש צהוב עם קריאה. ה-expression מושבת זמנית (התכונה חוזרת לערך הרגיל), אבל הקוד עדיין שם.
ללחוץ על המשולש → פותח תיבת דיאלוג עם ההסבר של השגיאה. בדרך כלל ההודעה ספציפית — "Error at line 2: Undefined variable".
| שגיאה | סיבה | תיקון |
|---|---|---|
undefined |
התייחסות לתכונה שלא קיימת | לבדוק שם השכבה, לוודא שכבה קיימת בקומפוזיציה |
Error at line X |
תחביר שגוי (סוגר שחסר, פסיק שלא במקום) | לבדוק סוגריים, נקודה-פסיק בסוף שורות |
Cannot convert |
ערך לא תואם לסוג התכונה | Position צריך מערך [x, y]. Scale צריך מערך [sx, sy]. Opacity - מספר יחיד |
| התוצאה שגויה | הקוד רץ — אבל הערכים לא הגיוניים | לבדוק ערכים של משתנים עם alert(var) |
שכחה של מספר הסוג הנכון — Position הוא [x, y] (שני מספרים), לא מספר אחד. אם תחזירו רק time * 100 — תקבלו שגיאה. צריך [time * 100, 540].
אפקט קלאסי שממחיש את הכוח של Expressions. בלי keyframes — רק קוד.
[time * 200, 540]; — העיגול מתחיל לזוז ימינה בקצב קבוע.[time * 200, 540 + Math.abs(Math.sin(time * 3)) * -200]; — העיגול קופץ מעלה-מטה (abs מבטיח שרק מעלה, לא מתחת ל-540).transform.position[0]; — הסיבוב מתרחב יחד עם התנועה האופקית.wiggle(5, 5); — העיגול "פועם" בקצב של 5Hz ב-±5% (מרגיש חי).נסו לשנות את Comp Duration ל-30 שניות. הכדור ימשיך לקפוץ עד הסוף — בלי שתצטרכו להוסיף keyframes. זה הכוח של Expressions: אנימציה "חיה" שעובדת לנצח.
Expressions הם קוד JavaScript שמחליף keyframes. חמשת הביטויים החיוניים — wiggle, time, loopOut, linear, index — מכסים 80% מהצרכים. שילוב עם Math.sin/cos פותח עולם של תנועה הרמונית. Pick whip של Expressions מחבר בין תכונות. הכלים האלה הופכים עבודה של שעה לשורה אחת של קוד.
מכאן — שני כיוונים להעמיק. להעמיק ב-Expressions עם פונקציות מתקדמות יותר (valueAtTime, seedRandom, bezierPath) — זה הכיוון של מומחי motion graphics. או לעבור ל-ExtendScript — כתיבת סקריפטים שרצים על הפרויקט (לא בתוך תכונה) — זה הכיוון של אוטומציה מלאה. שני המסלולים מתחברים ב-מדריך 06 — סקריפטים באפטר אפקט.
אם כבר נהנים מ-Expressions, הצעד הבא הוא לבנות סקריפט משלכם. הסקריפט שלנו Text Layer Manager החל בדיוק ככה — פיסת JavaScript שחסכה 20 דקות של עבודה בכל סשן. היום זה מוצר ב-$29 שמוכר את עצמו. המדריך המלא לבניית סקריפטים עצמאיים מחכה ב-מדריך 06.