Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【1周年】ブログを開設してから1年経ちました【記念】

 
 
🎉2019年8月22日をもちまして、このブログは1周年を迎えました🎉

今回は開設1周年を記念しまして、今までの振り返りをしてみます。

 

 

 

ブログを始めたきっかけ

ブログでアウトプットを始めようとしたきっかけについて

 

勉強会でのインプット

学生時代にコロプラさんのインターンや採用説明会に参加していまして、
講師の方がアウトプットの重要性を説いていました。
アウトプットという単語を聞いたのがこれが最初だったと思います。

 

「アウトプットは自分の成長につながるけど難しそうだなぁ」
といった印象でした。

colopl.connpass.com

peatix.com

 

 

昔からいろいろな勉強会に参加し、インプットはそこそこしていました。
この頃から勉強会のメモ程度は書いてましたが、公開したりなどアウトプットはしていませんでした。

techsalon.connpass.com

techsalon.connpass.com

atnd.org

 

 

はてなブログ開設

そんな時アウトプットを始めるきっかけがありました、
それは去年2018年にあったUnity アセット真夏のアドベントカレンダー 2018 Summer! です。

 

この時はてなブログを開設し、初めて技術記事を投稿しました。

raspberly.hateblo.jp

記事を書くに当たって、Qiitaはてなブログ、どちらで書こうか迷いましたが、
最終的にはてなブログを選択しました。

理由としては技術系以外の雑記なども書けますし、テラシュールブログさんやコガネブログさん、
ひよこのたまごさんなどよく見る方々が使っていたのが大きいです。

 

 

 

勉強会のまとめ

 しかし、アドカレ以降特に書きたい事もなく、Twitterでネタを見つけて書いたり、

raspberly.hateblo.jp

raspberly.hateblo.jp

 

読んだ本のまとめを書いたりしていました。

raspberly.hateblo.jp

こちらは完全に止まっている

 

 

いろいろと迷走している時にサポーターズさんの、エンジニアブログに関する勉強会に参加し、
アウトプットの利点や工夫ポイントを学びました。

supporterzcolab.com

 

 
それ以降、勉強会レポを書き始めるようになり、1年間で60以上の勉強会レポを書いています
(1月あたり5つの勉強会レポを書いている計算に)


初めて書いた勉強会レポはTechXGameCollege椿さんによるUnityアニメーションの勉強会です。

raspberly.hateblo.jp

勉強会のまとめを書くことは、学んだことの整理にもなりますし後で振り返ることもできます。
何よりも、自分だけが見るものではなく他の人も見るものなので、
見た目や文章構成に気を遣うようになり、きれいにまとめることができました。

 

 

そして、勉強会レポなどをいろいろ書いていった結果、4月に10000アクセスを達成しました。

 この時点でセルフブランディングとしては大成功ではないでしょうか。

 

 

 

 

 

1年間の振り返り

ブログも含めアウトプットに力をいれた年だったと思います。

 

技術系記事の投稿

今年の5月にOculus Questを興味本位で購入しました。
VR開発は昔していましたが、DK2以来久々(CV1はちょっとだけ)ということもあり、
うまくいった所を自分なりにまとめて入門的な内容で開発記事を投稿しました。

raspberly.hateblo.jp

これが結構好評でして、以降OculusQuest開発をシリーズ化しました。

【Oculus Quest開発メモ】離れた場所にある物を掴む Distance Grabber & Grabbable編【Unity】 - Raspberlyのブログ

【Oculus Quest開発メモ】VR空間内を歩き回る OVR PlayerController編 【Unity】 - Raspberlyのブログ

【Oculus Touch開発メモ】手の見た目をカスタマイズする 付属シェーダー編【Unity】 - Raspberlyのブログ

【Oculus Quest開発メモ】Questでもポストプロセスを使いたい! Fast Mobile Post Processing編【Unityアセット紹介】 - Raspberlyのブログ

 

シリーズ化すると、固定の読者が増えやすく、執筆時のモチベーションもかなり保てます。

 

勉強会レポ

このブログは1年間で93記事書いてきましたが、その内の61記事が勉強会/イベントレポです。
改めて振り返るととんでもない数です。
私は感想文などがとても苦手なため勉強会の内容や要点をまとめることをメインでレポを書いています。

f:id:Raspberly:20190823235244p:plain



 

 

Gotanda.unity

11月にはGotanda.unity #9で🎉 人生初のLT登壇🎉 をしました。

raspberly.hateblo.jp

 

Gotanda.unity#7から参加していましたが、#8の懇親会でフツフツと登壇したい欲が出ていました。

最初はかなり不安でしたがGotanda.unityの雰囲気がよく、とても楽しくLTさせていただきました。
また、この登壇をきっかけに多くの人とつながれました。

 

同じくGotanda.unity#12でも登壇いたしました。

raspberly.hateblo.jp

 

思えばUniteTokyo2019のUnity Roomコーナーの前でとと様と出会ったのが大きな転機だったのかも!

 

 

 

最後にいいたいこと

アウトプットの敷居

アウトプットをしたことない人にとって、最初の敷居はたしかに高いと思います。
私も最初躊躇しました。
「こんな内容でアウトプットしていいのかな」
「この内容なんか間違ってるかも」
「他の人がもっとわかりやすく解説してる」・・・

 

間違っていたら訂正すればいいですし、かぶりなど気にせず気軽に投稿してみるといいです。
勉強会の感想ツイートも立派なアウトプットです!

 

本格的な記事を書き始めるとっかかりとしてはアドベントカレンダーがオススメです。
特にUnityは毎年やっていますので、ぜひ参加してみてください。

qiita.com

こちらもオススメ

コミュニティを通して学んだ、ブログの書き方整理 - らんてく!(Lanchester Tech Blog)

 

 

Gotanda.unityは神

LT登壇するのはとても楽しいので、まだの方はぜひやってみましょう!

正直とと様と出会わなかったら今の私はいなかったと思う。

 

 

 

勉強会コミュニティへの感謝

勉強会ブログをいろいろ書いてきましたが、これは勉強会を開催してくれた運営様、
勉強会を支えて応援してくれる参加者様がいて初めて成り立ちます。

いろいろ参加して感じた事は、勉強会の内容以上に参加者同士の交流の大切さです。
私も多くの方に助けられているので、自分から助ける側に回ったり、
よりコミュニティを盛り上げる一員になりたいです。

 

 

 

 

 

 

長々と書いてきましたが、このブログが1年続いたのは
読者様そして勉強会やUnity開発コミュニティ皆様のおかげです!
これからもどうぞよろしくお願い致します!

 

【アセット紹介】Weather Maker で天気を操作する【Unity】

これはUnity アセット真夏のアドベントカレンダー 2019 Summer!の22日目の記事です。

f:id:Raspberly:20190819100742p:plain

ハッシュタグ : #アセットアドカレ2019

 

今回はアセットの紹介をしていきます。
紹介するのはWeather Maker - Unity Weather System, Sky, Water, Volumetric Clouds and Light*1です。
天気など自然環境を構築できるアセットです。

 

