東京工業大学 ロボット技術研究会

東京工業大学の公認サークル「ロボット技術研究会」のブログです。 当サークルの日々の活動の様子を皆さんにお伝えしていきます。たくさんの人に気軽に読んでもらえると嬉しいです。
新歓特設ページ        ロボット技術研究会 HP        ロボット技術研究会 twitter公式アカウント

RogyGames

「ロボット技術研究会」通称「ロ技研」は、その名前の通りロボットの制作や研究はもとより、電子工作や機械工作、プログラミングなどの幅広い分野にわたるものつくり活動を行っています。

カテゴリ一覧: loading

洞窟っぽいマップの自動生成

13の折重です。

工大祭でこんな感じのゲームを展示しました。
ss

真っ暗な洞窟の中を岩を壊しながら洞窟を進んでアイテムや金を集めていくというゲームです。
製作にあたっての目標としては
・とりあえずopenGLとGLSLを使ってみる
・マップの自動生成をしてみたい
でした。
openGLとGLSLについては1週間ほど勉強しただけだったのですが、工大祭も近いですしとりあえず勉強がてら使ってみようかなという感じです。
ただ描画などは三次元空間に行っているのですが、画像を見ればわかる通り完全に2Dゲームです。まあ勉強勉強...

今回はマップの自動生成部分について書いていきたいと思います。

まず、マップを自動で生成するにあたり、ランダムな値をどうするかという問題があります。
ランダムな値がないと単調なマップであったり予測可能なマップになってしまいあまり面白くありません。
今回のゲームではマップをグリッドで区切り、対応するランダムな値が正か負かによって空洞にするか岩を置くか決める、といった方法でマップを生成していきます。
洞窟を作らなければいけないので基本的には岩で、ところどころに道となる空洞があったり、たまに大きな空洞があったりしても面白いかもしれませんね。
C言語には標準で乱数を生成する関数としてrand関数があります。C++11にはrandomライブラリという強力な乱数生成ライブラリもあります。
ですが、これらの乱数生成方法ではあまりに前後の値に関連が無さすぎて変化が急になってしまい、今回のマップの自動生成に使うのはあまり向いていません。

そこで、今回はパーリンノイズというものを使用しました。
パーリンノイズとは、次の画像のような模様を生み出すことの出来る技法です。
Perlin_noise

白色の隣が突然黒色になったりせずに、徐々に変化している様子がわかります。
この、比較的変化が柔らかであるという特性から様々なゲームの地形生成などに利用されています。
今回のゲームの地形生成にも非常に向いていました。

具体的な生成方法について解説しようかと思ったのですが、思ったより長く煩雑になってしまいそうなのと、ネット上に日本語のわかりやすい解説がたくさんあるので割愛させていただきます。
ここらへんがわかりやすいかと思います…

では実際にパーリンノイズを使ってマップを自動生成していこうかと思います。(見えやすいように画面全体を明るくし、描画する範囲も広くしております)
最初に、純粋に黒っぽい部分は岩、それ以外(白っぽい部分)は空洞、という様に設定してみました。
結果はこんな感じ
blog_black

あまり良いマップができていません...
岩も空洞も固まりすぎており、細い道などが無いのであまり洞窟っぽさがありません。
無駄な努力だったかな...と落ち込んでいたのですが、ここで先輩から灰色の部分を空洞にしてみてはどうかとの助言をいただきました。
その結果がこんな感じ。
blog_ash

完璧、完璧です。
ノイズの画像を見ていただければわかる様に、ノイズの性質上白と黒が点在しているということはその中間に必ず灰色の部分はあり、それらは連続しているので道のようになります。
灰色とみなす値を調整することで道の太さをある程度操作することもできます。
また、これに加えて特に黒っぽい部分を空洞にするなどすれば大きな空洞や道を小さな道が繋いでいるような洞窟にすることもできます。アリの巣みたいでいいですね。今回のゲームでは岩の部分が減ってしまうとシステム上困ってしまうのでやりませんでしたが。
blog_mix

こうして無事洞窟っぽいマップを生成することができました。
ひたすらマップを生成していくので情報を保存しておけばプチオープンワールドっぽくなります。
今回のゲームも画面から見切れた部分は別で保存してメモリから破棄していたのでひたすら掘り続けられますし、戻れば掘った道がそのまま残されています。

