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

Preview:

Citation preview

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

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

2

Boneの回転バグとは?

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

4

バグの概要

● FBX を

● Skeletal Mesh として Import する際に

● Scale を変更すると

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

5

バグの概要

● FBX を

6

バグの概要

● Skeletal Mesh として Import する際に

7

バグの概要

● Scale を変更すると

8

バグの概要

● Persona で Bone を回したときに

9

バグの概要

● 回転量がおかしくなる

10

バグの概要

● 回転量がおかしくなる

11

バグの概要

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

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

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

12

直そう!

13

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

14

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

15

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

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

16

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

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

17

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

エンジン

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

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

18

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

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

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

19

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

20

問題の回転処理

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

21

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

22

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

23

問題の回転処理

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

24

問題の回転処理

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

25

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

26

問題の回転処理

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

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

27

TransformVector↓

TransformVectorNoScale

28

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

ボキッ

29

pull request の流れ

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

30

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

Recommended