Jump to content

Carcass.exe Bone Jitter


Go to solution Solved by Archangel35757,

Recommended Posts

Posted

I can independently confirm that they're working on getting Carcass source released. They're asking Rich if he still has Carcass source.

 

I already implemented this like 6mo ago. Just saying.

 

True, but we could port over the remaining code. Would be useful for the JKA part of JK:Enhanced due to the many arms.

Posted

Well from the looks of it, I was wrong. SoF2 doesn't allow multiple arm models, though their viewmodel setup (bolting left arm + right arm to the weapon) is a step in the right direction for that.

Posted

What's wrong with using Noesis exactly? Can Rich not fix the G2 export issues?

I didn't actually know there were any until last week. :) I've fixed quite a bit of stuff DT85 has told me about over the weekend, so I think it's in a good state now. He mentioned he's gonna be working on a Noesis export tutorial, which is excellent.

 

So, about the compression, I'm not sure what carcass was doing. But they kinda got it wrong in the format - the way the engine expects transforms, you're ending up with parent-local matrices which are in base/bind-local space. Bind-local matrices in parent-local space would've been much more efficient for small deltas, where lots of bones would've ended up being stored as identity because they don't animate away from the bind pose when in parent-local space. Lots of stuff moves as a result of hierarchy when you apply the bind-local transform before the parent-local one.

 

Beyond that, all Noesis does is quantize the bones like so:

 

    RichMat43 *rMat = (RichMat43 *)mat;

    RichQuat rQuat = rMat->GetTranspose().ToQuat();

 

    comp[0] = (unsigned short)((rQuat[3]+2.0f)*16383.0f);

    comp[1] = (unsigned short)((rQuat[0]+2.0f)*16383.0f);

    comp[2] = (unsigned short)((rQuat[1]+2.0f)*16383.0f);

    comp[3] = (unsigned short)((rQuat[2]+2.0f)*16383.0f);

    comp[4] = (unsigned short)((mat->o[0]+512.0f)*64.0f);

    comp[5] = (unsigned short)((mat->o[1]+512.0f)*64.0f);

    comp[6] = (unsigned short)((mat->o[2]+512.0f)*64.0f);

 

As you'll notice, the quaternion range is also unnecessarily limiting precision, another legacy limitation of the format. Ghoul2 animation compression could've easily been a lot better with no drawbacks, but I guess no one noticed during development, myself included. :)

 

After Noesis quantizes the rotations+translations, it uses a simple hash to build up a list of unique q+t pairs. It will only consider something a match if it fits exactly. If I had to venture a guess, that might be where carcass goes wrong, using a looser comparison method and ending up with matches that don't quite match. Either that or the quantization is just wrong.

Tempust85 and Archangel35757 like this
Posted

So I got an email response from Ste at RavenSoftware:

 

----message----

From:<removed>

To:<removed>

Cc:<removed>

Sent: Thu, Sep 4, 2014 9:55 AM CDT

Subject: RE: CARCASS.exe bug issue... and new dotXSI 3.0 exporter

 

I left a CMD session searching our Y (archive) drive all night piped to a file for carcass*.*, but the source isn't there. ( even though there's a lot of old source code around that era ). Charlie says all the old VSS archives are on a different server but right now that machine isn't responding properly. He's taking a look.

 

This hasn't been forgotten.

 

-Ste.

 

Tempust85 likes this
Posted (edited)

Awesome, I'm glad they are taking the time for us as I'm sure they are busy.

 

Might be in with the SoF2 stuff since that game came first.

 

 

EDIT:

 

Did find this in JK2/JKA's carcass.exe when viewing in notepad++:

 

C:\projects\Tools\Carcass\Release\carcass.pdb

 

and this in SoF2's carcass:

 

C:\Source\Tools\Carcass\Release\carcass.pdb

Edited by DT85
  • 3 weeks later...
Posted

Very cool that they fixed it, just wish still that the source was out to maybe add the other crosswalk formats to it.

 

As a softimage user I wont complain though, would just like to see more options for others who may be using a program outside of the 3 autodesk ones.

  • 3 weeks later...
Posted

Here's a good example of bone jitter that will no longer be present:

 

 

Check out 0:28 for the finger jitter when Kyle slams his lightsaber on the bar bench.

I don't see anything... :P

Posted

Only very slightly form what I see; I wouldn't ever notice it ingame

That's mostly because it's a very short cut. If it held that shot longer, you'd notice, no doubt.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...