(之前一直沒有搞懂 Render_Scene和Render_Quad的差別)
CompositionTargetPass* target = technique->createTargetPass();
target->setOutputName("rt1");
target->setInputMode(Ogre::CompositionTargetPass::IM_NONE);
target->setVisibilityMask(Visibility_ForDistort);
{
CompositionPass* pass = target->createPass();
pass->setType(Ogre::CompositionPass::PT_CLEAR);
pass->setClearBuffers(FBT_COLOUR);
pass->setClearColour(Ogre::ColourValue(0.5f,0.5f,1.0f,1.0f));
}//Pass
{
CompositionPass* pass = target->createPass();
pass->setType(Ogre::CompositionPass::PT_RENDERSCENE);
pass->setIdentifier(NormalPass);
}//Pass
今天學到VisibilityMask的用法, 也就是在Viewport中, 可以對每個物件設VisibilityFlag, 然後在不同的TargetPass設定VisibilityMask, 就可以在不同的TargetPass出現不一樣的物件
這裏把Distortion設為0.02
ColorAdd設為0.5
所以OgreHead看起來有NormalMap的顏色出現
但如果我們不想要OgreHead出現的是NormalMap的顏色要怎麼辦?
也就是在扭曲的背景前面, 應該要再放一個正常版的OgreHead顏色
目前想到的方式就是再Render一次, 這次要用不同的Material Scheme
那麼, 是不是要用來扭曲的物體, 都要有特製的Material呢(要有不同的Scheme的Technique)?
實驗結果是: 對的
但是事情總是沒有一帆風順的
Color那一層出現了Z-fighting的情形,
於是將Color和Normal的Pass都Clear Depth
pass->setClearBuffers(Ogre::FBT_COLOUR | Ogre::FBT_DEPTH);
成功了
後續計劃:
改成compositor script版
改成Mogre版
OIT script版
OIT + Distort script版



沒有留言:
張貼留言