绘制语言( 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效果的描述。 RenderMan Shading Language 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)); } RenderMan Shading Language • RenderMan Shading Language所描述的基本内容 : 1 光线如何从光源射出 Light Source Shader 2 光线与物体表面的相互影响 Surface Shader 3 光线在空气中传播时受到的影响 Volume Shader RenderMan Shading Language • RenderMan Shading Language的优点 – – – – 易于生成复杂面光照 易于对平面光照产生随机或噪声效果,更真实 相比于修改几何模型,更易于产生细节 相比于 Texture Mapping,光照效果可随时间、距离 及观察角度而改变 RenderMan Shading Language • 重要目的: – 希望能提供一个统一的Shading 描述界面。 • 也就是说,采用任意的一个渲染软件或者任意的 一个渲染平台,都可以采用相同的Shader. 这将大 量的节省开发时间。 Overview • Shading Language的相关概念 • 各种不同的Shading Language的实现 – – 软件实现的Shading Language 实时(Real-time) Shading Language 实时 Shading Language 几个有代表性的实例: 1. 2. 3. 4. PixelFlow’s PfMan Interactive Shading Language Real-Time Shading System CG (C for Graphics) ---UNC ---SGI ---Stanford ---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。 谢谢大家! 本人联系方式 [email protected]
© Copyright 2025 ExpyDoc