偏人空間

イラスト(というかCG?)とプログラミングについて書いてあることが多いです。

UnrealC++だとぉ・・・

Unreal Engineを触り始めたので調べてみたらなんとC++Unreal用に独自拡張されている事に気が付きました。

UE4とUnrealC++について | ドクセル

仕組みを見るとC++C#に近づけましたて感じだし、C#的な使い方で見ておけば良さそう。

てなるとテンプレートもメタプログラミング出来るものじゃなくて、C#ジェネリクス程度ぐらいに思ってよさそう。

C with Classes程度の構文とデザインパターンぐらい分かっていれば前提知識としては十分なレベルだと感じたので難しい事を考える必要はなさそうです。

STLコンテナを分かってたほうが該当の機能は探しやすいと思うけど)

確かに今更生のC++とか暴力的過ぎることやらせるわけないですよねぇ。

実際に開発する時は公式のリファレンス見れば良さそうですが、逆に言えば常日頃からリファレンスを見ておかないと便利機能を見落としてしまうかもしれないので注意が必要ですね。

ゲームエンジンの機械学習対応について

そういえばUnityにはUnity ML-AgentsとML.NETあったよなぁと思って調べてみたんですが、monoじゃないと動かない状態らしくてビックリしました。

モバイル系の場合は特にIL2CPPがほぼ前提になっていた気がするのですがどうなんでしょうかね。

Unreal Engineプラグインとか出てるみたいですが、どっちにせよPythonに依存しているぽいのがちょっと微妙な気がしています。

ということで、今のところゲームエンジンで使う機械学習は勉強を兼ねて自作する予定です。

 

本の読み方

マルチスレッドプログラミング(MT)と深層学習(DL)の本を読んでいます。

結局片方だけ読むと集中力が落ちるので交互に読むと効率的な事に気が付きました。

効果的な読み方とは

久しぶりに専門書を読んでいて思ったのは視読が効果的な事でした。

今まではどうにも黙読(心の中で声を出して読むこと)が癖になりすぎていてかなり読む速度が遅くなっていました。

視読は意味のある単位で塊(チャンク)に分解して捉えるというやり方ですが、要するに短い文に区切って目だけで読む方法です。(心の中で言葉に出さずに目を滑らせてみるとなんとなく読めるなと気がつけたら多分行けるはず)

そういえば、私の父は異常に漫画も含めて本を読むのが早かったので恐らくこういうことを自然とやっていたんだろうなと思います。

思い返すと私も自然に調べものをしている時に自然にやっていた事に気が付きました。面白い。

マルチスレッドについて

並行コンピューティング技法 ―実践マルチコア/マルチスレッドプログラミング

72p辺りまで読んでみたのですが、個人的に大事だと感じたことは

  • 並行処理させる為に処理を分解するアプローチとしてタスク分解とデータ分解のアプローチがある
  • タスク分解は分解の上限が決まっているが、データ分解はスレッド数でスケールできる
  • インタリーブ(要するに並行処理させた時の実行処理を組み合わせ的に時系列順で書き下したもの)でマルチスレッドのアルゴリズムの正当性を机上デバッグできる

この辺りだと思います。というかここら辺がほぼ全てな気がしています。

ふと思ったのがGPGPUだとSIMDと同じというかそのものだから、マルチスレッドプラグミングというよりは並列プログラミングと言う方が正しいてことですよね。だから基本的には行列で計算表現出来てしまえば後はその数だけGPUで計算してしまえば良いと・・・。

後はプログラムや計算の構造によってはマルチスレッドのデータ分解的な考えをすれば同時にGPUへの入力パラメータをずらして複数の処理工程を同時計算みたいなことをして最適化とかありそうだなぁと思いました。

深層学習について

深層学習 (機械学習プロフェッショナルシリーズ)

22pまで読みました。意外とすんなり入ってきてビックリ。暫く数学とか全く触れてなかったのですが、今のところ頭の中にコードが浮かぶぐらいには理解出来ています。

とはいってもまだ多層パーセプトロンの構造、活性化関数、誤差関数辺りですね。

記号の使い方をたまに忘れてしまいます。y(x;w)とか確率辺りの記号はあんまり使わないので慣れてはいないんですが、読み返せば思い出せるのは確認出来たのでこのあたりは気にしないでおくことも大切ですね。