最初に書いた目標のうち、openGLとGLSLを使うことに関しては本当に使って描画しただけみたいな感じで全く使いこなせていなかったので、現在も引き続き勉強中です。
次に出すゲームはバリバリ3Dでゴリゴリシェーダー使ったものしたいですね。

工大祭展示:HIRED RESISTANCE & ろくじゅうよんますけいさん!

おはようございます、14のまーぼう(@mabo_207)です。
10/10、10/11の工大祭にて展示するゲーム2つの紹介です。
(展示の準備を諸々していたらこんな時間に……深夜作業は辛い…… )

SRPGの戦闘部分「HIRED RESISTANCE(仮)」をW933で、対戦パズルゲーム「ろくじゅうよんますけいさん!」 をS512で展示します。それぞれについて簡単に説明していきます。続きを読む

DistanceFieldを用いた2Dサンドボックスゲーム

突然ですが皆さんMinecraftは好きですか?ニックさんです。僕はMinecraftは大好きです。
圧倒的な自由度や無限に生成されるゲームフィールド、何でも破壊・設置可能なシステム、
Minecraftが世界中のゲームプレイヤーやゲームエンジニアに与えた影響はすさまじい物があるでしょう。
ちなみにMinecraftについてのレビュー記事が4gamerに良くまとまっています。

結局のところ「Minecraft」とは何だったのか?(リンク先:4gamer.net)


今日のブログの内容は、Minecraftみたいなサンドボックス型ゲームいいよね!ってことで僕が作っている
サンドボックス型の2Dオープンワールドゲームのご紹介をします。
特に今日はレンダリング回りについて話そうと思います。


いくらMinecraftのようなゲームが良いよね!って言っても同じように作ればただのパクりです。
ただのパクリも面白いんですが、Minecraftライクなゲームは世の中に溢れているので、
どうせならもっと違ったことがやりたいなぁ~と思っていたところに15さはら君に教えてもらった技術が
記事タイトルにもあるDistanceFieldです。(さはら君ありがとう)

DistanceFieldとは剛体までの最短距離を敷き詰めたスカラー値のグリッドのことで、
これとバイリニア補間を併用すれ線形近似をした連続空間を構成可能です。
まずはその利用例を見てみましょう。
DistanceField

左の図は壁までの距離を0~1のグレイスケールで表示した図です。グリッド上なのでカクカクしてますね。
右の図は左の図をフラグメントシェーダーを用いてバイリニア補間したものです。
結構滑らかにつながっている事がお分かりでしょうか?

またDistanceFieldは壁までの距離や法線ベクトルも高速に取得できます。
当たり判定も比較的簡単に少ない計算量で行えるので流体のシミュレーションなどでよく使われるそうです。
DistanceField2

もちろんゲームにも使われていて、例をとしてUnrealEngineでのアンビエントオクルージョンや、
G-Games制作のThe Tomorrow Childrenでも利用されているようです。


さて、今回のゲームは2Dで見下ろし型のサンドボックス型ゲームです。
DistanceFieldは有用な技術ですが、単一種類のオブジェクトの距離しか扱えないため、
Minecraftのように「岩」「土」「レンガ」などの種類を持たせることが出来ません。
そこで私が勝手に考えたのがColoredDistanceFieldという技術です。
ColoredDistanceFieldは単純で、グリッドに浮動小数点である距離値の他に、
オブジェクト情報である「Color」として整数型の値も埋め込みます。
ColoredDistanceField

この図の一番右の画像がColoredDistanceFieldを利用して描画された図です。
三色の色情報を埋め込んで、その境界付近は適当にグリッド間で線形補間することで合成しています。
これによって距離情報を埋め込んだ浮動小数点テクスチャと種類情報を埋め込んだ整数型テクスチャを
フラグメントシェーダに渡すだけでシェーダー側からたくさんの種類のオブジェクトを描き分けることが出来ます。
やったぜ。


以上の技術を使って描画されたゲーム画面がこちらです。
GameField

実際はテクスチャに埋め込んだ離散化された情報だけを持っているのですが、
線形補間でもそれっぽく見えるものですね。


ちなみにこの画面を出力するまでの描画パスは次のとおりです。
RenderGameField

ColoredDistanceFieldの情報を使ってベースカラーマップやら法線マップやらを先に出力して、
そこからシャドウマップやらフォンシェーディングやらで遅延レンダリングしています。
DistanceFieldを使うと嬉しいのが、距離情報が簡単に取れるのでアンビエントオクルージョンもすぐ出来ます。
嬉しい!


