计算机图形学

来自CGTWiki
跳转至:导航搜索

IEEE 对计算机图形学的定义为:Computer graphicsis the art or science of producing graphical images with the aid of computer。

国际标准化组织 ISO 将计算机图形学定义为:计算机图形学是一门研究通过计算机将数据转换成图形,并在专门显示设备上显示的原理方法和技术的学科。它是建立在传统的图学理论、应用数学及计算机科学基础上的一门学科。

研究内容

建模

mesh处理

用Open Flipper对三角形mesh进行remesh

渲染

重要思想出现的年代表

  • 1970 扫描线算法 (Bouknight, W. J. (1970). A procedure for generation of three-dimensional half-tone computer graphics presentations. Communications of the ACM)
  • 1971 Gouraud shading (Gouraud, H. (1971). Computer display of curved surfaces. IEEE Transactions on Computers 20 (6), 623–629.)
  • 1974 纹理映射 (Catmull, E. (1974). A subdivision algorithm for computer display of curved surfaces. PhD thesis, University of Utah.)
  • 1974 深度缓冲 (Catmull, E. (1974). A subdivision algorithm for computer display of curved surfaces. PhD thesis)
  • 1975 Phong shading (Phong, B-T. (1975). Illumination for computer generated pictures. Communications of the ACM 18 (6), 311–316.)
  • 1976 环境映射(Blinn, J.F., Newell, M.E.(1976). Texture and reflection in computer generated images. Communications of the ACM 19, 542–546.)
  • 1977 阴影体 (Crow, F.C. (1977). Shadow algorithms for computer graphics. Computer Graphics(Proceedings of SIGGRAPH 1977)11 (2), 242–248.)
  • 1978 阴影缓冲 (Williams, L. (1978). Casting curved shadows on curved surfaces. Computer Graphics(Proceedings of SIGGRAPH 1978)12 (3), 270–274.)
  • 1978 凸凹纹理映射 (Blinn, J.F. (1978). Simulation of wrinkled surfaces. Computer Graphics(Proceedings of SIGGRAPH 1978)12 (3), 286–292.)
  • 1980 BSP trees (Fuchs, H. Kedem, Z.M. Naylor, B.F. (1980). On visible surface generation by a priori tree structures. Computer Graphics(Proceedings of SIGGRAPH 1980)14 (3), 124–133.)
  • 1980 光线跟踪 (Whitted, T. (1980). An improved illumination model for shaded display. Communications of the ACM 23 (6), 343–349.)
  • 1981 Cook shader (Cook, R.L. Torrance, K.E. (1981). A reflectance model for computer graphics. Computer Graphics(Proceedings of SIGGRAPH 1981)15 (3), 307–316.)
  • 1983 Mipmaps (Williams, L. (1983). Pyramidal parametrics. Computer Graphics(Proceedings of SIGGRAPH 1983)17 (3), 1–11.)
  • 1984 八叉树光线跟踪 (Glassner, A.S. (1984). Space subdivision for fast ray tracing. IEEE Computer Graphics & Applications 4 (10), 15–22.)
  • 1984 Alpha compositing (Porter, T. Duff, T. (1984). Compositing digital images. Computer Graphics(Proceedings of SIGGRAPH 1984)18 (3), 253–259.)
  • 1984 分布式光线跟踪 (Cook, R.L. Porter, T. Carpenter, L. (1984). Distributed ray tracing. Computer Graphics(Proceedings of SIGGRAPH 1984)18 (3), 137–145.)
  • 1984 辐射着色 (Goral, C. Torrance, K.E. Greenberg, D.P. Battaile, B. (1984). Modelling the interaction of light between diffuse surfaces. Computer Graphics(Proceedings of SIGGRAPH 1984)18 (3), 213–222.)
  • 1985 半立方辐射着色 (Cohen, M.F. Greenberg, D.P. (1985). The hemi-cube: a radiosity solution for complex environments. Computer Graphics(Proceedings of SIGGRAPH 1985)19 (3), 31–40.)
  • 1986 光源跟踪 (Arvo, J. (1986). Backward ray tracing. SIGGRAPH 1986 Developments in Ray Tracing course notes)
  • 1986 渲染方程 (Kajiya, J.T. (1986). The rendering equation. Computer Graphics(Proceedings of SIGGRAPH 1986)20 (4), 143–150.)
  • 1987 Reyes algorithm (Cook, R.L. Carpenter, L. Catmull, E. (1987). The reyes image rendering architecture. Computer Graphics(Proceedings of SIGGRAPH 1987)21 (4), 95–102.)
  • 1991 分级辐射着色 (Hanrahan, P. Salzman, D. Aupperle, L. (1991). A rapid hierarchical radiosity algorithm. Computer Graphics(Proceedings of SIGGRAPH 1991)25 (4), 197–206.)
  • 1993 色调映射 (Tumblin, J. Rushmeier, H.E. (1993). Tone reproduction for realistic computer generated images. IEEE Computer Graphics & Applications 13 (6), 42–48.)
  • 1993 Subsurface scattering (Hanrahan, P. Krueger, W. (1993). Reflection from layered surfaces due to subsurface scattering. Computer Graphics(Proceedings of SIGGRAPH 1993)27 (), 165–174.)
  • 1995 光子映射 (Jensen, H.J. Christensen, N.J. (1995). Photon maps in bidirectional monte carlo ray tracing of complex objects. Computers & Graphics 19 (2), 215–224.)

