タナコーのゲーム作成日記

Tipsっていうより、メモ的なもの

バカでもクォータニオンを理解したい その1

クォータニオンを理解したい

これは自分のようなバカがちょちょいと理解できるものではないと感づいたので、自分と同じような方(バカ?)が理解する助けになればと思い記録 わかるようになると、何がわからんかったのかわからんくなるのでメモ なにがわからなかったのかわからなくなりてえ…!

とりあえず現状を書き出してみる

すでに理解していること(理解している気になっていること)

よくわからんこと

  • クォータニオンがなぜ姿勢の情報を持っている?どのように表現できる?
    • 4つの値をどう解釈したら姿勢の情報になる?  - 多分クォータニオンの実体がイメージできてない
    • そもそも、4次元の空間とか、人間にイメージできないものに近い?ちょこちょこ出てくるクォータニオンの図で余計混乱する
  • 共益クォータニオンとか、ノルムとかが計算に絡んでくると何が起きてるのかわからん

学習は以下の本を読みながら、わからない概念があったらググる 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



f:id:kou-rgb:20220126010420p:plain

f:id:kou-rgb:20220126010945p:plain


内容も上画像のようなUIが立ち上がり、簡易的に入力できます。

アップロードが完了すると↓のような感じ

f:id:kou-rgb:20220126011136p:plain



自分は普段はノードをCtrl+Cするとクリップボードにノードを再現可能なコードがコピーされるので、そのコードも一緒に貼り付けています。
ScreenPresso本当に便利です。
今回ScreenPressoのスクショ取るのにScreenPressoが使えない(ScreenPressoを使ってSSを取る瞬間UIが消える)のが一番つらかった。

p4ignoreに苦戦したのでメモ

ignoreで苦戦したのでメモ

www.toyo.co.jpワイルドカードのルールはtypemapとは異なる

p4ignoreはp4vでどのファイルをチェックアウトの対象とするのか設定するファイルですが、これの設定を間違えると他のユーザーが取得した際プロジェクトが開けなくなったりするので要注意

どうやら元のignoreだと、Engine以下のファイルを共有していたのがよくなかった? まだわからない部分が多いので、わかったら追加記述予定

というか、なぜこれで正規表現的に機能しているのがなぜかわからないという危険な記事です。

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を変更することにより、拡張子ごとの排他的チェックアウト状態の設定を変更することができます。

www.toyo.co.jp



ですが、この設定をプロジェクト作成後に行うと、既存ファイルの排他チェックアウトの設定(この設定の正しい言い方がわからない)は据え置きの状態から変わらずビルドが通らなくて困ったりします。
すべてのファイルを一括で更新するのに少し四苦八苦したので二度とこんな悲しい事が起きないようにメモ。
今回困ったことは以下

  1. P4Vでのtypemapを既存のファイルへ設定するコマンドは?
  2. p4のコマンドで正規表現を使用し、一括で処理するには?

 

①は結論としては以下リンクが参考になりました。

stackoverflow.com

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を開く方法すらわからなかったのでメモ

f:id:kou-rgb:20220121232219p:plain


OpenCommandWindowHereからcmdを開くことで必要な設定がされている状態でcmdが開く。