2012年7月25日 星期三

終於出來了...折射程式

把rt1 TargetPass修改成Render_Scene之後, 終於出來了
(之前一直沒有搞懂 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版

沒有留言:

張貼留言