「RubyWorld Conference 2018」に協賛させていただきます


「RubyWorld Conference 2018」に、Goldスポンサーとして協賛させていただきます。

<期間>
2018年11月1日(木)、2日(金)
<会場>
島根県立産業交流会館「くにびきメッセ」3階 国際会議場
<主催>
RubyWorld Conference開催実行委員会
「RubyWorld Conference 2018」公式サイト

スマートオフィス化のその後

こんにちわ。
リエです。
 
猛暑日が連日続き、しんどい日々が続きますがみなさん大丈夫でしょうか。
この暑さでまだ7月かと嘆いております。

 
そういえば、7月は七夕がありましたが、わたしもしっかり短冊にお願いごとを書きました。
書いたお願いごとは「体脂肪が3%落ちますように」だったんですけど、そうしたらなんと七夕当日に胃腸炎になり、本当に体脂肪が落ち、辛くもお願いごとが叶った七夕となりました。(すぐ戻りましたがΩ\ζ°)チーン)
 
そんな胃腸炎の話は置いておいて、少し前にスマートオフィス化エアコン編という記事を公開しましたが、弊社のエアコンは自動起動できるようになっています。
夏は朝早くにオフィスへ出勤してもオフィス内はすでに暑く、暑い中朝の準備をするのが結構辛かったのですが、自動起動のおかげでそれが解消されました。
特に最近は猛暑日が続いているので本当に助かっています(;_;)
たまにごきげんななめでついていないエアコンがあったりするので、改善の余地はまだまだありますが、それでも導入してもらってよかったなと思っています。
 
こうやって、オフィスの困ったが解決していくのは嬉しいです\(^o^)/
他にもスマートオフィス化ができるものがあるので、今後が楽しみです♪

3Dの自動地形生成をやってみました!

こんにちは。開発担当のマットです。

以前の記事で地形生成アルゴリズムを紹介しましたが、3Dの世界が自動的に生成するプログラムを作ってみたいと思いUnityという3Dゲームエンジンで作ってみました!

自動地形生成とは?

自動地形生成(Automatic Terrain Generation)とは、世界を作ってくれるプログラムです。「手続き型の生成」(Procedural Generation)の一種です。
簡単に説明すると、コンピュータの乱数生成の特徴を活用して世界を作り出します。

乱数生成と「シード」

コンピュータというものは、とても予想しやすいものです。決まっているルールに従って、予期不可能なことを一切やりません。コンピュータのファンクション(処理手順)に同じ値を入力すると、毎回出力される結果は必ず同じです。

しかし、時々、コンピューターに乱数を決めてもらいたい場合があります。
例えば、サイコロのプログラムを作ろうと思えば、毎回同じ結果だと困りますよね。

そのため、乱数を生成するファンクションを呼び出す度に、入力値を変更しなければなりません。
多くの乱数ファンクションはコンピューターの機内時計を入力値として使います。時計を使うと、ファンクションの呼び出し時間によって、返ってくる結果が異なりますので、サイコロのプログラム等に乱数を生成することができます。

この乱数ファンクションの「入力値」を「シード」(Seed[種])といいます。

パーリン・ノイズ

パーリン・ノイズとはゲーム業界でよく活用されている「ノイズ生成アルゴリズム」です。「ノイズ」とは「雑音」ですが、パーリン・ノイズは「波」のような2D雑音マップを生成してくれます。

パーリン・ノイズ・マップ

Ken Perlin氏というコンピュータ科学教授が1983年に開発し、それから、多くのプログラムに使われているノイズ生成機能です。

いくつかの引数(ファンクションの設定値)を設定することができ、変更することによって、波の形が変わります。
例えば、ものすごい雑なノイズを作ることもできますし、なめらかな波のようなノイズも作ることができます。

引数を変更すると、波の特徴が変わります。

なお、パーリン・ノイズのファンクションに与えるシードを変更することによって、「同様ながら違う」結果が返って来ます。

シードを変更すると、波の位置が変わります。

パーリン・ノイズを活用して、白いエリアを「高い高度」と解釈し、黒いエリアを「低い高度」と解釈すると、3Dマップを作ることができます。

なお、複数のノイズを重ねる事によって、より面白いものを作る事ができます。

世界づくり(デザイン)

まずは、どのような世界をつくりたいかを決める必要があります。
個人的な好みで中心が山となっている島を作ろうと思いましたが、それをどうやって作るかを決めなければなりませんでした。

要素

まずは、全体的にちょっとなめらかな地形がほしかったので、「Base」という優しいノイズを入れました。
次に中心となる山の形となる「Mountain」のノイズも必要だったので、それもデザインに入れて、最後に海岸の形を決める「Edge」も入れることにしました。

島づくりに使う3つのノイズマップ

しかし、この3つのノイズ要素を単純に足すだけだと島にはなりませんので、最終的の地形計算を行うとき、ちょっと特別な処理を行わなければなりません。

Baseノイズをマップ全体に適応して、地形をなめらかな形にしてくれます。