こちらは去年の8月にありました、「アセットストアの購入金額に応じてアセットが無料でもらえるイベント」でいただいたものです。今まで積んでいた。
アセットストアで50ドル以上のお買い物をすると本アセットが無料で入手できました。

www.asset-sale.net

 

 

 

 

☀☂☁⚡☃⛅⛈☀☂☁⚡☃⛅⛈☀☂☁⚡☃⛅⛈

WeatherMakerはとても機能が多いため、今回は天気の操作をメインで取り上げます。

☀☂☁⚡☃⛅⛈☀☂☁⚡☃⛅⛈☀☂☁⚡☃⛅⛈

 

 

必要条件

--------------------------------------------------
-Weather MakerにはUnity 2017.4以降が必要です。
-Weather Makerにはテクスチャ配列のサポートが必要です。
-Weather Makerは、gles 2.0、WebGLDirectX 9.0以前ではサポートされていません。Unityのバグが原因でWebGLのサポートが壊れています。私は彼らと協力して修正を支援しています。
-iOS / MACでは、OpenGLレンダリングを使用します。Metalには、3Dテクスチャルックアップなどの機能が壊れています。

 

.NET設定

Unity2019.1以降の場合、PlayerSettingsで.NET4.5または.NET standard 2.0を有効にします。

Rain Makerの削除

もしプロジェクト内に
Rain Maker(同パブリッシャーの類似アセット)がインポートされている場合は削除します。

ColorSpaceをLinerに

PlayerSettings->OtherSetting->ColorSpaceをLinerにします。
ガンマよりも見た目がよくなるそうです。

f:id:Raspberly:20190802150120p:plain

 

 

 

 

 

サンプルシーンの確認

アセットをインポートしたら、サンプルシーンを見てみましょう。豊富にそろえてあります。

f:id:Raspberly:20190819100936p:plain

UIがものすごくちっちゃいことに気をつけましょう。
画面サイズによっては潰れてしまってしまうこともあります。

f:id:Raspberly:20190819101051p:plain

こちらでは、実際に天気を変化させたり、昼夜を切り替えることができます。

デモシーン

 

 

初期セットアップ

まずは初期設定から、簡単に紹介します。
詳しくは付属のReadme.txtを見てください。

シーンの作成

デモシーンをそのままいじってもいいですが、今回は新しくシーンを作ります。
この時、他に何もオブジェクトがない状態だと少し寂しいので環境を整えましょう。 

Assets/WeatherMaker/Demo/DemoResourcesにあるSimpleTerrainをシーン内に加えます。

f:id:Raspberly:20190819111829p:plain

これはWeatherMakerのデモ用として用意されたTerrainです。

f:id:Raspberly:20190819113011p:plain

もちろん自分で用意した環境や、アセットを使っても問題ありません。

 

  

シーンにプレハブを配置(重要)

UnityEditorのWindow->Weather Maker -> Add Weather Maker to SceneWeatherMakerPrefabを配置します。

f:id:Raspberly:20190805105801p:plain

 

ちなみに、MainCameraのProjectionがOrthographic(2D)になってる場合は
自動的に2D用のWeatherMakerPrefabが配置されます。

f:id:Raspberly:20190805110003p:plain

手動で配置したい場合は、Assets/WeatherMaker/Prefab/WeatherMakerPrefabを配置します。
2Dの場合はWeatherMakerPrefab2Dを。

 

 

このWeatherMakerPrefabこそ、このアセットをコアであり簡単に空や天気をコントロールできるプレハブです。
パーティクルやサウンドなど必要なものはすでにセットアップされています。
後はこいつを使うだけです。

また。各種天気の状態やデータはProfile(ScriptableObjectみたいなやつ)で管理されています。(後述)
このプレハブは、それらProfileを参照したりパラメータを変更する機能がありますが、
このProfileは直接編集もできまし、自分好みのProfileを新しく作成することもできます。

右クリックからCreate/WeatherMakerで作成できます。

f:id:Raspberly:20190822092046p:plain

今すぐ使うわけではありませんが、Profileがあることを知っておきましょう。

 

 

DirectionalLightの削除

シーンに最初から含まれているライトは削除しておきましょう。
太陽にすでにライトがあります。

 f:id:Raspberly:20190802162714p:plain

LightingSettings

Window/Rendering/LightSetting/EnvironmentのSkybox MaterialとSun Sourceを変更します。

SkyboxにはWeatherMakerに含まれているSkybox用のマテリアルWeatherMakerSkyBoxMaterialを、
SunSourceにはシーン内に配置したWeatherMakerPrefab内にあるSunを追加する。

 

f:id:Raspberly:20190802164201p:plain

Environment LightingをGradientColorに変更

Environment ReflectionsをCustomに変更

f:id:Raspberly:20190802153025p:plain

 

 

 

MainCameraの編集

Cameraパラメータの設定

Clear FlagをSolidColor
Backgroundを全て0(真っ黒)
Far Planesを2000以上
Rendering PathをDeferred
Allow MSAAを無効化

f:id:Raspberly:20190821024239p:plain

Rendering PathはDeferredにした方がよりよく見えるようになるそうです。

Tagの設定

シーン内のMainCameraのTagがMainCameraになっていることを確認しましょう。
通常はデフォルトで大丈夫のはず。

f:id:Raspberly:20190802151515p:plain

 

PostProcessingの設定

必須ではありませんが、見栄えがよくなるため設定しておきます。
PackageManagerからインストールしておきましょう。

実はWeather MakerにはPostProcessingを簡単に自動設定する機能が用意されています。

Window/Weather Maker/Setup Post Processingで、シーン内にあるカメラにPost Processing Stackが自動で設定されます。

f:id:Raspberly:20190819103640p:plain

f:id:Raspberly:20190819104206p:plain

ProfileはWeatherMaker側でいい感じに作成してくれたものです。
ワンクリックですべて設定してくれるのはとても便利。

 

 

 

 

実際に動かしてみよう

 

WeatherMakerPrefabの中にはいろいろ入っています

f:id:Raspberly:20190805115220p:plain

この中の内、
・WeatherMakerPrefab
・AudioManager
・DayNightCycle
・LightManager
の4つは必ず有効化していなければいけません

他のPrefabで、使わないものであれば無効化することができますが、Prefabの削除はしないようにしましょう。

 

 

一日のサイクルを作る

日が沈んでまた昇る、そんなサイクルを作ることができます。

f:id:Raspberly:20190821223256p:plain

f:id:Raspberly:20190821223443p:plain

DayNightCycleにアタッチされているWeatherMakerDayNightCycleManagerのプロファイルを見てみましょう。

f:id:Raspberly:20190821223733p:plain

Time Of Dayがシーン内での時間になります。
ここの値を変えることで昼夜の変えることができます。

f:id:Raspberly:20190821225332g:plain
月は必要でないのなら無効化することができますが、太陽を無効化してはいけません

サイクルを停止したい場合はSpeedを0に設定すれば時間が経過しなくなります。

ちなみに光に指向性を持たせたり、緯度・経度・惑星軸まで調節できます。
夕日の色を変えたりなど、こだわりたい方はとことんこだわれる。

 

 

 

