ColinGilbert / ozz-animation

Automatically exported from code.google.com/p/ozz-animation
zlib License
0 stars 0 forks source link

Unable to reproduce Skin example. #2

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
First of all this looks like a very useful skeletal animation engine - and I'm 
looking forward to trying it when I get my head around it fully. 

I'm trying to reproduce the skin example but I'm completely unable to for 
several reasons:

1) I have created a new project and included the set of lib's and header files, 
but SkinnedMesh was unavailable to me (obviously because it was part of the 
skin example and not the lib's). So I copied the SkinnedMesh code but on 
attempting to compile I get -
    A) "error C2228: left of '.Load' must have class/struct/union"
    B) "error C2065: 'kValue' : undeclared identifier"
    C) "error C2027: use of undefined type 'ozz::io::internal::Version<const _Ty>' "
It's quite obvious I'm missing something- but I'm not sure what. Any advice on 
what I would need to use from the skin example to get my test application 
running and get rid of these errors?

2) I can't find the fbx2ozz command line tool anywhere. Either the binary or 
the source code (in the project CMAKE creates). I can find some source files 
(some of which I believe may be in the wrong place, for example fbx2skin.cc), 
but they don't get made into any kind of project. Any idea what could be going 
wrong here?

3) This is more of a suggestion than a question but- unfortunately I feel like 
these samples are very much throwing me in at the deep end. I would really 
benefit from a sample that doesn't have lots of configurable menu options and 
general 'extra code' that isn't required for me to learn Ozz.

Thanks,

Original issue reported on code.google.com by ThomasBu...@gmail.com on 24 Dec 2014 at 4:52

GoogleCodeExporter commented 9 years ago
Additional information:

Those errors are coming from 'achive.h' lines 246 & 285. 

Original comment by ThomasBu...@gmail.com on 24 Dec 2014 at 4:55

GoogleCodeExporter commented 9 years ago
That's right SkinnedMesh isn't part of ozz libraries. It's provided with the 
skinning sample, as this data structure and its tool chain only suit samples 
needs. On the other side ozz::geometry::SkinningJob is part of the library 
(ozz_geometry) and is designed to work with any mesh structure.

Now to answer your questions:

1) Seems like you're deserializing an object (using IArchive operator >>) that 
doesn't implement ozz serialization functions (see 
https://code.google.com/p/ozz-animation/wiki/Advanced#Serialization_mechanics). 
If it's a mesh that you're trying to load, then I can imagine 2 reasons for 
these errors:
 - if you forward declared the SkinnedMesh (something like "struct SkinnedMesh") but you didn't include skin_mesh.h, this would happen.
 - if you try to deserialize a SkinnedMesh pointer "SkinnedMesh*", this would happen also. Look at utils.cc LoadSkeleton() function for an example.
 If this is neither or or the other, then please send me your cc file so I can reproduce.

2) There's no fbx2ozz command line tool. Existing fbx tools are:
 - fbx2anim and fbx2skel allow to build an animation and a skeleton. See https://code.google.com/p/ozz-animation/wiki/OfflinePipeline#Standard_pipeline. If you download ozz binaries this tools are located in bin/tools folder.
 - sample_skin_fbx2skin allows to load a skinned mesh from a fbx file. It's build with sample_skin. I just saw that it wasn't included in the binary packages with version 0.7.0. I'll fix it for the next build. In the mean time I've uploaded Windows version here: http://ozz.qualipilote.fr/downloads/ozz-0.7.0-windows32-vs2012-sample_fbx2mesh.zip.
 Also note that if you're building ozz from sources you'll need to have fbx sdk installed, otherwise only Collada tools will be built.

3) I understand this point and the need for more "atomic" tutorials. Could you 
open a new "enhancement" issue and list the kind of things you'd expect ?

I think that skinning is the most advanced sample, because SkinningJob setup 
requires a lot of pointer arithmetic. Playback and Attach sample are probably 
easier ones to start with.

In next version (0.8.0) I'm doing some refactoring in the sample framework with 
skinning and meshes. The mesh structure will be available in the sample 
framework (not only the skinning sample) and the tool (renamed as fbx2mesh) as 
well.

Thanks for posting, hope it will help,
Guillaume

Original comment by guillaum...@gmail.com on 24 Dec 2014 at 3:58

GoogleCodeExporter commented 9 years ago
Thanks for the quick response, and the upload of fbx2mesh. 

In response to my initial problem, I was incorrectly trying to deserialize a 
pointer as suggested.

