バカでもクォータニオンを理解したい その1
クォータニオンを理解したい
これは自分のようなバカがちょちょいと理解できるものではないと感づいたので、自分と同じような方(バカ?)が理解する助けになればと思い記録 わかるようになると、何がわからんかったのかわからんくなるのでメモ なにがわからなかったのかわからなくなりてえ…!
とりあえず現状を書き出してみる
すでに理解していること(理解している気になっていること)
- 複素数で2次元の回転を表現できること
- 3次元での回転を表現するための値のことを4元数ということ(複素数を拡張したもの)
- クォータニオンは4元数の一種であること
- 複素数が複素数との積を求めることで回転が求められるように、クォータニオンとクォータニオンの積を求めることで3次元の回転を求めることができること
- クォータニオンは姿勢の情報を持っていること(方向より1自由度多い)
- オイラー回転に比べ回転の補完が求めやすいこと(球形補完しやすい?)
よくわからんこと
学習は以下の本を読みながら、わからない概念があったらググる 3DCG クォータニオン入門 https://www.yodobashi.com/product/100000009002249882/?gad1=&gad2=g&gad3=&gad4=452654755364&gad5=17781346076403022214&gad6=&gclid=Cj0KCQjwguGYBhDRARIsAHgRm4_gAeyY6H7FVKXnE9UIkCkXRjlchK7-gPVpAa5uWETNFjpXYK-LOwIaAod5EALw_wcB&xfr=pla
UEのエディターのmenu名の取得について
問題
UEのエディター内の各menu名取得まじでめんどくさい件について
【UE4】Blueprintだけで、Editor上にメニューを追加する【★★★】 | キンアジのブログ
BPによるエディターの拡張に関しては上記のキンアジさんの記事を聖書として行っている方が多いと思いますが UE5だと、BlueprintUtilityWidgetのdetail widgetを使用し、Menusの中身を表示する方法が使えなくなっていました。
解決
お手軽にメニュー名を探せる方法はないかと検索し、以下のツイートにたどり着きました。
https://twitter.com/milkyengineer/status/1379644279480446982
要約すると、
Config/DefaultEditorPerProjectUserSettings.ini に以下のように記述
[/Script/UnrealEd.EditorExperimentalSettings] bEnableEditToolMenusUI=True
Window/Enable Menu Editing チェックボックスをON
各メニューに歯車マークが出るので、その中でメニュー名がお手軽に確認できるというものです。 これはかなり革新的…!
Pysideでcloseする時に気を付けること
問題
いままでmayaでUIを作るとき以下のようにしていたのですが
@property def absolute_name(self): return '{}.{}'.format(self.__module__, self.__class__.__name__) def __init__(self, parent=None): super(WorkmanCheckerToolMainWindow, self).__init__(parent) self.qs_main = super(WorkmanCheckerToolMainWindow, self) #ウィンドウの重複の回避 maya_window = WorkmanCheckerToolMainWindow.get_maya_window() for child in maya_window.children(): # reload でポインタが変わったときのために名前で比較する if self.absolute_name == child.objectName(): child.close()
この状態だと、mainwindowのインスタンス自体は破棄されず残ることが分かった。 そのため、ウィンドウを開くたびに過去に開いたインスタンスのclose_eventも実行されるので、よろしくない。
解決
closeした際、一緒にdeleteも行う child.close() child.deleteLater() みたいな。
エンジンとプロジェクトを開発メンバーに渡すには
プロジェクトメンバー(非プログラマ)がプロジェクトを開けない
プロジェクトを開こうとするとビルドしようとして失敗する(これはVSが入ってないから)
そもそもbinaryで配布してるからビルドはいらないはず。
どうしてエラーになるのか。
qiita.com
こちらの神記事がすべて解決してくれました。
詳しくはこちらをみるべきですが、
まとめると、
UE4 エンジンの Engine/Binaries/Win64/UE4Editor.version内のBuildId
プロジェクトのBinaries/Win64/UE4Editor.modules内のBuildId
この2つが一致していないと別のエンジンでビルドされたデータと判定されて再度ビルドをかけようとするらしい。
そのため、プロジェクトメンバーが開けるようにするには、このどちらかが取得されていないもしくは自分の上げ忘れを疑う必要がある。
ノードのメモ作成にEvernoteとScreenpressoが快適という話
ScreenPressoはゲーム業界でも使ってる人が多いスクリーンショット(以下SS)ツールだと思いますが、個人的には"共有"の便利さでも推しています。
ノードベースのツールを扱う際ノードを構築したらSSを撮ってどこかに保存していくのはよくある記録方法だと思うのですが、これを以下で行うと便利です。
ScreenPressoの機能で撮影→共有で登録しているEvernoteへ
内容も上画像のようなUIが立ち上がり、簡易的に入力できます。
アップロードが完了すると↓のような感じ
自分は普段はノードをCtrl+Cするとクリップボードにノードを再現可能なコードがコピーされるので、そのコードも一緒に貼り付けています。
ScreenPresso本当に便利です。
今回ScreenPressoのスクショ取るのにScreenPressoが使えない(ScreenPressoを使ってSSを取る瞬間UIが消える)のが一番つらかった。
p4ignoreに苦戦したのでメモ
ignoreで苦戦したのでメモ
www.toyo.co.jp ※ワイルドカードのルールはtypemapとは異なる
p4ignoreはp4vでどのファイルをチェックアウトの対象とするのか設定するファイルですが、これの設定を間違えると他のユーザーが取得した際プロジェクトが開けなくなったりするので要注意
どうやら元のignoreだと、Engine以下のファイルを共有していたのがよくなかった? まだわからない部分が多いので、わかったら追加記述予定
というか、なぜこれで正規表現的に機能しているのがなぜかわからないという危険な記事です。
元URL github.com
変更後
Saved/ LocalBuilds/ *.csproj.* .vs/* *.pdb *.suo *.opensdf *.sdf *.tmp *.mdb obj/ *.vcxproj *.sln *-Debug.* FileOpenOrder/ *.xcworkspace *.xcodeproj ./Makefile ./CMakeLists.txt .ue4dependencies Samples/* FeaturePacks/* Templates/* Engine/Documentation/* # Engine intermediates Engine/Intermediate/* Intermediate/ # Intermediate folders for programs should not be checked in Engine\Programs\*\Intermediate\* # Intermediate folders created for various C# programs Engine\Source\Programs\*\obj\* # Saved folders for programs should not be checked in Engine\Programs\*\Saved\* Engine\Programs\UnrealBuildTool\* # Derived data cache should never be checked in Engine/DerivedDataCache/* # Ignore any build receipts Engine/Build/Receipts/* # Ignore personal workspace vars p4config.txt # Ignore Unix backup files *~ # Ignore Mac desktop services store files .DS_Store # Ignore crash reports crashinfo--* # Ignore linux project files *.user *.pro *.pri *.kdev4 # Obj-C/Swift specific *.hmap *.ipa *.dSYM.zip *.dSYM # Ignore documentation generated for C# tools Engine/Binaries/DotNET/UnrealBuildTool.xml Engine/Binaries/DotNET/AutomationScripts/BuildGraph.Automation.xml # Ignore version files in the Engine/Binaries directory created by UBT /Engine/Binaries/**/*.version # Ignore exp files in the the Engine/Binaries directory as they aren't C/C++ source files /Engine/Binaries/**/*.exp # Ignore Swarm local save files Engine/Binaries/DotNET/SwarmAgent.DeveloperOptions.xml Engine/Binaries/DotNET/SwarmAgent.Options.xml # Intermediary Files *.target.xml *.exe.config *.exe.manifest # Ignore project-specific files dev/egg_UE4_main/trunk/Projects/TSUKIWATASHI/Unreal Projects/Tsukiwatashi_Ver1/TSUKIWATASHI/Build/Receipts/* dev/egg_UE4_main/trunk/Projects/TSUKIWATASHI/Unreal Projects/Tsukiwatashi_Ver1/TSUKIWATASHI/DerivedDataCache/* dev/egg_UE4_main/trunk/Projects/TSUKIWATASHI/Unreal Projects/Tsukiwatashi_Ver1/TSUKIWATASHI/Binaries/*-Shipping.* dev/egg_UE4_main/trunk/Projects/TSUKIWATASHI/Unreal Projects/Tsukiwatashi_Ver1/TSUKIWATASHI/Intermediate/*
P4でtypemapの変更を既存ファイルに反映したい
問題
P4でtypemapを変更することにより、拡張子ごとの排他的チェックアウト状態の設定を変更することができます。
ですが、この設定をプロジェクト作成後に行うと、既存ファイルの排他チェックアウトの設定(この設定の正しい言い方がわからない)は据え置きの状態から変わらずビルドが通らなくて困ったりします。
すべてのファイルを一括で更新するのに少し四苦八苦したので二度とこんな悲しい事が起きないようにメモ。
今回困ったことは以下
- P4Vでのtypemapを既存のファイルへ設定するコマンドは?
- p4のコマンドで正規表現を使用し、一括で処理するには?
①は結論としては以下リンクが参考になりました。
p4 editコマンドを使用することでファイルをチェックアウトできるのですが、typeの引数を設定することで、typemapを変更してサブミットすることができます。
この設定をauto(-t auto)にすることでtypemapに設定されている設定で既存設定を上書きしてくれる、ということ。
これを既存の該当ファイルすべてにかけてサブミットすれば解決しそう。
②は公式ドキュメントを参考
www.toyo.co.jp
どうやら”...”でpythonのreで言う".*"に当たる全てに該当扱いになるようなのでd:\<フォルダ名>...とかにすれば該当するすべてのパスに処理をすることができそう
結論
上記をもとにサンプル
p4 edit -t auto ”<フォルダパス>\Binaries\Win64\...pdb"
上記で<フォルダパス>\Binaries\Win64\以下のすべてのpdbファイルがtypemapをもとに更新される。
メモ
p4のコマンドをまともに使ったことなかったので、そもそもclientの設定等がちゃんと行われている状態でcmdを開く方法すらわからなかったのでメモ
OpenCommandWindowHereからcmdを開くことで必要な設定がされている状態でcmdが開く。