雲を作る

雲を作ってみましょう。
雲の状態はいくつかプリセットがあります。これを選ぶだけで簡単に状態をセットできます。 

f:id:Raspberly:20190821230231g:plain

雲はもちろんリアルタイムで変化します。

 

 

 

 

 

天気の操作

それでは実際に雨を降らせたり晴れさせたりしていきましょう。

WeatherMakerPrefabにあるPrecipitationが雨や雪を管理するオブジェクトです。

f:id:Raspberly:20190821123447p:plain

インスペクターを見てみましょう。

f:id:Raspberly:20190821130008p:plain

 

Precipitationが天気を設定する項目です。

Rain(雨)、Snow(雪)、Sleet(みぞれ)、Hail(雹)、Customと別れています。
Noneにすると晴れます。

f:id:Raspberly:20190821130213p:plain

Precipitation Intensityが天気の強度です。0~1まで設定でき、1が一番強い状態です。

Precipitation Change Durationは天気の推移を行う時間です。

Precipitation Change Delayは天気が変わる際に遅延させる時間です。

Precipitation Change Threadは天気が変わるしきい値です。

 

  

 

雨を降らす

WeatherMakerPrecipitationManagerのPrecipitationでRainを設定します。

f:id:Raspberly:20190821231651p:plain

この時、Precipitation Intensityが0だと天気が発生しないことに注意しましょう。
最大の強さで発生させたいのなら1にすべきです。

 

以下が雨を降らせている場面です。
非常にわかりづらいですがポツポツ降っているのが見えると思います。

f:id:Raspberly:20190822000916g:plain

 

デモでは以下のように確認できます

f:id:Raspberly:20190821181917g:plain
デモと比べると実際に降らせた時は雨が非常に弱く見えます。
ここを少し変えてみましょう。



雨をカスタマイズする

雨はパーティクルシステムでできています。
これはPrecipitation/Rainの子オブジェクトに配置されています。

f:id:Raspberly:20190821232711p:plain

パーティクルを直接編集してもいいですが、
親であるRainに便利なコンポーネントがアタッチされているのでそちらを使います。

f:id:Raspberly:20190821234557p:plain

画面に収まらないくらいのパラメータ数!実際は下にさらに続きます。
それぞれツールチップでパラメータの役割が表示されています。

 

雨を強くしたいので、適当に以下の値を最大値まで上げてみます。

f:id:Raspberly:20190822002428p:plain

 

 

先ほどと比べるとだいぶ雨っぽくなりました。ミストもいい味出しています。

f:id:Raspberly:20190822001541g:plain

できればもっと土砂降り感も出してみたいところ。

 

 

 

雪を降らせる

雪を降らせるのは雨同様とても簡単です。
PrecipitationをSnowに設定するだけ。

f:id:Raspberly:20190822005206p:plain

f:id:Raspberly:20190822005320p:plain

 

 雨同様、カスタマイズも可能です。

f:id:Raspberly:20190822010017p:plain

 

 

晴れさせる

雨が降ったので次は晴れにしてみます。今から晴れるよ。

f:id:Raspberly:20190822011146g:plain
Precipitation Intensityを0、またはPrecipitationをNoneにします。
雲がある場合は、上記の通りNoneに設定すると完全に晴れます。

 

 

 

 

 

まだまだ紹介しきれない機能

ウェザーゾーンなどもまとめようと思ったのですが、かなり大変そうだったので概要だけ紹介します。

ウェザーゾーン

特定の範囲内に入った時あらかじめ設定しておいた天気にランダムで変化させるシステムです。

ヌルゾーン

雨や霧などをレンダリングしたくない時に使う領域です。
これにより、洞窟や屋内では天気の影響を受けません。

ボリューメトリッククラウド&フォグ&ライト

立体感のある雲や霧、光を出すことができます。

オーロラ/ライトニング

オーロラや稲妻を出すことができます

海を作り出すことはもちろん、水中に入った時の表現もできます。 

Weather APIとの連携

現実世界の天気と連動させることができます。

 

 

 

まとめ

Weather Makerを使えば簡単に天気や空を作成することができます。
プレハブを配置して、パラメータを変えるだけ!


また冒頭の通り、このアセットは非常に多くの機能を持っています
ほとんどの自然環境を再現できる上にかなり細かいカスタマイズができます。
更新頻度も短く、頻繁にバージョンアップもされています。

 

今回で全て解説するのは困難でしたので、HUD Navigation Systemと同様複数回に分けて解説記事を投稿する予定です。

 

 

 

 

参考文献

https://demo.digitalruby.com/WeatherMaker/Readme.txt

チュートリアルビデオ
--------------------------------------------------
最新のWeather Makerビデオ...

-Open Weather Map APIhttps://youtu.be/7_r7oibCM68
-uMMORPG / Mirrorチュートリアルhttps://youtu.be/BIFQqmG2Gws
-体積雲:
	-美しい空のセットアップ:https://youtu.be/1Xk2z858T1U
	-完全な概要(40分以上):https://youtu.be/ZoULn0mYbt8
	-レイマーチの最適化:https://youtu.be/Dwk4vF_6ogs
	-クラウドノイズエディター:https://youtu.be/NxuJ5H2mZwY
	-オーロラ/オーロラ:https://youtu.be/J9QSebVLEO8
-時間的再投影:https://youtu.be/JCzE7JfFPU8
-パフォーマンスプロファイル:https://youtu.be/-Yoj_OjJL4g
-完全なセットアップガイド:https://youtu.be/DHNnS6f85rM
-クイックスタートガイド:https://youtu.be/5IACGZULiDw
-新しいプレハブの概要:https://youtu.be/hWJF5v0s4gc
-天気ゾーン:https://youtu.be/11QoMD_qhHw
-ヌルゾーン:https://youtu.be/ZPBum2YcgB8

 

 

 

類似アセット

アセットストアには天気にまつわるアセットがたくさんあります。

 

aria1.amebaownd.com

bibinbaleo.hatenablog.com

www.asset-sale.net

www.asset-sale.net

Enviroは頻繁にセールも行われているアセットですし、UniStormはかなり昔からある人気アセットです。
是非お気に入りの天気アセットを見つけてみてください。

 

 

 

 

 

余談

ウェザーには「天気」「天候」「気象」などいろいろ意味がありますがこれらは何が違うのでしょうか?
実は以下のように分けられます。

気象
大気の状態・変化を物理現象として捉えた言葉

天気
数時間から数日間の気象状態

天候
1週間から1ヶ月程度の気象状態

気候
1ヶ月以上の長期的な気象状態

 

天気、天候、気象は表す期間によって名前が異なります
天気や天候など短期間の状態をひっくるめて気象というそうです。

「天気」「天候」「気候」「気象」 - 違いがわかる事典

 

 他間違っている箇所がありましたらコメントにお願いします。

*1:名前が長いので記事内では「Weather Maker」と表記します

【Oculus Quest開発メモ】Questでもポストプロセスを使いたい! Fast Mobile Post Processing編【Unityアセット紹介】

 

