meg_nakagamiのブロマガ

2重リサイズ

2013/05/03 13:08 投稿

コメント:4

  • タグ:
  • コメントアート

2重リサイズとは
高さがコメント表示領域の 1/3 を超えると改行リサイズが発生し、ue, shita コメントが基準幅より広い幅を持つと、臨界幅リサイズが発生します。

この2つのリサイズを同時に発生させる、つまり、ue もしくは shita コメントで 高さが 1/3 を超えるように改行した上で臨界幅を超える幅を持つコメントを打つと『2重リサイズ』という現象が発生します。『ダブルリサイズ』と呼ばれることもあり、また、表記上は DR と表略表記されることもあります。

この2重リサイズですが、かなり特殊な挙動を示し、大きなサイズのフォントで画面いっぱいにコメントできるために危険視されるところがありますが、使いこなすと表現力が格段に向上するためコメントアートでは無くてはならないものになっています。

ですが、これを正しくレンダリングするプレイヤーは現在のところ Flash のプレイヤー以外ほとんどありません。

描画結果が様々な要素に関連し、そのすべての要素が想定通りでなければ満足のいく結果にはならないこと、また、予期しない2重リサイズは非常に見苦しい結果になることから、2重リサイズの実装は最初から諦めてしまうのもひとつの落とし所ではあると思います。
というか、多くのプレイヤーの実装者は2重リサイズの存在すら知らないのではないでしょうか。知らないのであれば触れなくとも良いかもしれません。

これに対応するのであれば、いい加減な対応をするのではなく仕様を理解して正しく実装する必要があります。2重リサイズは非常に強力な武器なのです。強力な武器が想定外の挙動を示すようなことがあってはなりません。

発生条件

改行リサイズを発生させた上で、臨界幅リサイズを発生させることがその条件です。

改行リサイズが発生した時点でフォントは半分の大きさになっているので、その上で臨界幅を超えるのですから、仮に改行リサイズがなければ臨界幅の倍の幅となるコメントが必要になります。
(厳密にはぴったり倍では発生しませんが、ここでは話を単純化するためにこのような説明をさせてください。)
この時の臨界幅は full コマンドの影響を受けます。

動作仕様

2重リサイズの動作は正確に説明されている資料はあまり多くありません。
これは多くの資料はコメントアートを投稿するために書かれるものであり、かつ2重リサイズがあまり軽々しく使用すべきものではないことや、そもそも挙動が複雑であり、そのメカニズムを解析するよりも満たしたい表示になる具体的なコメントのテンプレートを探すほうが労力が低くなるため、といった理由が考えられます。

ただ、元々のFlashの実装上の都合による誤差からくる挙動を取り除いて考えると、2重リサイズの挙動はそれほど複雑なものではありません。

Flashの実装上の都合を無視するのであれば、
2重リサイズの発生したコメントは臨界幅の倍の大きさに収まるようにリサイズされる
と考えてほぼ問題ありません。

通常は動画の高さの 8/3, full が指定されているときは動画の高さの 32/9 にリサイズされます。(実際は倍よりわずかに小さい大きさをとったほうが多少良好な結果が得られます。)

由来の想像と仕様の提案

2重リサイズは『臨界幅の倍の大きさに収まるようにリサイズされる』というそれだけのものなのです。そうなのであれば、なぜそれが正しく理解されないのか、なぜそれが不可解なものとされているのかということが気になるわけですが、これは Flash の実装の都合上の計算誤差によるものです。

そもそも、なぜこのような現象が発生するのか、ということを考えなくてはいけませんが、おそらくはこれは最初の Flash の実装での臨界幅リサイズの実装のバグなのだと思います。

臨界幅リサイズを実装するにあたって、
  1. レンダリング後の文字列全体の幅を求める
  2. それと臨界幅の比を算出する
  3. その逆数をフォントサイズに掛けて描画
という処理が必要になりますが、3の『フォントサイズ』に改行リサイズのことを忘れてのオリジナルのフォントサイズを使用してしまったのだと思われます。

これによって、改行リサイズ後の幅を基準にした倍率がオリジナルにかかったことになり、(改行リサイズによって半分になっているのでその逆数がかかり)結果として倍の幅に合わせてリサイズしたのと同じ結果が得られることになります。

