zoukankan      html  css  js  c++  java
  • 利用GPU实时绘制水墨画效果

     

    2009-8-11 作者: 陈为 张海嵩 于金辉 来源: 万方数据

    关键字: GPU 非真实感绘制 硬件加速绘制 动画

    系统可实时绘制中国山水画中常见的物体并生成视频输出,它包括5 个模块:多通道技术和新型国画山光照模型的山峦绘制模块、基于位移映射的云层模拟、基于纹理运动的瀑布绘制模块、基于广告牌技术的树木绘制模块和实时视频输出模块. 前面4 个模块利用GPU 可编程特性控制其流水线,对任意三维场景,可实时绘制水墨画效果;用户可根据需要对系统中的各个绘制模块进行配置并实时漫游.

      非真实感绘制( Non-Photorealistic Rendering,NPR)是计算机技术和绘画艺术相结合的一个研究领域,其主要内容是用计算机软硬件手段来模拟具有不同绘画效果的画面和动画. 中国水墨画效果的绘制就是该领域的一个研究分支,Strassmann[1]提出了生成水墨画效果的毛笔模型;墨水在纸张上以及绘画树木时的扩散效果在文献[2-3]中有详细介绍;Lee[4]提出了一个墨水与宣纸融合的模型;Way 等[5]通过绘制纹理笔画来模拟中国山水画;在对国画树的模拟上,Way 等[6]也提出了一种轮廓线和纹理映射相结合的方法,但其只绘制了树干,并未考虑树枝和树叶效果. 上述水墨画效果绘制技术绝大部分是用软件方法实现的. 用软件生成更富有表现力的效果一般比较费时,NPR 速度慢限制了它在数字娱乐(如游戏)中的应用.

      随着硬件技术的迅猛发展,GPU(Graphics Processing Unit)的价格下降到市场可以接受的程度,大大推动了硬件加速3D 图形绘制方面的研究工作,但目前主要集中在真实感图形绘制方面,只有少量的研究朝着NPR 方面发展. Raskar[7]通过引进具有适当颜色、形状和方向的新面片提取3D 物体的边缘线及其表面上的脊线;Praun 等[8]构建出一组2D的具有钢笔画效果的TAM(Tonal Art Map),它利用GPU 计算3D 模型上某点的光照值,以此选取TAM中的相应纹理并进行混合以生成3D 钢笔画效果;文献[9]介绍了在GPU 中用一组非均匀分布的纹理阵列实时绘制水墨效果的山峦.

      在典型的中国山水画中不仅有山峦,还有树木、瀑布以及云雾等,在这种3D 场景中不仅需要对静止物体山峦和树木进行实时绘制,还要对动态的瀑布以及云雾进行动态处理和实时绘制,这里的动态处理包括对瀑布、云雾本身动态处理以及它们与静止物体山峦之间相交处进行动态处理. 我们在以前工作的基础上改进了山峦绘制,同时提供了不同物体的渲染模块,用户可根据自己的需要选择相关模块进行实时绘制,即可获得3D 场景水墨画效果的画面. 系统既允许用户交互控制实时绘制的场景,如位移、旋转以及镜头推拉等,也允许用户事先设定相机路径,然后按照设定的路径实时绘制动画;同时系统还支持实时输出视频序列.

      1、系统框架

      本文系统的GPU 采用ATI 公司的Radeon 9800显卡,并基于Direct3D 9 .0 在PC 平台上实现. 系统的输入是事先设计好的3D 场景模型,系统中用的纹理库也事先按照选定风格构建好,输出则是具有中国画效果的静态图以及相应的视频序列,系统的框架如图1 所示,主要包括以下5 个部分:

      1)国画山绘制模块. 该模块根据用户输入的3D 网格模型,先提取模型特征线,对特征线进行膨胀、抗锯齿和特效处理;然后按照设计的国画山光照模型进行纹理映射,绘制出具有国画风格的山峦.

      2)云绘制模块. 云的绘制运用了位移映射[10]和纹理运动技术[11],并对纹理用适当的光照模型进行调整,使效果更加生动.

      3)瀑布绘制采用的是纹理运动和纹理融合技术,并在边缘处进行特效处理.

      4)国画树绘制模块. 该模块将场景中的树分为远树和近树两2 部分. 远树运用广告牌技术[12]来生成,近树的树干运用多通道技术生成,而树叶则采用广告牌技术.

      5)视频输出模块. 该模块可根据用户在场景中设置的相机路径,把绘制的图像实时地保存为选定格式的视频文件.

      2、纹理库的构建

      画家在中国山水画中对于不同的物体如山峦、云雾、瀑布以及树木往往采用不同的笔法,结果是不同的物体呈现出不同的纹理. 即使对于同类物体,如山峦,画家一般用浅色调的纹理表现远山的距离感,用深色调的纹理表现近山的岩石结构和质感.此外,画家在画坚硬物体(如山峦和树干)时往往用毛笔勾勒出物体的轮廓. 为了表现3D 场景中不同物体的纹理,我们按照选定的风格事先在手工绘制的山水画中选不同的2D 纹理图像构成纹理库,其中山峦按照远、中、近景来取. 由于中国山水画中每层山峦也由多个山峦组成,本文系统为了避免在每层山峦用同一个纹理图像而出现机械感,对应每层山峦构建3 个看起来类似但又不同的纹理,这可以通过在手工绘制的山水画山峦不同位置选取。

    3、国画山峦绘制模块

      在以往的山峦绘制系统中,建立对应于不同层次的一组纹理图像,图像中的笔刷纹理按照手工绘画那样非均匀分布并构成明暗变化的纹理序列. 在系统运行时,首先检测山峦模型的位置以确定它所在的层,然后根据山峦模型的光照值对相应的纹理进行混合. 图2 所示为山峦渲染绘制的结果.

      这个结果在视觉上仍感觉平淡,缺乏生气. 为此,本文引入了纹理法向来刻画国画山细节. 由于系统中的纹理样本是从手工绘画中获取的,它代表着国画的风格和细节表现手法,因此用一个Pass 将这些信息保存在一张法向纹理中,再映射到国画山模型上,通过全局光照来刻画细部. 法向纹理的生成是基于样本纹理中每个像素周边8 个像素的灰度值,运用Sobel 过滤计算该像素在水平方向和垂直方向的斜率,并作为该像素法向的X 方向和Y 方向上的值,Z 方向取1,将其正交化后保存在一张纹理空间的法向图中. 图2 b 所示为纹理空间法向图,图2 c所示为带有法向纹理的国画山,图2 d 所示经过细节刻画后的国画山效果图.

      归纳起来,改进后的山峦绘制模块总共用7 个

      Pass 渲染完成,以下是各个Pass 的主要功能:

      Pass0 . 渲染山峦模型顶点法向纹理;

      Pass1 . 提取轮廓特征线;

      Pass2 . 轮廓特征线膨胀、反走样处理;

      Pass3 . 根据提出的国画山光照模型映射纹理;

      Pass4 . 从纹理样本生成法向纹理,并映射到山峦模型;

      Pass5 . 国画山细节刻画;

      Pass6 . 用纹理和特征轮廓线生成最后效果.

      4、云绘制模块

      在国画中云有云海、云雾等多种画法,本系统目前只实现了云海的绘制. 首先用多边形网格表示云海的基本形状,在绘制每一帧图像时,对每个顶点利用位移映射技术在可编程顶点着色器(Vertex Shader)中进行随机正弦扰动,并随时间运动该顶点对应的纹理. 在云海渲染的Vertex Shader 中,根据每个顶点的纹理坐标来决定该顶点扰动的初始方向,假设TexCrd( u,v)表示顶点的纹理坐标,DirX 和DirY 为用户设定的两个初始方向,则该顶点的初始扰动方向InitDir = DirX × TexCrd . u + DirY × TexCrd . v . 这样可以为每个顶点设定不同的扰动方向,使云层运动更加自然生动. 用户也可定义扰动强度和扰动速度参数作用于扰动方向上,计算出该顶点的最终扰动强度,即顶点偏移;再根据顶点法向将该顶点的偏移叠加到原始顶点坐标上,作为该顶点的坐标传入可编程像素着色器(Pixel Shader)中. 同时在Vertex Shader 中对顶点纹理坐标随时间进行周期性变化,以产生运动纹理. 为了体现云海的明暗变化,本系统添加了漫反射光照影响,将远处的云海逐渐过渡到背景,使画面更具层次感.

      画家在绘画山底处的雾霭时一般会用较淡的笔墨表现云雾的稀薄. 为了模拟这种效果,根据山峦在云海中的位置用一个Pass 确定雾霭的大致范围,并渲染成一个白色的区域保存在渲染缓冲(RenderTarget )中,再用两个Pass 对其进行高斯模糊,把最终的颜色值作为该区域云海像素的Alpha 值与山峦融合.由于可编程图形硬件指令数量的限制,高斯模糊的半径有限,我们在显卡上一般只能做到5 × 5 像素,这不能满足雾霭在画面上占据的宽度. 为此,将高斯模糊的权值计算公式分解为水平方向和垂直方向2个权值的积,即

      其中,x,y 为相对中心像素的坐标,g2D( x,y )为在( x,y)像素的权值,σ 为高斯模糊标准半径,g1D( x)为水平方向权值,g2D ( y)为垂直方向的权值. 这样,用一个Pass 渲染水平权值的效果,另一个Pass 渲染垂直权值的效果,再将2 个颜色值相乘得到最后的效果. 运用该方法最大可以做到25 × 25 像素的高斯模糊. 图3 所示为山和云组合并在山底部进行淡化后的一帧画面.

     5、瀑布绘制模块

      瀑布的曲面模型是沿山体表面按照给定的范围创建出来的,系统在绘制时把国画风格的瀑布纹理映射到瀑布所在曲面上. 在系统中令瀑布的纹理在( 轴方向从上往下运动,而在) 轴方向保持不变.为了使瀑布的边缘与山过渡自然,制作瀑布曲面的同时还在其左右两边留出一定宽度切割出两个窄条,并把它们的) 方向纹理坐标设成从0 到1 线性变化,并以此为参数在Pixel Shader 里把山体纹理与瀑布纹理混合. 在瀑布的底端用同样的方法来融合山体,不同的是根据瀑布( 方向纹理坐标来进行融合. 图4 所示为瀑布与山体纹理混合后的一幅画面.

      6、国画树绘制模块

      本文系统把场景中的树分为远处的和近处的2类,因画家一般用画笔勾勒出远处树的树干和树枝来表示整棵树的形状,占画面比例比较小,因此可用简单的广告牌技术来绘制,即用一个四边形作为远处树的模型. 当场景漫游时,小树所在四边形的法向矢量方向始终与视线平行. 对应每个小树纹理图像还配有蒙板图像,在该图像上有树干和树枝的地方取值为1,其他地方取值为0 . 系统在映射树纹理时通过蒙板控制,对应取值为1 的位置则映射树纹理;否则令其透明,以使小树所在四边形后面物体的纹理显现出来,而不是被四边形所遮挡.

      近处树的渲染分为树干和树叶2 个部分. 在手工绘制的国画中画家一般在主要的树干上画出纹理,树干的上部和树枝则用黑墨直接画. 根据以上特点,本文系统建立了树干的光照明模型用于其纹理映射,并对树干提取轮廓线. 近处树的树叶则用广告牌技术绘制,即用若干四边形分布在树枝上适当位置,再用从国画中采集到的树叶纹理图像映射到这些四边形上. 为了避免在各个四边形上映射同一纹理而出现的机械感,在采集树叶纹理图像时按照树叶的朝向、位置以及前后的浓淡关系分类进行,系统在绘制时把它们分类映射. 图5 所示为加入了近处树的场景效果图.

      7、结果和讨论

      图6 所示为本文系统的界面,其下方的控制按钮主要分成5 个部分,从各个按钮的名称不难看出它们对应的功能. 其中间的Models 部分设有不同绘制模块的按钮,用户可以根据自己的需要对它们进行组合使用. 此外,用户还可以通过键盘实时控制场景上、下、左、右平移,以及镜头推拉,用鼠标则可以控制场景的旋转.

      在用本系统绘制之前需要先把场景中的模型进行分类,如山峦、云海、瀑布、小树和大树. 对于图6中的场景,其绘制过程如下:用户首先点击Mountain按钮,系统把图7 所示的山峦模型调入并进行绘制;用户点击Cloud 按钮,系统把云海模型调入并对其进行动态处理和绘制;接着用户点击CloudSide 按钮,系统对远处云雾进行如图8 所示的边缘渐变淡化处理. 用户再点击FarTree 按钮,系统把远处小树模型调入并绘制;最后用户点击Animation 中的Play按钮,系统便按照事先设计好的摄像机和目标路径对场景实时漫游(由3 个镜头组成并经过后期制作的高质量动画文件可以在网页http:∥www. cad . zju .edu .cn/home/jhyu 中“GPU 实时绘制3D 中国画风格场景”目录下看到).

      从上述绘制过程可以看到,该系统可以十分灵活的方式工作满足用户的不同需要. 目前系统只考虑山、云、瀑布、树等4 类物体,计划将来加入雾、流水等其他国画物体的绘制模块. 另外,系统当前仅提供一种风格的国画绘制,我们拟将系统扩展到多风格绘制,包括构建新的国画风格光照明模型和绘制算法.

      参考文献

      [1] Strassmann S. Hairy brushes[A]. In:Computer Graphics Proceedings,Annual Conference Series,ACM SIGGRAPH,Dallas,1986.225 ~ 232

      [2] Kunii T L,Nosovskij G V,Hayashi T. A diffusion model for computer animation of diffuse ink painting[A]. In:Proceedings of Computer Animation’95,Geneva,Switzerland,1995. 98 ~ 102

      [3] Zhang Q,Sato Y,Takahashi J,et al . Simple cellular automationbased simulation of ink behavior and its application to Suibokuga-like 3D rendering of trees[J]. Journal of Visualization and Computer Animation,1999,10(1):27 ~ 37

      [4] Lee J. Diffusion rendering of black ink paintings using new paper and ink models[J]. Computers and Graphics,2001,25(2):295 ~ 308

      [5] Way D L,Shih Z C. The synthesis of rock textures in Chinese landscape painting[A]. In:Proceedings of Eurographics’2001,Manchester,2001. 123 ~ 131

      [6] Way D L,Lin Y R,Shih Z C. The synthesis of trees in Chinese landscape painting using silhouette and texture strokes[A]. In:Proceedings of the 10th International Conference in Central Europe onComputer Graphics, Visualization and Computer Vision ’2002,Pilsen,2002. 499 ~ 506

      [7] Raskar R. Hardware support for non-photorealistic rendering[A].In:Proceedings of the ACM SIGGRAPH/EUROGRAPHICS Workshop on Graphics hardware,Los Angeles,California,2001. 41 ~ 47

      [8] Praun E,Hoppe H,Webb M,et al . Real-time hatching[A]. In:Computer Graphics Proceedings,Annual Conference Series,ACM SIGGRAPH,Los Angeles,California,2001. 581 ~ 586

      [9] Zhang Haisong,Yin Xiaoqin,Yu Jinhui. Real-time rendering of 3D Chinese painting effects[J]. Journal of Computer-Aided Design & Computer Graphics,2004,16(11):1485 ~ 1489(in Chinese)(张海嵩,尹小勤,于金辉. 实时绘制3D 中国画效果[J]. 计算机辅助设计与图形学学报,2004,16(11):1485 ~ 1489)

      [10] Vlietinck J. Hardware trilinear displacement mapping without tessellator and vertex texturing[OL]. http:∥ users . belgacom. net/gc610902/technical . htm,2003

      [11] Michael G Ross. Exploiting texture-motion duality in optical flow and image segmentation[D]. Massachusetts:Massachusetts Institute of Technology,2000

      [12] Harris M J,Lastra A,Anselmo L. Real-time cloud rendering[A].In:Proceedings of Eurographics’2001,Manchester,2001. 76 ~ 84

  • 相关阅读:
    CSS技巧(二):CSS hack
    CSS技巧(一):清除浮动总洁
    js中apply方法的使用
    call 方法
    正则表达式
    【js事件详解】js事件封装函数,js跨浏览器事件处理机制
    [BZOJ 4300] 绝世好题
    [SPOJ1557] Can you answer these queries II
    [Codeforces 877E] Danil and a Part-time Job
    [Codeforces 914D] Bash and a Tough Math Puzzle
  • 原文地址:https://www.cnblogs.com/mazhenyu/p/1643766.html
Copyright © 2011-2022 走看看