ZbrushのZStartupフォルダに追加でブラシとかを入れるな

Zbrush4R7 で作ったZPRファイルを Zbrush4R8 で開こうとすると
Error has been encountered while trying to load the file.
Loading has been aborted.
というメッセージが出て開けなくなった
4R7で作ったプロジェクト全部が開けなかった

f:id:tabascolabo:20170801023043j:plain


結論から言うと Zbrush4R8 の ZStartup に追加していた
カスタムブラシが原因だった

プロジェクトが開けなくなってすぐ情報収集のためフォーラムをのぞくと
バージョンが違うとこういうエラーが出る、という情報を得た
Pixologic に直接連絡して 4R7 のインストーラをもらおうと思ったのだが
サポートから返事があり
4R8 で 4R7 のファイルが開けないということはない とのこと
試しにプロジェクトファイルを送ってほしい、とのことで送ると
問題なく開けたよ!とサポートの人が返事をくれた

Zbrushになんかファイル追加したりいじったりした?
と聞かれたのでしばらく考えると一週間前にネットに転がってた
便利そうなカスタムブラシをダウンロードして
ZStartupフォルダに入れたなと思い出した

担当してくれた Pixologic の人が言うには、
ZBrush のデフォルトのフォルダはいじってはいけない
追加したら確実に問題を引き起こす
もしカスタムブラシ等の外部のファイルを使いたいなら
Lightbox を使って参照しなくちゃだめ、とのこと

ぐぐるとみんなそこにカスタムブラシ突っ込んでスタートアップさせてるようだから
それが普通なんだと思ってたらこれだよ
人は皆嘘をつくんですよ
ネットの情報をすぐ信じたらだめだってはっきりわかんだね

というわけでアンインストールして、アンインストールした後にも残ってる
Pixologicフォルダを手動で消して、インストールし直したら
ちゃんと開けるようになりましたとさ
めでたしめでたし

今回の教訓はネットはうそつき
Pixologicのサポートは迅速で神でした
現場からは以上です

 

 

Particle機能で蝋燭の火を作る

タイトルの通りparticleでロウソクの火を作った
Youtubeチュートリアルあるだろと思って検索したものの
みんな完成形を見せびらかしてる無能ばかりで有益な情報はなかった
吾輩は無能ではないのでちゃんと手順を見せるのである

まずマテリアルBPを作る
何も考えず下の図の通りにやればおk
プレビューのところが平面になってるのに注意
(別に平面に設定する必要は無い)
f:id:tabascolabo:20170703213215j:plain


パーティクルBPを新規作成
エミッターリストにあるRequiredを選択して
マテリアルをたった今作ったマテリアルに変更する

f:id:tabascolabo:20170703213227j:plain

スクリーン整列を
PSA Velocity に変更

f:id:tabascolabo:20170703214041j:plain

 

Spawnを選択
Rate の Constant を 25 に設定

f:id:tabascolabo:20170703213308j:plain


Lifetimeを選択
最大最小をともに 0.1 に設定

f:id:tabascolabo:20170703213325j:plain


Initial Sizeの
Size - Start Size - Distribution にある最大値最小値を
2.0, 15.0, 2.0 に設定

f:id:tabascolabo:20170703213328j:plain

Initial Velocity を選択
Distribution にある最大値最小値を
0.0, 0.0, 10.0 に設定

f:id:tabascolabo:20170703213330j:plain


Color Over Life を選択
R 20.0
G 2.4
B 0.0
に設定し、さらにカラーパレットをクリックして
V 20.0 に変更

f:id:tabascolabo:20170703213221j:plain


これでロウソクの火ができたはず
本当は火の根元を青くしたかったけど
うまくできなくて諦めた
できる人教えて

f:id:tabascolabo:20170703214815j:plain



参考

https://www.youtube.com/watch?v=7hC_QT4GLiU&t=6s

 

scikit-learnでグリッドサーチしようとすると出るjoblibのエラー

scikit-learn でグリッドサーチをやろうとしたら
ImportErrorが出てしまうという問題に遭遇しました。
自分の環境は Python2.7 Windows7です。

コア数を指定しない(n_jobsを設定しない)ことでこのエラーを回避できます。

エラーメッセージ

ImportError: [joblib] Attempting to do parallel computing without protecting your import on a system that does not support forking. To use parallel-computing in a script, you must protect your main loop using "if name == 'main'". Please see the joblib documentation on Parallel for more information

gs = GridSearchCV(clf, param, n_jobs=-1)
↑これだとエラーが出る

gs = GridSearchCV(clf, param)
↑これだと動く

これは Windows を使用している場合に発生するエラーのようです。
またこういったバグが直されているであろう Python3.X を使った方がいいよ、
という意見もフォーラムでありました。

