Toucanバーチャル博物館
VRML図鑑 3DCG 展示室   開発日誌 お問い合わせ

トコちゃんの開発修行+介護日誌 2017年7月

お仕事中デスクトップ

お仕事中デスクトップ

7月24日 マルチカメラ

マルチカメラ

止めにすると言いながら、マルチカメラに対応しました。OnPreCull()では何故かうまくいかず、普通にUpdateでDrawMeshのカメラを指定しました。

雲を表示してみましたが、雲の影の付け方が分からない。

追記

雲の影雲の影と大気に色をつけて、ちょっといい感じ。でも雲の影なので薄くしたいのですが、どうもできないみたい。

釣り介 Total requests 23,807>22,026 ↓7 % 

7月23日 影が出ない

ジタバタした一日。

自前でカリング処理しているので、カメラが2台あると困ってしまう。調べると、カメラのイベントでOnPreCull()があった。「OnPreCull はカメラがシーンをカリングする前に呼び出されます」

これはよかったと早速使ってみたら、一見成功したかに見えました。でも良く見てみると、2台目のカメラには1台目のカメラのオブジェクトが重ね書きされていました。1台目のレンダリングが終わった後、DrawMeshはクリアされず重ねられていました。

さらに調べたらLayerや描画するcameraを指定できるので出来ないことは無さそうなのですが、どうしようかな?だんだん大げさになっても、何台もカメラを使う事は無いでしょうから止めにします。

などと色々作りこんだので、久しぶりに以前作ったモデリングツールをBuildし直してみたら、半透明の影が出なくなっていました。よく見ると他の影も表示されていない。原因が分からず悶々としていたのですが、やっと解決。

原因はUnityのQualitySettingsがFastestになっていました。早い方が良いじゃん、と適当にクリックしてしまったようです。

7月21日 母の診察

骨粗しょう症の注射の効果がやっと現れて、骨密度が少し上がる。食事量が1-2割にへってしまったので、メイバランス(栄養食)やおやつでなんとかカロリーを取るようにするしかなさそうです。

惑星を歩かせる

平面マップのループ表示に対応して、作り始めて一ヶ月、ほぼ課題は解決しました。さて、これから作りこみです。

Create a Photorealistic World in UE4

こんなの見ちゃったので、かえって気楽に作ることにしました。真剣に取り組んでも敵わない。

7月20日 惑星上を歩かせる

Mesh Colliderを使って惑星上を歩かせることは簡単でした。しかし、自由に歩かせて今どこにいるか、マップデータ上の位置を調べるのが意外に大変でした。GPSで地図上の位置を調べるようなイメージです。

UnityのRaycastHit.triangleIndex、RaycastHit.barycentricCoordinateを使用すれば正確に位置を調べられるのですが、マップ上にたくさん移動するものを配置することを考えると、なるべく処理を軽くしたいところです。

そこで現在の地図上の三角形エリアの位置を利用して、そのエリアからはみ出したら隣のエリアに移動したと処理するようにしてみました。結構大事な処理。

7月18日 サーバ障害?

昨夜、就寝前に釣り介を確認すると、自然の写真(広告)が表示されないのを発見。それにともなって、釣具店や看板表示からマップに戻れない障害が発生。

原因不明で写真用のテーブルが読み込めなくなっていました。こういった、今まで何も問題なかったのに突然起こる障害が性質が悪い。原因がまったく分からない。

とりあえず、釣具店から外に出られるようにプログラムにパッチをあてサーバーを更新して、いったん寝ることに。深夜1時半。エアコン故障とサーバ障害、ささいなトラブルが続いてお腹がゆるくなって、ちょっと下痢気味。ストレスに弱い・・・。

今朝、原因を調べるもやっぱり不明。ツール上ではなにも問題なく読み込めてしまう。テーブル内容の一部が問題かと少しずつ削除しながら試したが解決せず、全部削除して、新規で登録しても読み込めない。

しかたなく、別名でテーブルを新規作成したら復旧しました。テーブルの読み込みにロックが掛かってしまったような症状でした。Azure側(サーバ管理)の何らかのセキュリティ保護かもしれません。

最近、サーバへのアクセスが増えているわりにユーザーログイン数が変わらないのは、もしかしたら不正なアクセスが増えているのが原因かな? 

惑星上を歩かせる

