1. Dynamic Simulation of Trees

绘制语言( 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]