誤差が全くないのであればそれだけの単純な話なのですが、Flash は実装上、文字列描画結果の大きさを得るときやフォントを指定するときなどになめらかではない段階的な変化をするので、処理の各段階でその丸めが起こり、最終的にはかなり不可解な挙動を示してしまっているのが現状なのだと思います。

この Flash の実装上の都合による計算の中間での誤差を Flash 以外で正確に再現することは非常に難しく、さらに臨界幅リサイズが絡むためフォント自体の情報にも依存、さらに解像度が違えば誤差の出方も変わってくるでしょうから、これらを全てひっくるめた挙動を Flash の実装を超えたプレイヤーの動作仕様とみなすことはかなり無理があります。

ですが、2重リサイズは高度なコメントアートでは無くてはならないものになっていますので、何らかの対応が必要であることは間違いありません。

落とし所としては『2重リサイズは臨界幅の倍の大きさにリサイズされるものであるが Flash の実装はその誤差が大きい』ということにしておくのが現実的ではないかと思います。

実装上の注意

ソフトウェア実装の観点から仕様をまとめましょう。

  1. 臨界幅リサイズより改行リサイズのほうが先に処理される
  2. 改行リサイズが発生した上で臨界幅リサイズが発生するときは倍の大きさにリサイズされる
  3. この時、条件となる臨界幅、実際にフィットさせる臨界幅とも full コマンドの影響を受ける
となります。

2重リサイズは非常に強力ですが、ある幅を超えると一気に大きさが倍になってしまうことになり、予期しないで発生してしまった場合は非常に見苦しいものとなります。

ですので、最初から対応しない、というのもひとつの落とし所ではあると思います。

例えば、多くの職人は MS P ゴシックを前提に位置合わせを行い、多くの位置合わせは画面端に何かを置くために行われます。更に MS P ゴシックには妙に狭いという特徴があるため、MS P ゴシックを持たない環境下で2重リサイズに正しく対応してしまうと、正しく動いているがゆえにコメントアートが崩れるという事態が発生してしまいます。このような場合には、その環境ごとに個別のケアが必要になるでしょう。コストを考えて対応しないという選択も考えるべきだとは思います。


コメント

なかがみ (著者)
No.2 (2013/05/09 02:42)
あー、やっぱり過去にもコレがバグであるという話はでていたんですね。
ですが、結果として表現力は向上したわけですし、利用する側はそのまま利用するのが当然ではないかと思います。

これは修正するか否かというよりも、どういう仕様として落としこむか、ということを検討すべきなのでしょうね。
Ender
No.3 (2013/05/09 10:04)
>>2

まあ、バグの発見は新しいCAのチャンスですからねw


ちなみに、負荷軽減のために以前私が提案したコマンドです。
運営に申し出る必要があるのでCAクラスタでの同意は少なくて流れました。

1.改行リサイズキャンセルコマンド
このコマンドを入れると改行リサイズを発生しなくなる。
このコマンドを入れなければ二重リサイズは発動するので、過去の二重リサイズは保護されます。
臨界幅リサイズでコメントの高さを画面の高さに調整することで固定も可能になります。二重リサイズとの違いは画面からはみ出している分が無くなります。
bigサイズのまま1コメントで3行以上使用できるので省コメになります。

2.改行右寄せコマンド
改行内のコメントは左寄せになるため、改行コメントで右寄せする場合は無駄にコメントを重ねることになる。このコマンドで省コメができます。
過去に右寄せ歌詞のために突破してる人もいました。
なかがみ (著者)
No.4 (2013/05/09 21:16)
改行リサイズを起こさなくするコマンドはアイディアとして素晴らしいですね。
現状のかなりの問題が解決されて、かつ新しい表現が生まれそうです。

・表現力としては2重リサイズで行なっていること(少くとも私の知識では)はほぼすべて表現できる。

・基本的には現状の2重リサイズでのフォントサイズ調整のための行の幅を半分にすればそのまま移行でき、コメントアートのスキルトランスファーもそれほど難しくない。

・実装も素直で、新しいデバイスでのプレイヤーの実装のコストを考えた時、常時このコマンドがかかっているとみなすことで省力化できる。

・naka コメントでも有効とするなら新しい表現も生まれる。(この判断はちょっと慎重にすべきですけど)

・画面はじギリギリに何か置きたいときにもこれを利用して位置合わせするようにすれば、ちょっとしたしきい値を超えてコメントが崩壊することがない。(全角空白の幅が違うMac... 全文表示
コメントを書き込むにはログインしてください。

いまブロマガで人気の記事