今回はOculus Questの開発ネタをやっていきます。
内容的にはOculus Rift Sなどにもそのまま応用できるかと思います。

 

 

OculusQuestでもポストプロセスを使いたい!
そんな時に役に立つアセットFast Mobile Post Processing(有料)について紹介します。

f:id:Raspberly:20190816233232p:plain

 

この記事はUnityゆるふわサマーアドベントカレンダー2019 16日目の記事です。

qiita.com

#ゆるふわアドカレ

 

 

 

UnityではPost ProcessingStackを使う事でポストプロセスを簡単につけることができます
しかしこれは非常に重くモバイルには不向きです。(そもそもVRではPostProcessingはあまり推薦されていない)
そこで今回はアセットの力を借りてポストプロセスをかけてみます。

 

 

 

 

 

 

 

開発環境

Windows 10

Unity 2018.4.5f

Oculus Integration ver1.39

Oculus Quest

 

 

 

 

アセットストア

アセットストアでは様々なポストプロセスパッケージがあります。
ジャンル的にはShaders Fullscreen & Camera Effectsです。

VR対応を明記していなくともMobile向けであれば動くようです。(要確認)

Fast Mobile Post Processing: Color Correction(LUT), Blur, Bloom

モバイル向けに特化したPostProcessingで、LUT(色補正)、BLUR、BLOOMの3つが入ったセットです。
特にBLURに関してはアセットストア最速を謳っています。

f:id:Raspberly:20190723111326p:plain

【最終更新日】 2019年6月11日
【サポートバージョン】Unity2017.1.0~

こちらのアセットは期間限定で無料ダウンロードすることができました。
もし入手できている方はラッキーです。

www.asset-sale.net

 
正式名称が長いので以下「Fast Mobile Post Processing」と表記。

 

同パブリッシャーさんのアセット

アセットの作者であるRufat Ismaylovさんですが、他にも複数のアセットをリリースされています。
どれもモバイル向けのものです。

 

 

 

 

 

Sleek Render(配信終了)

Standalone VR Meetup #2にて、ごんびぃー@GONBEEE_projectさんの発表にありました、
モバイル向けのポストプロセス、Sleek Renderも選択肢に入ってきます。

 

これはモバイルでも動く高速なPostProcessingStackです。
2017年11月にリリースされ、リリース初期は無料でダウンロードできました。

www.asset-sale.net

 

しかし2019年7月にて配信が終了しました。
これに関してはUnityForumでアセット作者の方が説明しています。

配信終了理由

要約するとアセットストアの収入だけでは生活が厳しく、これ以上更新し続けることができなくなったため。

たとえ更新できなくとも販売し続けることはできますが、カスタマーサポートの観点では大きな欠点になるため。

SleekRenderの入手方法

購入済みの方は、いつでもAssetStoreメニューからダウンロードすることができます。(AssetStoreの機能)

購入していないが興味のある方向けに、MITライセンスでGitHubに置くことを検討しているそうです。
ただし最近購入した方の金銭的努力を損なうので、2020年1月まではないとのこと。

既に購入済みの方はメールからサポートを受けることができます。
こちらもごんびぃー@GONBEEE_projectさんが解説記事を出しています。
詳しい使い方は下のリンクからどうぞ。

qiita.com

 

 

モバイル向けで複数のポストプロセスが入ったものですとこのあたりでしょうか。
SleekRenderは現在入手不可ですので、今回はFast Modile Post Processingを使っていきます。

 

 

 

 

 

シーンの用意

今回も毎度おなじみ、AvatarGrabシーンを使っていきます。
Assets/SampleFramework/Usage/AvatarGrabにあります。

f:id:Raspberly:20190816190502p:plain

 

光るオブジェクトの用意

Bloomなどが効いているか確認するため、光を放つオブジェクトを作っておきます。
これはまあなんでもいいです。

f:id:Raspberly:20190816183936p:plain

raspberly.hateblo.jp

 

 

 

Fast Mobile Post Processing

基本的に付属のスクリプトをカメラに張り付けるだけで動作します。

f:id:Raspberly:20190815231338p:plain

 

インスペクターパラメーター

Shader

PostProcessingシェーダーを設定するだけ

Blur

ぼかしを有効にするかどうか

Iterations

ReadMeによると「不鮮明な繰り返しの数。より多くの反復、より多くの操作を必要とするシーンをよりぼやけさせる」とのこと
???
値が大きいほど負荷がかかるので注意、値は2のままにしたほうがいいらしい。

BlurAmout

ぼかしのレベル

f:id:Raspberly:20190816092417g:plain

BloomAmout

Bloomの量

f:id:Raspberly:20190816092441g:plain

BloomThreshold

ブルームをかけるしきい値

f:id:Raspberly:20190816092506g:plain

FilterWidht & FilterHeight

適用されるぼかし画像の幅

LUT

色補正を有効にするかどうか

LutAmout

Lutの量

f:id:Raspberly:20190816092603g:plain

SourceLut

色補正のプリセットは複数あります。

f:id:Raspberly:20190816093010g:plain

 

使い方

Cameraにスクリプトを追加する

MobilePostProcessingまたはMobilePostProcessingSingletonをCameraにアタッチします。
ちなみにCameraとはCenterEyeAnchorのことです。

f:id:Raspberly:20190815231338p:plain

 

Shaderを設定

ShaderにはSupGames/Mobile/PostProcessを設定します

f:id:Raspberly:20190815232254p:plain

LUTテクスチャの設定

Source LutにLUTテクスチャを設定します。

f:id:Raspberly:20190815233355p:plain

LUTテクスチャは以下の通りです。

f:id:Raspberly:20190815233455p:plain

Maskテクスチャの設定

ReadMeによるとBlurMask.pngまたはhumanEye.pngを設定するとのことですが、
BlurMaskが見当たらないのでhumanEyeを使います。

f:id:Raspberly:20190815234551p:plain

 

LUTとBlurチェックボックスでオンオフ切り替えることもできます。
もちろん両方同時に適用可能。

 

実機で動かしてみる

Androidビルドをして実機で動かしてみましょう。
設定は上記の通りです。

f:id:Raspberly:20190816184010g:plain

無事動きました。が何か違う気がする。
デフォルトのパラメータ設定ですとBlurが強すぎるのかもしれません。

 

このあたりを少し調整してみます。
LUTとBlorをオフにしてBloomのみ使ってみます。

ここで注意点

BlurとLUT両方のチェックボックスをオフにするとPostProcessingが動作しません。
片方は必ずチェックしておく必要があります

Blurの場合ですとBlurAmoutを0に、FilterWidthとFilterHeightを1にするとBlurが実質機能しなくなるのでこれで乗り切ります。

f:id:Raspberly:20190816184404p:plain

 

大分見やすくなりブルームが効いているのがわかります。
右手を握ることでオンオフ切り替えるようにしてみました

f:id:Raspberly:20190816131547g:plain

ただ、なんかこう・・・光がにじみ出る感じが少ないですね。

