Page 1 of 1

[News] Ogre Progress Report December 2015

Posted: Fri Jan 01, 2016 6:25 pm
by dark_sylinc
Happy New Year and Merry Christmas!

spacegaier has been busy with family stuff over the new year; so this time it's me posting the news.
It has been a long time since we posted some news. Fear not, we've just been very busy! People were starting to ask for a progress update; so there you go!

Thanks to everyone for choosing Ogre!

Direct link: http://www.ogre3d.org/2016/01/01/ogre-p ... ember-2015

Re: [News] Ogre Progress Report December 2015

Posted: Sat Jan 02, 2016 9:35 am
by syedhs
Wow nice update... btw, I think Ogre needs better website, visually.. Maybe just slap in wordpress, find free template and throw in a few nice images.. and done with it.. :)

How long do you think you can finish the android, ios and osx? If it takes time (more than 6 months), then probably just release as it is.. then mark 2.2 to complete the rest of renderers..

Re: [News] Ogre Progress Report December 2015

Posted: Sat Jan 02, 2016 11:51 am
by spookyboo
Good work!
I agree with syedhs about the website. It is time to move forward and start fresh.
Maybe it has been proposed before (I don't know), but isn't it possible to start some kind of kickstarter project to create a 2.1 demo with professional artwork/content? All backers get a nice demo and Ogre becomes attractive again.

Re: [News] Ogre Progress Report December 2015

Posted: Sat Jan 02, 2016 12:34 pm
by syedhs
spookyboo wrote: Maybe it has been proposed before (I don't know), but isn't it possible to start some kind of kickstarter project to create a 2.1 demo with professional artwork/content?
That is a very good idea. I definitely will chime in and contribute! I don't speak for all, but I think old but non-active members will also be interested.

Re: [News] Ogre Progress Report December 2015

Posted: Mon Jan 04, 2016 12:25 pm
by GlowingPotato
syedhs wrote:
spookyboo wrote: Maybe it has been proposed before (I don't know), but isn't it possible to start some kind of kickstarter project to create a 2.1 demo with professional artwork/content?
That is a very good idea. I definitely will chime in and contribute! I don't speak for all, but I think old but non-active members will also be interested.
Thats nice, I would be glad to help. PM me if you guys need a prop artist.

Re: [News] Ogre Progress Report December 2015

Posted: Tue Jan 05, 2016 6:45 pm
by MattStevens
In Ogre 2.1; TagPoints are much better: they are exactly like regular SceneNodes, except they occupy a little more RAM (a few more bytes per node), and can be attached to Bones. Other than RAM consumption, there is no performance penalty for replacing SceneNodes with TagPoints (*).

You can make a TagPoint child of a SceneNode, a SceneNode child of a TagPoint, and a TagPoint child of another TagPoint. The only thing you can’t do is make a SceneNode child of a Bone. You must use a TagPoint for that.
Thank god ! I might update to 2.1 just for this feature. Attaching objects to a bone and back to the scene is a real pain in the ass. Do you know how hard it would be to retro fit the changes to 1.9 or how to have the equivalent in 1.9 ? I'm wondering what happens if you attach a SceneNode to a TagPoint in 1.9. Looking at the code there is no check that prevents it. What kind of issues should I look for if I do it ?

Re: [News] Ogre Progress Report December 2015

Posted: Wed Jan 06, 2016 6:24 am
by dark_sylinc
MattStevens wrote:Do you know how hard it would be to retro fit the changes to 1.9 or how to have the equivalent in 1.9 ?
I'm afraid next to impossible because these TagPoints come from the new v2 Skeleton system that depends on the foundations laid in 2.0.

For what is worth in 1.x; I used to do this trick:

Create a TagPoint and a SceneNode. The attachment Entity will go to the SceneNode. Use a listener to translate the data from the TagPoint to the SceneNode ('childNode'):

Code: Select all

Entity *character;
Entity *weapon;

Ogre::SkeletonInstance *skeleton = character->getSkeleton();
Ogre::TagPoint *tagPoint = skeleton->createTagPointOnBone( skeleton->getBone(
                                            "Bone Name" ) );

SceneNode *childNode = rootSceneNode->createChildSceneNode();
childNode->attachObject( weapon );
tagPoint->setListener( new TagPointListener( childNode ) )
//Tell the child node that we have a tagPoint associated
childNode->getUserObjectBindings().setUserAny( Ogre::Any( tagPoint ) );

Code: Select all

class TagPointListener : public Ogre::Node::Listener
{
    Ogre::Node	*m_realNode; //Node where we redirect our updates
public:
    TagPointListener( Ogre::Node *realNode ) : m_realNode( realNode ) {}

    void nodeUpdated( const Ogre::Node *updatedNode )
    {
        m_realNode->setPosition( updatedNode->_getDerivedPosition() );
        m_realNode->setOrientation( updatedNode->_getDerivedOrientation() );
        m_realNode->setScale( updatedNode->_getDerivedScale() );
    }

    void nodeDestroyed( const Ogre::Node* )
    {
        delete this;
    }
};
The TagPointListener responds to TagPoint's changes and translates them to the SceneNode. When the TagPoint is destroyed, the TagPointListener nukes itself and the SceneNode is still part of the root scene node (though watch out for the dangling pointer in UserAny!)

To remove the 'weapon':

Code: Select all

const Ogre::Any &any = childNode->getUserObjectBindings().getUserAny();

if( !any.isEmpty() )
{
    //Remove associated tag point, we don't need it anymore
    Ogre::SkeletonInstance *skeleton = character->getSkeleton();
    Ogre::TagPoint *tagPoint = Ogre::any_cast<Ogre::TagPoint*>( any );

    Ogre::Node::Listener *listener = tagPoint->getListener();
    tagPoint->setListener( 0 );
    delete listener;

    skeleton->freeTagPoint( tagPoint );
}
It's a band aid, but it works well. It workarounds all the issues with 1.9's TagPoints at the cost of more RAM, the UserAny slot, and slower performance (2x nodes, which can be an issue if there's a loooot of TagPoints. Though you'll probably already have CPU performance issues if you've got many skeletally animated entities anyway)

It works because the attachment is actually linked to a SceneNode, not a TagPoint; and the listener just acts like a bridge. UserAny is a way of tagging the SceneNode that it is being linked to a TagPoint. If UserAny is already in use, you could keep an external list of nodes that have been linked to TagPoints.

Re: [News] Ogre Progress Report December 2015

Posted: Wed Jan 06, 2016 3:55 pm
by MattStevens
Thanks sylinc,
my oldest system was using tag point but I was changing the entity's parent and it was a real pain in the ass. Especially when I was trying to get the world position, it would only get up to the entity and then I would have to add the parent's entity transform.

Until we upgrade to Ogre 2.1 I'll use your system. I'm just wondering if it works with hardware skinning ? We use that feature for pretty much all of our animated skeletal meshes.

EDIT: Your system uses _getDerivedPosition of the TagPoint and sets it to the weapon's scene node. This function stops at the skeletal root bone, right ? That means you do not have the entity's transform accounted for. How do you fix that issues ? Will linking the weapon's scene node to the entity's parent scene node do the trick ?

Re: [News] Ogre Progress Report December 2015

Posted: Wed Jan 06, 2016 4:43 pm
by dark_sylinc
MattStevens wrote: Until we upgrade to Ogre 2.1 I'll use your system. I'm just wondering if it works with hardware skinning ? We use that feature for pretty much all of our animated skeletal meshes.
Do you mean the workaround or the 2.1 thing? Anyway, the answer is both.
However I realized something worth mentioning: There is a new class 'Item' which supersedes 'Entity' (it's now v1::Entity btw). v1::Entity is there to ease the transition from 1.x to 2.1 enormously (v1::Entity is slower in terms of performance than Item, but it's still much faster than it was in 1.x). Also v1::Entity still supports some features that haven't been ported yet (like pose animations).
Items use the new Skeleton system. TagPoints are designed for these skeletons.
v1::Entity uses the v1::Skeleton system. v1::Entity can be attached to the new TagPoints; but the new TagPoints can't be made child of a v1::Bone. In fact v1::TagPoint is broken and there was no plan to fix it (the TagPointListener trick should still work as you can also add the listener to a Bone directly, rather than a TagPoint)
EDIT: Your system uses _getDerivedPosition of the TagPoint and sets it to the weapon's scene node. This function stops at the skeletal root bone, right ? That means you do not have the entity's transform accounted for. How do you fix that issues ? Will linking the weapon's scene node to the entity's parent scene node do the trick ?
I looked again and I made a mistake. The sceneNode is not child of the Root scene node, but rather rather child of the Entity's scene node; which fixes the problem.

Re: [News] Ogre Progress Report December 2015

Posted: Wed Jan 06, 2016 5:10 pm
by hydexon
How about the Apple Metal Rendering Subsystem? i saw your Metal programming rants in Twitter time ago?, i'm not asking a ETA yet, probably when the v2-1-pso is merged in v2-1 branches?, i really don't care about DX12 yet, since i have MacBook (2014) with the El Capitan installed, and i can't use it a lot since my projects relies heavily with OGRE..., and Xcode is somewhat nice to work.

Re: [News] Ogre Progress Report December 2015

Posted: Fri Jan 08, 2016 7:50 pm
by dark_sylinc
hydexon wrote:How about the Apple Metal Rendering Subsystem? i saw your Metal programming rants in Twitter time ago?, i'm not asking a ETA yet, probably when the v2-1-pso is merged in v2-1 branches?, i really don't care about DX12 yet, since i have MacBook (2014) with the El Capitan installed, and i can't use it a lot since my projects relies heavily with OGRE..., and Xcode is somewhat nice to work.
There's no ETA. Another forum dev is handling the Metal port. My Metal twitter rants were about the iPhone game we were developing (which heavily borrows code from Ogre, but doesn't use Ogre).