惑星上を歩かせる 

参考 https://www.youtube.com/watch?v=TicipSVT-T8

Vector3 gravityUp = Vector3.Normalize(transform.position);
rigidbody.AddForce(gravityUp * mconGravity);
Quaternion targetRotation = Quaternion.FromToRotation(transform.up, gravityUp) * rigidbody.rotation;
rigidbody.rotation = Quaternion.Slerp(rigidbody.rotation, targetRotation, 50 * Time.deltaTime);

実験成功。通常の重力は使わずにAddForceで中心に向け引っ張ることで重力を表現します。

7月17日 エアコン故障?

いつも、4時に母がデイサービスから帰ってくるので、3時ごろ居間のエアコンを点けておく。少し仕事して居間に行ってみると異様に暑い。締めきっていたので33度、エアコンをみると動いているが熱風が吹き付ける。

室外機を調べると動いていない。

しばし途方に暮れるも、電源を落とし、室外機のコンセントを抜き差ししてみて、エアコンを点けてみる。動いた。涼しい風も出ているようだ。

一安心して、5分ぐらい。エアコンを見に行くと、なんだか変だ。あまり涼しくない。エアコンの吹き出し口を覗くと、風向きを変える羽が片側だけ外れていた。とりあえず、位置を直して再度試運転。今度こそ治ったみたい。

室温29度、一安心。

釣り介 Total requests 23,139>23,807 ↑3%

Unityのエディタ拡張

今作っている惑星は実行しないと表示しない。UnityのTerrain(地形)のようにエディット時に作成や編集できるようにするにはどうするのが調べたら、どうもエディタ拡張で作るみたいです。

それで、エディタ拡張に移行するか考え中・・・・

アセットで公開するとか考えるとエディタ拡張なのですが、ニッチすぎて需要が無い。

スクリプトからMesh、GameObjectを作成してPrefabへ書き出すことが出来るようなので試して、これを代用しようかと。

7月15日 惑星上を歩かせる

Mesh Colliderを作って簡単にできそうです。とりあえず実験。

物理演算は、惑星上を歩かせるぐらいだったらあまり必要性が無く、釣り具のように竿、ライン、空中、水中など複雑な場合は十分な性能と言えず、どう使おうかな?

7月14日 三角へ

基本形状をひし形から三角へ大改造、やっと終わりました。地面、海、岩、空を表示して、処理もまずまずの範囲で収まっています。

地形のシミュレーション部分は大変重い処理なのでは別のスレッドで動いています。スレッドの代わりにUnityのコルーチンで試してみたのですが、描画と同じスレッドで動いているようで、描画が待たされます。何度も中断しながら分割処理をすればスレッド風の処理が可能ですね。

三角へ

時々処理が重くなるのは、シミュレーション部分の処理が終わってメッシュの作り直しなどの処理が入るためで、これはもう少し改良しようと思います。

見た目の改良の前に、惑星上を歩かせてみます。物理演算の処理です。

釣り介 Total requests 19,021>23,139 ↑22%

7月12日 平面マップ

平面マップ基本形状をひし形から三角へ変更したので、平面マップが逆にややこしくなっています。なんとか対応。

バックアップ用の500GBのハードディスクが一杯になってしまったので、バッファローの2TB(1万円)を購入。いつものようにAmazonで注文したのですが、適当にクリックしていたら、うっかりAmazonプライムに入会してしまいました。

解約しようと調べてみたら、プライムビデオが無料でおもしろそうだったのでお得な年会費に変更して利用することにしました。オーナー ライブラリーは月1冊無料だそうです。あまりおもしろそうな本が無かったのですが、ハリーポッターでも読もうかな?まんまとAmazonにはめられた。

こんなことなら、ハードディスクもプライムデーに買えばよかった。

7月8日 Profilerその2

プロファイラ

RenderingとScriptsの使用時間がほぼ同等までになりました。自身のプログラムの問題かと思っていましたが、meshのverticesやtrianglesの更新をなるべくしないようにしてみたら減りました。

meshは更新のたびになにか処理をしているようです。配列を設定するだけでは無く、描画に必要な複雑な処理を事前にしているんですね。

プロファイラ水面

水面水面を加えてみました。処理は当然ながら倍ほど増えている。

やっぱりつなぎ目が気になるので、修正することにしました。球面上で法線を計算するしかなさそうです。

