shader forge初级篇|反射材质的运用



反射效果在制作游戏场景时是经常需要的,特别是在大理石、陶瓷类材质上有助于提升场景质感与氛围。

说道反射,游戏中常见做法就是利用当前场景cubemap作为反射源
而cubemap又是当前场景+Skybox的作用结果。

一 制作CubeMap

  • 天空球【网上可以下载到很多.unitypackage,只说明unity新版本5.0之后将skybox移到了Lightmap下设置,旧版本在RenderSettings下设置】
  • cubemap【5.3.4版本在这里如图第三级资源目录下创建cubemap ,旧版本在第二级目录即可找到】
    新建CubeMap
  • 在场景中心,也就是你认为能反射全景的中心位置创建一个Sphere 如图
    Sphere球体
  • 创建cubemap脚本代码【在资源目录的Editor文件夹中新建js脚本RenderCubemapWizard,将下面代码粘进去即可】
    创建JS脚本
// 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即可秒生成
    CubeMap

二 利用ShaderForge制作反射shader

  • 简单的forge shader
    Texture 2D – 模型漫反射贴图
    CubeMap – 刚生成的CubeMap文件
    CubeMap – 控制CubeMap的反射强度[你也可以用其他变量 不唯一]
    Multiply – 乘法节点负责倍增反射强度
    ShaderForge

  • 生成shader后回到场景资源文件夹中,将场景某地面的贴图材质球shader换成我们自己制作的shader即可,如图效果!
    展示

PS:当然你也可以自己DIY 增加自发光 增加高光 方法不固定