反射效果在制作游戏场景时是经常需要的,特别是在大理石、陶瓷类材质上有助于提升场景质感与氛围。
说道反射,游戏中常见做法就是利用当前场景cubemap作为反射源
而cubemap又是当前场景+Skybox的作用结果。
一 制作CubeMap
- 天空球【网上可以下载到很多.unitypackage,只说明unity新版本5.0之后将skybox移到了Lightmap下设置,旧版本在RenderSettings下设置】
- cubemap【5.3.4版本在这里如图第三级资源目录下创建cubemap ,旧版本在第二级目录即可找到】
- 在场景中心,也就是你认为能反射全景的中心位置创建一个Sphere 如图
- 创建cubemap脚本代码【在资源目录的Editor文件夹中新建js脚本RenderCubemapWizard,将下面代码粘进去即可】
// Render scene from a given point into a static cube map.
// Place this script in Editor folder of your project.
// Then use the cubemap with one of Reflective shaders!
class RenderCubemapWizard extends ScriptableWizard {
var renderFromPosition : Transform;
var cubemap : Cubemap;
function OnWizardUpdate () {
helpString = "Select transform to render from and cubemap to render into";
isValid = (renderFromPosition != null) && (cubemap != null);
}
function OnWizardCreate () {
// create temporary camera for rendering
var go = new GameObject( "CubemapCamera", Camera );
// place it on the object
go.transform.position = renderFromPosition.position;
go.transform.rotation = Quaternion.identity;
// render into cubemap
go.GetComponent.().RenderToCubemap( cubemap );
// destroy temporary camera
DestroyImmediate( go );
}
@MenuItem("GameObject/Render into Cubemap")
static function RenderCubemap () {
ScriptableWizard.DisplayWizard.(
"Render cubemap", "Render!");
}
}
- 稍等片刻,脚本编译后 菜单栏的GameObject下生成了新的Render into CubeMap按钮,打开
并将Sphere球体 与 CubeMap物体一一拖放到如图所示位置。完成后点击右下角的Render! ———————CubeMap即可秒生成
二 利用ShaderForge制作反射shader
-
简单的forge shader
Texture 2D – 模型漫反射贴图
CubeMap – 刚生成的CubeMap文件
CubeMap – 控制CubeMap的反射强度[你也可以用其他变量 不唯一]
Multiply – 乘法节点负责倍增反射强度
-
生成shader后回到场景资源文件夹中,将场景某地面的贴图材质球shader换成我们自己制作的shader即可,如图效果!
PS:当然你也可以自己DIY 增加自发光 增加高光 方法不固定