つなぎ目かすかにつなぎ目があるのが分かりますが、今度こそOK。

7月7日 Profiler

プロファイラ

上段、こんな簡単な描画だけなのに60FPSを超えていたので減量。
減量したのが下段。

金魚プロファイラ心配になって金魚を調べてみたら、余裕でした。何故だろう?

7月5日 つなぎ目が・・・その2

つなぎ目

幾つものバグ(プログラムミス)を修正して、だいぶ目立たなくなった。プログラムを整理しながら最終確認して、これでOKにします。実際にはテクスチャなどでもっと目立たないと思います。 

7月4日 つなぎ目が・・・

つなぎ目つなぎ目の法線計算がうまくいかない。

なんとなく合っているが、微妙にずれる。地図のように、球面の情報を平面で持っていて地図上で法線を計算した後に、球面上に補正しているのですが、辺、頂点での法線計算がうまくいかない。

7月3日 健康診断

自動計測の身長体重計(InBody)で測定。昨年は計測を始めていることに気がつかず猫背のまま測定したので、身長171.6cmでしたが、今年は背筋を伸ばして173.1cm。

その結果、筋肉量+6.1kg、脂肪量-1.9Kg、適正体重65.9kg(体重61.7kg)

昨年は、筋肉量+4.3kg、脂肪量-2.5Kg、適正体重64.8kg(体重63kg)だったので、脂肪は0.6kg減ったが筋肉が1.8kgも減ってしまっている。筋トレを始めたのにショックです。55歳にもなると、筋肉は付きにくく減りやすいようです。

腕立て伏せが25回もできるようになったので、少し筋肉付いたかと思っていたが、お腹の脂肪が減って軽くなって回数が増えただけのようですね。足の筋肉は標準で、腕と体幹の筋肉が少ない。筋肉を付けにくい部位ですね。上半身に筋トレを増やそう。

釣り介 Total requests 17,024>19,021 ↑12%

7月2日 ひし形から三角へ、実験成功

ひし形から三角へ正三角形20枚、辺30本、頂点12個に分けて処理することにしました。辺は両側の正三角形と、頂点は5つの正三角形で共有して、描画処理は正三角形だけで行います。

辺、頂点での法線計算が厄介なんですが、なんとかなると思います。たぶん・・・。

XYZ軸からクオータニオンを作成する方法が無かったので自作した。
Quaternion q;

q.w = Mathf.Sqrt(Mathf.Max(0, 1 + vecX.x + vecY.y + vecZ.z)) / 2;
q.x = Mathf.Sqrt(Mathf.Max(0, 1 + vecX.x - vecY.y - vecZ.z)) / 2;
q.y = Mathf.Sqrt(Mathf.Max(0, 1 - vecX.x + vecY.y - vecZ.z)) / 2;
q.z = Mathf.Sqrt(Mathf.Max(0, 1 - vecX.x - vecY.y + vecZ.z)) / 2;
q.x *= Mathf.Sign(q.x * (vecY.z - vecZ.y));
q.y *= Mathf.Sign(q.y * (vecZ.x - vecX.z));
q.z *= Mathf.Sign(q.z * (vecX.y - vecY.x));

7月1日 三角vs四角

惑星の構成要素を四角から三角へ大改造(ほぼ作り直し)することにしました。

基本の形状は二十面体で正三角形が要素なのですが、これを二つ繋げてひし形(四角)として扱っていました。四角にするとXYに座標を分解できて、コンピュータでも見た目でも扱いやすいのですが、ひし形の内部では右の正三角形、左の正三角形と別処理になっていたり、ひし形に隣接している三角形は、どこのひし形のどっちの三角形のどの辺か・・・などと、複雑になる部分も出てきます。

球をゆがみを少なく包み込むには、四角より三角の方が有利です。それでも二十面体の12頂点で三角形5個になってしまいます。(通常は三角形6個で点を囲む)ひし形で構成していた時は、十個のひし形にするので頂点が2つ余ってしまいます。それを北極、南極に配置して12頂点にしていました。偶然ですがちょっとゆかい。

それで三角形にすると何ができそうかと言うと、正三角形の多面体(デルタ多面体)に拡張できたり、さらに自由な形状も可能かもしれません。問題は多々あるのですが・・・。