3.は,BasicAnimationモジュール及びSplineAnimationモジュールから構成されるSMIL 2.0アニメーションモジュールを定義する。これらのモジュールは,時間軸上にアニメーションを組み込むための要素及び属性,並びに複数のアニメーションの効果を構成するための機構を含んでいる。これらの要素及び属性がモジュールの中で定義されるので,他のマーク付け言語の設計者は,それらの言語にこの機能を含ませるかどうかを決めることができる。他のSMILモジュールを組み込む言語設計者が,アニメーション機能を必要としない場合,アニメーションモジュールを含める必要はない。
ホスト言語のための構文を含むこの規定における例は,[SMIL10],[SVG],[HTML4],及び[CSS2]を使う。これらは,様々なホスト言語との可能な統合を示すために与えられる。
この規定はアニメーション能力の基底集合を定義している一方で,ホスト言語が,付加的な又はより特殊化されたアニメーション要素を定義するためのサポートを,その基底集合の上に構築してもよいと仮定する。アニメーションは,ターゲット要素の属性及び特性だけをの操作する。そこで,基本的な型情報以外のターゲット要素のセマンティクスについての知識は要求しない。
このモジュールは,SMIL 2.0 BasicInlineTimingモジュールに依存し,時間軸のためにそのTimingモジュールからの要素及び属性を使う。BasicInlineTimingモジュールは,SMIL アニメーションを使用するあらゆるプロファイルのための前提条件とする。読者は,SMIL 2.0 Timingモジュールを読んでいること,及びそれに精通していることを仮定する。
3.は,最初に,SMIL 2.0におけるアニメーションの基礎原理を示し,次に,BasicAnimationモジュール及びSplineAnimationモジュールの要素及び属性を与える。
3.2は,SMIL 2.0アニメーションモジュールに基礎を与えるセマンティクスを記述する。特定の要素は,ここでは記述せずに,むしろアニメーションのためのモデルを構成する共通の概念及び構文を記述する。文書に関する問題は,アニメーション用の要素をターゲットとする手段と同様に記述される。アニメーションモデルは,最も単純な概念から最も複雑な概念へと構築されていくことによって定義される。すなわち,最初に,単純持続時間及び単純アニメーションの関数であるf(t)
を,次に,全体的な効果であるF(t,u)
を示す。
アニメーションは,ターゲット要素(又はより明確には,ターゲット要素のある属性,すなわち,ターゲット属性)の時間に基づく関数として定義される。アニメーションは,ターゲット属性に対する値への時間の対応付け(写像)を定義する。この対応付けは,アニメーション固有のセマンティクスだけでなく,タイミングのすべての様相を考慮する。全体的な対応付けは,要素の単純持続時間に渡るアニメーションについて記述する単純アニメーション関数f(t)
に基づく。すべてのアニメーションは,単純持続時間内のどの時間に対してもターゲット属性のために値を生成する単純アニメーション関数を定義する。
定義
ターゲット属性は,ホスト言語文書の中で定義されるとおりのターゲット要素の機能の名前とする。
これは,例えば,要素に含まれるXML属性,又は要素に適用されるCSS特性であってよい。デフォルトでは,アニメーションのターゲット要素は,アニメーション要素の親になる。(典型的には,アニメーション要素は,ターゲット要素の子になっている。)しかし,ターゲットは,文書の中の,XMLのID参照によって又はXLink
単純な例として,次に,SVGの長方形のアニメーションを定義する。その長方形は,縦長から横長へと変化する。
長方形は,10画素の幅で始まり,その幅は,10秒間に100画素まで増加する。同じ10秒間に,長方形の高さは,100画素から10画素まで変わる。
アニメーションが実行されているときに,DOM[DOM2]における属性値を実際に変更することは望ましくない。アニメーションの実行時環境は,DOM,又はCSSオブジェクトモデル(CSS OM)とは別に,それぞれの活動させられている(アニメーションの)属性に対するプレゼンテーション値を保持することが望ましい。実装がオブジェクトモデルをサポートしない場合には,実装は,プレゼンテーション値だけではなく,文書によって定義されるとおりの元の値も保持することが望ましい。プレゼンテーション値は,文書の表示形式に反映される。このように,アニメーションは,プレゼンテーション値を操作し,DOM又はCSS OMによって示される基底値に影響を与えないほうがよい。このことは,アニメーションサンドイッチモデルにおいて詳しく示される。
定義
時間
プレゼンテーション値は,基底値におけるアニメーションへの効果を反映する。効果は,任意の与えられた時点でのターゲット属性の基底値への変化とする。アニメーションが完了する場合,アニメーションの効果は,もはや適用されず,プレゼンテーション値は,デフォルトで基底値に戻される。アニメーションの効果を延長し,fill属性のセマンティクスによって決定される時間の長さの間,最終値を凍結することもできる。
アニメーション要素は,実装によって時間上は必要に応じて評価される単純アニメーション関数 を定義する。結果として生じる値は,ターゲット属性に対するプレゼンテーション値に適用される。アニメーション関数は,時間について連続的であって,レンダリングシステムに対して適切なあらゆるフレームレートで標本化できる。単純アニメーション関数の構文的な表現は,このモデルには独立とし,様々な方法で記述されてよい。この指定におけるアニメーション要素は,離散値又は補間値の集合,SVGパスに基づく動きのためのパス構文,タイミングに基づくキーフレーム,等間隔の補間,及びこれらの機能に関する変形に対する構文をサポートする。
先ほどの例では,
単純アニメーション関数は,付加パラメタをもつ,又は純粋に若しくは部分的にアルゴリズム的である,と定義されてもよい。例えば,"to"アニメーションは,現在値から"to"の値への補間をする。
<animate attributeName="top" to="10" dur="2.5s" />
アニメーション関数は,時間の関数だけでなく現在位置の関数でもある。
すべての場合で,アニメーションは,これを時間の関数として見せる。
定義
単純アニメーション関数は,時間に加えて(それ以外の)要因に依存する関数として定義してもよい。これは,直前の"to"アニメーションの例で使用された
アニメーションは,属性の基底値を上書きするか又は加算するかのいずれかをすると定義できる。この文脈では,基底値は,DOM値,又は同じ属性もターゲットとする他のアニメーションの結果であってもよい。基底値のより一般的な概念を,基礎値という。基礎値に加算していくアニメーションは,加算アニメーションという。基礎値を上書きするアニメーションは,非加算アニメーションと呼ぶ。要素のアニメーション効果関数 は,基礎値の影響を含み,要素の繰返し及び凍結を考慮する関数とする。アニメーションの効果は,繰返し及び凍結によって影響されるので,その単純持続時間ではなく要素の活性持続時間上で定義される。
アニメーションは,ターゲット属性の領域の外側で中間値を生成する方法によって組合せ可能だが,この場合,生成されたプレゼンテーション値は妥当とする。ターゲット属性の型 は,このより大きな集合とする。このことは,アニメーションサンドイッチモデルの中で詳述される。
定義
活性持続時間
時間
アニメーション効果関数
アニメーションが動作しているとき,実際には,それは,DOMにおける属性値を変更しない。アニメーション実行時は,理想的には,ターゲット属性が定義されている,DOM,CSS又は他のオブジェクトモデルから分離して,ターゲット属性のプレゼンテーション値を保持することが望ましい。プレゼンテーション値は,文書の表示形式に反映される。アニメーションの効果は,このプレゼンテーション値を操作することであって,基礎となるDOM又はCSS OMの値には影響を与えないこととする。
以降では,XML DOM[DOM2]及びCSS-OMの両方のために共通的な用語OMを使用する。実装がオブジェクトモデルをサポートしない場合には,実装は,理想的には,プレゼンテーション値だけでなく文書によって定義とおりの元の値も保持することが望ましい。ここでの目的のためには,この元の値をOMにおける値と等価と考えることにする。
DOMの実装の中には,記述されるとおりのプレゼンテーション値を保持することは困難又は非実用的なものもある。CSS値は,常に,記述されるとおりにサポートされることが望ましい。これは,CSS-OMがそれを行う機構を提供していることによる。一般的なXML DOM特性に対して分離されたプレゼンテーション値をサポートしない実装では,アニメーションがもはや効果をもたない場合に,少なくとも元の値を復元しなければならない。
以降では,分離されたプレゼンテーション値を使用する望ましいアプローチを仮定する。
与えられた属性に対してOM及び並行的な活性又は凍結アニメーションを考慮するモデルは,"サンドイッチ"として記述される。これは,"サブマリンサンドイッチ"(パンの長さに沿って層になった多くの肉及びチーズの断片を用いて作られた長いサンドイッチ)における肉及びチーズの層とおおよそ類似していることによる。この類似では,時間がサンドイッチの長さに関連し,各々のアニメーションは(肉及びチーズの)層に覆われるパンの長さが表現する持続時間をもっている。サンドイッチの底には,OMから得られた基底値がある。各々の活性(又は凍結)アニメーションは,この上の層とする。その層(すなわちアニメーション)は,パンの長さに沿った時間だけ及び優先度に従った順番で,サンドイッチ上に置かれる。この場合,より低い優先度のアニメーションの上により高い優先度のアニメーションが置かれる。ある与えられた時点で,サンドイッチの一つの切り口を得ることができ,アニメーションの層がどのように積み重ねられているか見ることができる。
アニメーションは,属性が定義されているOMから生じるプレゼンテーション値を操作し,文書処理の次の層にその結果の値を渡すことに注意すること。これは,正常な文書OMの処理段階を置き換えることも上書きすることもしない。
特に,XMLで定義された属性のアニメーション化を行うことによって,プレゼンテーション値は,スタイルシートの段階を通じて渡される前に,XML DOMの値を基底として修正される。スタイルシート言語の中で定義された属性のアニメーション化は,段階の残りを通じて渡されるプレゼンテーション値を修正する。
CSS2及びDOM 2 CSS-OMでは,"specified(指定された)","computed(計算された)"及び"actual(実際の)"という用語が,構文,段階,及びプレゼンテーションのレンダリングの評価結果を記述するために使用される。アニメーションが特定の要素のCSS特性に適用される場合,アニメーション化される基底値は,その要素上の(読取り専用の)
OM内では,各々のアニメーションが開始する時に従って,それらのアニメーションに優先度が与えられる。最初に開始したアニメーションは最も低い優先度をもち,最も最近に開始したアニメーションは最も高い優先度をもつ。二つのアニメーションが同じ瞬間に始動した場合,活性化順序(優先度)は,次のとおりに解決される。
アニメーションが再始動される場合(再始動アニメーションも参照),最も最近に活性化されたアニメーションになるにつれて,それは常に優先度リストの最上位へと移動することに注意すること。すなわち,アニメーションが再始動する場合,その層は,サンドイッチから引き出され,その最上位に戻される。対照的に,要素が繰り返される場合には,優先度は影響されない。繰返しの振舞いは,再始動としては定義されない。
各々の加算的アニメーションは,その下にあるすべてのサンドイッチ層の結果にその効果を追加する。加算的でないアニメーションは,それより下位のすべてのサンドイッチ層の結果を単に上書きする。サンドイッチの最上位にある最終結果は,文書ビューにおいて反映されなければならないプレゼンテーション値とする。
加算的アニメーションをサポートする幾つかの属性は,値のために定義された合法な範囲をもっている。例えば,不透明属性には,0と1との間の値が許される。アニメーション関数が範囲外の値を産出するかもしれない場合もある。実装は,その結果を,プレゼンテーション値に適用する前のできるだけ後に合法な範囲へと強制的に固定することが望ましい。理想的には,強制的固定化が実行される前に,与えられた点でのすべての活性又は凍結アニメーションの効果が,組み合わされることが望ましい。個々のアニメーション関数は範囲外の値を産出してもよいが,加算的アニメーションの組合せはそれでも合法であってよい。これらの場合に対するサポートは,個々のアニメーション関数の最終結果だけを強制的に固定し,個々のアニメーション関数の効果は固定しないことによって提供される。最適ではないが,必要な場合には,中間結果を強制的に固定してもよい。ホスト言語は,アニメーション化できる各々の属性に対して強制的固定化のセマンティクスを定義しなければならない。例えば,これは,animateColor要素によって定義される。
最初,与えられた属性に対するアニメーションが活性化する前,プレゼンテーション値は,文書の中で指定された元の値(OM値)と同一になっている。
与えられた属性に対するアニメーションのすべてが完了しており,関連するアニメーション効果がもはや適用されない場合,プレゼンテーション値は,再びOM値と等しくなる。アニメーションがfill=
幾つかのアニメーション(例えば,animateMotion)は,一つの属性,又は場合によっては幾つかの属性(例えば,あるレイアウトモデルの"posX"属性及び"posY"属性)を,暗黙的に,ターゲットとする。これらのアニメーションは,影響される各属性に対する他のアニメーションと組み合わせられなければならない。したがって,例えば,animateMotionアニメーションは,(ホスト言語のレイアウトモデルに依存して)一つより多いアニメーションサンドイッチの中にあってもよい。暗黙的に属性をターゲットとするアニメーション要素に対しては,ホスト言語設計者が,どの属性が暗黙的にターゲットとされるかを指定しなければならないし,実行時は,それに応じて,それぞれの属性に対するアニメーションを組み合わせなければならない。
ターゲット属性に関する(DOMインターフェース経由の)いかなる問合せも,OM値を反映し,アニメーションの効果を反映しないことに注意すること。この場合でも,OM値は,(例えば,スクリプトを使用する)OMインタフェース経由で変更されてもよいことに注意すること。すべてのアニメーション効果が適用された後に,最終プレゼンテーション値へのアクセスを提供することは有用又は望ましいことであってもよいが,それらインタフェースは,SMILアニメーションの一部としては提供されない。将来の版では,これを議論するかもしれない。
アニメーションは,OM値を操作しないが,文書ディスプレイは,OM値への変更を反映しなければならない。ホスト言語は,OMの中で直接に属性値を操作できるスクリプト言語をサポートできる。OM値への変更が行なわれる間,アニメーションが活性又は凍結になっている場合,その振る舞いは,アニメーションが加算的と定義されるかどうか依存し,次のとおりとなる。(加算的アニメーションも参照すること。)
タイミングモデル内では,アニメーションは,"連続的"メディアとみなされる。SMILアニメーションで定義されるアニメーション要素は,自然な本来的持続時間をもたない。したがって,それらは,不定の(indefinite) 本来的持続時間を割り当てられる。
このことから,以下の様々な箇条で注意を促される幾つかの結果が生じる。特に,大部分のアニメーション要素は,
先に記述されたとおり,単純アニメーション関数
3.2.5では,アニメーションの組合せのための詳細なモデルを含む,追加機能についてのセマンティクスを示す。これは,単純アニメーション関数の上の一連の関数(構築)として提供される。
これらの関数は,単純持続時間に外側のアニメーションを記述するので,非負の時間
BasicInlineTimingモジュールの間隔タイミング--(Interval timing)-->に示されるとおり,要素を繰り返すと,その要素は順番に数回"再生される"。繰返し期間は,要素の単純持続時間に対して0とする。アニメーションは,アニメーションの"再生"は,次のモデルに従う。ただし,アニメーションの"再生"とは,単純アニメーション関数
定義
任意の単純アニメーション関数
ただし,
この定式化は,間隔タイミングに記述された終了点除外モデルに従う。アニメーションは,繰り返す度に,
次の例において,2.5秒のアニメーション関数は,2度繰り返される。すなわち,活性持続時間は,5秒になる。属性topは,0から(約)10まで進み,2.5秒毎に0まで戻り,り繰返す。
<animate attributeName="top" from="0" to="10" dur="2.5s"
次の例において,アニメーション関数は,完全に2回繰り返され,さらに,その最初の半分がもう一度繰り返される。活性持続時間は,7.5秒になる。
<animate attributeName="top" from="0" to="10" dur="3s"
次の例において,アニメーション関数は,合計7秒間繰り返す。それは,完全に2回再生され,2秒の素片的な部分がそれに続く。これは,2.8(回)のrepeatCountと同じになる。最後の(部分的な)反復は,範囲"0"〜"8"の中の値を適用する。
<animate attributeName="top" from="0" to="10" dur="2.5s"
次の例において,単純持続時間は,repeatDurによって指定された持続時間より長く,したがって,活性持続時間は,実効的には,単純持続時間を切り捨て短くする。しかし,アニメーション関数は,それでも指定された単純持続時間を使用する。アニメーションの効果は,5秒の経過に渡って,10〜15に対応する"top"の値を補間することとする。
<animate attributeName="top" from="10" to="20"
単純持続時間が定義されない場合(例えば,不定の場合),繰返しの振る舞いは,定義されない(ただし,
<animate attributeName="fill" from="red" to="blue"
repeatCount="2" />
次の例において,単純持続時間は,不定とするが,それでもrepeatDurは,活性持続時間を決定する。アニメーションの効果は,fill属性の値の色を10秒間赤に設定する。
<animate attributeName="fill" from="red" to="blue"
repeatDur="10s" />
次の例において,単純持続時間は,repeatDurによって指定された持続時間より長い。したがって,活性持続時間は,実効的には,単純持続時間を切り捨て短くする。しかし,アニメーション関数は,それでもまだ指定された単純持続時間を使用して補間する。アニメーションの効果は,7秒の経過に渡って,10〜17に対応する"top"の値を保管することとする。
<animate attributeName="top" from="10" to="20"
繰返しアニメーションが,各反復に対して元の振る舞いを繰り返すのがよいかどうか,又は以前の結果の上に各反復を用いた蓄積を構築するのがよいかどうかを,制作者は,選択してもよい。例えば,弧を示す動き経路は,同じ弧に沿って何度もその上を動くことによって繰り返すことができるし,又はアニメーション要素をウィンドウを横切って跳ね返らせ,最後に止まった場所で各々の繰返し反復を開始することもできる。これを,累積アニメーションと呼ぶ。
定義
すべてのアニメーション要素は,累積的又は非累積的として,定義されなければならない。加算がターゲット属性に対して定義される場合にだけ,アニメーション要素を累積的と定義してよい。単純アニメーション関数
要素が非累積的である場合。
要素が累積的である場合。
最初の反復
このとき,累積アニメーション関数は,次のとおりとする。
例えば,(animateMotion要素の中で詳しく示されている)単純な弧のための経路記法を,跳返りの動きを記述するために使用できる。
画像は,5秒の経過に渡って,弧に沿って元の位置から移動する。アニメーションは,繰り返す度に,以前の値に基づいて構築され,図3.1で例示されるとおり,最初の弧が終了した場所で,第2の弧を開始する。この方法で,画像は,スクリーンを横切って"跳ね返る"。同じアニメーションを四つの弧をもつ一つの完全な経路として記述することのできるが,一般の場合,経路記述が,編集するためには非常に大きく及び厄介になる可能性がある。
図3.1
累積アニメーションは,単一アニメーションが繰り返される度に単純アニメーション関数の結果をどのように蓄積するかだけを制御することに注意すること。それは,特に,プレゼンテーション値を生成するために,あるアニメーションが他のアニメーションとどのように相互作用するかを制御はしない。この振る舞いは,加算的アニメーションで記述される。同様に,要素が再始動する場合,最初の動作からの蓄積は,2番目の動作に適用されない。再始動アニメーションを参照すること。
加算をサポートするいかなる数値属性も累積アニメーションをサポートできる。例えば,50秒で100画素だけSVGの
各単純持続時間において,長方形の幅は,15画素だけ膨れ上がり,最終的に最初と比べて10画素だけ大きくなる。その形は,最初は20画素の幅だが,5秒後に30画素の幅になる。アニメーションは繰返し,以前の値に基づいて構築される。今回は,その形は,45画素まで膨れ上がり,10秒後に40画素の幅になって終了する。10回すべて繰り返した後には,結局,120(=20+100)画素の幅になる。
アニメーション要素は,タイミングモジュールの中のfillの定義に従う。ここでは,アニメーション指定のセマンティクスを取り扱うためにその規定を拡張する。
アニメーション要素が終了する場合,デフォルトによって,その効果は,ターゲット属性に対するプレゼンテーション値にもはや適用されない。例えば,アニメーションが画像を動かし,アニメーション要素が終了する場合,画像は,その元の位置へと"跳び戻る"。
図3.2で示すとおり,画像は,3の"top"値で5秒間静止し,次に10秒の間に100画素だけ下へ移動する。文書が開始して15秒後にアニメーションは終了し,その効果はもはや適用されず,画像は103から始動場所の3(すなわち,
図3.2 凍結のないアニメーションの実例
文書が開始してから15秒後に,アニメーションは終了する。しかし,画像は103の"top"値に残る(図3.3)。属性は,凍結効果の持続時間の間,アニメーションの最後の値を凍結する。この持続時間は,時間コンテナによって制御される。(詳細については,SMILタイミング及び同期を参照すること。)
図3.3
活性持続時間が単純持続時間を短くする場合(これには部分的な繰返しも含まれる。),凍結されたアニメーションの効果値は,短くされた単純持続時間によって定義される。次の例において,単純アニメーション関数は,完全に2回繰り返し,さらに単純持続時間の半分をもう一度繰り返す。この場合,凍結されている間の値は,53となる。
図3.4 部分的な
次の例では,dur属性が失われており,したがって,単純持続時間は不定になる。活性持続時間は,endによって10秒と制約される。補間は定義されておらず,凍結されている間の値は,
これを形式的に述べると次のとおりとなる。
定義
凍結アニメーション関数
単一のアニメーションの値の繰返し及び蓄積に加えて,アニメーションは,絶対値ではなく属性値への差分として表現してもよい。これは,基礎的なDOM値を修正するために単一のアニメーションの中で使用できる。複雑なアニメーションは,幾つかの単純アニメーションを組み合わせることによって制作できる。
例えば,単純な"grow"アニメーションは,10画素だけ,オブジェクトの幅を増加できる。
幅は,20画素で開始し,10秒の経過に渡って,30画素まで増加する。アニメーションが非加算と宣言されていた場合には,同じfrom値及びto値によって,幅は,10秒間に0画素から10画素までになる。
多くの複雑なアニメーションは,より単純アニメーションの組合せとして最もよく表現される。例えば,"振動する"経路は,他の運動に追加された上下運動の繰返しとして記述できる。
アニメーション効果関数は,単純アニメーション要素に対するこれのセマンティクスを捕らえている。
定義
単純持続時間x及び活性持続時間yをもつアニメーション要素に対するアニメーション効果関数
すべてのアニメーション要素は,加算的又は非加算的のいずれかとして定義されなければならない。加算がターゲット属性の型に対して定義される場合にだけ,要素は,加算的として定義してよい。
一つの与えられた属性に対して定義された複数のアニメーションがある瞬間に重複する場合,その二つは,一緒になり加算されるか,又は片方が他方を上書きするかのいずれかとする。アニメーションが同じ瞬間に両方とも活性又は凍結のいずれかとなる場合,アニメーションは重複する。アニメーションの順序付け(例えば,どのアニメーションがどのアニメーションを上書きするか)は,各々のアニメーションと関連する優先度によって決定される。各々のアニメーションが開始する時点に従って,それらは,優先度を付けられる。最初に開始されたアニメーションは,最低の優先度をもち,最も最近に開始されたアニメーションは,最高の優先度をもつ。
加算的でないより高い優先度のアニメーションは,すべてのそれよりも早く開始された(より低い優先度の)アニメーションを上書きし,単にその属性値を設定する。加算的アニメーションは,より早く活性化されたアニメーションの結果に適用される(すなわち,加算される)。アニメーションがどのように組み合わせられるかに関する詳細については,アニメーションサンドイッチモデルを参照すること。
加算的アニメーションは,数値属性,及び加算関数が定義される他のデータ型に対して定義される。これには,位置,幅及び高さ,サイズなどといった概念のための数値属性が含まれる。さらに,これには,色(animateColor要素参照)も含まれ,ホスト言語が指定するとおりの他のデータ型が含まれてもよい。
例えば,お互いに基づいて構築されることが望ましい一連の運動が定義される場合,加算的アニメーション及びfill振る舞いの組合せが有用となる場合が多い。
画像は,最初の経路に沿って移動し,次に最初の経路の最後から2番目の経路を始動し,さらに2番目の経路の最後から3番目の経路に従って動き,最終点で留まる。
数値属性のアニメーションの多くは加算的だが,常にそうであるわけではない。非加算的と定義されるアニメーションの例として,オブジェクトにマウスを追跡させる拡張アニメーション"mouseFollow"を考える。
このマウスを追跡するアニメーションは,画像上で5秒間いつでも利用者マウスを追いかける。それは,加算的であってはならず,単に何らかの普通ではない方法で動きの経路をずらす。活性化してる間,
さらに,(例えば電話番号属性など,)数値属性の中には,加算をサポートしてはならないものもある。どの属性が加算的アニメーションをサポートするかを指定するのは,ホスト言語に任される。文字列及び論理型(Boolean)といった加算が定義されない属性型は,加算的アニメーションをサポートできない。
accumulate属性を,
通常,制作者は,(先のでaccumulateに対して示された例におけるとおりに,)累積アニメーションは加算的であると期待するが,これは必須ではない。次の例は,累積的だが加算的ではない。
このアニメーションは,"top"に対して設定されている元の値が何であっても上書きし,値20で開始する。それは,10画素だけ30まで下へ移動し,それを繰り返す。これは累積的であって,したがって,2回目の反復は50(一つ前の反復からの値30にfrom値20を加えたもの)で始動し,もう一回10画素60まで下へ移動し,それらが続く。
累積アニメーションが加算的でもあると定義される場合,二つの機能(累積性及び加算性)は,正常に機能する。
アニメーションは,"top"に対して設定されている元の値10に(20を)加算し,値30で開始する。それは,10画素だけ40まで下へ移動し,それを繰り返す。これは累積的であって,したがって,2回目の反復は60(一つ前の反復からの値40に20を加えたもの)で始動し,もう一回10画素だけ70まで下へ移動し,それらが続く。
アニメーションサンドイッチモデルも参照すること。
アニメーション要素は,SMIL Timing モジュールにおける再始動の定義に従う。
アニメーションが再始動する場合,その意味は,それよりも前の振る舞いとは無関係に,これがアニメーションが開始した最初の回であるものとして振る舞うと定義する。アニメーション効果関数
加算的アニメーションが,活性又は凍結の状態にある間に,再始動される場合,アニメーションの以前の効果(すなわち再始動の前の効果)は,もはや属性に適用されない。累積アニメーションは,アニメーションの活性持続時間内でだけ定義されることに特に注意すること。アニメーションが再始動する場合,すべての蓄積された内容は廃棄され,アニメーション効果
多くのアニメーションは,時間の渡って適用される値の列として単純アニメーション関数
値を記述する単純形式として,アニメーション要素は,from値及びto値を指定できる。属性が補間をサポートする値(例えば,数)をとる場合,単純持続時間の経過に渡って,from及びtoによって定義された範囲の中で値を補間できる。この変形として,to値の代わりに,by値を使い,属性への加算的な変更を示すこともある。
より複雑な形式は,値のリスト,又は運動のための経路記述さえも指定する。制作者は,"keyframe"アニメーションを記述するために値のタイミングも制御し,さらに,より複雑な関数をも制御できる。
すべての場合に,アニメーション効果関数
animate要素は,単位なしスカラ値を補間でき,
ある種の単位又は限定子をもつ数値(例えば,"10画素","2.3フィート","2.99ドル"など)を定義する属性の補間をサポートするためには,これらの値を構文解析し補間するための追加的サポートが必要になる。アニメーションフレームワークが単位限定された値の型について組込み知識をもっていると要求する可能性がある。しかし,これは,カプセル化の原理に違反し,この形式の新しい属性値型を定義するXML言語へとCSSを越えて拡張することはできない。
推薦するアプローチは,与えられたホスト環境に対するアニメーション実装が,言語抽象値の取扱いを抽象する次の二つのインターフェースをサポートすることとする。これらのインターフェースは,形式的には規定せず,単に次のとおりとする。
これらの二つのインターフェースのサポートは,アニメーションエンジンが,パーサ,及び言語抽象値に関連する付加的な意味的な論理を複製しなくてよいことを保証する。
これらのことは,実装がこのサポートを提供する方法を規定する試みではなく,むしろ,値が解釈される方法に対する要件とする。例えば,アニメーションの振る舞いが,すべてのCSS-lengthの単位を理解し,それらの間の変換を実行できなければならないのは望ましくない。さらに,この機構は,言語のための実装が属性値に対する構文解析及び変換のサポートを提供できる場合,アニメーションの新しいXML言語への適用を考慮している。
こうした推奨にもかかわらず,特定の単位空間で値を補間し,正準的単位ではなく指定された単位を使用して結果を適用することが,有用な場合がある。これは,CSSが定義するような相対的単位(例えばem単位)に対して,特に正しい。アニメーションが同じ単位ですべての値を指定する場合,実装は,単位空間での補間に関連する構文の知識を使用し,正準的単位ではなく指定された単位を用いて,アニメーションサンドイッチ内の結果を適用してもよい。先に注意したとおり,この解決は,一般的な場合へと拡張できない。しかし,(CSS特性といった)ある適用においては,このアプローチをとることが望ましいこともある。
アニメーションの単純持続時間が不定の場合(例えば,dur値が指定されない場合),補間は,一般に意味がない。定義された単純持続時間に基づかないアニメーション関数を定義するは可能だが(例えば,何らかの乱数アルゴリズムによる場合),大部分のアニメーションは,単純持続時間を用いて関数を定義する。アニメーション関数が単純持続時間を用いて定義されていて,単純持続時間が不定の場合,アニメーション関数(すなわち,
SMIL 2.0 BasicAnimationモジュールは,次を提供する。
BasicAnimationは,アニメーションモデルの箇条で示すモデルに従う属性及び要素を定義する。
BasicAnimationモジュールの要素は,ターゲット属性を識別するために使用する属性を共通的にもち,さらに,あまり普遍的ではないが,アニメーション関数を指定する属性をもつ。
アニメーションターゲットは,特別な要素の特定の属性として定義される。ターゲット属性及びターゲット要素を指定することの意味を,3.4.1で詳細に示す。
アニメーション化されるターゲット属性は,attributeNameを用いて指定される。この属性の値は,ホスト言語によって定義されるとおりの,ターゲット属性の名前を指定する文字列とする。
アニメーション化できる要素の属性は,異なる言語によって及び/又は異なる名前空間の中で定義されることが多い。例えば,多くのXMLアプリケーションにおいて,要素の位置(これは,典型的なターゲット属性である。)は,XML属性ではなくCSS特性として定義される。同じ属性名が,二つ以上の言語又は名前空間における属性又は特性と関連付けられる場合がある。制作者が名前対応付けをあいまい性なしに行えるために,意図する名前空間を指定する追加属性attributeTypeが,提供される。
attributeType属性は,オプションとする。デフォルトで,アニメーション実行時(プロセス)は,次の規則に従って名前を解決する。名前の衝突が存在せずattributeTypeが指定されていない場合には,ホスト言語によってサポートされるCSS特性のリストを,(CSSがホスト言語でサポートされている場合,)最初に照合する。CSSの照合が成功しない場合(,又はCSSが適用されない場合),ターゲット要素に対するデフォルト名前空間が照合される。
ターゲット属性がターゲット要素のためのデフォルトの名前空間ではなくXML名前空間の中で定義されている場合,制作者は,アニメーション要素の有効範囲の中で定義されているとおりの関連する名前空間接頭語を使用して,ターゲット属性の名前空間を指定しなければならない。その接頭語は,attributeNameのための値の前に置かれる。
XML名前空間に関するより詳しい情報については,[XML-NS]を参照すること。
アニメーション要素は,アニメーションのターゲット要素を,明示的又は暗黙的のいずれかで定義できる。明示的な定義は,ターゲット要素を指定するために属性を使用する。このための構文を以下で示す。
明示的なターゲットが指定されない場合,暗示的なターゲット要素は,文書木のアニメーション要素の親要素とする。アニメーション要素はアニメーション化される要素の子として宣言されるのが共通的と期待される。この場合,明示的なターゲットを指定する必要はない。
明示的なターゲット要素の参照が解決できない場合(例えば,そのような要素が存在しない場合),そのアニメーションは,効果をもたない。さらに,その(明示的又は暗黙的のいずれかの)ターゲット要素が指定されたターゲット属性をサポートしていない場合,そのアニメーションは,効果をもたない。構文エラーの取扱いを参照すること。
次の二つの属性は,ターゲット要素を明示的に識別するために使用できる。
アニメーション要素をホスト言語に統合する場合,言語設計者は,これらの属性の両方を含めることは避けるほうがよい。しかし,ホスト言語設計者がホスト言語の中に両方の属性を含めることを選択する場合,一つの与えられたアニメーション要素に対して両方を指定するときには,XLinkのhref属性が,targetElement属性よりも高い優先度をもつとする。
targetElement属性を使用する利点は,その属性値の構文が,hrefと比較して単純なことにある。XLinkhref属性を使用する利点は,それがSMILアニメーションの将来の版における完全なリンク付け機構へと拡張可能なこと,及びそのアニメーション要素が一般的なXLinkプロセサによって処理可能なことにある。XLink形式は,それら参照すべてのためにXLinkを使うように設計されたホスト言語に対しても提供される。次の二つの例は,この二つのアプローチを示している。
次の例は,より単純なtargetElement構文を使用している。
次の例は,等価なターゲットを用いて,より柔軟なXLink位置指定子構文を使用している。
アニメーション要素上でXLink href属性を使う場合,次の付加的なXlink属性をホスト言語で定義する必要がある。これらの属性は,DTDの中で定義してもよいし,ホスト言語が一般的なXLinkプロセサをサポートするために文書構文の中で要求してもよい。より多くの情報については,[XLINK]を参照すること。
次のXLink属性は,XLink規定によって要求される。その値は,固定的であって,したがって,DTDなどの中で指定されてよい。他のすべてのXLink属性はオプションであって,SMILアニメーションセマンティクスに影響を与えない。
ホスト文書及び言語と関係するターゲット要素指定に関する追加の詳細は,アニメーションターゲットに関して要求される定義及び制限で示される。
すべてのアニメーション関数は,特定の瞬間における属性の値を定義する。アニメーション関数が定義されている時間範囲を,単純持続時間とする。アニメーション関数は,0から単純持続時間までの範囲の外部の時間に対しては,定義された結果を生成しない。
アニメーションは,値のリスト,又はfrom値,to値及びby値を記述した単純な形式のいずれかとして記述される。from,to及びbyの形式は,from,to及びbyによって定義される単純アニメーション関数で定義される。
値が文法に合っていない場合,アニメーションは,無効となる(構文エラーの取扱いも参照)。
アニメーションは,その経過に渡って順番に値を適用する。discreteを指定されているアニメーション及びlinearを指定されているアニメーションに対しては,values属性における値は,アニメーションの持続時間を通じて(時間的に)等しく配置される。pacedが指定されているアニメーションに対しては,その値は,一定な変化率が得られるように配置される。
values構文を使った次の例は,10秒の経過に渡って,SVG形状の幅をアニメーション化しており,幅を40から100まで補間し,その後40に戻る。
この例のための単純アニメーション関数(時間は秒単位)は,次のとおり。
values属性及びcalcMode属性によって定義される単純アニメーション関数は,形式的には,次のとおりとできる。
定義
アニメーション関数は,これらの距離によって決定された時間でのvalues属性の値を取る。
ここで,
最初の値が最後の値として繰り返される場合,線形な又は一定変化率のアニメーションは,滑らかに閉じたループとなることに注意すること。
次の三つの図3.5a,図3.5b,及び図3.5cは,異なる補間モードを与えた場合に,同じ基本アニメーションが時間の経過でどのように値を変化さるかを示す。すべての例は,次の例に基づいているが,calcModeに異なる値を与えている。
図3.5 離散(discrete),線形(linear)及び一定変化率(paced)のアニメーション
次の例は,単純離散アニメーションを記述している。
属性"foo"の値は,各2秒間に,それぞれの四つの文字列に設定される。文字列の値は補間できないので,離散アニメーションだけが可能になる。いかなるcalcMode属性も無視される。
次の例は,単純線形アニメーションを記述している。
この例での"x"の値は,最初の5秒で0から10まで変化し,それから次の5秒で10から100まで変化する。values属性における値は,時間的に一定の間隔となるように配置されていることに注意すること。この場合,その結果は,アニメーションの後半の間に,値において非常に大きな実際的変化を生じている。"一定変化率(paced)"補間を使うように変更された次の例とこれを比較すること。
この例では,属性"x"の変化を一定変化率で行うために,値リストによって定義された2番目の区分が,単純持続時間の大部分を獲得する。"x"の値は,最初の1秒で0から10まで変化し,それから次の9秒で10から100まで変化する。この例は,一定変化率補間を用いずにfrom-toを使ったアニメーションとして簡単に制作できるが,(動き経路などの)多くの例では,calcModeに対してpaced値を用いずに制作することは非常に難しい。
3.2.5 アニメーション効果関数F(t,u)で示したとおり,単純アニメーション関数は,次のとおりであってよい。
3.2.5 アニメーション効果関数F(t,u)は,これらの属性のセマンティクスを定義し,例を与えている。3.4.3では,その構文だけを与える。
repeatCount属性,repeatDur属性及びfill属性の定義については,BasicInlineTimingモジュ-ルを参照すること。
繰返しアニメーションの加算的及び累積的振る舞いは,それぞれ,additive属性及びaccumulate属性を用いて制御される。
アニメーションは,先に示したとおりのvaluesのリストとして,又はfrom,to及びbyの値を使う単純化された形式のいずれかで,記述される。
より単純なfrom,to及びbyの構文は,幾つかの変形のために用意されている。これらの変形の一つを使うためには,by又はtoのうちの一つを指定しなければならない。from値は,オプションとする。by属性及びto属性の両方を指定するのは,文法に合わない。両方が指定された場合には,to属性だけが使われる。by属性は,無視される。属性の組合せは,次のアニメーションのクラスを与える。
例
次の"from-toアニメーション"の例は,SVG形状の幅を,10秒の経過に渡って50から100までアニメーション化する。
次の"from-byアニメーション"の例は SVG形状の幅を,10秒間の経過に渡って50から75までアニメーション化する。
次の"byアニメーション"の例は SVG形状の幅を,10秒間の経過に渡って40から70までアニメーション化する。
from-toアニメーション及びfrom-byアニメーションは,次の例にあるとおり,累積アニメーションもサポートする。
長方形は,最初の5秒で10画素から20画素まで成長し,次の5秒で20画素から30画素まで,さらに同じように10回の繰返し後に110画素まで成長する。additiveに対するデフォルト値はreplaceなので,元の値は,無視されることに注意すること。次の例は,アニメーションを明示的に加算的としている。
結果は,すべての値が元の値20によってずらされていること以外は,先の例と同じとする。長方形は,5秒後には30画素の幅になり,10回の繰返し後には130画素の幅になる。
加算をサポートする属性のtoアニメーションは,ある種の加算的及び非加算的なアニメーションの混合とする。基礎値は,加算的アニメーションを用いた場合と同様の始動点として使われるが,to属性によって指定された終了値は,アニメーションが非加算であるものとして,基礎値を上書きする。
次の"toアニメーション"の例は,SVG形状の幅を,10秒間の経過に渡って40から100までアニメーション化する。
toアニメーションは一つの値だけをもつので,離散的なtoアニメーションは,単に,単純持続時間に対するto値を設定する。次の例では,rectは,アニメーション要素の10秒の持続時間の間,青色になっている。
toアニメーションのセマンティクスは,一般的なアニメーションモデルに見合っているが,幾つかの特殊な場合がある。次に示す規定としての定義は,アニメーションモデルにおいて示されたアニメーションの他の型に対する定義と対応している。
定義
他の(より低い優先度の)アニメーションが活性でも凍結でもない場合,これは,単純な補間を定義する。しかし,他のアニメーションが基礎値を操作している場合には,toアニメーションは,最初は,そのより低い優先度のアニメーションの効果に加算し,単純持続時間の終了点に近づくにつれて徐々に優位を占めるようにし,最後には,完全に低い優先度のアニメーションの効果を上書きする。単純持続時間の終了点での
toアニメーションの繰返しは,他のアニメーションの繰返しと同じとする。
定義
toアニメーションはターゲット属性の絶対的な値を用いて定義されるので,累積アニメーションは,定義されない。
定義
凍結したtoアニメーションは,それが凍結された時点での値を取り,基礎値における更なる変化は見えないようにする。これは,単純持続時間の終了点での
定義
アニメーションが時間
例えば,次を考える。
幅は,最初の10秒で40画素から100画素までとアニメーション化され,次の10秒で40画素から100画素までのアニメーション化が繰り返され,最後の5秒で40画素から70画素までになり,70画素で凍結する。
Toアニメーションは,それ自体の種類の加算的セマンティクスを定義する。そのために,additive属性は,無視される。
定義
複数のtoアニメーションも,これらのセマンティクスに従って組み合わされる。アニメーションが進行するにつれて,より高い優先度のアニメーションがより大きな効果をもつようになり,終了点での結果では,属性がより高い優先度のtoアニメーションの最終値に設定される。
加算的toアニメーションの例として,次の二つの加算的アニメーションを考える。最初に,byアニメーションが,差分を属性"x"に適用し0から-10まで変化させる。次に,toアニメーションが,最終値10までアニメーション化する。
この例での10秒の経過に渡る"x"のプレゼンテーション値は,図3.6で提示される。これらの値は,先に示された公式を使用して単に計算される。A2に対する
図3.6 加算的toアニメーションの例における効果
SMIL BasicAnimaionモジュールは,四つの要素,animate,set,animateMotion及びanimateColorを定義する。
animate要素は,アニメーション化されている属性の意味的な理解をほとんど又は全く要求しない一般的な属性アニメーションを導入する。それは,数値スカラも数値ベクトルもアニメーション化できる。値の離散的な集合を通じて単一の数値的でない属性もアニメーション化できる。animate要素は,空要素とする。すなわち,子要素をもつことができない。
この要素は,アニメーション関数に対する,from,to,by,及びvaluesの記述だけでなく,計算モードのすべても同様にサポートする。それは,すべての記述されたタイミング属性をサポートする。これらは,先に示したそれぞれの箇条ですべて記述される。
animateによってサポートされるすべての属性のセマンティクスの規定としての定義のとおりに,多くの例が先に提供されている。
set要素は,指定された持続時間に対して属性の値を単に設定する単純な手段を提供する。すべてのアニメーション要素と一緒に使うとき,これは,プレゼンテーション値だけを操作し,アニメーションが完了するとき,その効果は,もはや適用されない。すなわち,setは,属性の値を永久的に設定するものではない。
set要素は,合理的には補間可能ではない属性,及び(例えば,文字列及び論理値といった)単純に値を設定するセマンティクスをより重要視してサポートする属性を含むすべての属性型をサポートする。set要素は,非加算的とする。加算的属性及蓄積的属性は,許可されず,指定されて場合には無視される。
set要素は,単純持続時間及び活性持続時間を指定するために,すべてのタイミング属性をサポートする。しかし,repeatCount属性及びrepeatDur属性は,setの効果を拡張するが,(静的な操作を"繰り返す"ことは意味がないので,)単にsetの活性持続時間に影響を与える。setと共に
set要素は,animate要素よりも制限された属性の集合をサポートする。ただ一つの値だけが指定され,補間制御も加算的アニメーション又は累積アニメーションもサポートされない。
定義
ここで,
set要素は,非累積的及び非加算的とする。
例
次の例は,SVG長方形のstroke-widthを元の値から5画素の幅まで変化させる。その効果は,5秒の時点で開始し10秒間続き,その後,元の値が再び使用される。
次の例は,マウスが要素の上に移動するときに,テキスト要素の
animateMotion要素は,経路に沿ってある要素を移動する。animateMotion要素は,様々なレイアウト機構に渡った動き及び位置の概念を抽象化する。ホスト言語が,レイアウトモデルを定義し,位置及び動きの精密なセマンティクスを指定しなければならない。経路は,次の二つの方法のいずれかで記述可能とする。
すべての値は,x及びyの値の対でなければならない。それぞれのx及びyの値には,ホスト言語が要素の位置指定のためにサポートするいかなる単位を指定してもよい。ホスト言語は,デフォルト単位を定義する。さらに,ホスト言語は,要素の位置指定のために参照点を定義する。これは,動きアニメーションが記述する位置へと揃えられた要素内の点とする。幾つかの言語では,参照点は,要素境界ボックスの左上隅をデフォルトとする。他の言葉では,参照点は,暗黙的であってもよいし,又は要素に対して指定してもよい。
x及びyの値の対に対する構文は,次による。
座標値(coordinate value)は,少なくとも一つの空白文字又はコンマで区切る。区切り子の回りには付加的な空白が存在してもよい。
attributeName属性及びattributeType属性は,animateMotionと一緒には使用しない。これは,操作される位置属性はホスト言語によって定義されることによる。位置がアニメーション化も可能な属性として(例えば,"top"及び"left",又は"posX"及び"posY"として)示される場合,実装は,animateMotionアニメーションを,個々の位置属性を操作する他のアニメーションと組み合わせなければならない。アニメーションサンドイッチモデルも参照すること。
from属性,to属性,by属性及びvalues属性のいずれもが指定されない場合,アニメーションは,いかなる効果ももたない。
animateMotionのためのデフォルト計算モード(calcMode)は,paced(一定変化率)とする。これは,指定された経路に沿った一定速度の動きを生成する。animateMotion要素は加算的とすることが可能だが,二つ以上のpaced(一定速度)のアニメーションの加算は,一つの組み合わされた一定速度の動きアニメーションを生じないかもしれないことに注意すること。
values属性に記述されている二つより多くの点と共にcalcModeに対してlinear(線形)を使用した場合には,可変速度の動きが生じてもよい。linear(線形)なcalcModeは,valuesによって定義された幾つかの区分の間で,時間が等分に分けられることを指定する。linearの使用は,時間が,各々の区分が記述する距離(範囲)に従って等分に分けられることを指定しない。
一定速度の動きのためには,calcModeをpacedと設定することが望ましい。
animateColor要素は,色属性のアニメーションを指定する。ホスト言語は,色値を記述し色アニメーションをサポートできるそれらの属性を指定しなければならない。
すべての値は,[sRGB]色値を表現しなければならない。属性値のための文法にあった値の構文は,ホスト言語によって定義される。
補間は,色チャネルごと(per-color-channel)を基礎として定義される。
from属性,to属性,by属性及びvalues属性における値は,色に対して負の値及び範囲外の値を指定してもよい。個々のanimateColorによって定義された関数は,負の値又は範囲外の値を産出してもよい。実装は,結果として生じるプレゼンテーション値を,到達先(ディスプレイ)の色空間にとって合法となるように補正しなければならない。しかし,アニメーションサンドイッチモデルの中で記述されるとおり,実装は,与えられた属性の対するすべてのアニメーションの最終的な組み合わされた結果だけを補正することが望ましく,個々のアニメーションの効果を補正しないほうがよい。
値は,正しい範囲にその値を"強制的に固定すること(clamping)"によって補正される。最小許容値より小さい値は,最小値(通常は0。しかし,幾つかの色プロファイルに対しては必ずしもそうではない。)に強制的に固定される。定義された最大よりも大きい値は,(ホスト言語によって定義された)最大値に強制的に固定される。
色値は,到達先(ディスプレイ)色空間の全色値範囲にそれらを強制的に固定することによって,補正されることに注意すること。到達元(sRGB)色空間の範囲外の値を処理できず,到達元色空間への強制的固定を実行し,その後に到達先色空間へ変換し,その全色値範囲へ強制的に固定しなければならない実装が存在してもよい。重要な点は,到達元全色値範囲と到達先全色値範囲とを区別すること,強制的固定は可能な限り遅く行うこと,及び一見はRGB装置のように見えるインクジェットプリンタなどの装置の中には3次元的な全色値範囲をもたないものがあることを理解することである。
実装者への備考 animateColorはtoアニメーションとして指定されている場合,アニメーション関数は,差分が計算されなければならないユークリッド的RGB 3次元距離を仮定するすることが望ましい。3.4.2 単純アニメーション関数f(t)の指定及び3.4.4 from,to及びbyによって指定される単純アニメーション関数も参照すること。同様に,animateColorに対するcalcMode属性がpacedに設定される場合,アニメーション関数は,距離及び変化率を計算するために,ユークリッド的RGB 3次元距離を仮定することが望ましい。
3.6.1では,言語設計者がSMILアニメーションのホスト言語への統合を規定するために実際に行わなければならないことを示す。これには,アニメーションに関する基本的定義及び制約が含まれる。
3.6.1で一覧として示される要件に加えて,共通アニメーション統合要件で一覧として示されるものも満足されなければならない。
ホスト言語設計者は,ターゲット要素の指定のためにtargetElement属性又はXLink属性をサポートするかどうか選択しなければならない。XLink構文が使用される場合,ホスト言語設計者は,関連付けられた属性のためにXLink名前空間を表示する方法を決定しなければならないことに注意すること。名前空間はDTDの中で固定できるが,言語設計者は,その属性に対するXLink名前空間を表示するためにコロン付き属性名(qnames)を要求することもできる。要求されたXLink属性は値を固定しDTDの中で指定してもよいし,又はアニメーション要素上で要求することもできる。ホスト言語設計者が,オプションのXLink属性を指定することを要求してもよい。これらの決定は,ホスト言語設計者に任される。XLink属性のための構文の詳細は,SMILアニメーションのセマンティクスに影響を与えない。
一般に,ターゲット要素は,文書の中のどんな要素であってもよい。ホスト言語設計者は,これに対する例外を指定しなければならない。アニメーション要素がそのアニメーション要素の定義されている文書の外部の要素をターゲットとすることを,ホスト言語設計者が許すことは推奨されない。ターゲット要素のためのXLink構文はこれを許すことが可能だが,これについての,SMILのタイミング及びアニメーションのセマンティクスは,SMILアニメーションのこの版では定義されない。
このモジュールにおける定義は,ホスト文書の中のいかなる要素のいかなる属性をアニメーション化するためにも使用できる。しかし,SMILアニメーションを統合するホスト言語設計者は,どの要素及び属性がアニメーションをサポートできるかを制約することを選択してもよい。例えば,ホスト言語は,
ホスト言語によってアニメーションから明確に排除されたわけではない,いかなる要素のいかなる属性も,(その属性のためにホスト言語によって定義されたとおりの)基礎データ型が(離散アニメーションのための)離散値及び/又は(補間された,加算的であって累積的なアニメーションのための)加算をサポートする限りは,アニメーション化されてよい。
アニメーションに関するすべての制約は,ホスト言語規定の中で又は適切なスキーマの中で記述されなければならない。これは,DTDだけではこれを合理的に表現できないことによる。
ホスト言語は,アニメーション化される属性のためにどの言語抽象値が処理されるのが望ましいかを定義しなければならない。例えば,CSSを取り込むホスト言語は,CSSの長さの値がサポートされることを要求してよい。このことは,3.2.8 アニメーション関数値の詳細でさらに詳しく示される。
ホスト言語は,相対的な値の解釈を指定しなければならない。例えば,値がコンテナの大きさの百分率として指定されている場合,ホスト言語は,コンテナの大きさがアニメーション化されるにつれて,この値を動的に解釈するかどうかを指定しなければならない。
ホスト言語は,属性のために値を強制的に固定する場合のセマンティクスを指定しなければならない。その言語は,値に対して何らかの定義済み範囲を指定し,範囲外の値を処理する方法を指定しなければならない。
ホスト言語は,数値属性値のためにサポートされるフォーマットを指定しなければならない。これは,整数値及び浮動小数点値の両方を含む。最小限,ホスト言語設計者は,[CSS2]の4.3.1 "整数及び実数"で記述されたフォーマットをサポートすることが望ましい。
ホスト言語規定は,どの要素がanimateMotionのターゲットとなることができるかを定義しなければならない。さらに,ホスト言語規定は,要素のための位置決めモデルを記述しなければならないし,この文脈におけるanimateMotionのためのモデルを記述しなければならない。すなわち,origin属性のためのデフォルト値のセマンティクスを定義しなければならない。位置を記述するために異なる方法が存在する場合には,origin属性に対する付加的な属性値を,制作者が位置決めモデルを制御できるように定義することが望ましい。
SMILアニメーションモジュールのための完全なDTD参照すること。
3.7は,SMIL 2.0 SplineAnimationモジュールの機能を定義する。このモジュールは,スプライン補間のためであって時間における点に関し一定ではない間隔あけを行う属性を追加する。これらの属性は,animate要素,animateMotion要素及びanimateColor要素において使用してよい。
SplineAnimationモジュールは,BasicAnimationモジュールのdiscrete(離散),linear(線形)及びpaced(一定変化率)の計算モードを拡張し,補間及びタイミングに関する追加的な制御を提供する。
calcModeのdiscreteをpath指定と一緒に使用することは許されるが,それは,点から点へと単に跳び越すだけとする。時間は,3.7.4のpath属性の中で記述されるとおりに,path指定における点から導出される。
keyTimesのリストが指定される場合,valuesリストの中の値とちょうど同じ数のkeyTimesリストの中の値が存在しなければならない。
keyTimes属性が指定されない場合,3.2.1 単純アニメーション関数f(t)で記述されるとおりに,単純持続時間は,等分の区分に分けられる。
各々の後続の時間値は,それに先行する時間値より大きいか又は同じでなければならない。
keyTimesリストのセマンティクスは,補間モードに依存する。
補間モードがpacedの場合,keyTimes属性は,無視される。
keyTimes指定にエラーがある場合(例えば,間違った値,多過ぎる値又は少な過ぎる値など),アニメーションは,効果をもたない。
単純持続時間が不定であって,補間モードがlinear又はsplineの場合,いかなるkeyTimes指定も,無視される。 値は,すべて0〜1の範囲になければならない。
calcModeがsplineに設定されていない場合には,この属性は無視される。
このセマンティクス(持続時間は
keySplinesリストにおける制御点集合のための構文は,次による。
使用法
制御点の値は,少なくとも一つの空白文字又はコンマによって区切られる。区切り子の回りの付加的な空白は,許される。浮動小数点数のための許された構文は,ホスト言語で定義されなければならない。
keyTimes又はkeySplinesのための引数値が文法に合わない場合(これには,どちらの属性に対しても少な過ぎる値又は多過ぎる値が含まれる。),アニメーションは,効果をもたない(構文エラーの取扱い参照)。
calcMode属性,keyTimes属性及びkeySplines属性の値において,先行又は後続する空白,及びセミコロンの前後の空白は,無視される。
次の例にあるとおり,離散アニメーションは,keyTimesと一緒に使うことができる。
この例は,keyTimes値が不定の持続時間とどのように相互作用できるかも示す。"color"属性の値は,5秒間,緑(green)に設定され,次に5秒間,黄(yellow)に設定され,さらに文書の残りの間は赤(red)を維持する。これは,(指定されていない)持続時間は"不定(indefinite)"をデフォルトとすることによる。
次の例は,keyTimesの使用を例示する。
keyTimes値は,"x"属性を,アニメーションの始動時に"0"に,8秒後(単純持続時間の80%の時点)に"50"に,アニメーションの終了時に"100"にする。値は,アニメーションの前半ではよりゆっくり変化し,後半ではより速く変化する。
幾つかの属性については,変化の変化率が,見る者には容易に認識できないことがあってもよい。しかし,動きのようなアニメーションのためには,動きの速さを徐々に変化させ,急激に段階的には変化させないという能力が,重要となる。keySplines属性は,この制御を提供する。
keySplinesを使用するために,先の例を拡張する。
この場合も,keyTimes 値は,"x"属性を,アニメーションの始動時に"0"に,8秒後に"50"に,アニメーションの終了時に"100"にする。しかし,値の間の補間を一定の変化とするために,keySplines値が,曲線を定義する。この例では,スプラインは,時間0秒及び8秒の間(すなわち,keyTimesの0と.8との間,及びvaluesの"0"と"50"との間)で,イーズイン(ease-in,ゆっくりと開始)しイーズアウト(ease-out,ゆっくりと終了)する効果を引き起こすが,8秒と終了時点との間(すなわち,keyTimesの.8と1との間,及びvaluesの"50"と"100"との間)は,厳密な線形を引き起こす。図3.7は,これらのkeySplines値が定義する曲線を示す。
図3.7 keySplinesの効果の例示
図3.7の中で各々の図が,一つの間隔(すなわち,keyTimes及びvaluesのリストにおける値の関連する対の間)におけるkeySplinesの設定の効果を例示する。水平軸は,与えられた間隔内における補間の単位進行状況,すなわち,与えられた間隔に沿って補間が進行する際の変化率に対する入力値と考えることができる。垂直軸は,keySplines関数によってもたらされる単位進行状況に対する結果値とする。これを記述するには,水平軸を間隔に対する入力単位時間とし,垂直軸を出力単位時間とする他の方法もある。10.におけるタイミング及び実世界時計時間に関する箇条も参照すること。
計算を例示するために,単純な例を考える。
図3.7の四つの場合の各々に対するkeySplines 値を使用すると,アニメーションが進行するにつれての大体の補間された値は,次の表3.1のとおりとなる。
Bezierスプラインの計算の形式的な定義については,[COMP-GRAPHICS]の488ページ〜491ページを参照すること。
keyTimes属性及びkeySplines属性は,次の例にあるとおりに,指定する値のためにfrom,to及びbyによる簡略記述形式を用いて使用することもできる。
keySplines値によって指定された"イーズイン(ease-in,ゆっくりと開始)しイーズアウト(ease-out,ゆっくりと終了)する"曲線を使って,値は,10から20まで変化する。keyTimes値によって,値は,7秒の時点で20に到達し,10秒間の単純持続時間の残りの間,そこに留まる。
次の例は,多少普通ではない用法,離散アニメーションを用いたfrom-toアニメーション,を記述する。SVG要素の
SplineAnimationモジュールは,BasicAnimationモジュールのanimate要素,animateMotion要素及びanimateColor要素を,keyTimes属性及びkeySplines属性を加え,さらにcaclMode属性に対してspline値を加えて,拡張したものとする。
SplineAnimationモジュールは,BasicAnimationモジュールによって定義されたanimate要素を,次の属性及び値を加えることで,拡張する。
例は,animateがサポートする属性すべてのセマンティクスの規定としての定義と同様に,先に示した。
SplineAnimationモジュールは,BasicAnimationモジュールによって定義されたanimateMotion要素を,次の属性及び値を加えることで,拡張する。
経路データ区分は,次の"moveto"関連の命令のうちのどれか一つを用いて開始しなければならない。
すべてのcalcMode設定に対して,単純なアニメーション関数
animateがサポートするすべての属性のセマンティクスの規定としての定義と同様に,例は,先に示している。
完全な速度制御のために,calcModeはsplineに設定することが可能であって,制作者は,keyTimes及びkeySplinesを用いて速度制御スプラインを指定できる。
SplineAnimationモジュールは,BasicAnimationモジュールによって定義されたanimateColor要素を,次の属性及び値を追加することで,拡張する。
SMIL 2.0 SplineAnimationモジュールのホスト言語への統合を指定するために,言語設計者は,BasicAnimation統合要件の中で一覧として示されたすべての要件を満足することで,SMIL 2.0 BasicAnimationを(ホスト)言語へと統合しなければならない。
BasicAnimationを統合することに加えて,共通アニメーション統合要件の中で一覧として示された要件が,SplineAnimationモジュールに対して満たされなければならない。
SMILアニメーションモジュールのための完全なDTDを参照すること。
3.9は,BasicAnimationモジュール及びSplineAnimationモジュールに対して同じであるホスト言語統合の課題を提示する。
ホスト言語プロファイルは,SMIL 2.0 BasicInlineTimingモジュールのすべての要件を満たすことで,SMIL 2.0 BasicInlineTiming モジュールをホスト言語に統合しなければならない。さらに,SMIL 2.0タイミング及び同期モジュール及びSMIL 2.0時間操作モジュールのうちでホスト言語に統合されるすべてのモジュールは,BasicAnimationモジュールの要素上で利用可能でなければならない。
特に,ホスト言語がBasicInlineTimingモジュールに加えてSMIL 2.0 BasicTimeContainersモジュールを統合する場合に限り,fill属性は,アニメーション要素上でサポートされる。
ホスト言語プロファイルは,アニメーション要素に付加的な属性を追加してもよい。何らかのアニメーション要素に追加された属性は,すべてのアニメーション要素に追加されなければならない。特に,このモジュールは,XMLのID属性を定義しない。ホスト言語プロファイルが,XMLのID属性をアニメーション要素に追加するものと期待される。
SMILアニメーションを統合する言語設計者は,これらの追加が制作者にとって便利になる新しいアニメーション要素を定義するのがよい。新しい要素は,SMILアニメーション及びSMILタイミング及び同期に基づいていなければならず,SMILタイミング及び同期,並びにSMILアニメーションが提供するフレームワーク内に留まらなければならない。
言語設計者は,加算が定義できる非数字データ型に対して,加算的であって累積的なアニメーションのためのサポートを定義するのもよい。
SMIL アニメーションを統合する言語設計者は,文書が開始した後,アニメーション要素の属性の操作を許可しないほうがよい。これは,タイミング属性だけでなく,ターゲット及び値を指定する属性の両方を含む。特に,すべてのアニメーション要素上の(ID型の)
言語の規定は,文書が開始した後,DOMインタフェースを通じてアニメーション要素の属性の操作を許可しないことが望ましい。言語の規定は,他のアニメーション要素をターゲットととするアニメーション要素の使用も許可しないことが望ましい。
特に,attributeName属性が(アニメーション又はスクリプトのいずれかによって)変更できる場合,ターゲット属性が名前空間修飾名をもっているときには,問題が起こるかもしれないことに注意すること。現在のDOM規定は,この結合を処理するために機構を含まない。
アニメーション要素の属性値を動的に変更することは,まだ十分には解決されていない意味的な複雑さをモデルに導入してしまう。この制約は,SMILアニメーションの将来の版で取り除かれるかもしれない。
各々の属性のために特定のエラーを取り扱う機構は,個々の構文記述と一緒に記述されている。これらの規定の中には,構文エラーをもつアニメーションの振る舞いを"効果をもたない"として記述しているものがある。これは,アニメーションがタイミングに関しては正常に振る舞い続けるが,プレゼンテーション値を操作することはなく,したがってそのプレゼンテーションに目に見える影響をもたないことを意味する。
特に,これは,他のアニメーション要素が"効果をもたない"アニメーションを基準にして開始又は終了すると定義されている場合,その他のアニメーション要素は,構文エラーが存在しないものとして開始し終了することを意味している。プレゼンテーション実行時は,エラーを示すてもよいが,文書のプレゼンテーション又はアニメーションを停止する必要はない。
ホスト言語及び/又は実行時の中には,より厳しいエラーの取扱いを課すことを選ぶものがあってもよい。エラーの取扱いを行うホスト言語の課題については,エラー取扱いセマンティクスを参照すること。エラーが検出される場合,制作環境は,より多くの対応の実施を選択してもよい。
ホスト言語設計者は,エラー取扱いセマンティックスに関してより厳しい制約を課してもよい。すなわち,構文エラーがある場合,ホスト言語は,エラーを示すために使用する付加的な又はより厳しい機構を指定してもよい。これには,例えば,文書のすべての処理を停止するとか,すべてのアニメーションを停止するなどがある。
ホスト言語設計者は,(構文エラーの取扱いで示されるとおりの)エラー取扱い規定又はエラー取扱い応答を緩和してはならない。例えば,ホスト言語設計者は,values属性又はkeyTimes属性の値における欠損又は誤った値のために,エラー回復セマンティクスを定義してはならない。
<rect ...>
<animate attributeName="width" from="10px" to="100px"
begin="0s" dur="10s" />
<animate attributeName="height" from="100px" to="10px"
begin="0s" dur="10s" />
</rect>
時間
t
におけるターゲット属性a
の基底値 は,時間t
でアニメーションに適用されるa
の値とする。
t
におけるターゲット属性a
のプレゼンテーション値 は,時間t
のアニメーションのアプリケーションから生じるa
の値とする。
'from="10px" to="100px" ... dur="10s"'
によって指定された幅(width)属性に対する単純アニメーション関数は,次のとおりとなる。
f(t) = (10 + 90*t/10) px
ただし,t
は秒で与えられる。
F(t,u) = (u*(2.5s-t)/2.5s) + 10*(t/2.5s)
アニメーション要素によって定義される単純アニメーション関数は,
0<=t<=d
である時間tに対して定義される,時間の関数,f(t)
とする。ここでd
は,要素の単純持続時間とする。
F(t,u)
のように,f(t)
へ付加的パラメタを単純に付加する以外には,アニメーションのモデルに影響しない。
ターゲット属性
a
の型 は,a
の領域が部分集合となる基底型とする。
AD
を用いたアニメーション要素のアニメーション効果関数F(t,u)
は,時間 t
(tは,0<=t<=AD
)及びターゲット属性a
の値u
を,a
の型の値の中へ写像する関数とする。
t
におけるアニメーション要素のターゲット属性a
の基礎値 u
は,アニメーション効果が時間t
において適用されるa
の値とする。
F(t,u)
は,通常は,単純アニメーション関数f(t)
の関数として定義される。f(t)
は,F(t,u)
が正しい型の値を生成するという手法で定義されなければならない。
3.2.2 セマンティクス記述で使用する記号の要約
a
d
AD
t
t
は,利用者に知覚された時間,要素の活性持続時間,又はその単純持続時間であってよい。
u
の,一般に特定の時間a
t
における基礎値。f(t)
F(t,u)
がアニメーション全体のための写像を定義する一方で,f(t)
は,単純持続時間だけを取り扱う単純化されたモデルをもつことに注意すること。
F(t,u)
t
: 0<=t<=AD
)及び基礎値をターゲット属性に対する値に写像する。時間値0は,アニメーションが開始する時間に対応する。F(t,u)
は,単純アニメーション関数f(t)
を,アニメーション及びタイミングの制御の他のすべての側面と組み合わせる。
3.2.3 アニメーションサンドイッチモデル
getComputedStyle()
メソッドを使用して読み取られる。アニメーションが生成する値は,getOverrideStyle()
メソッドを使用して取得してもよい,その要素のための上書きスタイルシートに書き込まれる。これらの新しい値は,段階に影響し,新しく計算された値(及びしたがって修正されたプレゼンテーション)に反映される。これは,アニメーションの効果が,!important
特性を用いた利用者規則以外のすべてのスタイルシート規則を上書きすることを意味している。これによって,!important
利用者スタイル設定は,アニメーションよりも高い優先度をもつことができる。これは,アクセス可能性のためには重要な要件である。アニメーションは,文書レイアウトに関して副作用をもってもよいことに注意すること。[CSS2]の6.1 "指定値,計算値及び実際値"及び[DOM2CSS]の5.2.1 "上書き及び計算されたスタイルシート"を参照すること。
"freeze"
をもって定義される場合,アニメーション要素が凍結状態にある限り,アニメーションの効果が適用されることに注意すること。すなわち,プレゼンテーション値は,アニメーション効果を反映し続ける。"凍結アニメーション"も参照すること。
3.2.4 "連続メディア"としてのアニメーション要素
3.2.5 アニメーション効果関数F(t,u)
f(t)
は,単純持続時間d
に対してアニメーションを定義する。しかし,SMILタイミングは,制作者が単純持続時間を繰り返すことを許している。SMILタイミングは,活性な持続時間が完了する時にアニメーションが単に終了するのがよいかどうか,又は最後の値で凍結とするのがよいかどうかを,制作者が指定することも可能にする。SMILアニメーションは,アニメーションが凍結するとは何を意味するかを指定する。さらに,制作者は,各々のアニメーションを,他のアニメーション及び元のDOM値とどのように組み合わせるのがよいかを指定できる。
fr(t)
は,アニメーション要素を繰り返す効果を定義する。
fc(t)
は,繰り返されるアニメーション要素の1回の反復から次の反復までの蓄積値の効果を定義する。
ff(t)
は,その活性持続時間の終わりでアニメーション要素を凍結する効果を含む。
F(t,u)
は,一つのアニメーション要素が,どのようにターゲット属性の基礎値u
に依存するかを定義する。
t
に対して定義される。
繰返しアニメーション
f(t)
を繰り返し適用することを意味する,
f(t)
に対する,繰返しアニメーション関数,fr(t)
,は,次による。
fr(t) = f( REMAINDER( t, d ) )
t>=0
, d
は,単純持続時間であって,REMAINDER( t, d )
は,(t - d*floor(t/d))
として定義される。
f(0)
から始動し,標本化され,終了点f(d)
まで(ただし終了点を含まない。),適用される。単純持続時間の終了点,すなわち次の反復の開始点,で,アニメーションは,戻ってf(0)
から始動する。f(d)
は,実際には決して適用されない。
例
repeatCount="2"
/>
repeatCount="2.5"
/>
repeatDur="7s" />
dur="10s"
repeatDur="5s" />
f(0)
に対する値を使用することとし,アニメーション要素の持続時間の残りに対してfill属性の値の色を赤に設定する。
dur="10s"
repeatDur="7s" />
繰返しアニメーションの振る舞い制御 - 累積アニメーション
f(t)
に対する累積アニメーション関数 fc(t)
は,次のとおりとする。
fc(t) =
fr(t)
fi(t)
が,与えられた反復 i
に対する累積アニメーション関数を表すとする。
f0(t)
は,accumulateによって影響されないので,元の単純アニメーション関数の定義と同じになる。その後の各反復は,以前の反復の結果に加算される。
f0(t) = f(t)
i > 0
となる任意の整数に対して,
fi(t) = (f(d) * i) + f(t - (i*d))
fc(t) = fi(t)
ただし,i = floor(t/d)
f(d)*i + f(0)
において,fi+1(t)
が始動することに注意すること。跳越しを回避するために,制作者は,通常は,0で始動するアニメーション関数を選ぶ。
<img ...>
<animateMotion path="m 0 0 c 30 50 70 50 100 0 z"
dur="5s"
accumulate="sum" repeatCount="4"
/>
</img>
accumulate="sum"
を用いた繰返しアニメーションの実例
<rect>
要素の"width"(幅)を成長させる"脈動する"アニメーションを定義できる。
<rect width="20px"...>
<animate attributeName="width" dur="5s"
values="0; 15; 10" additive="sum"
accumulate="sum" repeatCount="10"
/>
</rect>
凍結アニメーション
<img top="3" ...>
<animate begin="5s" dur="10s"
attributeName="top" by="100"/>
</img>
top
属性の基礎DOM値)へと跳び戻る。
<img top="3" ...>
<animate begin= "5s" dur="10s"
attributeName="top" by="100"
fill="freeze" />
</img>
fill="freeze"
をもつアニメーションの実例
<img top="3" ...>
<animate begin= "5s" dur="10s"
attributeName="top" by="100"
repeatCount="2.5"
fill="freeze" />
</img>
repeat
とfill="freeze"
とを組み合わせるアニメーションの実例
from
値の10となる。
<animate from="10" to="20"
end="10s" fill="freeze" .../>
ff(t)
は,活性持続時間AD
,0<=t<=AD
,をもつ要素に対して,次のとおりとする。
0<=t<AD
となるすべての時間t
に対しては,ff(t) = fc(t)
とする。
AD
が単純持続時間d
の倍数でない場合,
ff(AD) = fc(AD)
とする。
AD
がd
の倍数(すなわち,ある正の整数i
に対してAD = d*i
)であって,アニメーションが非累積的な場合,
ff(AD) = f(d)
とする。
AD
がd
の倍数(すなわち,ある正の整数i
に対してAD = d*i
)であって,アニメーションが累積的な場合,
ff(AD) = f(d) * i
とする
3.2.6 加算的アニメーション
<rect width="20px" ...>
<animate attributeName="width"
from="0px" to="10px" dur="10s"
additive="sum"/>
</rect>
<img ...>
<animateMotion from="0,0" to="100,0"
dur="10s" />
<animateMotion values="0,0; 0,5; 0,0"
dur="1s"
repeatDur="10s"
additive="sum"/>
</img>
F(t,u)
は,t(0<=t<=AD)及びu(アニメーションのターゲット属性の型の値)をその同じ型へと写像する関数とする。
アニメーションが加算的である場合, F(t,u) = u + ff(t)
とする。
アニメーションが非加算的である場合, F(t,u) = ff(t)
とする。
<img ...>
<animateMotion begin="0" dur="5s"
path="[some path]"
additive="sum" fill="freeze" />
<animateMotion begin="5s" dur="5s"
path="[some path]"
additive="sum" fill="freeze" />
<animateMotion begin="10s" dur="5s"
path="[some path]"
additive="sum" fill="freeze" />
</img>
<img ...>
<animateMotion dur="10s" repeatDur="indefinite"
path="[some nice path]" />
<mouseFollow begin="mouseover" dur="5s"
additive="replace"
fill="remove" />
</img>
mouseFollow
は,animateMotionを上書きする必要がある。mouseFollow
が完了する時,その効果は,もはや適用されず,animateMotionは,再び位置に対するプレゼンテーション値を制御する。
加算的及び累積的なアニメーション
<img ...>
<animate dur="10s" repeatDur="indefinite"
attributeName="top" from="20"
by="10"
additive="replace" accumulate="sum"
/>
</img>
F(t,u)
に対する蓄積された効果は,アニメーションに対する値として使用され,ターゲット属性に対する基礎値に加算される。次に例を示す。
<img top="10" ... >
<animate dur="10s" repeatdur="indefinite"
attributename="top" from="20"
by="10"
additive="sum"
accumulate="sum" />
</img>
3.2.7 再始動アニメーション
F(t,u)
は,再始動の振る舞いとは無関係に定義される。より早い時点で再生しているアニメーションのいかなる効果ももはや適用されず,現在のアニメーション効果F(t,u)
だけが適用される。
F(t,u)
は,再始動された活性持続時間の最初の反復から再び蓄積を開始する。
3.2.8 アニメーション関数値の詳細
f(t)
を指定する。属性の幾つかの型(例えば,数)に対しては,値の間の補間関数について記述することも可能とする。
F(t,u)
は,ターゲット属性に対する文法に合った値を産出しなければならない。次に,値の三つのクラスを示す。
補間及び不定単純持続時間
f(0)
)の最初の値が,アニメーション関数のために(実効的には定数として)使用されることが望ましい。
3.3 SMIL 2.0 BasicAnimationモジュールの概要
3.4 SMIL 2.0 BasicAnimationモジュールの共通属性
3.4.1 アニメーションターゲットの指定
ターゲット属性
これを,デフォルトとする。
ターゲット要素
<animate targetElement="foo" attributeName="bar" .../>
<foo xmlns:xlink="http://www.w3.org/1999/xlink">
...
<animate xlink:href="#foo" attributeName="bar" .../>
...
</foo>
3.4.2 単純アニメーション関数f(t)の指定
これは,デフォルトとする。
<rect ...>
<animate attributeName="width"
values="40;100;40" dur="10s"/>
</rect>
f(t) = 40 + 60*t/5, 0 <=
t < 5,
f(t) = 100 - 60*(t-5)/5, 5 <= t <=
10
i = floor((t*n)/d)
,d
はアニメーション要素の単純持続時間,n
はvalues属性のエントリの数,及びvalue[i]
は(0から数えた)i
番目のエントリとする。
n
個の等しい期間に分けられる。アニメーション関数は,各々の時間期間に対して一つの値を順番に取っていく。
f(t) = value[i]
n-1
個の等しい期間に分けられ,アニメーション関数は,関連付けられた時間における値の間の線形補間とする。
f(t)
= value[i] + (value[i+1]-value[i]) *
(t-ti)/d
dist(v1, v2)
の場合,value[i]
までのそれを含む,たどられる距離全体D(i)
は,次のとおりとする。
D(0) = 0
D(i) = dist(value[0],value[1]) +
dist(value[1],value[2]) +...+ dist(value[i-1],value[i])
,
ただし,i
は整数であって,
0<i<=n
T(i) = (D(i)/D(n)) *
d
,ただし,i
は整数であって,0<=i<=n
f(t) = value[i] +
(value[i+1]-value[i]) * (t-T(i))/d
i
は,T(i)<=t
となる非負の最大整数。
補間モードによる描画
<animate dur="30s" values="0; 6; 5; 11; 10; 16" calcMode="[as specified]" />
calcModeの例
<animate attributeName="foo" dur="8s"
values="bar; fun; far; boo" />
<animate attributeName="x" dur="10s" values="0; 10; 100"
calcMode="linear"/>
<animate attributeName="x" dur="10s" values="0; 10; 100"
calcMode="paced"/>
3.4.3 アニメーション効果関数F(t,u)の指定
f(t)
を繰り返す。
これをデフォルトとする。
これがデフォルトとする。
3.4.4 from,to及びbyによって指定される単純アニメーション関数
from
値及びto
値を指定することによって,単純アニメーションの定義をする。そのアニメーション関数は,from
値で始動し,to
値で終了すると定義される。
定義
from
値vf
及びto
値vt
をもつfrom-toアニメーションは,vf
及びvt
の二つの値をもつvalues
リストを用いた同じアニメーションに等価とする。
from
値及びby
値を指定することによって,単純アニメーションを定義する。そのアニメーション関数は,from
値で始動し,by
属性を用いて指定される差分だけ単純持続時間の経過に渡って変化すると定義される。これは,加算をサポートする属性(例えば,大部分の数値属性)だけを用いて使用してよい。
定義
from
値vf
及びby
値vb
をもつfrom-byアニメーションは,vf
及び(vf+vb)
の二つの値をもつvalues
リストを用いた同じアニメーションに等価する。
by
属性を用いて指定される差分で終了する。これは,加算的アニメーションをサポートする属性だけ用いて使用してよい。
定義
by
値vb
をもつbyアニメーションは,0
及びvb
の二つの値をもつvalues
リスト,並びにadditive="sum"
を用いた同じアニメーションに等価とする。byアニメーションにおけるadditive
属性の他のいかなる指定も,無視される。
to
属性を用いて指定される値で終了すると定義されるアニメーションを記述する。この形式を使用して,制作者は,属性に対する任意の現在値で始動し,望ましいto
値で終了するアニメーションを記述できる。
toアニメーションの規定としての定義は,toアニメーションで与えられる。
<rect ...>
<animate attributeName="width" from="50" to="100" dur="10s"/>
</rect>
<rect ...>
<animate attributeName="width" from="50" by="25" dur="10s"/>
</rect>
<rect width="40"...>
<animate attributeName="width" by="30" dur="10s"/>
</rect>
<rect width="20px"...>
<animate attributeName="width" dur="5s" from="10px" to="20px"
accumulate="sum" repeatCount="10" />
</rect>
<rect width="20px"...>
<animate attributeName="width" dur="5s" from="10px" to="20px"
accumulate="sum" additive="sum" repeatCount="10" />
</rect>
toアニメーション
<rect width="40"...>
<animate attributeName="width" to="100" dur="10s"/>
</rect>
<rect color="red"...>
<animate attributeName="color" to="blue" dur="10s" calcMode="discrete"/>
</rect>
to
値vt
をもつtoアニメーションの単純アニメーション関数F(t,u)
は,基礎値u
とto
値との間の線形補間とする。
F(t,u) = (u * (d-t)/d) + (vt * t/d)
,ただし
t
:
0<=t<=d
,及びd
は単純持続時間とする。
F(t,u)
の値は,ちょうどto
になる。
繰返しアニメーション関数
fr(t,u)
は,次の標準的な定義をもつ。
fr(t,u) = f( REMAINDER(t,d), u )
toアニメーションに対する累積アニメーション関数
fc(t)
は,次による。
fc(t,u) =
fr(t,u)
to
値の優位性と合致する。toアニメーションが凍結されている間,他のより低い優先度のアニメーションが活性であっても,値は,変化しない。
to二メーションに対する凍結アニメーション関数
ff(t)
は,次による。
アニメーションが時間
t
において凍結されていない場合,ff(t,u)
= fc(t,u)
。
t
において凍結されている場合,ff(t,u)
= vf
,ただし,vf
は,アニメーションが凍結された瞬間のff(t,u)
の値とする。
<rect width="40"...>
<animate attributeName="width" to="100" dur="10s" repeatCount="2.5" fill="freeze"/>
</rect>
toアニメーションに対するアニメーション効果関数
F(t,u)
は,次による。
F(t,u)
=
ff(t,u)
<foo x="0" ...>
<animate id="A1" attributeName="x"
by="-10" dur="10s" fill="freeze" />
<animate id="A2" attributeName="x"
to="10" dur="10s" fill="freeze" />
</foo>
F(t,u)
の値は,A2がより高い優先度のアニメーションなので,"x"に対するプレゼンテ-ション値になることに注意すること。
Time
A1の
F(t,u)
A2の
F(t,u)
0
0
0
1
-1
0.1
2
-2
0.4
3
-3
0.9
4
-4
1.6
5
-5
2.5
6
-6
3.6
7
-7
4.9
8
-8
6.4
9
-9
8.1
10
-10
10
3.5 SMIL 2.0 BasicAnimation要素
3.5.1 animate要素
3.5.2 set要素
fill="freeze"
を用いることによって,活性持続時間を不定とするためにタイミングを定義することと同じ効果が得られる。
set要素によって定義される単純アニメーション関数は,次による。
f(t) = v
v
は,to
属性の値とする。
<rect ...>
<set attributeName="stroke-width" to="5px"
begin="5s" dur="10s" fill="remove" />
</rect>
class
属性を文字列"highlight"へと設定し,マウスが要素から離れるときに,その効果を取り除く。
<text>This will highlight if you mouse over it...
<set attributeName="class" to="highlight"
begin="mouseover" end="mouseout" />
</text>
3.5.3 animateMotion要素
coordinate-pair ::= ( coordinate comma-wsp coordinate )
coordinate ::= num
num ::= Number
coordinate
の値は,ホスト言語において何らかの種類の数として定義されなければならない。
from="(-100,0)"
及びto="(0,0)"
として指定し,スクリーン外の左からレイアウト位置までを記述する。制作者は,コンテナブロックを基準にするだけでなく,この方法でも動きを記述できなければならない。origin属性は,この区別(コンテナブロックを基準にするか又は要素のレイアウト位置を基準にするか)をサポートする。それにもかかわらず,ホスト言語がレイアウトモデルを定義するので,ホスト言語は,サポートされるいかなる付加的な属性の値だけでなく,"デフォルト"の振る舞いも指定しなければならない。
3.5.4 animateColor要素
3.6 SMIL 2.0 BasicAnimationモジュールの詳細
3.6.1 BasicAnimation統合要件
アニメーションターゲットに関して要求される定義及び制約
ターゲット要素の指定
ターゲット属性に関する課題
script
要素のlanguage
属性のアニメーションをサポートしないことを選択してもよい。DOM機能のための規定を含んだホスト言語が,DOMを通じて合法的に修正してよい属性に,アニメーションを制限してもよい。
animateMotion機能の統合
3.6.2 BasicAnimationモジュールのための文書型定義(DTD)
3.7 SMIL 2.0 SplineAnimationモジュールの概要
3.7.1 SMIL 2.0 SplineAnimationモジュール属性
スプラインアニメーション関数の計算モード
x1 y1 x2 y2
,とする。これは,一つの時間区分に対するBezier制御点を記述する。関連する区分を定義するkeyTimes値は,Bezier"アンカ点"とし,keySplines値は,制御点とする。したがって,keyTimes属性の場合よりも一つ少ないkeySplines属性の制御点の集合が存在しなければならない。
keySplines指定にエラーがある場合(例えば,間違った値,多過ぎる値又は少な過ぎる値など),アニメーションは効果をもたない。 n-1
個の等分の期間に分けられるというもの)は,keySplines属性が指定される場合と同様に適用される。しかし,keyTimesはそうではない。keySplines値に関連付けられた時間は,上に記述されるとおりに決定される。
control-pt-set ::= ( fpval comma-wsp fpval comma-wsp fpval comma-wsp fpval )
fpval ::= Floating point number
S ::= spacechar*
comma-wsp ::= S (spacechar|",") S
spacechar ::= (#x20 | #x9 | #xD | #xA)
calcModeの高度な使用の例
<animateColor attributeName="color" dur="10s" calcMode="discrete"
values="green; yellow; red" keyTimes="0.0; 0.8;" />
<animate attributeName="x" dur="10s" values="0; 50; 100"
keyTimes="0; .8; 1" calcMode="linear"/>
keySplinesを用いた補間
<animate attributeName="x" dur="10s" values="0; 50; 100"
keyTimes="0; .8; 1" calcMode="spline"
keySplines=".5 0 .5 1; 0 0 1 1" />
<animate dur="4s" values="10; 20" keyTimes="0; 1"
calcMode="spline" keySplines={表3.1にあるとおり} />
keySplines値
初期値
1秒後
2秒後
3秒後
最終値
0 0 1 1
10.0
12.5
15.0
17.5
20.0
.5 0 .5 1
10.0
11.0
15.0
19.0
20.0
0 .75 .25 1
10.0
18.0
19.3
19.8
20.0
1 0 .25 .25
10.0
10.1
10.6
16.9
20.0
<animate attributeName="foo" from="10" to="20"
dur="10s" keyTimes="0.0; 0.7"
calcMode="spline" keySplines=".5 0 .5 1" />
stroke-linecap
属性は文字列をとり,そのために,discreteのcalcModeを暗示している。アニメーションは,stroke-linecap
属性を5秒(単純持続時間の半分)の間はroundに設定し,その次に5秒間はstroke-linecap
をsquareに設定する。
<rect stroke-linecap="butt"...>
<animate attributeName="stroke-linecap"
from="round" to="square" dur="10s"/>
</rect>
3.7.2 SMIL 2.0 SplineAnimationモジュール要素
3.7.3 スプラインanimate要素
3.7.4 スプラインanimateMotion要素
"C <x1> <y1> <x2> <y2> <x> <y>"
又は
"c <dx1> <dy1> <dx2> <dy2> <dx>
<dy>"
f(t)
の定義は,単純持続時間d
がどのように区分に分割されるかを決定するために,values属性における値の個数を使用する。path属性が使用される場合,経路内に"move to"(関連)命令が存在しなければ,値の個数は,経路が定義する点の個数になると定義される。"move to"命令は,タイミング又は補間の目的で,追加の"区分"を定義しない。"move to"命令は,持続時間を分けるとき,追加の点としては見なされない。pathがpacedのcalcMode設定と組み合わされる場合,すべての"move to"命令は,0の持続時間を持つと考えられ(すなわち,それらは常にすぐに発生する。),変化率を計算する際に考慮しないほうがよい。
3.7.5 スプラインanimateColor要素
3.8 SMIL 2.0 SplineAnimationモジュールの詳細
3.8.1 SplineAnimation統合要件
3.8.2 SplineAnimationモジュールのための文書型定義(DTD)
3.9 共通アニメーション統合要件
3.9.1 統合要件
アニメーションの拡張
アニメーション要素の操作に関する制約
id
属性は,変更可能としてはならない。すなわち,読取り専用とすることが望ましい。アニメーション実行時にid
値への変化の追跡を要求することは,かなりの複雑さを生じ,最善でも疑問のある機能といえる。
構文エラーの取扱い
エラー取扱いセマンティクス