Unity1week online共有会に登壇しました
こんにちは、SilCilです。1週間でゲームを作るホットなイベントであるUnity1週間ゲームジャム(以下、u1w)に参加したので振り返りの記事を書きます。u1wへの参加は今回で2回目であり、またu1w後のonline共有会にも参加させていただきました。
こちらの記事では、発表時間内に話せなかった内容を書こうと思います。
投稿したゲームは「ColorRacer」というレースゲームです。以下からプレイできます。
online共有会で話した内容
発表内容をざっとまとめると以下になります。
- (目的)自分に足りないものを把握するためにu1wの評価を利用した
- (方法)「絵作り」の評価を上げるために3DCGソフトBlenderを3か月間勉強した
- (結果)「絵作り」の評価を上げてランキングに入ることができた
もっと詳しく知りたい方はアーカイブがあるので、そちらを見てくださいな。2日目の最初の発表です。
online共有会で話さなかった内容
3か月あれば余裕で脱初心者できると思った
1流になるのに必要な時間の目安として有名な「1万時間の法則」があります。正しいかどうかは置いといて、技能の習熟にある程度長い時間が必要なのは事実でしょう。けれど、1万時間は0から目指すには長すぎると思うのです。
「というか、こっちは趣味でやっているんだから別に1流なんて目指してないわ!!」と叫びたくなります。あ、いや、あくまで絵作りの話ですよ。プログラミングのほうは割と真面目に30代ぐらいで1万時間は超す気がします。
それはさておき、私が気になるのは「0から始めて初心者を脱するまでに必要な時間」でした。いわゆる「完全に理解した」状態に持っていくまでの時間が知りたかったのです。この問いに対して作家のJosh Kaufman氏が一つの解を示しています。
朗報だ!! 20時間でいいってよ
How long does it take from starting something and being grossly incompetent and knowing it to being reasonably going?
– 20 hours.
これはTEDのプレゼンテーションで語られた内容です。
書籍として日本語版も出ていますので紹介しておきますね。
20時間なら1日1時間やって3週間でクリアできる目安です。u1wの開催は大体2,3か月おきです。3か月もあれば1日1時間で100時間ぐらい費やすことも可能です。20時間の5倍もあれば初心者から片足踏み出すぐらいのことは余裕だろうという期待がありました。
だが、ちょっと待て。やればいいというわけではない
Kaufman氏は4つのコツを上げています。
- スキルを分解して重要であるものから先に練習する
- 自分で誤りに気付けるようになるまで勉強する
- 学習の邪魔になるものは取り除く
- 少なくとも20時間は練習する
私が特に意識したのは1と3です。1は長くなるので先に3から話します。
Blender学習の最大の敵=Unity
BlenderとUnityではショートカットや画面レイアウト、軸の方向など違いがありますからBlenderをやってUnityをやって…と交互に繰り返したりするとBlenderの習得速度が遅れる可能性が考えられました。(あとUnity触っちゃうとゲーム作りたくなりますので。)
このルールを課したのは成功でした。1度Blenderの操作に慣れてしまえば1か月以上Blenderを触らない期間が続いても操作を覚えたままでした。感覚で言えば「1度自転車を乗れるようになってしまえば、数年ぶりに乗っても大丈夫」に近いでしょうか。
スキルの分解:Blenderを学んだ順番
まず、全体を見よう。話はそこからだ。
スキルに分解して学ぶにはどんなスキルに分解できるのかを知る必要がありました。ついでに、基本的な操作を覚えるのは必須なため、両者が学べる動画をYouTubeで探しました。
英語ですが、Blender Guruのチュートリアルがお勧めです。
モデリングとマテリアルができれば大体完成じゃね?
全体の流れをざっと把握し、モデリングとマテリアルに目星をつけました。まずはモデリングに注目して学びました。
いくつかのYouTube動画をこなしましたが、以下の動画が一番ためになったと思います。手法として主に使われる、ポリゴンの押し出し、ループカット、ブーリアン、ナイフツール、スカルプティングと1通り説明されています。また、それだけでなくノーマルマップを作成してローポリでもリアルに見える手法まで踏み込んでいるのが素晴らしいです。
マテリアルってすげーな、割と何でもできちゃうじゃん。
私見ですが、モデリングよりもテクスチャやマテリアルのほうが重要だと思っています。モデリングが2D絵でいうところの線画だとしたら、テクスチャ・マテリアルは塗りや光の表現です。さらには頂点の移動までをも含みますからシルエットすらマテリアルで変わります。
マテリアルの重要性は以下の動画を見ればわかるのではないでしょうか。カラーコーンをモデリングなして作成する動画です。さすがに、ここまでやることはほとんどないでしょうけど。
マテリアルで用いるテクスチャの調達方法は主に4つです。
- 自分で描く
- 写真から作成する
- フリー素材を使用する
- プロシージャルに作成する
自分で描く場合はBlender以外のペイントソフト(Substance Painterとか)と合わせて使用するのがスタンダードです。習得難易度が高いと判断して後回しにしました。いずれ挑戦したいですね。
写真から作成する方法ですが、例として、プロジェクションを用いてテクスチャを作成する動画を紹介します。
テクスチャを取り出すだけではノーマルマップの作成まではできないため、ノーマルマップを作成できる方法を探しました。Materializeなどを使うのがいいんじゃないかと感じました。
自分で撮ってきた写真からテクスチャを取り出すのは何回かやりましたが、クオリティに難がありました。やはり、CC0 Texturesなどで提供されているものを使うほうが高品質に見えます。
ただ、素材をそのまま使用してしまうと限られたものしか作れないという欠点があります。その欠点をある程度補うためのテクニックとして、複数のテクスチャを組み合わせてアレンジする手法を学びました。例えば以下の動画のような感じです。
特に、テクスチャをブレンドするというのは必須テクニックだと思っています。鉄のテクスチャと汚れのテクスチャを組み合わせて、古い錆びた鉄を作成するなど表現の幅が一気に増えます。
上述のテクスチャ素材を使っていく中でSubstance Designerなどでプロシージャルに作成されたものも多いことに気付きました。簡単なパターンぐらいなら自分でも作成できるようになっておくべきだと判断しました。
Blenderのみの使用でもノードエディタを用いてテクスチャを作成することができます。例えば、レンガの床をノードだけで作ったり、
さびの表現をつけたり、
木の床だったり、
織物だったり、
雲なども作成できます。
物がたくさんあると映えると思った
モデリングとテクスチャ、マテリアルについて学んだのである程度のものは作れるようになりました。この時点で既に20時間は超えていたと思います。
いくらか練習していて気付いたのですが、オブジェクトの数がある程度ないと寂しいです。とはいうものの、多数のオブジェクトを作成するには非常に多くの時間と手間がかかってしまいます。
手軽に物量を稼ぐ方法として、オブジェクトを複製して利用するパーティクルシステムに目を付けました。Unityをやっている方はパーティクルシステムと言えばエフェクトが思い浮かびますが、Blenderのパーティクルシステムはエフェクトのみならず、草原や髪の毛を作成するのにも利用できます。
草地を作る動画や
タオルを作成する動画を参考にしました。
私は「私の好き」を表現したいんだ
大体ここまでが2週間で学んだ内容になります。これから先はチュートリアル動画通りに作成するのではなく自身の手で1から作成していくことを心掛けました。
最初は実際に持っているものを作成することにしました。この時に作成したのはタオルとかディスプレイとかですね。
次に、シーン全体を作成することを目指して子供部屋を作成しました。自分の好きな世界観をグラフィックで表現しようとしたのは初めてかもしれません。これがBlenderを初めて40日目の作品です。
時間がかかって大変だったのでオブジェクトを1つ作ることに専念して作業効率を上げることを意識しました。以下の作品はいずれも1日で作成したものです。
Unity1weekに向けての準備
Blenderで作成したモデルやテクスチャをUnityにインポートしてWebGL形式で動かせなければu1wでは役に立ちません。u1wの開催が決定してからお題が発表されるまでの2, 3週間は今の自分に何ができて何ができないのかを検証しました。
特に1週間でゲームを作るという制約上、「初めからやり直し」になるのは避けたいわけです。学力テストの結果がどれだけテスト勉強したかで決まるように、事前にどれだけ準備できたかでu1wの引き出しの多さが決まります。「これを怠っては失敗するぞ」と自分に言い聞かせて1つ1つ確認していきました。
やってないことはできないという当たり前の事実
3Dのキャラクターを自分で作成してアニメーションさせて使用するということを一応トライしてみました。できませんでした。キャラクターを使うという選択肢は完全に消えましたね。
流体シミュレーションとか使いたかったなぁ
パーティクルシステムによるエフェクトや物理シミュレーションをBlenderで行い、Unity上で再生できるかチェックしました。最も手軽なのはAlembic形式で書き出す方法ですが、WebGLでは使えない、使えたとしても使い勝手が悪いことがわかったので、利用するという選択肢は無しにしました。
頂点なら動かせるよ。やったね!
できそうなアニメーションを探したところ、シェイプキーを用いたものが見つかりました。これならモデリングの延長線上に位置するので問題なく作成できました。本番では使用しなかったものの、表現の幅が増えたので試してみて良かったです。
アニメーションよりステージ作れるかが問題だ
絵作りに1週間をフルに使えるなら良いですが、ゲーム作るならプログラムや難易度調整もしなきゃいけないわけですよね。となると、これまでのように1つのモデリングに1時間以上かけるような作成方法では到底間に合わないわけです。そこで、3Dのデフォルメであるローポリに注目しました。ローポリなら簡単だと言いたいわけではなく、短時間で作ったローポリ系とリアル系なら前者のほうがマシだろうという判断です。
そんなわけで、試しにUnityでローポリの洞窟を作成しました。トータルの作業時間は2時間です。かなり雑に作成しましたが、それっぽくなっているのではないでしょうか。この時の気分は「ローポリなら処理も描画処理も軽いだろうし、ベストアンサーだな!!」でした。
「ローポリなら描画処理は軽い」は半分正解で半分間違い、50点です。単位無し。
Blenderでの練習時は処理時間を考えずにモデルを作成していました。Unityではリアルタイムに描画を行わなくてはならないため、描画でボトルネックになりそうなところを事前に認識しておく必要がありました。
この辺りは頂点数を変えたり、プロファイラーの確認だったり地味な作業が続くのですが、ざっくりと調べた感じでは
- 数万ポリゴンでも大丈夫っぽい(もちろん少ないほうが軽い)
- ライティング処理が重め
- 透過処理は重いし、破綻が起きやすい
という感じでした。細かくデータをとって評価したわけではないので厳密かは怪しいですが、指針にはなります。つまるところ、ポリゴン数を減らすよりも
- リアルタイムでのライティングを減らす
- 使用するマテリアルの数を減らす
が効果的なことが見えてきました。
この検証はやっておいてよかったです。投稿した作品「ColorRacer」ではライト無しで絵作りをしています。
そして本番へ
Blenderも学び、事前検証も終わり、いよいよ本番ということで実際にゲームを作るわけですが、記事が長くなってしまったので、別記事にまとめます。お題「ふえる」からのゲームのアイデアを出すまでの思考過程や制作中に意識した点を書く予定です。
おわりに
online共有会でも話した通り、私はゲームを作ること自体が好きで「他の人に自分のゲームを遊んでもらう」ことを考え出したのは今年に入ってからです。
これまで1人で黙々とゲームを作っていたのですが、u1wへの参加を決めてからは意識的に他者との交流を増やしています。u1w自体は参加するだけで一定数遊んでもらえるとても素晴らしいイベントですが、どうせ参加するなら、そして、フィードバックを参考に技能を伸ばしていくなら多くの人に遊んでもらえるほうがよいと思ったため、積極的に活動を外に出すようにしています。今後もよろしくお願いします。
そんなわけで、online共有会で話者として参加したのは「存在自体を認知してもらうため」という目的がありました。同時に、前回の共有会に参加してみなさんの知見を聞き、勉強になりましたので「私からも何か提供できれば」という気持ちもありました。
5月に開催された前回の共有会直後のツイートです。実はこの時から共有会への参加を決意していました。
そして、今回無事に共有会にて発表させていただくことができました。とても楽しく、また、よい経験になりました。u1wを開催してくださったnaichiさん、2日にわたる共有会の開催準備をしてくださった青木ととさん、ならびに、聴講者、参加者、関係者の皆様に感謝申し上げます。