Windows 7 のブート アニメーションのエンジニアリング
このブログや Windows 7 についてお話する機会を通じて、このブログの話題に関してとても興味を持っていただいていることをひしひしと感じています。私たちはまず、ブート / スタートアップのシーケンス、およびそれが迅速に行われることがどんなに重要かということを知りました。同時に、休止状態からマシンをレジュームする際やマシンの電源を入れる際に HDD のライトがチカチカしているのを眺めているのは、本当に退屈であることも理解しています。 PCを起動したときの最初の体験を向上させるため、ブートシーケンスの改善に着手します — いうなれば、にぎやかにします。とても簡単なことのように思えるかもしれませんが、問題解決のため調査したところ、エンジニアリング的にかなり大変なことだということが判明しました。私たちの目標は、システムのブートパフォーマンスに影響を及ぼすことなく、楽しくすることです。このエンジニアリングについて説明し、ブートシーケンスについて解説するために、コアユーザーエクスペリエンスチームのプログラムマネージャーである Karen Wong がこの投稿を執筆しました。 --Steven
デザイン
私たちは「パーソナリティ (個性)」という言葉を、人と感情的につながっているソフトウェアの特徴の一部を言及するために使用しています。「light (光)」と「energy (エネルギー)」は Windows 7 のパーソナリティを表現するために使っている言葉です。Windows 7 を設計する上で、この Windows 7 のパーソナリティの要素を目立たせるため、Vista の起動時の映像でやったこと以上のことをやり遂げなければならないことが明らかになりました。
デザインの観点からいうと、機能の視覚的表現はパフォーマンスと品質に対するユーザーの感じ方において重要な役割を果たしています。私たちの目的は、Windows を美しく起動させることであり、Windows 7 のパーソナリティである “light” と “energy” から呼び起こされたものです。そして、自然界でこれらがそのものの形を浮き彫りにする様式が私たちのデザイン パレットとなりました。たとえば、「bioluminescence (生物発光)」、「organic (有機的な)」、「humble beauty (控えめな美しさ)」、「atmosphere (雰囲気)」などが、私たちの行ったブレインストーミングで頻繁に出てきた言葉でした。これらは多少陳腐に聞こえるかもしれませんが、Windows 7 の全体的な目標のすべてなのです。
20 以上のブート シーケンスのデザインが作成およびレビューされ、テストされました。デザインは色の彩度や明るさ、動きの複雑さ、照明効果などによって変わってきます。以下は、設計中に描かれたスケッチです:
Windows 7 の最終的なデザインは、四方向からエネルギーが接近してひとつになり、窓に投影される光を形成するというものです (もちろん、Windows ロゴが窓と似ているのは偶然ではありません!)。かすかな鼓動はその後の進展を表していますが、これは Windows 7 のパーソナリティの生き生きとしたさまを強調するデザインです。
デザインの観点からいうと、この新しいブート シーケンスはデザイン目標のすべてを満たしており、世界へ発信することにワクワクしていました。しかし、起動は単に表現がよければよいというものではありません。エンジニアリングの観点から、克服すべき明らかな難題があったのです – それは、「デスクトップまでの時間」は今でもユーザーにとって最も重要なことだということです。視覚的な美しさは、デスクトップへより速く到達することには勝りません。そして、多くの人はいわゆる「目の保養」と呼ばれる機能に対して批判的であり、ブート シーケンスがそのような機能になるのは絶対に避けねばならないことでした。
パフォーマンスに妥協なし
もしすべてを Vista と同じにしてブート アニメーションを新しい Windows 7 用にただ更新するだけであれば、私たちが目指す新しいレベルのパフォーマンスや品質を達成することはできません。実際、Windows 7 で新しいブート アニメーションを実現するには、膨大なコードの変更が必要でした。
Vista では、ブート ローダーは 640x480 の低解像度スクリーンを使用し、緑色の進行状況バーに必要なファイル サイズも大変小さくて済みました。その上、Vista のブート スクリーンは色濃度も低く、16 bpp (bit per pixel) しかありませんでした。Windows 7 では、新しいブート アニメーションで豊かな色彩を実現するために 32 bpp に増やしました。Vista での起動時の進行状況インジケーターの更新は CPU 経由で実現しましたが、I/O 時間の影響を受けやすいので、ときどきアニメーションに不具合が生じます。低解像度のスクリーンで色濃度も限定され、さらには不具合の影響も受けやすい – Windows 7 で何か手の込んだものを構築するには、大変な仕事が待ち構えていたのでした。
まず、ブート アニメーションを表示するのに、Windows 7 のブート ローダーではこれまでとは違うメカニズムを使用することから手がけました。ファームウェア (BIOS または UEFI) からフレーム バッファーへポインターを設定し、高解像度の画像 (1024 x 768) を表示します。カーネルと起動に必要なデバイス ドライバーがメモリへ読み込まれる間に、画像をアニメーション化します。ディスプレイ用のネイティブ グラフィックス ドライバーはまだメモリに読み込まれて初期化されていないので、アニメーションは CPU を使用して、またグラフィックス ディスプレイのフレーム バッファーを更新して実行されます。さらなる最適化も行いました – パフォーマンスを迅速化するために、CPU が書き込みを併用するキャッシュを使用するようにしました。
Michael Fortin によるブートのパフォーマンスに関するブログでは、起動の初期の段階は、カーネル、デバイス ドライバーのファイル、およびそのほかのシステム コンポーネントのファイルを読み込むので、I/O の制約を受けることが説明されています。そのため、起動初期において遅延が発生するのを避けるため、ブート アニメーションのサイズをスクリーンの狭い範囲に限定しました。広いサイズのアニメーションはそれだけ大きいアニメーションの画像を読み込む必要があり、その結果、ファイル I/O を増加することになります。アニメーションの画像はビットマップをリソースとして取り込んで圧縮されており、それから WIM 画像圧縮により圧縮されています。WIM 画像圧縮は全体的なファイル サイズを削減するので、その結果、読み込むのに必要な I/O を削減できます。WIM 画像圧縮はまた、ディスク上のフットプリントも削減します。スクリーンの狭い範囲にアニメーションを表示し、やや低いフレーム率を使用することにより、フレーム バッファーを更新する CPU のオーバーヘッドを必要最低限のレベルに保ち、起動時間にオーバーヘッドを追加しないようにします。
起動のパフォーマンスだけでなく品質も向上させる変更も加えました。それは、グラフィックス モードの移行を減らすことでした。この移行はグラフィックス サブシステムや Windows シェルの初期化の際に起こります。Vista では、このため、ユーザーに対してログオン画面を表示するまでに (または、一人しかシステム ユーザーがいない場合は、ユーザーのデスクトップを表示するまでに) 数回ディスプレイが変更し (黒く点滅し)、起動のエクスペリエンスがスムーズではありませんでした。
新しいアニメーションを可能にするためパフォーマンスと品質の向上のために起動の構造を深く掘り下げて調べたところ、ブート アニメーションの美化活動によりデスクトップまでの時間をさらに短縮するチャンスが生まれたのはうれしい驚きでした。Vista では、ユーザーがマシンの電源を入れると、ブート シーケンスは Windows フラッグまたは「パール」のアニメーションがログオン スクリーン (ユーザーが自動ログインの設定をしている場合はデスクトップ) の前に表示されていました。Vista の起動構造の制約により、このパール アニメーションは起動コードがすでに完了している場合のみ再生されます。
Vista のブート シーケンス、パール アニメーションを含む
さて、新しい起動の映像は Windows 7 のパーソナリティを反映した表現力豊かなアニメーションを表示します。パール アニメーションは時代遅れで冗長な感じがしたので削除されました。その結果、起動が完了した後にこのアニメーションを再生する時間を節約できました。
Windows 7 のブート シーケンス, パール アニメーションは削除
起動時のサウンドはどうなるのかと思われるかもしれません。Vista では、最高品質のエクスペリエンスを生み出すため、サウンドはパール アニメーションと同時でなければなりませんでした。しかし、これは一部のハードウェアに対してパフォーマンスの影響を与える恐れがありました。と言うのも、システムのサウンド スタックはパールのシーケンスを完了するために読み込まれなければならないからです。システムのサウンド再生の準備が整うまで待っている場合、デスクトップが表示されるまでに遅延が発生する可能性があります。そのため、今回サウンドは非同期的に、ログオン画面が読み込まれた後のいつかに再生されるように変更しました。テストしたほとんどのハードウェアでは、ログオン画面が表示されたタイミングです。Vista に対するユーザーからのフィードバックで、音が鳴ったので見てみたが、起動はまだ完了していなかった、というものがありました。つまりこの変更は、パフォーマンスのメリットに加え、ユーザーにマシンが使用可能な状態になったことを知らせることによりユーザー エクスペリエンスを向上させます。
起動に関するコードの最適化と Vista のパール アニメーションの削除の和により、デスクトップへ到達するまでの時間を増加させることなく、起動中に表現力豊かな高品質のアニメーションを追加することができました。
幅広いハードウェアへの対応
起動時のエクスペリエンスはユーザーのハードウェアによって大きく変わってきます。幅広ハードウェアにわたって最高のビジュアル エクスペリエンスを確実にするため、いくつかの設計意思決定をしました。しかし、システムがデスクトップを表示するまでにかかる時間は主にハードウェアに依存します。
たとえば、起動時、アニメーションが始まるまでに遅延があることに気付かれるかもしれませんが、この遅延時間はシステムのハードウェアによって異なります。即座の反応を示すよう最適化するために、Windows がシステム上のすべてのプロセッサーを開始する機会を得る前に、実際には起動画面上にテキストを表示します。それは、起動中にアニメーションが残りの I/O と非同期で実行できる場合のみ可能です (前述のように、最善のパフォーマンスと品質に必要です)。
また、起動中の Windows フラッグのサイズがスクリーンのサイズによって少し変わったことに気付かれるかもしれません。Windows 7 の技術的な制限のため、システムのオリジナルの解像度にかかわらず、起動時には常に推奨される最低解像度である 1024x768 で表示されます。今日、ほとんどのハードウェアはブート シーケンスを中央に表示するのではなく、拡大して画面いっぱいに表示するように設定されています。その結果、ブート アニメーションも 1024x768 とは異なる縦横比でスクリーン上に拡大されます。しかし、視覚的な品質が保たれるように、一般的な縦横比で一連の流れをテストしました。
起動、再起動、および休止状態からのレジューム
起動時のエクスペリエンスを向上させるためのこの大変な仕事を無駄にする訳にはいきません。ユーザーは休止状態から復帰する際にも同様のエクスペリエンスを体験できるでしょう。
カスタマイズ
みなさんの多くは、自分自身のアニメーションを使用したり、一連の流れをカスタマイズしたりできるのか知りたいと思っていることでしょう。残念ながら、それは Windows 7 でサポートしようとしていることではありません。すでに Windows 7 での非常に多くの「パーソナライズ」要素、たとえばベータで試すことのできる新しいテーマパックなどについてお話したり紹介したりしてきました。理由はとても明白で、起動時に任意の要素がメモリへ読み込まれるのを許可すると、システムのセキュリティが保証できなくなるからです。Windows を開始する初期段階では、ファイヤーウォールやウィルス駆除ソフトはまだシステムを守るために利用可能になっていないので、システムは鍵がかけられ大変注意深く監視された既知の状態で実行されなければなりません。そしてもちろん、画像サイズや内容などについて、みなさんが要件に従ってくださるであろうことは信じていますが、パフォーマンスに与える影響をかんがみて、すべてのサード パーティーがそれを行うのを保証するために必要なコードを組み込みたくないのです。Windows 7 の設計目標のひとつは、ユーザーの皆様一人ひとりを表現する十分なチャンスがあり、自分の PC が本当に自分の PC であるようにすることでした。ですので、なぜこの要素は一貫し続ける必要があるのかご理解いただけると幸いです。
舞台裏を簡単にご紹介しましたが、楽しんでいただけたでしょうか。Windows 7 では、Windows PC を開始するときのエクスペリエンスをもう少し楽しいものにしようと目指していますが、このブログや他のフォーラムでのフィードバックを見る限り、私たちは正しい方向へ進んでいると信じています。起動を高速にする取り組みに加え、システムが十分に堅牢であることも私たちの目標です。ですので、みなさんの多くはこの新しいブート アニメーションをそれほど頻繁に見ることはないでしょうが、そのような機会にはブート アニメーションは楽しく且つ高速なものとなるでしょう!
--Karen