osl语言吧 关注:13贴子:35
  • 9回复贴,共1

【介绍】什么是着色语言,什么osl语言

只看楼主收藏回复



IP属地:江苏1楼2015-08-16 22:48回复
    1,什么是着色?
    首先从图形学的概念说起。数字图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。
    在我们三维领域,图形学主要为了解决两个问题而存在:1,模型;2,渲染。前者的课题也就是如何表述三维空间中的图形和运动,后者则是如何让这些被表述的图形和运动显示为画面。前者我们暂且不提,后者是我们研究的核心。
    我们为了让图形被显示,需要把一些被计算的数据转化为我们看到的东西,这种过程即是“渲染”。而渲染大致分成两个过程:1,shader(着色)2,render(渲染)。这个过程现在我们都打包到渲染器中完成,着色的过程被写成材质球,但是其中其实有着非常复杂的机制,具体机制见下图,其中红色部分即我们要研究的课题,着色。不过为了能够让初学者也明白,现在我们其实也可以简单的这么理解:材质球即是着色过程,其他为渲染。


    IP属地:江苏2楼2015-08-16 23:14
    回复
      2,什么是着色语言?
      最初的渲染器都是用c开发的,也不分着色和渲染。但是随着c++这种面向对象的语言和其思考方式的流行,三维程序员们最先把着色和渲染分割开来。把着色算法写成着色函数来单独描述一个物体的表面,直到这时候着色仍然属于纯程序员的领域,使用c++来编写。首先提出着色语言这个概念的是renderman标准。
      renderman是一个标准,强调一下,我们熟悉的renderman渲染器指的是PRman——由pixar最先指定和开发的renderman渲染器。但是支持renderman标准的渲染器并不仅仅只有PRman,比如3delight也是renderman标准的渲染器。

      renderman的地位我们在这不再强调。但是renderman标准中最先提到了一个概念——着色语言。renderman也提出了自己的着色语言RSL(renderman shading language)。RSL的定义是弱化编程本身的繁琐逻辑以及底层算法,只为了自由的定义材质和材质球(着色函数)而存在的脚本语言。
      所以,着色语言被定义为一种脚本,而非繁琐的c++。你并不需要真正掌握如lambert余弦定律,BRDF双向反射分布函数等复杂的底层图形学算法(当然掌握最好),也不需要了解这些函数具体跟哪些渲染函数连接,被调用,如何采样,如何着色。只使用如同mel一样简单的几行就能轻易的定义你想要实现的效果。这种语言比起给程序员使用,更适合艺术家。以下举个rsl的例子:

      这是一个最简单的rsl,一个maya的lambert。我改写了3delight的一个材质,时间有限,没空添加贴图了,请见谅。


      IP属地:江苏3楼2015-08-16 23:38
      回复
        仔细看这段着色函数,其中定义法线的部分nomal NF啥的请直接无视。主要看Ci。Ci就是每像素的着色。这里最核心的部分用了一个函数代替diffuse(NF)。是一个参数为法线的函数,它可以直接计算出diffuse效果,也就是lambert效果。这里我们没有接触到复杂的算式,至于算式,因为lambert很简单,我们也可以提一下。其实lambert是这么计算的:
        http://shiba.hpe.sh.cn/jiaoyanzu/wuli/ShowArticle.aspx?articleId=1539&classId=4
        这就是兰伯特余弦定律,貌似是高中物理内容。它的核心公式是:
        f(θ) = max(L•n,0) 我们可以直接简化成L*N。其中L为灯光向量,N为法线。
        这就是diffuse()里面的参数为什么要输入N的原因。因为L可以由三维软件直接提供,而N涉及到bump计算问题需要用户自己定义。这个算式被打包成diffuse(normal N)这个函数,我们不需要知道算法是L*N,就能直接使用。这就是RSL的便携性。


        IP属地:江苏4楼2015-08-16 23:47
        回复
          3,什么是OSL语言?
          OSL语言即Open Shading Language(开放式着色语言)目前由索尼投资维护,imageworks原本内部使用的开源着色语言标准。其实OSL十分类似于RSL,几乎与RSL一脉相承。但是OSL更加简略,更加明确,以至于新版本的renderman也开始反过来支持OSL语言。
          目前支持OSL的渲染器有:Anorld,Vray-3.0,Renderman。几乎主流影视渲染器清一色开始支持OSL。所以我认为OSL有望成为未来着色语言的统一标准。目前OSL在国内别说普及了,连用都很少人用。不过作为未来的趋势,我建立了这个吧,并且希望为普及osl的使用作出一番贡献。未来我预计把一部分英文的osl学习资料翻译整理和加上个人理解后发到贴吧。不过因为资料庞大,我英文水平和时间也都有限。所以可能需要很长时间,不定期更新,希望大家支持。


          IP属地:江苏5楼2015-08-16 23:58
          回复
            dalao求更新!


            7楼2018-02-09 22:19
            收起回复