基于物理的渲染

PBR基于物理渲染

动画

应用领域

电影

游戏

军事仿真

三维建造

大师级人物

Ivan Sutherland

作为计算机图形学之父和虚拟现实之父,Ivan Sutherland发明的电脑程序“画板”是人们“曾经编写过的程序中最重要的一份程序”。事实上,这是有史以来第一个交互式绘图系统。这也是交互式电脑绘图的开端。但还要花十多年以后,电脑业和工程界才真正体会到苏泽兰和电脑程序“画板”带来的划时代变革。

Turner Whitted

Turner Whitted 递归光线追踪算法的创始人,美国工程院院士。
Turner Whitted is a researcher with experience ranging from graphics hardware to HCI and pervasive computing. He is currently experimenting with novel display technologies as a member of NVIDIA Research. His career has included terms as a manager at Microsoft Research, as cofounder and president of game engine company Numerical Design Limited, and as a member of the technical staff at Bell Labs where he introduced the use of recursive ray tracing to implement global illumination. He earned BSE and MS degrees from Duke University and a PhD from North Carolina State University, all in electrical engineering. He is an adjunct faculty member in the Computer Science Department at UNC Chapel Hill and in the Electrical and Computer Engineering Department at NC State University. He is an ACM Fellow and a member of the National Academy of Engineering.


  光线追踪技术并不是近几年才出现的新技术,早在1968年就已经诞生了“Ray Casting(光线投射)”的概念,次年“Ray Tracing(光线追踪)”这个词汇首次出现在Arthur Appel的论文中,十年之后的1979年,现就任于NVIDIA研究事业部的Turner Whitted提出了一套完整算法:Recursive Ray Tracing Algorithm(递归光线追踪算法或者经典光线追踪算法),至此,光线追踪技术有了巨大突破,逐渐进入了实用阶段。

文件:Real-time pathtracing powered by liyuanhang.pdf

文件:递归式光线跟踪.pdf