Mountainに関しては、以下のルールを加えました。
「マップの中心に近いほど、マップに影響を及ぼす。」
つまり、マップの中心にMountainノイズが地形の高度に影響を及ぼしますので、島の真ん中に山が生成されますが、中心から離れているところでは高い山が生成されません。

Edgeに関しては、以下のルールを加えました。
「マップの限界に近い程、逆影響を及ぼす。限界に近くない場合、影響を及ぼさない。」
「逆効果」とは「高度を下げる」とのことなので、マップの限界近くのエリアの高度が低くなります。

海を適切な高度に設置すると、島の形になります!

世界づくり(実装)

最近個人的にUnityでプログラミングをやっていますが、Unityは3Dゲームエンジンでとても使いやすいと思います。

今回は地形を作りたいので、Unityでゲームシーンを作って、Terrain(地形)とWater(水)オブジェクトを入れて、Waterの高度を10メートルに設定しました。そうすると、Terrainの高度が10mを超えていない箇所が海に浸かります。

上記で考えた3つのパーリン・ノイズを実装して、地形の高度に設定すると島が出来上がりました!

「12345」のシードで作り上げた島

上記の画像を見るとわかるかと思いますが、右側の設定画面でSeed(シード)を「12345」と設定しています。
そのシードでマップを生成すると、パーリン・ノイズの乱数生成に使われますので、毎回必ず同じ形の島が生成されます。

しかしシードを少しでも変更すると、全く違う島が出来上がります。

シードを少しでも変更すると、全く違う島が生成されます。

世界づくり(森も入れましょう!)

島づくりはなんとなくできましたが、ちょっと寂しいので森も生成しようと思いました。

地形と同じ原理で、パーリン・ノイズで木が生える場所を決めるのがいいです。
パーリン・ノイズ・マップを使って、ある閾値より白いところに木を生やす、という仕様を決めました。
単独に立つといい樹種は、ザラザラな雑音系のノイズ・マップを生成し、森のように、「群れる」木がいい場合は、なめらかな波を作るようノイズの引数を設定します。

Unityはデフォルトで、3種類の木を用意してくれるので、それぞれの樹種にノイズ・マップを用意する必要があります。

なお、それぞれの樹種に生える箇所の条件も加えてみました。

ヤシの木:高度が低い(海に近い)ところのみ。
松の木:高度が高くて、傾斜がきついところのみ。
楠の木:中間の高度なところのみ。

これらのルールで島を生成すると、より良い島が出来上がりました。

森も生成した「12346」の島。

折角ので、探検しましょう〜

Unityで簡単にファースト・パーソン・キャラクターを導入できますので、作り上げた島にキャラクターを入れて、島を走り回って楽しむことができました!

寂しくなくなった世界

まとめ

「手続き型の生成」はとても有力なツールだと思います。
ゲームやシミュレーションに使うことができ、無限コンテンツを生成することができるので、オープン・ワールド系のプログラムに向いていると思います。

今回は地形の高度と樹木の配置に使いましたが、それ以外の使い道もたくさんありますので、今後色んなことに使ってみたいと思います。

七夕なので星に願いを。

昨晩からの土砂降りで道が川みたいで天の川どころじゃないですね;
マエダです。
 
いよいよ明日に迫ってきましたね。
七夕。
 
今年も弊社では笹飾りをしてお願い事をみんなに書いてもらいました。
 

 
昨年の様子はこちらです。

七夕なので欲望を吐き出してみた


 
毎年ですが僕の願いは「長生き」。



 
あ、あれ、、
あれあれ!?
「推しが売れますように」って書いたのだれだ・・・
 
あの子しかいない。。。
 
 
みなさんのステキなお願いが叶いますように(^人^)

ライトニングトーク大会が一新しました!

こんにちわ。
リエです。
 
定期的に続けてきたライトニングトーク大会(以下、LT大会)ですが、今回より内容を一新しました!
今までは個人発表でしたが、今回よりグループ発表に。
※過去のLT大会の記事は下記リンクからご確認いただけます\(^o^)/
第1回目
第2回目
第4回目
第5回目
第6回目
第7回目
第8回目
第9回目
第10回目
第11回目
※第3回目の記事はありません。
 
ルールはこんな感じ。
・持ち時間は1チーム5分(5分で強制終了です。有無を言わさず画面を落とします)
・チームメンバー全員発表に参加すること
・テーマは「いいもの」「たのしいもの」
・発表方法は自由 
 
今までは個人発表だったので題材も作成スケジュールも自分だけで決めれていましたが、グループだとそんなわけにはいきません。
みんな戸惑いつつも協力しあって準備をしてくれました。
 
そして迎えた発表日!
持ち時間5分でチームメンバー全員が発表に参加するのは難しかったみたいで、時間配分がうまくいかなかったりとトラブルもありましたが、無事全チーム発表できました。
いい意味でたくさん課題が見つかったLT大会だったと思います。(次回が楽しみ!)

 
ちなみにチーム戦となったので、今回からはトロフィーは無しとなりました(;´∀`)
トロフィーどこに行ったんだろ。。
 
ちなみに写真下にチラッと写っている白バラコーヒーはリエのものです。