どちらかというとDirectionalLightをもう一つ追加しているかのような見た目。
モバイル向けなのでこのあたりは割り切りかもしれません。

 

 

 

 

PostProcessingStack v2

そもそもUnity標準のPostProcessingStackはどのくらい重いのでしょうか。

去年あたりからアンチエイリアシング、ブルーム、色収差など一部のエフェクトにはFastModeが用意されています。
これはクオリティを落とすことでパフォーマンスをブーストするモバイル向けの機能です。

これを使って実際にQuestで動かしてみましょう。

使用するエフェクトはアンチエイリアシングとブルームです。

f:id:Raspberly:20190816120414p:plain

f:id:Raspberly:20190816184230p:plain

 

 

あれ?意外と良い。
少しカクついているような気がしなくもないですが、全く動かないというわけではなさそう。
光がにじみ出ている感じがとてもいい。

f:id:Raspberly:20190816131724g:plain

 

 

 

 

プロファイラー

パフォーマンスはどうでしょうか、プロファイラーを見てみましょう。
大体の目安としてどうぞ。

Fast Mobile Post Processing

f:id:Raspberly:20190816131505g:plain

PostProcessingStack v2

f:id:Raspberly:20190816131419g:plain

 

ちなみにFast Mobile Post Processingのオンオフ時の違いはこんな感じ

f:id:Raspberly:20190816125306p:plain

 

FastModeとはいえPostProcessingStackの処理は重い様子。
その分とてもきれいですのでここはケースバイケース。

 

 

 

 

 

まとめ

Fast Mobile Post Processingならとても軽量なポストプロセスをかけることができる
PostProcessingStackなら高品質だが処理はそこそこ重い、ただし全く動かないというわけでもない

 

ごんびぃーさんの記事を見る限り、SleekRenderの方がとてもきれいで使いやすそうではあります。
持っている方はSleekRenderの方を試してみるといいかもしれません。

qiita.com

 

 

 

 

参考文献

baba-s.hatenablog.com

 

PostFX v2 – アップグレードされたポストプロセッシングスタックで美しいビジュアルを実現しよう – Unity Blog

Create high-quality visuals in Unity with the Post-Processing Stack - Unity

Unity's post-processing image effects stack - Unity

Best Practices for Rift and Android

 

 

 

 

他間違っている箇所がありましたらコメントにお願いします。

【Oculus Touch開発メモ】手の見た目をカスタマイズする 付属シェーダー編【Unity】

 

今回はOculus Touchの開発ネタをやっていきます。
使う機材はOculus Questですが、Oculus Rift Sでもそのまま使うことができると思います。

 

OVR GrabberDistanceGrabberでも登場した手について。
デフォルトですとマスターハンドよろしく普通の白い手になりますが、
見た目をいろいろカスタマイズしていきます。

f:id:Raspberly:20190809230058p:plain



 

 

 

開発環境

Windows 10

Unity 2018.4.5f

Oculus Integration ver1.39

Oculus Quest

ALVR

 

 

 

 

セットアップ

始めてVR開発をする方はこちらを参考にしてみてください

raspberly.hateblo.jp

 

また流れ的には前回の続きとなります。前回はこちら!

raspberly.hateblo.jp

 

 

 

 

 

 

 

 

サンプルシーンの確認

Assets/SampleFramework/Usageに様々なサンプルシーンがあります。
学習や挙動の確認にとても有益です。見てみましょう。

手を表示するシーンはたくさんありますが、前回と同じAvatarGrabシーンを使っていきます。
手が単体で置いてあるCustomHandsシーンでも問題ありません。

f:id:Raspberly:20190809102327p:plain



前回のメモでも登場した手のモデルですが、
モデル内にSkinnedMeshRendererがアタッチされているオブジェクトがあります。

左手の場合。l_hand_skeletal_lowers/hands:hands_geom/hands:Lhandがこれに該当します。

f:id:Raspberly:20190809211044p:plain



注目すべきはMaterialsです。ここのMaterialを変えるだけで手の見た目を変えることができます。

f:id:Raspberly:20190809105526p:plain

 

 

 

 

 

 

手用に用意されたシェーダー

OculusIntegrationには手用のシェーダーが既に用意されています。
2つあるのでそちらを見ていきましょう。

Oculus/Hands_DiffuseBump

f:id:Raspberly:20190809134022p:plain

Shininess

光沢感、この値が大きいほど手が輝いているように見えます

f:id:Raspberly:20190809223105g:plain

ShineColor

光沢の色

f:id:Raspberly:20190809223152g:plain



 

 

 

 

 

Oculus/Hands_Transparent

透過対応シェーダーです。Rimの値を変えることで手のアウトラインを強調することができます。

f:id:Raspberly:20190809112125p:plain

InnerColor

手のベース色

f:id:Raspberly:20190809223238g:plain

RimColor

手の縁であるアウトラインの色

f:id:Raspberly:20190809223311g:plain

RimPower

アウトラインの強さ。値が小さいほどはっきり表れる。

f:id:Raspberly:20190809223347g:plain



 

 

 

実際に手の見た目を変えてみる

適当な場所にマテリアルを作成します。
今回はHand_Matとという名前で作成しました

f:id:Raspberly:20190809210013p:plain

 

作成したマテリアルを手のSkinnedMeshRendererのMaterialsに設定します。

f:id:Raspberly:20190809230524p:plain

 

次にシェーダーを変更します。
Oculus/Hands_Transparent

f:id:Raspberly:20190809225007p:plain



最後にマテリアルのパラメータを調整するだけ
私の場合はInnerColorをグレー色に、RimColorを青くしました。
RimPowerを最低値にしてRimが目立つようにします。

f:id:Raspberly:20190809230654p:plain



実行してみるとこんな感じ、なんだがゴースト感が出てますね。

f:id:Raspberly:20190809223728g:plain

 

 

 

 

 

他のシェーダー

実は他にもシェーダーはいろいろあります。
手に応用できるものですと、AvatarSurfaceShader系でしょうか。

f:id:Raspberly:20190809170511p:plain

詳しくはこちら

Gray Avatar Hands instead of Transparent Blue? — Oculus

 

 

 

 

 

 

 

 

リアルな手にする

LeapMotion用のハンドモデルを使ったやり方があります。
詳しくはこちらをどうぞ。

zabaglione.info

 

 

こちらのアセットを使います

ダウンロード時に互換性の警告が出ますが関係ないので同意しましょう。

f:id:Raspberly:20190809232714p:plain

インポートするのはModelsだけです。他の所はチェックを外しておきましょう。

f:id:Raspberly:20190809232814p:plain 

 

元記事の方ですとHandプレハブに置き換えたりしていますが、
手がアニメーションしなかったのでマテリアルだけ使います。

両手のSkinnedMeshrendererのMaterialsをHand_Diffuseに変更します。

f:id:Raspberly:20190809233734p:plain

これでリアルな手になりました。

f:id:Raspberly:20190809233702p:plain

 

f:id:Raspberly:20190809235505g:plain

 

 

 

 

 

アセットストア

きちんとした手を出したい場合は、アセットストアなどで探すことができます。
ほとんどが有料です。

