【译】Unity5中基于物理的Shader

发表于2016-03-17
评论0 1.7k浏览

 

原文地址:http://blogs.unity3d.com/2014/10/29/physically-based-shading-in-unity-5-a-primer/

 原文作者未做版权声明,视为共享知识产权进入公共领域,自动获得授权

 

 

  什么是基于物理的着色呢?基于物理的着色(简称PBS)就是以某种方式模拟现实中材质和光照的相互作用。直到最近PBS才可以应用在实时图形渲染中。这种方法在需要光照和材质更加直观和逼真地协同工作的场合下优势非常明显。

     
什么是基于物理的着色呢?基于物理的着色(简称PBS)就是以某种方式模拟现实中材质和光照的相互作用。直到最近PBS才可以应用在实时图形渲染中。这种方法在需要光照和材质更加直观和逼真地协同工作的场合下优势非常明显。

   
基于物理着色的想法是创建一种友好的方式来实现在不同的光照条件下的逼真效果。它模拟光线在现实中的行为,而不是使用多个特定的模型来模拟,因为后者可能会在一些情况下失效。

   
为实现这种效果它要遵循物理原理,包括能量守恒(也就是物体反射出去的光量不可能超过所接收的光量),Fresnel反射(所有表面反射在掠射角处更加强烈),以及物体表面如何自我遮挡(几何术语)等。

   Unity 5
包含了若干标准着色器(Standard Shader),它们共同组成了一个完整的PBS光照明模型,且非常易于使用。标准着色器(Standard Shader)主要是针对硬质表面(也就是建筑材质)而设计的,可以处理大多数现实世界的材质,例如石头、陶瓷、铜器、银器或橡胶等。但它也可以非常出色地处理一些非硬质表面的材质,例如皮肤、头发或布料等。


   
"我的"游戏内容有何关联?

   
需要注意的是:基于物理的着色器并不一定意味着真实,单纯地施加限制也不一定就能完全决定游戏表现。基于物理的着色器适用于多种不同的美术风格和美学效果,例如从精确扫描(ACCURATELY SCANNED),到传统拍照(TRADITIONALLYPHOTOGRAPHED),再到手工绘制(HAND-PAINTED)的各类纹理。
    
   
对于编写无需特殊光照表现的2D游戏的人们来说,PBS不是必需的选项。但是,如果你想玩转PBS,即基于STANDARD SHADER来创建出酷炫的效果,在这里我们将提供一些有用的使用经验。

一窥究竟
   
当我们谈及Unity5中的光照时,不妨引入两个概念,即ContextContentContext是指Unity原生的一些内容;而Content则是用户创造的内容(类似于UGC)

关于CONTEXT
   
当给一个对象添加光照时,了解该对象周边的环境是非常重要的。Unity的先前版本中已经提供了一些经典的辅助工具,例如光照探头,它能够对某个位置上的漫反射光照进行采样。而在Unity 5中,我们将提供用于描述周围环境信息的更加有效的方式。

纵览全局
HDR
信息是PBS中一个非常重要的元素。它能够更加有效地描述环境信息,例如,太阳的明亮度可能会超过蓝天10倍。Unity5中提供了一个原生的通道来处理HDR格式的文件,你可以直接导入后缀为.hdr.exr的图片资源。

 

 

 

 

 

添加发光效果

   
反射探头(Reflection Probe)表达了某个确定位置的反射情况。Unity5的场景中会默认包含一个反射探头(你可以依次点击Edit->SceneRender Settings->Default Reflection来查看它)。你可以对其设置进行修改,或者干脆依赖于天空盒且不设置具体位置。

   
当然,你也可以创建自己的反射探头(Reflection Probe)。只需依次点击GameObject->Light->Create Reflection probe即可.

   
然后你就可以进行如下操作:
   
   
你可以将反射探头(Reflection Probe)拖动到场景中的任意位置,它就开始主动获取周围环境的光照信息了。
每个反射探头(Reflection Probe)都有其作用域(就是探头周围显示的黄色包围盒)。作用域内的物体将从反射探头上获取其反射信息。

更多的逐像素着色:
   
由于Unity5提供的动态全局光照特性,光照探针也包含了间接的光线反射信息,并通过标准着色器作用于每个像素。这样,不管光线是直接或间接地作用于法线贴图,它的效果看起来都会更棒。

动态全局光照
   
全局光照是PBS支持环境中Context层面的重要组成部分。为了对unity5中的全局光照有一个全面的理解,最好的方法是查看我们发表的有关动态全局光照的博客文章

颜色空间
   PBS
和标准着色器都工作在线性和Gamma模式。HDR编码、反射探针的数据以及其他Content都会与你选择的颜色空间相适应。但无论何时,为了达到最佳的(最让人舒适的)视觉效果,你应该尽可能保持在线性颜色空间。

内容
   
内容是你直接创建的数据,标准着色器确实针对Unity中传统的材质工作流程进行了的一些改进,希望你能接受并喜欢。

材质编辑器
   
标准着色器还引入了一个新的材质编辑器,它使PBS的材质编辑工作比以前的非PBS材质更简单。

   
新编辑器更加精简,但却提供了材质的所有可能选项。在新编辑器中,我们不需要选用不同的着色器来改变纹理通道;不会再出现 “texture unused, please choose another shader” 这样的提示;不再需要通过切换着色器来改变混合模式。

   
你会有一些备选的纹理通道,无需强制使用,任何一个闲置通道的相关代码都会在编译时被优化掉,因此不用担心效率问题。unity会根据你输入到编辑器中的任何数据来生成正确的代码,使它以最高的效率运行。

   
小贴士:你可以用ctrl+点击纹理的方式预览大图,并且还可以分别查看颜色和Alpha通道。

 

 

按你预想的方式点亮一切!
  PBS
当然和Unity5的动态全局光照工作流程是兼容的,全局光照系统完全了解标准着色器的工作方式,并在渲染场景时将其考虑在内。

  PBS
和全局光照的合璧,使得快速改变整个场景的光照条件变成可能,效果也更逼真。

   
对下图中的这个小镇,你会注意到它和本文开头的那幅图有不同的光照设置。静态物体看起来更有质感和层次感,整个场景错落有致。这正是PBS的魔力所在。一旦材质加以PBS方式构建,它就会变得和光照条件完全独立,从而大大减少工作量!

   
这就是我们喜欢它的理由,也是我们认为你们也会喜欢它的理由!

 

最后告诉大家,上面的场景将会在Unity5.0发布时在Asset Store上同时发布。

 

接下来,我们将深入讨论材料通道如何放在一起,关于制作文理的提示和技巧以及其他更多的内容!请继续保持你的兴趣,深入了解资源创作。


 

 

 

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引