//ray-casting 伪代码
for (int j = 0; j < imageHeight; ++j) { 
    for (int i = 0; i < imageWidth; ++i) { 
        // 计算主光线位置
        Ray primRay; 
        computePrimRay(i, j, &primRay); 
        // 主光线与场景的碰撞点
        Normal nHit; 
        float minDist = INFINITY; 
        Object object = NULL; 
        for (int k = 0; k < objects.size(); ++k) { 
            if (Intersect(objects[k], primRay, &pHit, &nHit)) { 
                float distance = Distance(eyePosition, pHit); 
                if (distance < minDistance) { 
                    object = objects[k]; 
                    minDistance = distance; // update min distance 
                } 
            } 
        } 
        if (object != NULL) { 
            // 计算照明
            Ray shadowRay; 
            shadowRay.direction = lightPosition - pHit; 
            bool isShadow = false; 
            for (int k = 0; k < objects.size(); ++k) { 
                if (Intersect(objects[k], shadowRay)) { 
                    isInShadow = true; 
                    break; 
                } 
            } 
        } 
        if (!isInShadow) 
            pixels[i][j] = object->color * light.brightness; 
        else 
            pixels[i][j] = 0; 
    } 
}



//递归式光线跟踪伪代码
rayTraceImage ()
{
	for (p in pixels )
		color of p = trace (eye ray through p) ;
}

trace (ray )
{
	pt = find closest intersection ;
	
	return shade (pt);
}


shade ( point )
{
	color = 0;
	
	for (L in light sources )
	{
		trace ( shadow ray to L);
		color += evaluate BRDF ;
	}
	
	color += trace ( reflection ray );
	color += trace ( refraction ray );
	
	return color ;
}

基本概念

Vertex,Point,Vector有什么含义上的区别? Plane,Face和Mesh呢?

Vertex是顶点,一般在游戏中常指三角形或线段的顶点,有时也用来指多边型的顶点。
Point是广意的“点”,一般在游戏中常指3D空间中的任何一点。
Vector是向量,游戏中常用3,2,4维向量。

Plane是平面。
Face大多表示三角形,也可以表示在一个平面上的多边形。
Mesh是一个三角形的组,可以有其逻辑意义,比如一个人,一个物体; 也可以没有逻辑意义,比如一个椅子中所有用到某个特定贴图的被group到一个strip中的所有三角形的集合。
Mesh的概念比Plane或Face高很多,什么都可以泛指,什么static mesh, skined mesh, soft mesh, graphics mesh, collision mesh, 等等。但是其跟本意义是triangle soup。

Cull_CW,Cull_CCW是干什么用的? 不做Cull行吗? Cull和Clip有区别吗?

Cull是阴(反、背)面剔除。Clip是裁减。 不做Cull道理上不成,比如同一面墙用正反两个矩形表示,各自有其不同的光照和不同的贴图(一面水泥一面墙纸),各自有其不同的正方向。 打开Cull, 就能在任何一个方向只看到一个正确的面。但是,实际从性能考虑上有时不能或最好不用cull,比如PS2。此时就需要在两个墙之间留距离,再在墙的侧面多加表示厚度的墙面。。。

ShadingMode可以指定FLAT,GOURAUD,PHONG,这发生在渲染过程中的哪一步? 和FillMode有什么关系?

ShadingMod-e现在的技术还不能指定PHONG。 有的平台发生在渲染的rasterizat-ion,少数平台在vertex processing或两者。 比如即使rasterizat-ion支持FLAT mode, 你也可以人为编程简化vertex processing-,只计算triangle中一点的光照,甚至根本就只传一个Vertex normal到VU1或GPU中。 和FillMode有关系,因为大多平台对FLAT mode做了优化, 性能提高。

VertexShader和PixelShader分别对应于FixedPipeline的哪些步骤?

FixedPipeline可以又很多的API function提供参数控制。大部分都是对应于VertexShader的。但是TextureStage,AlphaBlending,Bump等特效对应于PixelShader。FixedPipeline本身还是有用的。

图形学经典

经典书籍

Fundamentals of Computer Graphics

文件:计算机图形学基础 第三版.pdf

Real-time rendering

文件:Real-Time Rendering.3rd.pdf

图形学和游戏中的数学

文件:图形学与游戏中的数学 第三版.pdf

物理渲染

经典文献

1.Ground 明暗处理