もし購入するのであれば更新日時やレビューで動作するのかどうかを確認しましょう。

 

 

 

 

 

まとめ

・手の見た目を変えたい場合は、手モデルのMaterialを変える

・専用のシェーダーがあるため、それを使うと簡単に半透明な手などが出せる

・モデル自体を変えたい場合はアセットストアなどを活用する

 

他にも自分でシェーダーを書いたりテクスチャを張っていくと細かいカスタマイズもできそうです。
ぜひ自分好みにカスタマイズしていってください

 

 

ALVRを使うと人差し指がアニメーションしない問題もそろそろ解決したいところ。

 

 

参考文献

bibinbaleo.hatenablog.com

 

qiita.com

 

 

 

 

他間違っている箇所がありましたらコメントにお願いします。

【Oculus Quest開発メモ】ALVR実行時にAvatarGrabの手が出ない問題 Hand編【Unity】

 

今回はOculus Questの開発ネタをやっていきます。

Oculus QuestをALVRで起動した時にAvatarGrabシーンで手が出ない問題を解決します。

f:id:Raspberly:20190808234352g:plain

 

 

 

 

開発環境

Windows 10

Unity 2018.4.5f

Oculus Integration ver1.39

Oculus Quest

ALVR

 

 

ALVRとは

こちらで少し触れています。

raspberly.hateblo.jp

 

簡単に言うと、PC向けVRの映像をOculusQuestなどスタンドアロンHMDに転送するソフトウェアです。
これにより、毎回ビルドしなければならないQuestの動作テストをEditor上ですぐに動作させることができます。

 

 

 

 

Oculus Questのバージョンアップデート

7月下旬にOculusQuestがアップデートされました。
この時、同時に少し不具合が起きています。

まずはこちらの手段をお試しください

 

・コントローラーが片方したトラッキングされない! 

AvatarGrabシーンでクラッシュする!

といった問題は以下のQiitaを参考にしてみてください・

qiita.com

kimono-oyaji.com

otasyumi.site

 

 

 

 

 

前提条件

OculusIntegrationを使用しており、ALVRで動作確認をしようとしたところ手が表示されない状態であること

Androidビルドなら表示されていること。

 

 

 

 

 

主要コンポーネント

Hand

ハンドというのはかなり大雑把な名前ですが、手のアニメーションや描画、当たり判定の切り替えを担当するコンポーネントです。 

 

 

 

 

 

サンプルシーンの確認

Assets/SampleFramework/Usageに様々なサンプルシーンがあります。
学習や挙動の確認にとても有益です。見てみましょう。

 

実は正常に表示されるシーンがあります、それはCustomHandsシーンDistanceGrabシーンです。

f:id:Raspberly:20190809101910p:plain
この2つのシーンではGrabberにOVR GrabberDistanceGrabberコンポーネントがアタッチされていますが、
Handコンポーネントもアタッチされていることを確認しましょう。

f:id:Raspberly:20190808175854p:plain

 

このHandコンポーネントはAvatarGrabシーンではアタッチされていません。

f:id:Raspberly:20190808175957p:plain

当然、プレハブ化されているAvatarGrabberやLocalAvatarWithGrabも同様です。

 

 

 

Hand

f:id:Raspberly:20190808180055p:plain

インスペクターパラメーター

Controller

手のタイプ、右手なら「R Touch」、左手なら「L Touch」にするとよい

Animator

子オブジェクトにある手のモデルのAnimator

Default Grab Pose

 

 

 

 

 

Handの修正

手が非表示になる時、Hand.csを編集するだけで解決することがあります。

Hand.csのOnInputFocusLostメソッドを以下のようにします。
renderers[i].enabled部分をコメントアウトします。

 

 

 

 

Handの手動追加

上記でHand.csを修正しても手が表示されない時はHandを手動で追加します。

コンポーネントのアタッチ

まず、両手のAvatarGrabberにHandコンポーネントをアタッチします。

f:id:Raspberly:20190808204949p:plain

 

そしたら、HandのControllerを修正します。右手ならR Touch、左手ならL Touchにします。
この値はOVR GrabberのControllerと同じ値にするといいでしょう。

f:id:Raspberly:20190808210034p:plain

 

手のモデル

Assets/Oculus/SampleFramework/CostomHands/Modelsの中にある、
「l_hand_skeletal_lowres」と「r_hand_skeletal_lowres」を
Handコンポーネントががアタッチされているオブジェクトの子オブジェクトにします。

f:id:Raspberly:20190808210631p:plain

f:id:Raspberly:20190808211046p:plain

 

AnimatorControllerがnullなので、右手左手に応じたAnimatorをアタッチします。

f:id:Raspberly:20190808233153p:plain

f:id:Raspberly:20190808233114p:plain

 

パラメータの設定

先ほど子オブジェクトにした手のモデルを、HandをコンポーネントのAnimatorに設定します。

f:id:Raspberly:20190808232906p:plain

 

最後に、Default Grab PoseにAssets/Oculus/SampleFramework/CostomHands/Modelsの中にある、
HandPoseDefaultPfプレハブを設定します。

f:id:Raspberly:20190808233439p:plain

f:id:Raspberly:20190808233719p:plain

f:id:Raspberly:20190808233750p:plain

これでHandの設定は終了です。

 

うまくいけば、無事手が表示されていると思います。

f:id:Raspberly:20190808235841g:plain

うまくいかなかった場合は↓
 

 

 

 

 

 

シーン再生時にTime.timeScaleが0になる

スタンド攻撃を受けている

 

調べても同じ報告が出てこないので私の環境だけかもしれませんが、
シーン開始時にtimeScaleが自動的に0になる場合があります

そもそもシーン開始時に手が動いていない場合はこの可能性を疑いましょう。

f:id:Raspberly:20190809002151p:plain


この状態になると視点移動はできますが手が動かず、物理演算も止まります

Update()の中でDebug.Log(Time.timeScale);を呼び出すと、毎フレーム0が呼ばれます。

シーン開始時にtimeScaleが0になるようなら以下のスクリプトを適当なオブジェクトにアタッチしましょう。

 

 

 

 

 

 

【8月9日追記】時間が止まる問題への対策

この問題について解決策を教えていただきました。
どうやらシーン内で悪さをしているコンポーネントがいるようです。

 

シーン内にある、DynamicにPauseOnInputLossコンポーネントがアタッチされています。

f:id:Raspberly:20190809091245p:plain

このコンポーネントは、OVRManagerのInputFocusLostにイベントハンドラを登録しています。

InputFocusLostは入力が失われた時に呼ばれるイベント変数で、初回Update時に実行されているようです。

コンソールで"[OVRManager] InputFocusLost event"が出ている場合、この可能性が大!

 

解決方法としては、シンプルにPauseOnInputLossを無効化するといいでしょう。

f:id:Raspberly:20190809100124p:plain

 

この現象はOculusQuestがアップデートされる前から稀にあったのでとても助かりました。

@shienaさんありがとうございます。

 

 

 

 

 

まとめ

