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

東京工業大学の公認サークル「ロボット技術研究会」のブログです。 当サークルの日々の活動の様子を皆さんにお伝えしていきます。たくさんの人に気軽に読んでもらえると嬉しいです。
新歓特設ページ        ロボット技術研究会 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でゴリゴリシェーダー使ったものしたいですね。

VR鉞回避ゲーム「Infinity Masakari」の紹介

こんにちは。Lineaです。

半年以上ぶりに記事を書きますが、今回は工大祭で展示した新作ゲームの紹介です。
そのタイトルは…

masakari_Pos

「Infinity Masakari」
 
なんかどこぞのモバイルゲームを思い出すタイトルですね… 

ところで皆さん「鉞を投げる」という表現は聞いたことはないでしょうか?
当サークルも含め技術系(特に情報系?)の界隈では技術的な質問や指摘をすることを鉞を投げると言うことがあります。
鋭い質問が発表者にザクッと刺さって心にダメージを負う比喩表現ですね。

これを具現化したのがこのゲームです。
簡単なCMも作ったので見てもらえるとイメージしやすいかと思います。


概要としては卒論発表に臨む学生が教員たちからの鉞を避けながら、鉞を投げ返し教授を倒して卒業を勝ち取るゲームです。
鉞を避け続けると”鉞ゲージ”が溜まっていき、フルになると投げ返して教授をSATSUGAIできます。
あとたまにエナジードリンクという†やさしさ†が飛んでくるので受け取ると回復できます。
鉞を食らい続けて心が折れると物理演算で倒れ、留年します。ただ、留年を重ねると強くなっていくので留年を恐れず戦ってください。

ところで今回の記事タイトルでは”VR”の文字がありますが、このゲーム実はOculus Riftに対応しています。
というか元々Oculus用に作り始めたので本当はOculusを使うのが正しい遊び方なんですけどねw
Oculusをつないだ状態では頭を上下左右に動かして鉞を避けることになります。
立体視で飛んでくる鉞はディスプレイでやるよりも迫力があって恐ろしいので自然と体を動かして避けてしまいます。
大きく動かなくていいのでそれほど酔わずに楽しめるようになっています。
そういう意味ではOculusと結構相性が良かったかなと思います。

このゲームではUnityを使用して作成しました。
現在のUnity5.2ではVRsupportモードが搭載され、チェックボックス一つでOculusが接続されていると自動でOculus側へ出力してくれます。 便利な時代になりましたね~
ただ、OculusRuntimeが0.7だとノート用のスイッチャブルグラフィックス(Optimus)ではうまく動作しなかったということはメモしておきます。SDKは0.6安定です。

また、今回教授たちのセリフは結構な種類(50種類程度)を用意してますが、これは鉞スプレッドシートを用意して友人に身の回りで聞いた鉞wordを書き込んでもらったものを取得して表示しています。
さらに教授たちの顔テクスチャは差し替えが可能です。任意の256×256のpngファイルに差し替えれます。
2015y10m07d_000803891
ちょっと技術的な話としては画像の読み込みにはpngファイルをバイナリデータとして読み込んで、Texture2D.LoadImage()でテクスチャとして処理させています。最初のロードだけ重くなるのがネックですが色々楽しいことに使えそうですね。

 工大祭で展示していたら漫画家の蛇蔵さんに取材され、モーニングで連載中の漫画「絶対にマネしないでください」にネタの一つとして登場しました。
nn

VRを使ったときの状態がよく再現されていて感激でした。 
結構重要なシーンで使われていたのでみんなも今週のモーニング買って読んでみてね‼(宣伝)

というわけで卒論の中間発表の疲れからの思い付きで 2週間で作ったミニゲームについての紹介は終わりです。
ここまで読んでくれた皆さんにはこのゲームをぜひ遊んでもらいたいと思います。以下のリンクからDLして遊んでみてください。
https://1drv.ms/u/s!AsxUjw_1dWtwiNRADnpyrgAv2M-tSw
 操作方法
回避:WASD or 矢印
視点操作:マウス
鉞投げ:左クリック 

工大祭展示とUnityのナビゲーション機能について

皆さんこんにちは。HTGです。
今回は工大祭の展示物とそれに使ったUnityのある機能についてお話させていただきます。
今年も自作ゲームを展示していました。

20151026-01

タイトルは「GetCoin!」
名前の通りコインを集めることが目的で、人型にならなかった箱型のキャラクターを操作して攻撃能力を持てなかったうろついているだけの敵キャラ(カマキリ)を倒し、落としたコインを拾い集めていくゲームです。
20151026-02

僕の中では正直言って完成度低いです。本来やりたかったものからルール大幅変更してるし。
ぶっちゃけ何とかトゥーンを遊びすぎて作るのサボってました。みんなもほどほどにね!

さて、実際にプレイしないとわかってもらえないことですが、この敵キャラのカマキリ、段差あり高低差ありのステージを割とフリーダムに動き回ります。たまに渋滞とか壁に引っかかるとかするけど
この挙動を普通にプログラムで作ろうとすると非常に難しいので短時間で作るのは不可能です(個人の感想です)が、これを簡単な手順で可能にしてくれたのがUnityのとある機能です。
続きを読む

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にもソースを上げているので中身が気になる方はこちらもどうぞ。

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

【三日目東S-07a】コミックマーケット88にて出展します。

こんばんは、アカテツ科です。

ロ技研のいち研究室であるRogyGamesは、今回もコミックマーケットに出展致します!

 場所は三日目東館のS-07aです。TorqueLの隣だ!
 
 
私達の作ったゲームを販売、配布します。



・出展物内容 


1:Gimmick(アクションパズルゲーム)  500円
 
gimmick

CK9g62bUMAEExUI

 
 B2の塩谷 凛君が製作しました。制限時間以内に仕掛けを解き、次のステージに行くアクションパズルです!

ステージは全部で40以上。かなりのボリュームがあります!

全てのステージをクリアーした暁に見るものは何でしょうか。 


2: RogyGames Compilation 1(ミニゲーム、進捗総まとめ)   無料
 
無題
 
メンバーで作ったミニゲームや、製作途中のゲームの進捗等を、一つのCDにまとめる試みを始めてみました。

今回、これは無料で配布したいと思います!

中身は以下の通りです。

・蜘蛛の糸(二次創作・アクションゲーム)

Spdrthrd

 筆者が製作しました。カンダタが、永遠に、永遠に糸を登り続ける。

果ての無き蜘蛛の糸を、足掻き、登り続けるカンダタに、待ち受けるのは、死のみ。

あれ、カンダタ既に死んでない?


・Programmer Panic(アクションゲーム) 進捗報告

ss_360

B2のやむどぅ君が製作しているゲームの、進捗報告版です。

乗っ取られたコンピュータをなんとかするべくテックちゃんが電脳世界を行くアクションゲームです。

今回は3ステージ+αで構成されています。テックちゃんも大暴れ!


・RHYBBIT(リズムゲーム)

 _______360

ロボット技術研究会部長のおーまさんが製作しました。カエル娘がリズムにのって、十字キーで踊りだす。

スコアが増えると音楽も豪華に!

カエルの鳴き声、英語でribbitって言うらしいですわよ。 






当日会場にてお待ちしております。


イカ、よろしく~~~~~~! 
ギャラリー
  • ABUロボコン結果報告
  • スマホから部屋の電気をつけてみた
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • たのしいロボット帝国 製作物紹介
記事検索
最新コメント