找回密码
 立即注册
查看: 5433|回复: 66

[特效Shader] Unity3D如何实现反射教程二

[复制链接]
发表于 2012-12-30 21:47 | 显示全部楼层 |阅读模式
资源信息 Tutorial Information
教程名称: Unity3D如何实现反射教程二(发帖教程)
适用引擎:   (适用引擎,为空默认为Unity)
教程语种: 中文
教程等级: 1
教程格式: 图文(请用IE9以上浏览器访问本版块)
教程作者: 转载自互联网 (如有问题请短消息联系作者或发表回复)
下载地址: (兑换积分)
点击查看原图
美丽分割线


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在脚本被载入后调用。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2017-3-5 21:22 | 显示全部楼层
楼主是超人
发表于 2017-3-5 21:11 | 显示全部楼层
好帖就是要顶
发表于 2017-3-5 21:12 | 显示全部楼层
顶顶多好
发表于 2017-3-5 21:19 | 显示全部楼层
很好哦
发表于 2017-3-5 20:55 | 显示全部楼层
LZ真是人才
发表于 2017-3-16 18:30 | 显示全部楼层
顶顶多好
发表于 2017-3-16 18:36 | 显示全部楼层
真心顶
发表于 2017-3-16 18:29 | 显示全部楼层
难得一见的好帖
发表于 2017-3-16 18:20 | 显示全部楼层
说的非常好
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-23 16:21 , Processed in 0.101680 second(s), 31 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表