・手が表示されない場合、Hand.csを編集してみる

・それでもだめなら、Handを直接追加してみる

・それでもだめなら時間が止まっていないか確かめる

 

 

 

  他間違っている箇所、わかりにくい点がありましたらコメントにお願いします。

 

【勉強会レポ】 : Unity UIエンジニアリング勉強会

勉強会のレポート(メモ)です。
参加したのはこちら、「Unity UIエンジニアリング勉強会」
会場はNIFcLoungeさんです。

unity-ui-avengers-outgame.peatix.com

ハッシュタグ#unity_avengers

f:id:Raspberly:20190803235333p:plain

 

 

 

 

 

#1 『もしあなたがアウトゲームをつくるときになったらやること』 @masakoha523

IRIAMというアプリを作っていました。今回はそれらの実体験も含めます。

そもそもアウトゲームって何?

大部分がUIで定義されていて、それを用いて何らかのアクションを起こすパート

これを作るとしたら何を考えるか そんな話をします
今回はuGUIの話ではなくコードをごりごり書く話をします

プロジェクト発足時にやっておきたいこと

・用語の統一
ポップアップ、モーダル、ダイアログなどはきちんと定義しておく
これがないとPrefabやクラス名に大きな影響がでてしまう

・コード規約の統一
・動作基準端末と動作対象端末の選定
・CanvasOrderの設定
UIは複数の画面が重なっていくことが多い、なので各UIのレイヤーを決めておきましょう。
もしレイヤーをさわる時、uGUIを使うアセットがある場合は注意しましょう

・デザインの話

フォント、ボタンの大きさ、マージン幅、色など

これらの認識を合わせておこう

 

UIの実装 複数人開発の効率化

MVP

IRIAMではMVPアーキテクチャを採用しました
どういうコードを書くのかという指針になります

MVPについてはこちらをみてね

developers.cyberagent.co.jp

共通パーツを作る

拡縮するボタン、ポップアップ機能

画面遷移基盤を作る

どこの画面も同じように実装できる
最初にやらないと、後にいろいろ独自実装が入ってきて切り離せなくなってしまう

たくさんの機能やオープンソースフレームワークを作った話

IRIAMで作った機能は3つあります

Clione

GitHub - MasaKoha/Clione: スマホゲームのアウトゲームので使用される、様々なパターンの画面遷移基盤

画面遷移のライブラリ

Icarus

ローカライズシステム

GitHub - MasaKoha/Icarus: ローカライズシステム

MVPScriptGenerator4Unity

GitHub - MasaKoha/MVPScriptGenerator4Unity: MVP Script Generator for Unity Editor

MVP派の方はぜひ使ってください

 

まとめ

アウトゲームは分量との闘い
複数人でつくるなら下地作りが大事です

 


 

 

 

 

 

 

 

#2 UnityのUIでやってはいけないこと

unityはuiを簡単に使うことができますが自動で最適化はしてくれません
なのでやってはいけないことを知っておく必要があります

1.アンカーを使わずにUIを設置してはいけない

アスペクト比が異なる端末で崩れる可能性があります
意図的に中央に置きたいもの以外はアンカーを設定しましょう

驚くべきことに、アスペクト比が動的に変わる端末が出る可能性があります
今後端末ごとにアスペクト比が固定であるという概念はなくなる可能性もあります

ノッチがあるときどうするか

セーフゾーンを作って対応する
ただし、ノッチが右上にあったり、ノッチがなかったりするので
そういう時は頑張ってください

ビルドするとUIのサイズが変わってしまう

Canvas Scalerとかで想定サイズを設定しておきましょう
アスペクト比があっていればいいです
アンカーをちゃんと設定すればある程度の変化にも対応できます

2.特に注意せずマスクを設定してはいけない

マスクを使うとドローコールが増えるので
マスク済みの画像を用意することで抑えることができます

じゃあマスクは悪なのかというとそんなことはない
間隔や範囲を調整するといった工夫もできる

3.何も考えずにUIを動かしてはいけない

UIはたくさんあっても意外と安い、動かさなければほとんど負荷にはならない
ただしどれか一つでも動かすと負荷になる

これはCanvas内にあるUIの再構築に時間がかかるため(多ければ多いほど負荷が大きくなる) 

おすすめの解決方法はTween系を使うこと

LayoutGroupの存在は忘れましょう
これの使用は避けてください

4.透明を何度も描画してはいけない

ポリゴンで抜くなどして描画範囲を減らすことができます ただしポリゴン数は増える

5.Textの影やアウトラインは使用してはいけない

見栄えがいいがポリゴンが増える(何も動いていない場合はそうでもないが)

TextMeshProを使いましょう
最近ダイナミックフォントも使えるようになりました

6.Atlasになんでもつっこんではいけない

同じタイミングで使うものだけAtlasにしましょう 

7.SpriteDefaultを使ったSpriteRendererをAssetBundleにいれてはならない

自分でマテリアルを作って差し替えましょう

 

 

 

今回の話は信用せずにプロファイラーを信用しましょう

Unityのアップデートなどにより変わる可能性があるためです

 


 

 

 

 

 

 

 

 

LT1 『ちょっとしたUIの変更を楽にする手法』@tty_yamada

話すこと

フォントを一括で変更する
UIの配置を再ビルドせず再配置する

フォントの一括変更

インスペクターからフォントをいちいち変えていられない
uGUI Textの場合エディタ外で名前を変えるだけで差し替えられます
TMPの場合、エディタ拡張でやりました

GitHub - ttyyamada/TMPFontReplacer: UnityのTextMeshProのフォントを一括で変換できるツールです

UIの位置をリビルドせずに変更したい

RemoteSettingsを使いました
ビルドせずパラメータの変更ができるサービスです
バグがあった場合の緊急対応や強制アップデートの仕組みを作ることができます

まとめ

フォントの置き換えは一括でできるとよい
RemoteSettingでリリース後のビルド対応を減らすことができる

 


 

 

 

 

 


LT2 『Presetでちょっぴり楽するUI組み立て』@lycoris102


今日はPresetのお話をします

Presetはコンポーネントの設定を保存することができる機能です
アセットの状態も保存でき、ProjectSettingも保存することができます
保存したPresetをデフォルト値として使うことができます

これを適応できるパターン

1.予期しない当たり判定の無効化

RaycastTargetをオフにしたPresetを使うことができます
これで毎回RaycastTargetをオフにする作業から解放されます

2.デザインガイドラインを作る

アプリ全体で統一感ができます
Presetを用意しておくといいでしょう

Prefabと違ってPresetは変更の追従ができないことに気を付けましょう

3.画像アセットのデフォルト値を設定できる

共通の設定をインポート時に適応することができます

 

 

Presetをぜひ活用してみてください

 


 

 

 

 

 

 

 

LT3 『ScrollViewアセットマスター』@azumagoro

スクロールビューに関するお話

スクロールビューあるある

・データ数に合わせてセルの個数を変えたい
・スナップさせたい
・表示位置をジャンプさせたい
・複数種類のセルを使いたい

これらの解決策としてアセットストアでアセットを買うことが挙げられます
今回はそのアセットの紹介

