osg帖子摘抄--阴影

1. osg对一个大场景中的树添加阴影的问题

具体是这样的!我已经获得了一个建好的场景模型,里面有树木还有房子,当然还有地形(草地)。之前别人建模的时候没有加阴影贴图的。现在我的任务是在原来的场景模型下给树木加上阴影
我目前的做法是首先通过节点访问把我需要加阴影的那些树的节点找到,比如说就一棵树!然后对这个节点进行setNodeMask(),同样用这种方法把地形的节点也找到,也setNodeMask(),然后把整个大场景模型加光源,阴影技法用的是ShadowMap,可是没有什么反应。不知道大家有没有什么建议,或者我这种方法本来就有问题。非常感谢!!!

setNodeMask这件事没什么问题,产生实时阴影这个想法有问题。因为大场景的实时阴影计算在目前来看依然很难(不是OSG的问题,而是技术发展的问题)。您不如直接在3dsmax烘焙阴影贴图最简单


2.阴影与OverlayNode的区别

OverlayNode演示了RTT(渲染到纹理)的一种应用,即,把某个子场景绘制到另一个对象的纹理上。阴影的实现也可以用到RTT技术,不过具体的实现方法还是有很多不同的

3. 

阴影的锯齿一般有两种:
persp alias是投影的远近关系产生的,可以用lispsm来改善
proj alias是因为光照方向与物体表面正好平行导致采样数不够而产生的,实践中基本无解
当然直接提升shadow texture的分辨率是通用的解决方案,只是不能无度而已;一些tiled的方案也可以考虑
最后,大一统的阴影算法是不存在的,如果您想在自己的场景里取得较好的效果,请从模型,美术,布置,坐标精度等多方面考虑

4. 参与阴影的节点一定要放在ShadowedScene节点下


5. 地形阴影问题

 
 m_Model->setNodeMask(CastsShadowTraversalMask);
 m_Model->setNodeMask(ReceivesShadowTraversalMask);
 osg::ref_ptr<osgShadow::ShadowedScene> shadowedScene = new osgShadow::ShadowedScene();
 shadowedScene->setReceivesShadowTraversalMask(ReceivesShadowTraversalMask);
 shadowedScene->setCastsShadowTraversalMask(CastsShadowTraversalMask);


 osg::ref_ptr<osgShadow::ShadowTexture> st = new osgShadow::ShadowTexture();
 shadowedScene->setShadowTechnique(st);
 shadowedScene->addChild(m_Model);

代码如上,对地形增加光照阴影,希望地形既是投影者也是被投影者,怎么没有效果呢?

搞出来了,原来我的法线都设定的同一个向上的值,现在用smooth使用了后才成功,可惜速度慢了点









你可能感兴趣的:(osg帖子摘抄--阴影)