230 likes | 546 Views
绘制语言( Shading Language ) 介绍. 中国科学院软件研究所 重点实验室 朱腾辉 ChinaGraph 2002. Overview. Shading Language 的相关概念 各种不同的 Shading Language 的实现 软件实现的 Shading Language 实时 ( Real-time ) Shading Language. Overview. Shading Language 的相关概念 各种不同的 Shading Language 的实现 软件实现的 Shading Language
E N D
绘制语言( Shading Language)介绍 中国科学院软件研究所 重点实验室 朱腾辉 ChinaGraph 2002
Overview • Shading Language的相关概念 • 各种不同的Shading Language的实现 • 软件实现的Shading Language • 实时(Real-time) Shading Language
Overview • Shading Language的相关概念 • 各种不同的Shading Language的实现 • 软件实现的Shading Language • 实时(Real-time) Shading Language
Shading Language的相关概念 • Shading • “The job of a surface shading procedure is to choose a color for each pixel on a surface, incorporating any variations in color of the surface itself and the effects of lights that shine on the surface ” (Marc Olano) • 也就是说:Shading最主要的工作就是计算每一个像素的颜色值,同时考虑光照的影响。
Shading Language的相关概念 • Procedural Shading • 就是指:采用一个过程(/函数)的形式来描述一个表面(Surface)颜色值的计算方法。 • Shader • 这个过程 (/函数)就叫做Shader. • Shading Language • 就是Procedure Shading中Shader所采用的语言.
Overview • Shading Language的相关概念 • 各种不同的Shading Language的实现 • 软件实现的Shading Language • 实时(Real-time) Shading Language
Overview • Shading Language的相关概念 • 各种不同的Shading Language的实现 • 软件实现的Shading Language • 实时(Real-time) Shading Language
软件实现的Shading Language 最经典的例子: • RenderMan---Pixar • 由于采用软件实现,通常每帧的绘制需要数个小时。 • 主要应用于电影制作,其创始人曾获得奥斯卡学术奖。 • A bug’ Life • 玩具总动员1/2 • 怪物公司…… • 其技术核心就是提供了一个Shading Language,从而提供了一个很灵活的Shading效果的描述。
Surface dent(float Ks=.4, Kd=.5, Ka=.1, roughness=.25, dent=.4) { float turbulence; point Nf, V; float I, freq; /* Transform to solid texture coordinate system */ V = transform(“shader”,P); /* Sum 6 octaves of noise to form turbulence */ turbulence = 0; freq = 1.0; for (i = 0; i < 6; i += 1) { turbulence += 1/freq + abs(0.5*noise(4*freq*V)); freq *= 2; } /* sharpen turbulence */ turbulence *= turbulence * turbulence; turbulence *= dent; /* Displace surface and compute normal */ P -= turbulence * normalize(N); Nf = faceforward(normalize(calculatenormal(P)),I); V = normalize(-I); /* Perform shading calculations */ Oi = 1 – smoothstep(0.03,0.05,turbulence); Ci = Oi*Cs*(Ka*ambient() + Ks*specular(Nf,V,roughness)); } RenderManShading Language
1 光线如何从光源射出 Light Source Shader 2 光线与物体表面的相互影响 Surface Shader 3 光线在空气中传播时受到的影响 Volume Shader RenderManShading Language • RenderMan Shading Language所描述的基本内容 :
RenderManShading Language • RenderMan Shading Language的优点 • 易于生成复杂面光照 • 易于对平面光照产生随机或噪声效果,更真实 • 相比于修改几何模型,更易于产生细节 • 相比于 Texture Mapping,光照效果可随时间、距离及观察角度而改变
RenderManShading Language • 重要目的: • 希望能提供一个统一的Shading 描述界面。 • 也就是说,采用任意的一个渲染软件或者任意的 一个渲染平台,都可以采用相同的Shader. 这将大 量的节省开发时间。
Overview • Shading Language的相关概念 • 各种不同的Shading Language的实现 • 软件实现的Shading Language • 实时(Real-time) Shading Language
实时 Shading Language 几个有代表性的实例: • PixelFlow’s PfMan ---UNC • Interactive Shading Language ---SGI • Real-Time Shading System ---Stanford • CG (C for Graphics) ---Nvidia
实时 Shading Language(1) PixelFlow’s PfMan ---UNC -- The PixelFlow Shading System, (SIGGRAPH 98) 基于UNC大学的PixelFlow系统,速度可以达到30fps. 评价: • 虽然PfMan速度很快,效果也不错,不过由于PixelFlow系统并没有被产业界所广泛接受,因此也就限制了PfMan的发展
实时 Shading Language(2) Interactive Shading Language ---SGI “Interactive Multi-Pass Programmable Shading”(SIGGRAPH ‘00) 核心思想:多遍(Multi-pass)实现 • OpenGL的执行相当于执行Shading Language命令的运算器 • 而Frame Buffer相当于存储器 • 然后通过多遍(Multi-pass)的操作实现所有的命令操作 对硬件的主要: 要求Frame Buffer和内存之间可以高速 的读写。
实时 Shading Language(3) Real-Time Shading System ---Stanford (SIGGRAPH2001) 背景: • 由于硬件发展越来越快,用户和开发人员对硬件的要求已经不仅仅是速度,还有就是可编程性(Programmability)。 • 虽然硬件可编程性越来越强,可是硬件的新特性却越来越难以使用,原因在于: • 图形编程方法比较底层,硬件对程序员是不透明的。 • 而且每一个硬件厂商都有自己的一套实现方案,于是导致在不同的硬件上开发程序需要采用不同的代码。 所以,为了提高开发的效率和代码的可重用性,在硬件上建立一个尽量高层次的抽象层,使得代码可以适用于不同的硬件平台,成了产业界一个迫切的需求。
实时 Shading Language(3) Real-Time Shading System ---Stanford 主要特点: • Stanford大学开发的这个Real-Time Shading System 主要 围绕着可编程的图形显示芯片(例如:Geforce3)来展开的。 • 结合了多遍的思想 和 最新硬件的可编程性。 • 可以处理不同频度的计算模型。
实时 Shading Language(3) Real-Time Shading System ---Stanford 运行结果: 运行平台:Pentium III, 866 MHz,640x512 Bump-mapped bowling pins, textured floor 55 Frames/Second
实时 Shading Language(4) CG (C for Graphics) ---Nvidia 这是一个与硬件关系紧密的Shading Language。 • 主要特点: • 在Vertex Shader / Pixel Shader的基础上提供了一个更高抽象层次的硬件编程方式,但是仍然显式地分开Vertex / Pixel 两个级别进行编程。 • 采用类似C语言的表达方式 • 用户仍然需要有硬件结构相当全面的知识。 • 讨论站点 www.cgshaders.org
Real-Time Shading Language(4) CG (C for Graphics) ---Nvidia
实时 Shading Language 小结: • 实时 Shading Language的发展目标: • 完全实现RenderMan的Shading Language的功能。 • 真正实现与硬件无关。 • 实时 Shading Language的发展和图形硬件的发展是互动的。 • 实时 Shading Language现在还没有定型,随着图形硬件的不断发展,实时 Shading Language还会不断更新。 • 图形硬件的发展也会重点考虑如何更好地支持实时 Shading Language。