Unity3D如何实现反射教程二
一
Camera refractionCamera;
CreateWaterObjects( cam, out refractionCamera );
//这里创建了一个DontSave的Rtt和HideAndDontSave的Cam。
//为什么不直接使用场景里的观察cam呢? 个人理解u3d中的cam指定rtt后,将不在渲染当前场景到backBuffer。
疑问:如果只是把折射Rtt相机初始化成和观察相机一样,为什么要用Hashtable?并且如果去掉hide标志,每选中一次观察相机都会在创建出一个折射Rtt相机,不清楚这是为什么。
二
refractionCamera.cullingMask = ~(1<<4) & m_RefractLayers.value;
//1(二进制0000 0001)左移四位等于16(二进制0001 0000)
//16取非等于-17(二进制1110 1111)
//-17与运算-1等于-17(二进制1110 1111)
备注:为什么在water层中的物体不会被渲染到折射Rtt,答案就在这里。在有些engine里没有layer的概念,所以一般都是手动去显示和隐藏的,本质上是一回事。
这里也可以使用自己的层,例如定义layer8为yty并排除,就是~(1<<8) & m_RefractLayers.value。
要同时保留4和8,就是二进制的10001000,也就是272 &m_RefractLayers.value。
要同时排除4和8,则是 ~(272 &m_RefractLayers.value);
更多延伸link
三
其他的部分就和反射是一样的了,这里在补充下之前没提到的部分。
void OnWillRenderObject()
如果有物体可见,每个相机都会调用此函数。在裁剪过程中调用,也就是裁剪物体之前。可以用这个来创建具有依
赖性的渲染纹理,只有在被渲染的物体可见时才更新该渲染纹理。
备注:个人认为等同于其他engien的PreRenderCallbacks ()。
void OnDisable()
当对象变为不可用或非激活状态时此函数被调用。
当物体被销毁时它将被被调,并且用于任何清理代码。当脚本在编译结束后从新加载时,OnDisable将被调用,
OnEnable在脚本被载入后调用。 楼主是超人 好帖就是要顶 顶顶多好 很好哦 LZ真是人才 顶顶多好 真心顶 难得一见的好帖 说的非常好