いきなり予定変更

クリスタのプラグイン開発を一旦辞めました。

理由としては画像をフィルター処理するプラグインしか作れないSDKだったからです。

とりあえずどうするのか

まず、自分が考えていた本来のツールを制作する為にはCLIP STUDIO PAINTの公式SDKは使えません。GUIやらレイヤーやらの機能を何かしら呼べることを期待してたのですが・・・。

色んなレイヤーから情報を引っ張ってくることがそもそも出来ませんでした。

そこで思い返してみると、ペイントツールSAIがVer1.0.0の頃に外部からSAIを機能拡張する「SST」というツールが存在していたのを思い出しました。

となると、OSの機能を利用して他プロセスのプログラムに介入出来るはずです。

そこでちょっと調査してみるとありました。ざっくりまとめると

  • WinSpector等のツールで操作対象のソフトウェアで操作対象となるGUI要素を特定する。
  • Win32 APIで操作対象のソフトウェアのウィンドウハンドルを取得し、子要素のGUI要素を取得する。
  • 後は昔ながらのWindowsプログラミングの範疇になる。

というわけで出来なくはなかったんですが・・・。

他にオートアクション機能を使えば多少不便だけど目的は達成出来る事がわかりましたので、他の分野に注力した方が良いと判断しました。

また、欲しい機能については公式で実装されたほうが絶対良いので要望としてまとめて送っておきました。

今後の予定

機械学習に入る前に、下記の書籍でマルチスレッドプログラミングについて一旦学ぼうと思います。

並行コンピューティング技法 ―実践マルチコア/マルチスレッドプログラミング

その後はこちらの深層学習の本を読んで機械学習の基礎を学ぼうと思います。

深層学習 (機械学習プロフェッショナルシリーズ)

ここまで終わったらUnreal Engine5を弄ってみようと思います。この本が良さそうだなと思っているので買う予定です。

ハンズオンで身につく! Unreal Engine 5 ゲーム開発入門

その後は実際にゲームを簡単に作ってみるのが良いのかなと考えています。キャラクターや背景などを自作して簡単に動かせるタイプで行きたいですね。

日記を始めてみます

はじめに

今日から日記を書こうと思います。

XとかDiscordで細切れに発言するよりも、一つの情報媒体でしっかり1日毎にまとめた方が考えが整理されて良いと感じたからです。

また最近ではC++を久しぶりに勉強しているので、ノート的なものがあったほうが良いと思ったのもあります。

C++は学生の時に毎日のごとく本を読み漁って勉強していましたが、社会人になってからは実務でJavaC#VBばっかり使っていたのですっかり忘れてしまいました。

今は無職で時間だけは一杯ありますので、この際に色々やってしまおうと目論んでいるわけです。

なぜC++を勉強しているのか

理由は下記の通りです。

  1. イラストを描く上で欲しい機能があるのでCLIP STUDIO PAINTプラグイン開発をしたい
  2. 機械学習を仕組みを学んで活用するため
  3. Unreal Engineを使って映像とかゲームを作ってみたい

2についてはネット上で調べてみるとPythonとかが当たり前になってるのかなと感じますが、C++でやった方が自分がやりたい他の分野にも紐づけしやすいと思っています。

目先の話

まずはプログラミング言語C++(といっても第3版・・・)とEffective C++を読んで色々思い出しつつ、C++20までの追加機能をざっくり見たら、CLIP STUDIO PAINTSDKを勉強して自分が欲しい機能を実装していこうと思います。

それが終われば暫くイラストを描きつつ機械学習の基礎を勉強したいですね。

将来の話

実はイラストを主軸に収入を得ようと思っているので、イラスト制作的な話も多く入るかもしれません。(それでプログラミングも勉強て中々クレイジーですよね)

それに加えてVRChat等のメタバースの利用が増加しつつあるのを見るとアセットを作るモデラーとしての方向を視野に入れるのも有りな気がしています。

Blenderで既に人型のキャラクターをモデリングしてアニメーションを付けた事はありますが結構楽しかったのもあります)

そうなると動作確認でUnityにも手を付ける必要が出てくるので中々カオスな事になりそうですね。

なんにせよ、イラストとプログラミングの2柱が今後の自分にとって基盤になるので頑張りたいと思います。