水晶材質再探

  • 1469
  • 0
  • 2012-10-12

摘要:水晶材質再探

現在要做一個水晶折射效果, 之前用了Compositor把全景當成背景來扭曲,

今天想要用網路上 Chromatic Aberration 的方式, 來做出有顏色散射的效果

首先

先挖出以前的程式


material Rz/DynamicCubeMap
{
	technique
	{
		pass
		{
			vertex_program_ref Rz/RefractionVP
			{
			}
			fragment_program_ref Rz/RefractionFP
			{
			}	
			
			texture_unit
			{
				// will be filled in at runtime
				cubic_texture dyncubemap combinedUVW
				//tex_address_mode clamp
				//env_map cubic_reflection
			}
		}
	}
}

看起來好像以前寫過, 但是忘記怎麼寫了... 要把cubic_texture塞一個Cubemap進去給它, 先去FORUM找一下我以前參考的範例

(以前要是有寫BLOG的習慣 就不會忘得這麼徹底了)

結果,找到我的Framework中還留著 CubeMap Camera的設定


	// create the camera used to render to our cubemap
	mCubeCamera = mSceneMgr->createCamera("CubeMapCamera");
	mCubeCamera->setFOVy(Ogre::Degree(90));
	mCubeCamera->setAspectRatio(1);
	mCubeCamera->setFixedYawAxis(false);
	mCubeCamera->setNearClipDistance(5);

	// create our dynamic cube map texture
	Ogre::TexturePtr tex = Ogre::TextureManager::getSingleton().createManual("RzDynamicCubeMap",
		Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_CUBE_MAP, 1024, 1024, 0, Ogre::PF_R8G8B8, Ogre::TU_RENDERTARGET);

	// assign our camera to all 6 render targets of the texture (1 for each direction)
	for (unsigned int i = 0; i < 6; i++)
	{
		mTargets[i] = tex->getBuffer(i)->getRenderTarget();
		mTargets[i]->addViewport(mCubeCamera)->setOverlaysEnabled(false);
		mTargets[i]->addListener(this);
	}//for

以及當Cubemap RenderTarget打開後, 會自動進入的 preRenderTargetUpdate


	mCubeCamera->setOrientation(Ogre::Quaternion::IDENTITY);
	if (evt.source == mTargets[0]) mCubeCamera->yaw(Ogre::Degree(-90));
	else if (evt.source == mTargets[1]) mCubeCamera->yaw(Ogre::Degree(90));
	else if (evt.source == mTargets[2]) mCubeCamera->pitch(Ogre::Degree(90));
	else if (evt.source == mTargets[3]) mCubeCamera->pitch(Ogre::Degree(-90));	
	else if (evt.source == mTargets[5]) mCubeCamera->yaw(Ogre::Degree(180));

此時, 程式變得很慢, 因為多畫了6個RenderTarget

物體折射出黑色的背景, 但至少不用花太大力氣就把效果叫出來.

ISSUES:

1. 將背景變成和BG一樣的底色

2.CUBEMAP CAMERA的位置要放到OGRE中心而且, 它自己不能被畫在CUBEMAP上

3. 考慮不用真實CUBEMAP, 而是用已經做好的CUBEMAP

(又中略)

 

Issues:

1. 要有星芒

2.背景太平淡, 可否找到暖色系的

3.反面折射也要有

 

Rz

 

 

 

  Rz     should work (hard)