UGUI Super ScrollView

とても機能が多い。格子状、ジャンプ機能もろもろ。

コガネブログさんでも解説記事があります

baba-s.hatenablog.com

 

EnhancedScroller

ちょっと安い類似アセット

違いはこんな感じ

f:id:Raspberly:20190803234522p:plain


結論

EnhancedScrollerがいいのかも

 


 

 

 

 

 

 

懇親会

f:id:Raspberly:20190804000610j:plain

 


 

 

 

 

 

タイムライン

 


 

 

 

 

 

 

 

おまけ

今回椿さんに登壇いただきましたが、過去にTECH x GAME COLLEGEにて
UIの最適化に関するトークがありました。
こちらも併せてどうぞ。
ただし、今回椿さんが言っていた通り既に解決済みの内容もあることに注意。

raspberly.hateblo.jp

 

 

 

本イベントの主催者であるアズマゴローさんは、
過去にUnityにおけるマネタイズの勉強会をとと様と開催していました。

raspberly.hateblo.jp

 

今回もとと様がスタッフとして活動していました。

 話すタイミングがありませんでしたが「デザインあ展」のシャツを着ていた!!!


 

 

 

 

 

 

 

他の方の感想ブログ

www.masakoha.com

 

orotiyamatano.hatenablog.com

 

 

 

 間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。

【勉強会レポ】: Unity道場 7月~ゲーム制作に使う数学を学習しよう~

 

勉強会のレポート(メモ)です。
参加したのはこちら、「Unity道場 7月~ゲーム制作に使う数学を学習しよう~」
会場はユニティ・テクノロジーズ・ジャパンさんです。

meetup.unity3d.jp

ハッシュタグ : #Unity道場

 

f:id:Raspberly:20190726005534p:plain

 

 

資料と動画はUnityLearningMaterialsにて掲載予定です 
掲載されました、スライドなどが閲覧できます。

learning.unity3d.jp

 

youtubeで配信された動画はこちら、チャットなども見ることができます


Unity道場 2019 7月 ゲーム制作に使う数学を学習しよう

 

part8まであります
けっこうヘビーですが寝ないように頑張りましょう
わからない方は雰囲気だけ持ち帰っていただいて復習してください

 

 

 

要点などのメモになります。

講師である安原さんの説明やスライドがわかりやすいので動画を見ることをおすすめします。

 

 

 

 

part1 数式とグラフ

数式はよくでてきますが、グラフには見方があります
x軸が入力y軸は出力と捉えるといいかと思います

入力が単純だが出力を変化させたいときに数式は役に立ちます

逆関数

関数を見た時にその逆関数はなにかを意識したほうがいいくらい重要

まとめ

・f(x)という表記になれよう
・グラフは入力と出力の関係
逆関数を意識しよう

 


 

 

 


part2 式の読み方

数式を見るとぱっと目をそらす人が多いが、このパートでは3秒まで持つようにはしたい。

 

足し算と引き算はおなじようなもの、これには境界があり塊同士は混ざらない。
単位が異なるものはイコールにもならない、意味が区切られる

漸化式

通常の式とは異なる
必ず初期値があり、プログラミングに親和性が高い

まとめ

・足し算引き算と統合は分離されます
・(物理の場合)必ず単位があります これを意識しましょう
・漸化式があります

 


 

 

 

 


part3 対数

一番身になる大切な話

指数関数

これの逆関数は何か、これがlogであり対数と呼びます

底の交換

対数で大事なのはこの公式ただ一つ
これだけは覚えた方がいい、プログラミングでも絶対使います

まとめ

・対数は定数倍で底が交換できる

 


 

 

 

 

 

part4 浮動小数

eがでてきたら、その後ろの数は10のべき乗である

実はfloatの幅は超絶広い 

やはり限界はある、主に仮数

つまり大きな数字に小さな数字が足されているのはまずい
ゲーム開始後ずっとTimeを足し続けるなど

doubleはもっとすごい

timeとかもdoubleであれば問題ない

まとめ

・floatの限界を知ろう
・2進数と10進数の桁の関係を理解しよう

qiita.com

 


 

 

 

 

 

part5 RPGで数列

レベルアップの経験値テーブルの話
等比数列を作りましょう

まとめ

・経験値は指数関数で実装できる
等比数列を使えるようになりましょう
・対数があれば経験値からレベルを逆算できます

qiita.com

 


 

 

 

 

 

part6 easing解析

Lerpによる線形保管が使われていますが
漸化式から一般項を求めてみましょう
これを求めるとグラフをかけるようになります

これによりフレームレートによらず同じ動きをさせることができます

まとめ

・Lerpの動きは等比数列で溶ける
・解き方は調べればでてくるので、解けることをわかっておきましょう
・フレームレートの異なる環境でも対応可能

qiita.com

 


 

 

 

 

 

part7 複素数

虚数

これはわからなくていい、虚数がなぜ便利なのかというと複素数があるから


これを理解するのに有効なのが、プログラミングで実装してみること
これをやると気づくことがあります、iが登場しないんです、iは作用だと考えましょう。

複素数クォータニオンがありますがこちらはわかりやすい動画があります


【Unity道場 博多スペシャル 2017】クォータニオン完全マスター

マンデルブロ集合

古典的で基本なのでおさえておこう

 


 

 

 

 


part8 複素数

まとめ

複雑なのでブログをみてください

qiita.com

 


 

 

 

 

Unityなんでも相談所

part4にて以下のような疑問を抱いたので椿さんに聞いてみた。

 

結論からいうとあり得るとのこと。

ただしエンドレスランゲームの場合、プレイヤーの座標は変化せず周りのステージを動かすのが主流らしい。
ステージを動かすのはプレイヤーを動かすよりも処理負荷が高そうだが、そこまで気にならないとのこと。

 

だいぶ昔ですが、日経ソフトウェアの付録でUnityのサンプルプロジェクトがありました。

こちらにランゲームが収録されており、
まさにプレイヤーを直接動かすタイプのゲームでしたが、こういうアプローチはよくないらしい。

 


 

 

 

 

実際に挑んでみた

スライドでもあった方法でゲームオブジェクトを遠くまで移動させてみます。

使うモデルはユニティちゃんです。なるべく耐えてくださいね。

f:id:Raspberly:20190726004231g:plain

おおよそ700kmを超えたあたりから人の形を保てなくなります。

 

また1600kmを超えたあたりで以下のようなエラーがでました。
なんでもカメラが遠くまで行きすぎるとこういうエラーがでるっぽい。

f:id:Raspberly:20190726004439p:plain

 

 


 

 

 

 

 

懇親会

f:id:Raspberly:20190726005752p:plain

 

 

講師の安原さんもドレスアップ。記念写真も撮れました。

f:id:Raspberly:20190726010027p:plainf:id:Raspberly:20190726010043p:plain

 


 

 

 

 

タイムライン

 

 

 

講師の安原さんは2月のUnity道場でもシェーダーの講演をしてくださいました。

raspberly.hateblo.jp

 

 

 

 

 間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。