unity5, make a custom PBS shader

unity5中引入了基于物理着色(PBS)的Standard shader。由于这种着色器通过调节参数和贴图可逼真模拟各种硬质表面,所以不必再像unity4时代那样需要对各种质感材质单独编写着色器,而且能得到更好的效果。这种“万能着色器”仿佛给人一种不再需要自己编写着色器的假象,但做游戏跟做虚拟现实不一样,除了真实性,还要追求趣味性和艺术夸张。所以老古语不过时:没有使用自定义着色器的游戏,不是好游戏。

但自己实现PBS是很困难的,如果我们想既继承Standard shader的PBS特性又加入自己的定制效果,最好我们的自定义shader能在Standard shader的基础上进行编写,即实现自定义PBS着色器(custom PBS shader)。

由于是新东西,资料不全,google了一整天也没能找到现成方法,unity官方文档中对此完全没有作说明(在surface shader自定义光照模型 部分只给了不带PBS的例子),unity论坛里有多个帖子问到类似问题,但都没有满意解答。最后在下面两个连接里找到了一点儿线索:

http://forum.unity3d.com/threads/for-those-in-u5-beta-is-pbr-really-that-good.283867/page-3#post-1886525

http://blogs.unity3d.com/2014/10/29/physically-based-shading-in-unity-5-a-primer/ (文章下面 MIG 的提问)

此线索是:“

  from the release notes for beta 12:

  • Shaders: Surface shaders can use physically based shading now; the same as Standard shader uses.

    • Use "Standard" lighting function, and "SurfaceOutputStandard" output structure.
    • Do an #include "UnityPBSLighting.cginc" in your shader to get it.
    • Default options require shader model 3.0, so add a "#pragma target 3.0" too.

然后又结合了UnityPBSLighting.cginc中的源代码(注1),当然,只是从UnityPBSLighting.cginc中拷贝一些代码出来(而不是修改它),最后终于把custom PBS shader试验成功了。

注1:UnityPBSLighting.cginc这个文件在哪儿?有三个途径获得:

(1),在 http://docs.unity3d.com/Manual/SL-SurfaceShaderLighting.html 中写道:“file inside Unity ({unity install path}/Data/CGIncludes/ on Windows, /Applications/Unity/Unity.app/Contents/CGIncludes/ on Mac)”,需要注意的是"/Applications/Unity/Unity.app/Contents/CGIncludes/"这个路径是在Unity.app的“包内容”里,所以这就是为什么在Mac上虽然UnityPBSLighting.cginc已经随unity一起安装了,但确不能通过文件搜素找到。

(2),通过网址http://docs.unity3d.com/Manual/StandardShaderMakeYourOwn.html进入在线的"Make your own"页面下载builtin_shaders的最新版本(也包括历史版本)。因为我的unity是最新的,所以通过此途径下载到的最新版的builtin_shaders与途径(1)中的是一致的,但如果你的unity不是最新的,一定要根据你的unity版本号下载相应版本的builtin_shaders,否则你拷贝其中的代码用到自定义shader中可能报错。

(3),在浏览器地址栏输入file:///Applications/Unity/Unity.app/Contents/Documentation/en/Manual/StandardShaderMakeYourOwn.html进入离线的"Make your own"页面(从地址上你可以看出这个页面实际上保存在你的电脑中),下载builtin_shaders,但要注意,通过这个离线文档下载的builtin_shaders可能不是最新的,我今天就被此坑了一回,通过此途径下载的UnityPBSLighting.cginc文件中的代码拷贝到自定义shader中报错,搞了半天没找到原因,直到我又通过途径(1)重新获得UnityPBSLighting.cginc。。。

综上,途径(1)是最好的。

下图第一个球用的是Standard shader,第二个球用的是“将法线当作颜色值”的自定义shader(不带PBS),第三个球是今天的试验成果:在Standard shader的PBS基础上添加了“将法线当作颜色值”效果的杂交shader。

时间: 2024-12-25 17:43:09

unity5, make a custom PBS shader的相关文章

【浅墨Unity3D Shader编程】之九 深入理解Unity5中的Standard Shader (一)&屏幕水幕特效的实现