When you say it's (SkinnedMesh) a data structure only suitable for the skinning 
example: Am I correct in thinking it's only taking information from the model 
file that the example_skin solution finds relevant to rendering? i.e. there is 
no reason this same structure wouldn't work for other FBX model files- but it 
will only get the same information it currently does and is set up for. 

Your answer sort of suggests that SkinningJob maybe an alternative to 
SkinnedMesh, but the example uses both. Do you know what would be the optimal 
way of skinning would be? Am I best placed to follow the skin tutorial and 
alter the SkinnedMesh to my requirements?

Original comment by ThomasBu...@gmail.com on 24 Dec 2014 at 4:30

GoogleCodeExporter commented 9 years ago
Also; I've just double checked looking for those binaries. Thought you should 
know that in "ozz-0.7.0-windows32-vs2013.zip" ./bin/tools there are no fbx2skel 
and fbx2anim executables, only the collada counterparts. 

Original comment by ThomasBu...@gmail.com on 25 Dec 2014 at 12:02

GoogleCodeExporter commented 9 years ago
>> Am I correct in thinking it's only taking information from the model file 
that the example_skin solution finds relevant to rendering?

That's correct. I also meant that the tool (skin_sample_fbx2skin) has some 
restrictions that are ok for the purpose of the sample, but might not for a 
production case: it only extracts the first mesh, doesn't support static 
meshes, doesn't support materials ... I'll improve it in future release, but it 
will still target samples usage.

>> there is no reason this same structure wouldn't work for other FBX model 
files.

That's right also, this structure will work for other models. I don't think it 
will fit every engine use case though, which is why I release it with the 
samples.

>> Your answer sort of suggests that SkinningJob maybe an alternative to 
SkinnedMesh.

No that's not what I wanted to say. ozz::sample::SkinnedMesh is a data 
structure, whereas ozz::geometry::SkinningJob is a proccess/algorithm for 
skinning ANY mesh (just a matter of input/output setup). So if you want to use 
ozz skinning you need the SkinningJob, but not necessarily the SkinnedMesh. One 
would also only use ozz skeletal animation features (sampling, blending...) 
with his own skinning implementation.

>> Do you know what would be the optimal way of skinning would be? Am I best 
placed to follow the skin tutorial and alter the SkinnedMesh to my requirements?

That's a good strategy (for a quick start) if you don't already have a mesh 
format. As you said you'll then probably modify/extend the SkinnedMesh for your 
needs, and adapt the tool also. Please note that I'm doing some changes on this 
data structure for the 0.8.0 build (work in progress here: 
http://code.google.com/p/ozz-animation/source/browse/?name=incoming), and also 
to the skinning sample to make it a bit more "real world" (output vertices 
directly to a vertex buffer).

>> Thought you should know that in "ozz-0.7.0-windows32-vs2013.zip" ./bin/tools 
there are no fbx2skel and fbx2anim executables.

Thanks! I opened issue 
http://code.google.com/p/ozz-animation/issues/detail?id=3 to track this down.

If we're done with your original build issue I'll close this thread. Don't 
hesitate to start a new one for any other issue, question, or suggestion.

Thanks for posting,
Guillaume

Original comment by guillaum...@gmail.com on 25 Dec 2014 at 2:58

GoogleCodeExporter commented 9 years ago

Original comment by guillaum...@gmail.com on 27 Dec 2014 at 10:38

GoogleCodeExporter commented 9 years ago
The version of fbx2mesh you've uploaded seems to create mesh.ozz files with a 
tag of "ozz-sample-Mesh" rather than the "ozz-sample-SkinnedMesh" used in the 
skinning example - is there any reason for this? 

I was trying to swap the model for one of my own.

Original comment by ThomasBu...@gmail.com on 28 Dec 2014 at 10:08

GoogleCodeExporter commented 9 years ago
This renaming is part of the changes I'm doing for the next build, my mistake 
uploading this version. Is it solved if you use the tool provided with version 
0.7.1 ?

Original comment by guillaum...@gmail.com on 29 Dec 2014 at 10:20

GoogleCodeExporter commented 9 years ago
Building 0.7.1 gives me a correct executable, I thought I would just let you 
know for the sake of the archive :)

Original comment by ThomasBu...@gmail.com on 29 Dec 2014 at 12:54

GoogleCodeExporter commented 9 years ago
I've removed the 0.7.0 executable from the downloads.
Thanks!

Original comment by guillaum...@gmail.com on 29 Dec 2014 at 7:55