2.phong 光照处理

3.递归式光线跟踪

经典教程

清华胡事民教授的图形学教程 中国科技大学《计算机图形学》暑期课程

图形学前沿

与小组相关的前沿文献

重要的图形学会议

国内主要的研究团队

浙江大学CAD&CG国家重点实验室

  浙大本身在中国的实力比较靠前,放在亚洲不怎么样。但是浙大的CAD&CG实验室,汇集了国家一大批精英人才,在图形学上的研究绝对是世界级的。

  CAD&CG国家重点实验室1992年建立,经过二十年的发展,现在的CAD&CG实验室群英荟萃,除了以前老一辈的图形学专家,还有很多新生代的图形学大牛,目前代表了中国图形学最巅峰的实力。

  现在的浙大,基本上年年都在SIGGRAPH上发2到4篇文章,有时候更多。浙大的图形学实力,在亚洲,可以说是仅次于微软亚洲研究院的。

  浙大的CAD&CG实验室现有院士两人,长江学者两人,教授近30人,副教授数十人,还有很多研究院,博士后以及博士。值得一提的是,现在中国图形界的牛人基本都是浙大出来的。

  比如新一代图形学领军人物,周昆教授,浙大本硕博,博士毕业后去微软研究院工作,6年时间发了17篇SIGGRAPH,2008年被浙大聘回,教授,博导,教育部聘为长江学者,时31岁。回校全职工作后,又发了一些SIGGRAPH论文,并被2009年ACM TOG期刊选为副主编。TOG是图形学最顶级的期刊,周昆教授是来自中国大陆唯一的一个编委,也是世界范围内唯一的一个华人编委。截止到2012年,周昆教授已经发了33篇SIGGRAPH、SIGGRAPH Asia等顶级会议,深深的让人觉得,SIGGRAPH就是他家开的。

  另一个新生代图形学大牛,胡事民教授,也是浙大本硕博,博士毕业后去清华工作,现在是清华的教授,也是中国图形界的翘楚。

  这些年,浙大培养了很多图形学的人才,中国的图形学也越来越得到世界的认可,乃至重视。

图外重要的研究团队

斯坦福图形学团队

    斯坦福大学的计算机学院实力毋庸置疑,不要忘了硅谷是怎么来的。斯坦福大学是最早开始研究计算机的大学之一,于是,它的图形学实力自然不俗,实际上,在我心目中,斯坦福大学的图形学实力可排第一。

    搞图形学的人应该没有不知道斯坦福兔子(Stanford Bunny)模型的吧,还有dragon模型,弥勒佛模型,都是斯坦福大学提供的,广为人知。

    图形学是斯坦福大学计算机研究的一个重要方向,在斯坦福大学计算机图形实验室的网站http://graphics.stanford.edu/上,可以看到他们的课程,有计算机图形学,高级计算机图形学,交互式计算机图形学,图像合成,计算机视觉,图形学中的数学方法,建模,角色动画等等,课程丰富,而且一些课程还有额外的奖励。比如2011冬的交互式计算机图形学,如果某个学生作业完成的很好,老师很欣赏,可以推荐去参加SIGGRAPH2012,费用学校全包。不得不让人感叹斯坦福大学财大气粗。

    翻看斯坦福大学计算机图形实验室的任何一门课程,你会发现课程内容特别丰富,参考资料特别多。我前几天翻看了下交互式计算机图形学,20多个课件,每2天上一次课,每次课讲述的内容也特别多,而整个课程的时间才不过两个月。选修该门课程的学生,需要提交作业,作业都是openGL编程,而且难度不低,共四次作业。

    斯坦福大学每年都能在SIGGRAPH上发很多文章,其图形学实力确实很强。

普林斯顿图形学团队

加州理工图形学团队

Rice大学图形学团队

犹他大学图形学团队

康奈尔大学图形学团队

布朗大学图形学团队

华盛顿大学图形学团队

香港科技大学图形学团队