参考
https://github.com/scikit-learn-contrib/hdbscan/issues/22
https://github.com/joblib/joblib/issues/354

scikit-learnの識別器

SVM

from sklearn import svm
にある
svm.sc のカーネルには
linear poly rbf sigmoid precomputed
がありデフォルトは rbf
precomputed についてはよくわかんね
Cの値を上げると学習データの正解率を上げられる
当たり前だが C を大きな値にすると過学習になる
↓こんな風に簡単にパラメータを設定できる
clf = svm.SVC(kernel = "rbf", C = 10)

K近傍

from sklearn.neighbors import KNeighborsClassifier
にある
一番近いところから順に K 個の多数決で自分のクラスを分類するので
K は奇数がいいらしい
K の値は n_neighbors=K といったように設定する
clf = KNeighborsClassifier(n_neighbors=2)

多層パーセプトロン

from sklearn.neural_network import MLPClassifier
にある
乱数の関係で毎回実行する度に結果が少し変わるので
パラメータをいじって比較したい時とかは
乱数のシード値を決める必要がある
clf= MLPClassifier(random_state=8)

ランダムフォレスト

from sklearn.ensemble import RandomForestClassifier
にある
乱数のシード値は多層パーセプトロンと同じように
clf = RandomForestClassifier(random_state=8)
と設定できる
ほかに
clf.max_depth = 1 枝分かれの数
clf.n_estimators=1 木の数
といった設定が必要

決定木

from sklearn import tree
にある
clf = tree.DecisionTreeClassifier()


時間がある時に加筆修正予定

 

プレーヤー死亡時にラグドール化する

ゲームによくある、キャラクターが死んだときに重力に従ってパタッて倒れるやつです。
サードパーソンエグザンプルマップを使ってやってみます。
ラグドール化には
Set Simulate Physics や Set All Bodies Simulate Physics というノードを使います。

Set Simulate Physics は、
「物理シミュレートのオン・オフ」を設定できます。
Target にはもちろん物理シミュレートさせたい(或いはやめさせたい)メッシュを接続します。
Simulate のチェックボックスにチェックを入れると物理シミュレートがオンに、
チェックをはずすと物理シミュレート無しになります。

▼Set Simulate Physics と Set All Bodies Simulate Physics の違い

・Set Simulate Physics
ターゲットは Primitive Component Reference
Primitive Component は一般的に Capsule Component や StaticMeshComponent、SkeletalMeshComponent のこと

・Set All Bodies Simulate Physics
ターゲットは Skeltal Mesh Component Reference となっています。

差は多分それだけです。
今回はプレーヤー死亡時の演出ということで、キャラクターのメッシュ全体を物理シミュレーションするので
どっちを使っても差は無いはずです。

▼ブループリント

Rキーを押したらプレーヤーキャラクターが死んで物理シミュレーションされるようなノードを組みます。

f:id:tabascolabo:20170606020822j:plain

このブループリントでまずカプセルコンポーネントコリジョンを無効化し、
プレイヤーキャラクターのメッシュを物理シミュレーションします。
なぜカプセルのコリジョンを無効化する必要があるのかというと、
物理シミュレーション開始時にカプセルとメッシュのコリジョンが重なってしまい、
わけのわからない方向に突然吹っ飛ぶのを防ぐためです。
またメッシュのコリジョンプリセットをBlockAllにしておかないと、
シミュレーションが始まった瞬間に床をすり抜けて落ちてしまいます。
さらに画像にはありませんが、Camera Boom を Mesh の子にしてあげてください。
こうすることで、死亡時に衝撃を受けて吹っ飛んでもカメラがメッシュを追いかけてくれるようになります。

その場でRキーを押すとフニャァ…とプレーヤーキャラクターが倒れるようになりましたが、
ジャンプしながら死んだり、走りながら死ぬとなぜか2~3秒後にメッシュが消滅する怪現象が
発生するはずです。
この原因は、勢いよく動きながら死んだ場合、カプセルのコリジョンが無効化された時
その勢いを保持したまま床をすりぬけて下に落ち、
デフォルトで存在するキルゾーンに触れてカプセルが消滅し、
結果としてカプセルの子であるメッシュも消滅するためです。

キルゾーンを消す

対策のひとつとして、デフォルトで存在するキルゾーンを消します。
ワールドセッティングの Enable World Bounds Checksをオフにすると
デフォルトのキルゾーンが消滅します。

f:id:tabascolabo:20170606020845j:plain

これでプレーヤーが死ぬと、デストロイされるまでカプセルは無限に下に落ちていきます。
死んでもずっとメッシュは消えないで残ってくれるようになりました。

▼失敗した解決案

