30
UE4 の『 Bone の回転バグ』を直して プルリク投げた話 らりほま 2016/10/21 6 UE4 よちよち勉強会

UE4 の『Bone の回転バグ』を直してプルリク投げた話

Embed Size (px)

Citation preview

Page 1: UE4 の『Bone の回転バグ』を直してプルリク投げた話

UE4 の『 Bone の回転バグ』を直してプルリク投げた話

らりほま2016/10/21 第 6 回 UE4 よちよち勉強会

Page 2: UE4 の『Bone の回転バグ』を直してプルリク投げた話

2

Boneの回転バグとは?

Page 3: UE4 の『Bone の回転バグ』を直してプルリク投げた話

3https://issues.unrealengine.com/issue/UE-15388

Page 4: UE4 の『Bone の回転バグ』を直してプルリク投げた話

4

バグの概要

● FBX を

● Skeletal Mesh として Import する際に

● Scale を変更すると

● Persona で Bone を回したときに● 回転量がおかしくなる

Page 5: UE4 の『Bone の回転バグ』を直してプルリク投げた話

5

バグの概要

● FBX を

Page 6: UE4 の『Bone の回転バグ』を直してプルリク投げた話

6

バグの概要

● Skeletal Mesh として Import する際に

Page 7: UE4 の『Bone の回転バグ』を直してプルリク投げた話

7

バグの概要

● Scale を変更すると

Page 8: UE4 の『Bone の回転バグ』を直してプルリク投げた話

8

バグの概要

● Persona で Bone を回したときに

Page 9: UE4 の『Bone の回転バグ』を直してプルリク投げた話

9

バグの概要

● 回転量がおかしくなる

Page 10: UE4 の『Bone の回転バグ』を直してプルリク投げた話

10

バグの概要

● 回転量がおかしくなる

Page 11: UE4 の『Bone の回転バグ』を直してプルリク投げた話

11

バグの概要

● Scale を増加させるほど回転量が減少する● ぶっちゃけそんなに困るバグではない

– Blueprint での回転処理は正常– 困るのはリターゲット基底ポーズ調整時のみ

● でも気になる– UE4.7 のときには既に存在

Page 12: UE4 の『Bone の回転バグ』を直してプルリク投げた話

12

直そう!

Page 13: UE4 の『Bone の回転バグ』を直してプルリク投げた話

13

エンジンのソースコードのどこで回転処理を行っている?

Page 14: UE4 の『Bone の回転バグ』を直してプルリク投げた話

14

それっぽいところにブレークポイントを仕掛けて探そう!

Page 15: UE4 の『Bone の回転バグ』を直してプルリク投げた話

15

エンジンデバッグの注意点

● ソリューション構成をDebug Editor にしてビルドする

Page 16: UE4 の『Bone の回転バグ』を直してプルリク投げた話

16

エンジンデバッグの注意点

● ブレークポイントはプロジェクトのソリューションに置く( エンジンのソリューションではない )

Page 17: UE4 の『Bone の回転バグ』を直してプルリク投げた話

17

エンジンデバッグの注意点

エンジン

プロジェクト ( ブレークポイントはこっちに置く )

( ここでエンジンの起動が終了 )

Page 18: UE4 の『Bone の回転バグ』を直してプルリク投げた話

18

エンジンデバッグの注意点

● 参考: alwei さんのブログ記事– UE4 VisualStudio を使ってエンジンをデバッグする -

Let's Enjoy Unreal Enginehttp://unrealengine.hatenablog.com/entry/2014/08/22/215802

Page 19: UE4 の『Bone の回転バグ』を直してプルリク投げた話

19

回転処理を行うコードを見つけた!

Page 20: UE4 の『Bone の回転バグ』を直してプルリク投げた話

20

問題の回転処理

● Engine/Source/Editor/Persona/Private/EditModes/SkeletonSelectionEditMode.cpp

Page 21: UE4 の『Bone の回転バグ』を直してプルリク投げた話

21

Scaleに応じて回転量が変化するというバグなので…

Page 22: UE4 の『Bone の回転バグ』を直してプルリク投げた話

22

Scaleを考慮した計算になってしまっている部分を探そう!

Page 23: UE4 の『Bone の回転バグ』を直してプルリク投げた話

23

問題の回転処理

● Engine/Source/Editor/Persona/Private/EditModes/SkeletonSelectionEditMode.cpp

Page 24: UE4 の『Bone の回転バグ』を直してプルリク投げた話

24

問題の回転処理

● Engine\Source\Runtime\Core\Public\Math\TransformVectorized.h

Page 25: UE4 の『Bone の回転バグ』を直してプルリク投げた話

25

Scaleを考慮しない計算にするには…

Page 26: UE4 の『Bone の回転バグ』を直してプルリク投げた話

26

問題の回転処理

● Engine\Source\Runtime\Core\Public\Math\TransformVectorized.h– TransformVector 定義の下に

TransformVectorNoScale( Scale を考慮しない版 ) の定義が存在

Page 27: UE4 の『Bone の回転バグ』を直してプルリク投げた話

27

TransformVector↓

TransformVectorNoScale

Page 28: UE4 の『Bone の回転バグ』を直してプルリク投げた話

28

たった 7 文字 (“Noscale”)追加するだけで (たぶん) 解決!

ボキッ

Page 29: UE4 の『Bone の回転バグ』を直してプルリク投げた話

29

pull request の流れ

● fork→clone→pull request 用 blanch 作成→ ( 修正 )→add→commit→push→pull request

Page 30: UE4 の『Bone の回転バグ』を直してプルリク投げた話

30

取り込まれるといいな…ここまで書いておいて reject されたら恥ずかしい (*ノ▽ノ)