そしてDistanceFieldの特徴として、オブジェクトを変形するときは変形範囲のみ
グリッドの値を書き換えれば良いのでゲーム中フィールドの破壊や創造も簡単です。

anime
もりもり岩肌を削れていますね。動的に影やシェーディングがなされているとこにも注目!


現状製作出来ているものはこんな感じです。
来週9/13(日)に開催されるGAME^3というイベントに出展するので興味がある方は是非見に来てください。
Bitbucketにもソースを上げているので中身が気になる方はこちらもどうぞ。

工大祭に間に合うと良いですね。あと研究も進めば良いですね。

【RogyGames】C87<3日目西え-30b>にて出展します。

コミックマーケット三日目西え-30bにて私達RogyGamesが出展いたします。
以下おしながきです。


1.ARMED CORE VENGEANCE DAY(500円) 
wjcAVqYV
tIAdRT0D

 ニコニコ動画で話題のあのゲームです。7ステージと大幅な増量。オンライン対応。
Oculus Rift対応。
 

2.フェアリーレイジ(100円)  
xzkJ-ZwBmgErUT-h

妖精さん達が暴れまわる戦略アクションゲームです。

 
3.routes (100円) 
routes11
routes22

スコアアタック型横スクロール探索アクションゲーム
です。


お待ちしております!
 

Unityにおける天地創造のおはなし




はじめましてアカテツ科(赤鉄科、学名:Sapotaceae)です。稚拙ながらブログを書きます。
CG^2とCG^3の統合後の研究室名は"RogyGames"となったそうですよ。最高のゲームをつくろう。

私は4月よりロ技研に入り、プログラミングとそれによるゲーム作りの勉強をしています。使っているのはUnityです。何故かというと楽だからです。勉強している言語はC++です。UnityではC#とJavascriptとBooしか使えないのですが、なんかかっこいいので取り敢えずC++の勉強を続けます。技術的な事はC++で学ぶことになりそうです。C++では今のところこんなものしか作っていません


先月(10月上旬)に開催されていた工大祭においては、ソルダー棒()、太陽系シミュレーターSpace Journeyというゲームを展示していました。 ゲーム名から飛べるので遊んでみてください。




Unityの導入っぽい記事が見当たらなかったので宣伝兼ねて紹介します。 Unityではドラッグアンドドロップでいともたやすくモーツァルトを表示することができます。すごい。

mozart


UnityにはRigidbodyという物が存在します。これをモーツァルトにつけることによって、モーツァルトが物理的な力の影響をうけるようになります。ここでは2Dゲームを作る設定にしているので、Rigidbody2Dを付けてみます。質量を1に、重力加速度を1に設定してみます。

mozart

そうすると、画像のようにモーツァルトが元の位置(上)から落ち始めます(下)。重力のせいです。これまでの操作はマウスだけで行うことが出来ます。Unityすごい。

Unityには他にも多数のゲーム作りに必要な機能があり、それらを無料で使うことができます。Asset Storeなる所謂素材を外部から手に入れられる所もあります。私は使ったことがありません。mozart
↑Spring Joint 2Dで無残にも振り回されるモーツァルト
 

モーツァルトをボタンによって自分で操作したい場合、スクリプトを書きます。工大祭まで私はJavascriptを使って書いていたのですが、これからはC#で書くことに決めました。見た感じあまり変わらないので多分大丈夫だと思います。
例えば
transform.Rotate(/*Vector3.eulerAngles*/);
という文字列を書き込むと、モーツァルトが回り始めます
詳しいことは日本語字幕付きのスクリプト講座が公式であるのでそこで学ぶことができます。


マルチプラットフォームもUnityの強みでしょう。Unityで作ったゲームはWindows、MacOSX、Linux、コンソールゲーム機、iOS、Android等用に簡単にビルドすることが可能です。 

ゲーム作りに興味がある けど何をすればいいのか分からないという皆さん、Unityを始めてみてはいかがでしょうか。おすすめです。




今度の冬コミでRogyGamesが出展します。多分私も出します。私は円が存在理由を求め旅に出るゲームを 作っています。以上です。
ギャラリー
  • ABUロボコン結果報告
  • スマホから部屋の電気をつけてみた
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • たのしいロボット帝国 製作物紹介
記事検索
最新コメント