以上でとりあえずプレーヤーが死んだときにキャラクターが物理法則に従って倒れるようにできましたが、
カプセルがキルゾーンに触れてメッシュが消滅してしまう問題の対策に、
もうひとつ思いついた案があったものの、うまくいきませんでした。

死んだときにカプセルが重力から影響を受けないように設定する、というものです。

f:id:tabascolabo:20170606020913j:plain

Set Enable Gravity というノードを使って、物理シミュレーション開始と同時に
カプセルが重力の影響を受けないように設定してみたのですが、
うまくいかず、カプセルは下に落ちていってしまいました。
カプセルの Physics にある Enable Gravity をオフにしたらいけるかな?とも思いましたが
これもうまくいかず、カプセルが下に落ちてしまいます。
詳しい人がいらっしゃいましたらぜひ教えて下さい。

▼関連したノード

Set All Bodies Below Simulate Physics
ボーンを指定して、そのボーンとそのボーンより下のボーンすべてを物理シミュレーションする。
つまりキャラクターの一部だけ物理シミュレーションできる。

Set All Bodies Below Physics Blend Weight
上のとほとんど同じだがどれくらい物理シミュレーションの影響を受けるか指定できる。

 

参考
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Physics/SetSimulatePhysics/index.html
https://docs.unrealengine.com/latest/JPN/Programming/UnrealArchitecture/Actors/Components/index.html#プリミティブコンポーネント
https://docs.unrealengine.com/latest/JPN/Engine/Animation/PhysicallyDrivenAnimation/index.html
https://www.youtube.com/watch?v=VVapMSojytg
http://unrealbussan.hatenablog.com/entry/2015/03/10/200716

 

勉強のやる気がでない時の対策

やる気がでないのは誰にでも起こりえること
やる気がでない自分を責めて自己嫌悪に陥ってもそれは解決にならない
やる気を出すための対策方法を考えてみよう

▼そもそも勉強する体力があるか

例えば仕事や学校から帰ってきて、夜勉強するぞとなると
体力的に厳しい場合がある
それはやる気がないのではなく勉強する体力が残ってないわけで
ここをごっちゃにしないように
理想を言うなら勉強するなら朝がいい
寝る前とかはきつい

▼睡眠時間を減らさない

勉強するために睡眠時間を減らすのはあまりおすすめしない
忙しくてそうしないといけないのもわかるが
眠いのを我慢して勉強するのはかなり効率が悪い
やるなら勉強前にシャワーを浴びて目を覚ますとか
眠気を飛ばす対策が必要

▼他人を巻き込む

ひとりでやってると自分との戦いになって
孤独な戦いの中多くの戦士が志半ばに倒れていくもの
勉強とはだいたい暗記なので
友達に単語を覚えたりするのを手伝ってもらえばいい
友達が単語を読んで、自分が単語の意味を答えるとか
これならSkypeとかでもできる
相手に利点がないので金で買収したり
夕飯を奢るとかなんらかの対価を用意しよう
ここで注意してほしいのはライバルを見つけて
競い合おうということではないということ
自分の勉強を手伝ってくれるポジションの人を作るのが大事

▼まず5分でもいいから始める

人間はやりはじめないとやる気がでないという脳の欠陥を持っている
やりはじめるまでが一番つらい
でもやりはじめたらなんとかなるから
とりあえず5分だけでも、とか1ページだけでも、と始めればいい
できないくせに毎日10時間勉強しようとか意気込むのは初心者がよくやるが
身の程を知ろう
おまえはそこまで根性がある人間ではない
現実を見ろ

▼だらだらやることを否定しない

これも上の「5分だけでいいから!さきっちょだけだから!」と似てるが
あんまりやる気でないから一切やらない、やる気が超ある時のみ効率重視でやる!という考え方は糞
0か1かの二元論で考えるのは子供
大人はグレーなところも受け入れられるのである
どれだけ効率よくやってもやはり勉強時間ってのは重要だから
1か100で言ったらそれは100のほうがいいけど、
0か0.1なら0.1が絶対いいに決まってる

▼適度な運動をとる

勉強はストレスがたまる
特に暗記しなくちゃいけないことが多い時
家の周りを1~2周軽く走ったりして外の空気を吸って体を少し動かそう
頭がすっきりする
ここでガチって10kmも走り出すのは馬鹿

▼場所を変える

勉強は机に向かってやらなくてはいけないというルールはない
マンネリを防ぐためにたまには立って勉強したり
カフェやレストランで勉強したりして気分を変えよう
過ごしやすい季節なら公園のベンチでもいい

▼まとめ:やる気がないのは気合いでなんとかならない

人間というものは、やるぞおおおって毎日やる気が出るものではない
まずその現実を見る
自分の理想的な勉強のしかたにとらわれずに
どうやって勉強のストレスをコントロールするかが重要なのだ