本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/49556461 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 本文工程使用的Unity3D版本: 5.2.1 概要:本文主要介绍了Unity5中的标准着色器,并且也涉及到了基于物理的着色.延迟渲染等高级着色技术,而在文章后半部分,也对屏幕水幕特效的实现方法进行了讲解与分析. 依然是附上

Unity加载模块深度解析(Shader)

作者:张鑫链接:https://zhuanlan.zhihu.com/p/21949663来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 接上一篇 加载模块深度解析(二),我们重点讨论了网格资源的加载性能.今天,我们再来为你揭开Shader资源的加载效率. 这是侑虎科技第59篇原创文章,欢迎转发分享,未经作者授权请勿转载.同时如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨.(QQ群465082844) 资源加载性能测试代码 与上篇所提出的测试代码一样,我们

同上两篇 这篇是关于shader的

资源加载性能测试代码 与上篇所提出的测试代码一样,我们对于Shader资源的加载性能分析同样使用该测试代码.同时,我们将Shader文件制作成一定大小的AssetBundle文件,并逐一通过以下代码在不同设备上进行加载,以期得到相应的资源加载性能比较. 测试环境引擎版本:Unity 5.2版本测试设备:三台不同档次的移动设备(Android:红米2.红米Note2和三星S6) Shader资源 Shader资源与之前的网格资源和纹理资源不同,其本身物理Size很小.一般来说,一个Shader资源

shader开发_5.Surface shader官方例子(注释版本)

上一章unity 默认生成了一个 surface shader 这里来了解一下它 1 Shader "Custom/myshader01" { //shader的路径名称 2 Properties { //资源属性代码块 3 _Color ("Color", Color) = (1,1,1,1) //定义一个纯白不透明 4 _MainTex ("Albedo (RGB)", 2D) = "white" {} //2D贴图(可在

Unity3D着色器Shader编程入门(一)

自学Unity3D也有大半年了,对Shader一直不敢入坑,最近看了些资料,以及通过自己的实践,对Shader还是有一点了解了,分享下仅作入门参考. 因Shader是对图像图像渲染的,学习前可以去了解下图形图像学及GPU编程相关的知识.强烈推荐<GPU 编程与CG 语言之阳春白雪下里巴人>,这本书网上有电子版. 还有一本是关于Unity3D的Shader开发的<Unity着色器和屏幕特效开发秘笈>该书是<Unity Shaders and Effects Cookbook&g

ShaderLab学习小结(一)最简化的顶点片断Shader

Shader "Custom/SimpleShader" //Shader最外层,""中定义Shader名 { SubShader{ //必要组成部分 pass{ //通道 CGPROGRAM //CG程序开头 #pragma vertex vert //定义顶点级程序 #pragma fragment frag //定义片断级程序 #include "unitycg.cginc" //引用unitycg文件,unity自定的结构体和函数等 st

unity,荧光效果(bloom)实现过程

两个月前,刚接触unity的时候费了半天劲儿做了个荧光效果(见:http://www.cnblogs.com/wantnon/p/4430749.html),今天终于抽空整理了一下,把过程写下来. 荧光效果如图:   一,接口: 整理完以后得到三个东西:AE_GroupBloom.cs,Camera_renderBloomRT.prefab,bloomEmitter.shader. 使用方法: 1,将AE_GroupBloom.cs添加到Main Camera上. 2,将Camera_rende

UNITY渲染基础

UNITY渲染基础 渲染 1.何为渲染? 所有我们能看到的东西都是需要进行渲染的. 比如:天空盒,场景模型,角色模型,特效...... 如果没有渲染,游戏世界将是一片黑暗. 2.各版本渲染区别 Unity4.X:渲染使用的事AutoDesk的Beast技术: Unity5.X:渲染使用的事Enlighten引擎: Unity5.6后:渲染使用的还是Enlighten引擎,但是有了升级: 3.移动端渲染 移动端的模型大多是使用两张类型的贴图作为渲染的素材: 一张是漫反射贴图,一张是法线贴图. 4.

Unity3D光照前置知识——Rendering Paths(渲染路径)及LightMode(光照模式)译解

简述 Unity supports different Rendering Paths. You should choose which one you use depending on your game content and target platform / hardware. Different rendering paths have different performance characteristics that mostly affect Lights and Shadows