Welcome
Ladies and Gents:

These forums are now closed and registration disabled.

Please join us at our new forum on Proboards. Our hope is that these new forums are more stable, provide more and better features, and allow continuation of the project forums in a safer, more secure, long term environment.

me3explorer.proboards.com

--The ME3Explorer Team

Research: InterpData

Technical research related to the structure of Mass Effect game files.

Research: InterpData

Postby SirCxyrtyx » 10 May 2014, 21:51

I've decided to start work on an Interp Editor (think Matinee Editor, but not as good). So here's what I've turned up on how Interps (Matinees) work. Much of this is already known and scattered in various bits and pieces throughout the forum, but I want to be thorough.

Every SeqAct_Interp object is linked to an InterpData object that contains all the data. The InterpData object stores the length, as well as an array of InterpGroups. One entry in the array is an InterpGroupDirector instead. Each InterpGroup (but not InterpGroupDirector) has a corresponding variable link on the SeqAct_Interp that the InterpData is attached to. This supposedly determines the Actor associated with that group, but the variable links are often left empty, so there must be another way of linking an actor. Each InterpGroup has an array of InterpTracks, each of which control various time-dependent values. Here is a list of all the InterpTracks I've found so far:

InterpGroup:

BioScalarParameterTrack
BioEvtSysTrackInterrupt
BioEvtSysTrackSwitchCamera
BioInterpTrackRotationMode
BioEvtSysTrackGesture
BioEvtSysTrackLighting
BioEvtSysTrackProp
BioEvtSysTrackLookAt
BioEvtSysTrackSetFacing
BioEvtSysTrackSubtitles
BioEvtSysTrackVOElements
SFXGameInterpTrackProcFoley
SFXInterpTrackPlayFaceOnlyVO
SFXInterpTrackAttachCrustEffect
SFXInterpTrackAttachToActor
SFXInterpTrackAttachVFXToObject
SFXInterpTrackBlackScreen
SFXInterpTrackDestroy
SFXInterpTrackForceLightEnvUpdate
SFXInterpTrackLightEnvQuality
SFXInterpTrackSetPlayerNearClipPlane
SFXInterpTrackSetWeaponInstant
SFXInterpTrackToggleAffectedByHitEffects
SFXInterpTrackToggleHidden
SFXInterpTrackToggleLightEnvironment
SFXGameInterpTrackWwiseMicLock
SFXInterpTrackMovieBink
SFXInterpTrackClientEffect
InterpTrackAnimControl
InterpTrackMove
InterpTrackVisibility
InterpTrackEvent
InterpTrackToggle
InterpTrackFaceFX
InterpTrackWwiseEvent
InterpTrackWwiseSoundEffect
InterpTrackVectorProp
InterpTrackVectorMaterialParam
InterpTrackColorProp
InterpTrackFloatProp
InterpTrackFloatMaterialParam

InterpGroupDirector:

BioEvtsysTrackDOF
InterpTrackDirector
InterpTrackFade

Some InterpDatas also have a link to an SFXSceneShopGameData, and several SFXSceneGroup objects in their InterpGroupList. As far as I can tell, Each SFXSceneGroup is like a sub-scene, with a certain portion of the InterpGroups (and one InterpGroupDirector) belonging to it. These aren't linked explicitly, but are determined by the ordering in the InterpData's InterpGroups array. The SFXSceneShopGameData contains an array of SFXSceneShopNodeScenes, and one SFXSceneShopNodeStart. Starting at the SFXSceneShopNodeStart, they each have a link to the next SFXSceneShopNodeScene, and the previous one. Each SFXSceneShopNodeScene is associated with an SFXSceneGroup.

So, in summary, it's all very complex, and there probably won't be a working InterpEditor for a while. I might be able to get useful viewer working pretty soon though.

SirCxyrtyx has been thanked by:
User avatar
SirCxyrtyx
Toolset Lead
 
Posts: 345
Joined: 16 Apr 2014, 00:20
Has thanked: 28 time
Have thanks: 288 time

