>   >  これが64KB?! デモシーンを支えるプロシージャル技術
これが64KB?! デモシーンを支えるプロシージャル技術

これが64KB?! デモシーンを支えるプロシージャル技術

リアルタイムに映像や音楽を生成するプログラムを「デモ」と言い、デモを鑑賞したり完成度を競ったりして楽しむイベントを「デモパーティ」と言う。「デモシーン」はデモやデモパーティを中心としたコンピュータのサブカルチャーだ。世界最大規模のデモパーティであるRevisionのPC 64K Intro部門で優勝した細田 翔氏に、デモシーンの魅力を解説してもらった。

※本記事は月刊『CGWORLD + digital video』vol. 266(2020年10月号)掲載の「これが64KB?! デモシーンを支えるプロシージャル技術」を再編集したものです。

TEXT_細田 翔 / Sho Hosoda
EDIT_尾形美幸 / Miyuki Ogata(CGWORLD)

  • 細田 翔(@gam0022)
    シェーダなどのプログラミングを利用した映像制作が趣味。ブログや勉強会などを通じてグラフィックス関連の情報発信を行う。KLab株式会社でグラフィックスエンジニア/テクニカルアーティストとして活躍。Unity製モバイルゲームの3Dグラフィックス開発を担当。高品質かつ低負荷なグラフィックスを実現するために、効率的なレンダリングパイプラインの設計から実装、モバイル向けに最適化したシェーダの開発、アプリの負荷の全自動プロファイリングシステムの開発を行う。GDCやCEDECでの複数の登壇経験あり。
    gam0022.net

ゲーム開発とも関連するデモシーン

デモは、日本では「メガデモ」という呼称でも親しまれており、その中には実行ファイルのサイズが通常では考えられないような小さいものもあります。サイズ制限付きのデモ作品をイントロ(Intro)と呼び、4K Intro(4KB制限)や64K Intro(64KB制限)などの部門があります。Introの厳しい容量制限を満たすためには、プログラミングの超絶技巧テクニックだけでなく、プロシージャル技術がとても重要です。3Dモデル、テクスチャ、アニメーション、サウンドの音色とメロディなど、あらゆるアセットをプログラミングによってプロシージャルに生成する必要があります。

近年の大規模なゲーム開発では、プロシージャル技術は必須となりつつあるため、ゲーム開発とも関連が強いと言えます。事実として、デモ制作者の中には、映像業界やゲーム業界で活躍されている方々がたくさんいます。例えば、Revision 2020の4K Executable Graphicsで優勝したiq氏は元Pixar Animation Studiosのエンジニアですし、『バトルフィールド』シリーズでお馴染みのDICEはThe Silentsというデモ制作グループから生じた会社です。私自身も業務ではモバイルゲームの開発をしています。以前、アニメーションの負荷削減に取り組んだときには、Unityのスキニングを頂点シェーダで再現することで負荷を大幅に削減できました。そういった発想や技術はデモシーン制作のおかげです。

2020年の4月にはデモシーンがユネスコの無形文化遺産に登録されたとフィンランドの文化遺産庁が発表しました。このような後押しもあり、デモシーンがいっそうホットなカルチャーになることを楽しみにしています。デモシーンのドキュメンタリーである『Moleman 2』を観れば、デモシーンが生まれた背景や歴史の理解が深まります。YouTubeで無料公開されており、日本語字幕もあって内容も面白いので、ぜひご覧ください。

▲『Moleman 2 - Demoscene - The Art of the Algorithms』(2012)

Topic 1:Unityの機能をフル活用した『WORMHOLE』

『WORMHOLE』は「ワームホールによる空間移動」をコンセプトとしており、不思議な球体がワームホールを介して非現実なデジタル空間と水平線の広がる自然空間を行き来するデモ作品です。日本唯一のデモパーティであるTokyo Demo Fest 2018のCombined Demo Compo部門にて、参加者投票により1位に選ばれました。本部門はWindows実行ファイル形式のデモ作品のコンペティション(動画ファイルでの提出は不可)で、容量制限がなかったので、映像は私がUnityで制作し、音楽はさだきち氏(@sadakkey)が作曲ソフトで制作しました。せっかくUnityという高機能なゲームエンジンを利用するので、Unityの機能をフルに活用して、効率の良い制作を意識しました。

▲『WORMHOLE』

距離関数による「モデリング」を実現するレイマーチング

本作では、距離関数(3D空間上の座標を入力すると、シーン内の物体への最短距離を出力する関数)で定義されたシーンに対し、レイの交差を判定するレイマーチングという手法を用いています。レイマーチングの基礎知識については「シェーダだけで世界を創る!three.jsによるレイマーチング」というスライドで解説しています。

レイマーチングは、距離関数の長さだけひたすらレイを進める処理をくり返し、距離関数が0になったら衝突したと判定する単純なアルゴリズムです。つまり、レイトレーシングの交差判定のアルゴリズムのひとつです。レイマーチングは、描画する形状を距離関数という数式によってプロシージャルに定義できるため、3Dのモデリングなしに3Dシーンを描画できます。これは、容量制限があるIntroではとても大きな恩恵です。

▲本作の前半に登場するトンネル(非現実的なデジタル空間)は、距離関数でモデリングし、パラメータ変更によって異なる雰囲気に変化させました。距離関数によるモデリングの最大の強みは、パラメータ変更によって、様々な変形アニメーションを作成できることです


▲トンネルの距離関数は、Menger Spongeと呼ばれる有名なフラクタル図形をアレンジしました。【左上】基本となるMenger Spongeの形状。IFS(Iterated Function System)という、自身の縮小コピーを重ね合わせることでフラクタル図形を定義する手法でMenger Spongeの距離関数を定義しています/【右上】IFSの拡大・縮小と平行移動のパラメータ変更によるアレンジ/【左下】N=3のfoldRotateを適用した3角柱。foldRotate(別名:polarMod)は、ある軸を中心として一定の角度で回転しながら空間を折りたたむ操作です。この回転の角度を決める分割数Nを変化させると、任意の図形を多角形の柱のような形に変形できます/【右下】N=8のfoldRotateを適用した8角柱


加えて、距離関数のパラメータを変更することで描画する形状を制御できるので、アニメーション表現も可能です。一般的に3Dの映像作品は、モデリングをはじめ、ボーンやスキンウェイトの設定といった数多くの作業を経てつくられるものですが、「短いコードで3Dの映像作品を生み出せる」のがレイマーチングの魅力と言えるでしょう。もちろん、形状を思い通りに制御するための数学の基礎知識、映像表現の芸術的なセンスと経験は必須となります。

最先端のグラフィックス技術に触れるチャンスとなるのもデモシーンの魅力のひとつです。2018年にNVIDIAがレイトレーシング専用の演算ユニットを搭載したRTXシリーズのGPUを発表し、ゲーム業界では次世代技術としてリアルタイムレイトレーシングに対する注目が高まっていますが、なんとデモシーンの世界では、2000年に発表された『heaven seven』というデモからリアルタイムレイトレーシングが実用的な技術として使われはじめていました。

次ページ:
ディファードレンダリングによるライティング

特集