シャドウがない場合、輪郭色と表面色を別レイヤーにすることで、低コストで理想的なフェイドが可能になる。
シャドウがある場合の処理はやや複雑だ。安定した定石と考えられる手順の一つは、速度差シャドウ4である:
{\1a&Hff&\3a&Hff&\4a&Hff&}
{\t(0,1000,1.0,\1a&H00&\3a&H00&)}{\t(0,1000,4.0,\4a&H80&)}
{\t(3000,4000,1.0,\1a&Hff&\3a&Hff&)}{\t(3000,4000,0.25,\4a&Hff&)}
フェイドイン、フェイドアウトは日常的なエフェクトだが、半透明状態のときに濁らないようにするのは意外と面倒だ。 ASS上で6種類の違ったやり方でフェイドを行い、変化過程を対比している。 左から右に時間が進行する。 (フェイドアウトも順序が逆になるだけで同じ。)
文字の表面色(フェイス)は白、 影(シャドウ)が赤、輪郭(ボーダー)が青。 フェイスが赤っぽくなっている場所は影が透けており、 フェイスが青っぽくなっている場所は輪郭がにじんでいる。3c問題による「輪郭色が漏れて濁る」のと、 フェイスが透過したことで結果的に「影が透けて濁る」のは別現象で、 区別する必要がある。影が透けて濁るのを抑えるには、 何らかの方法で「フェイスが十分に濃くなるまでシャドウをまったく描画しないか、ごく薄く描画する」処理が必要だ。 「フェイスが濃くなるまでシャドウの描画を遅らせる」のが「時間差シャドウ」、 「フェイスが濃くなるまではシャドウの濃くなる速度を抑える」のが「速度差シャドウ」である。
{\fad(1000,1000)}1 野菜で
レンダラー依存だが、一般には3c干渉問題のため、輪郭線がにじんで非常に濁る。 \fadは避けた方が良い。
;; 実際には1行 {\1a&Hff&\3a&Hff&\4a&Hff&} {\t(0,1000,\1a&H00&\3a&H00&\4a&H80&)} {\t(3000,4000,\1a&Hff&\3a&Hff&\4a&Hff&)}2 野菜で
guliverkli [ 1022372 ] で言及されている方式。 フェイドイン終了後の1aがゼロなら(半透明でなく不透明な文字へのフェイドイン。この例はそう)、 3c干渉はほぼ回避できる。 バッファリングが無効になって負荷が高くなる代わり、\fadフェイドより高品位になる。 しかし、この方法では、シャドウが透ける問題は対策されていない。 シャドウがなければこの方法でも良いが、シャドウがないならそもそもレイヤー化すれば\tを使うまでもない。 いずれにしてもお勧めできない。
300,0:00:01.00,0:00:05.00...,,{\fad(1000,1000)}{\3a&Hff&}3 野菜で 301,0:00:01.00,0:00:05.00...,,{\fad(1000,1000)}{\1a&Hff&\4a&Hff&}3 野菜で
輪郭線のレイヤーを分離し、\tを使わず干渉を避けるやり方。 単純\tフェイドと同じか、それよりやや上の品質を、はるかに低負荷で達成できる。 シャドウがないなら、 この手法はASSフェイド(に限らず一般に1aが非ゼロの処理)の定石として、 お勧めできる(単純\tよりさらに少し高品位になり、しかも低負荷)。 しかし、シャドウがある場合、シャドウが透けて濁る問題には無力だ。 レイヤー化はあくまで3c問題しか解決してくれない。
なお、レイヤー化では、通常、ボーダーを下のレイヤーにした方が見栄えが良いのだが、 このケースではボーダーの上にフェイスという順序にするとフェイスに付属しているシャドウがボーダーより上に来てしまうので、 ボーダーを上にするしかない。(ASSでシャドウだけのレイヤーをうまく作れず、シャドウがフェイスと連携しているため。)
;; 実際には1行 {\1a&Hff&\3a&Hff&\4a&Hff&} {\t(0,1000,\1a&H00&\3a&H00&)}{\t(500,1000,\4a&H80&)} {\t(3000,4000,\1a&Hff&\3a&Hff&)}{\t(3000,3500,\4a&Hff&)}4 野菜で
妖精現実 Tip (20050423) の方法。 シャドウのみ変化時間を半分にする2重\tフェイド。 フェイドイン直後・フェイドアウト直前にはシャドウがない(シャドウの出没に時間差がある)のが特徴で、 濁りやすい時期に、 濁りの根本原因であるシャドウそのものを不可視にしてしまうため、 濁りの阻止という意味では最強。 シャドウがない区間、文字が平面的に見え、シャドウの出現とともに3次元的に見え始めるところに、 わずかにグリッチがあるが、実用上は、まず誰も分からないだろう。
時間差シャドウは実は速度差シャドウの特殊例である。 前半は速度ゼロで全透過のままアルファが変化せず、後半は通常の2倍の速度でアルファが変化している。 つまり速度変化に不連続点があることが分かる。 それを改善したのが次の速度差シャドウである。
;; accel=0.5 , 2.0 {\1a&Hff&\3a&Hff&\4a&Hff&} {\t(0,1000,1.0,\1a&H00&\3a&H00&)}{\t(0,1000,2.0,\4a&H80&)} {\t(3000,4000,1.0,\1a&Hff&\3a&Hff&)}{\t(3000,4000,0.5,\4a&Hff&)}5 野菜で ;; accel = 0.25 , 4.0 {\1a&Hff&\3a&Hff&\4a&Hff&} {\t(0,1000,1.0,\1a&H00&\3a&H00&)}{\t(0,1000,4.0,\4a&H80&)} {\t(3000,4000,1.0,\1a&Hff&\3a&Hff&)}{\t(3000,4000,0.25,\4a&Hff&)}6 野菜で
時間差シャドウの修正版で、変化に非線形の時間差(つまり速度差)がある。 シャドウのフェイドインはゆっくり始めてだんだん加速し、薄い状態を長引かせる。 シャドウのフェイドアウトは最初はどんどん消して、減速し、薄くなってからを長引かせる。時間差シャドウと違って、 フェイドイン直後・フェイドアウト直前でもシャドウが完全に消えない。 速度差が大きいと、線形の時間差シャドウとほぼ同じになるが、 わずかな違いながら、シャドウの出没がフェイスの出没と同期しているため、グリッチがない。
最初の加速度設定では、変化初期の影濃度増加が(フェイスの濃くなり方との対比で)少し速過ぎ、ちょっと濁る。 後者では加速度を上げて(変化初期の速度を落として)濁りを防いでいる。 加速度パラメータの設定は、一般には、色使いなど個々のフェイドに依存する問題で、 ここで示した例が常に最善というわけではない。なお\tの加速度パラメータは、 一度書くとデフォルトの\tにも影響するようだ。加速度を使う場合で、 同じ行で加速度なしの\tを混用したいとき、そちらには変化率1.0(変化なし)を省略せず明示すること。
速度差シャドウは時間差シャドウの不連続点を除去してくれるが、 加速度設定が不適切だと、見た目がかえって濁るので注意を要する。例5は例4よりかえって悪化している。
ここでも、輪郭レイヤーを分離するとさらに少し品質が上がるはずである (速度差シャドウと別レイヤーの輪郭)。 特に、フェイド後の1aが非ゼロなら、輪郭分離は重要だ。 この例では、\tベタだけの速度差シャドウと比べて違いが認められなかったので、 見本は省略した(速度差シャドウの例と出力は完全に同じに見える)。
一般にはASSのフェイドと言えば1の\fadが常識で、出発点だが、 これが濁るのは明らかだ。 2はより良い方法だが、2を使うなら3が良い。 2よりも少し上、書き方も単純で、何より2と比べて負荷がずっと低い。 ただシャドウがあるときは別の原因で濁る。 自分ではこのケースでは4を常用していたが、 どうも6方式の方が優れているようだ。5は手法としては4より高度だが、 実際の出力で4に負けている。 シャドウの\t変化に加速度をかけるだけで自動的に時間差シャドウの上を行けるわけではなく、 加速度の設定が重要だということが分かる(この例では2.0では足らない)。 厳密に言うと、6のように変化させつつ3のようにボーダーを分離するのが今思いつく最善だ。