Re: Research: InterpData

Postby giftfish » 11 May 2014, 00:08

This is interesting!

There's a glitch with Thane and a romanced Shepard in Huerta, where their hands are misaligned during a hand-holding animation. What it almost looks like is that the skeletal mesh/actor for either Thane or Shepard actually *changes location* when the camera switches to show the animation--moving vertically to create the misalignment. You can force them to align in the vanilla game by using the spacebar to skip to the end of the line that comes right before the animation. If you do this the hands stay aligned and the animation looks very nice. But, if you let it run naturally, the misalignment occurs and their hands are about 6 inches apart. If it is due to the skeletal mesh moving, I wonder if this type of editor would help us figure out how to fix it :)
giftfish
 

Re: Research: InterpData

Postby SirCxyrtyx » 17 May 2014, 08:29

I'd like to make some additions/corrections to EmeraldFern's research post on cameras post6365.html#p6365 (specifically the EulerTrack and PosTrack bits, as these have relevance to many InterpTrack objects)

EulerTracks ands PosTracks are both InterpCurveVectors (known as DistributionVectorConstantCurves in the UE3 documentation).

Essentially, each InterpCurveVector defines three bézier curves, one each for the x, y and z values. Each entry in the Points array defines one point per line, as well as the handles for each point. (e.g. The X curve has a point at (InVal, OutVal.X), with the two handles for that point defined by ArriveTangent.X, and LeaveTangent.X). As to how a single floating point number can define a handle, my guess is that since the handles are a fixed distance from their points, they are degree values, ranging from -90° to 90°. The InterpMode Property can have the following values
  • CIM_CurveAutoClamped: Flat tangents.
  • CIM_CurveUser: Straight, but rotated tangents.
  • CIM_CurveAuto: Like CIM_CurveUser, but rotated automatically by UDK.
  • CIM_CurveBreak: Separate in and out tangents.
  • CIM_Linear: No Tangents, just a straight line between points.
  • CIM_Constant: Constant value until next point.

For InterpTrack objects that have a LookupTrack, the Time property from the LookupTrack is used instead of InVal.

InterpCurveFloats are similar to InterpCurveVectors, but only define a single bezier curve.
User avatar
SirCxyrtyx
Toolset Lead
 
Posts: 345
Joined: 16 Apr 2014, 00:20
Has thanked: 28 time
Have thanks: 288 time

Re: Research: InterpData

Postby giftfish » 17 May 2014, 14:23

Oh fun, curves and tangents. I was horrible at geometry. Give me calculus or algebra any day.

Thanks for putting this info out there. On my very long list of things to do is start getting together the Dialogue Editing tutorial (which will be less of a step-by-step tutorial and more of "general strategies") but it definitely needs a section on the camera, since so many people seem to be interested in figuring out how to edit it, ourselves included. In that section I'll put a summary of what is known so far, with credit given to all the proper folks who have figured things out. :]
giftfish
 

Re: Research: InterpData

Postby WarrantyVoider » 17 May 2014, 15:44

well if you can calc the path of your tangents (which should be doable by your description), I could add display for them to leveleditor

greetz WV
always backup your files!
mess with the best or die like the rest!
"I tried everything!" - "mkay, please list that..." ; please dont pm me for help, we have a help section
User avatar
WarrantyVoider
Emeritus
 
Posts: 2270
Joined: 22 Aug 2012, 11:33
Has thanked: 480 time
Have thanks: 626 time

Re: Research: InterpData

Postby giftfish » 17 May 2014, 20:11

WarrantyVoider wrote:well if you can calc the path of your tangents (which should be doable by your description), I could add display for them to leveleditor

Could be handy, I'd think. The more we can see in editors the better. My guess is Sir and JohnP probably understand more about it than I do right now, since Em was the one doing the research on the camera. What do you guys think?
giftfish
 


Return to Technical Research

Who is online

Users browsing this forum: No registered users and 0 guests

suspicion-preferred