CN105869203B - 一种三维场景的彩铅风格处理方法 - Google Patents
一种三维场景的彩铅风格处理方法 Download PDFInfo
- Publication number
- CN105869203B CN105869203B CN201610183158.6A CN201610183158A CN105869203B CN 105869203 B CN105869203 B CN 105869203B CN 201610183158 A CN201610183158 A CN 201610183158A CN 105869203 B CN105869203 B CN 105869203B
- Authority
- CN
- China
- Prior art keywords
- winding displacement
- value
- color
- scene models
- dimensional scene
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/02—Non-photorealistic rendering
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种三维场景的彩铅风格处理方法,包括以下步骤:步骤1,导入三维场景模型,输入参数;步骤2,提取三维场景轮廓:提取三维场景的外轮廓线以及由曲率变化导致的内轮廓线,使用随光照变化的阈值模拟实际绘画中轮廓线的粗细变化;步骤3,生成排线:根据输入参数自动生成排线并存储;步骤4,生成纸纹:根据输入参数,生成纸纹;步骤5,实现排线动态效果:实时获取摄像机的平移、旋转以及缩放参数,对三维场景模型进行真实感渲染,对渲染结果采样得到排线的实时颜色参数,计算排线的参数变化并显示;步骤6,生成彩铅效果:将步骤5得到的排线结合步骤2得到的三维场景轮廓以及步骤4得到的纸纹,合成最终效果。
Description
技术领域
本发明属于计算机图形学,非真实感绘制(Non-Photorealistic Rendering)等领域,涉及一种三维场景的彩铅风格处理方法,更具体的是,涉及一种根据用户交互在三维场景中生成彩铅风格排线的方法。
背景技术
计算机图形学一方面致力于绘制更具真实感的场景,为了精细呈现各种反射、折射而使用不同的技术,另一方面也致力于绘制非写实的艺术风格,这就是非真实感绘制领域的研究内容。绘制受到绘画,演示以及卡通动画的启发,应用于电影和游戏中,也应用在科学可视化等领域。绘制主要包括两个方向,一是模拟传统绘画介质生成的艺术风格,比如铅笔、水彩、水墨、油画、浮雕等,另一种是创造出新的艺术风格,比如卡通、波点、使用文字绘画等。绘制的实现方法也分为两种,一种是图像处理,类似于滤镜效果,算法通常使用各种卷积运算。另一种是基于笔画的绘制,即绘制过程是生成笔画,然后放置于合适的位置。根据实际的绘画工具,可以详细定值笔画效果,每一个笔画是由更小的像素块叠加形成的,笔画的压力系数由透明度表示,粗细效果及握笔角度由像素块的形状和大小表示。
彩铅风格是传统绘画的一种,彩铅画一般颜色较轻且画面较明亮(参考文章:Combining Sketch and Tone for Pencil Drawing Production),绘画过程一般使用成组的平行线叠加,一组方向大致平行的连续画出的线被称为排线。目前针对铅笔风格的绘制有不少文章,输入为二维图像或三维场景(参考文章:IdiotPencil:An InteractiveSystem for Generating Pencil Drawing From 3D Polygonal Models)。专门针对彩铅风格绘制的文章相对较少,输入为三维场景的彩铅风格绘制的文章相对更少。
由于不同的艺术家的绘制风格不同,在使用程序生成绘画风格时,可以使用半自动的方法。即由用户指定绘制的参数,程序对参数进行推断自动生成绘画效果。这样用户只需要少量的交互就可以得到一组结果,从而很大程度的加速绘画过程。
发明内容
发明目的:本发明所要解决的技术问题是针对三维场景进行彩铅风格的绘制,在三维场景中进行动画的过程中,自动应用彩铅风格,从而加速绘画过程。
技术方案:本发明公开了一种三维场景的彩铅风格处理方法,其核心提供绘画的软件系统,并提供自动生成排线的算法以及动画过程中排线运动的算法,其特征在于,包括以下步骤:
步骤1,搭建用于用户交互的用户交互界面,导入三维场景模型,输入参数,完成三维场景模型的常规渲染;
步骤2,提取三维场景轮廓:提取三维场景的外轮廓线以及由曲率变化导致的内轮廓线,使用随光照变化的阈值模拟实际绘画中轮廓线的粗细变化;
步骤3,生成排线:根据输入参数自动生成排线并存储;排线的生成需要获取以下几部分信息:用户输入排线参数、三维场景几何信息,以及三维场景光照信息。获取信息之后计算得到三维场景中自动生成的排线并存储;
步骤4,生成纸纹:根据输入参数,使用算法生成纸纹;
步骤5,实现排线动态效果:实时获取摄像机的平移、旋转以及缩放参数,对三维场景模型进行真实感渲染,对渲染结果采样得到排线的实时颜色参数,计算排线的参数变化并显示;
步骤6,生成彩铅效果:将步骤5得到的排线结合步骤2得到的三维场景轮廓以及步骤4得到的纸纹,合成最终效果。
步骤1中,搭建程序界面用于获取用户交互,导入三维模型的OBJ(几何信息)及MTL(材质纹理)文件,完成场景的常规渲染,包括:
导入包含材质和纹理信息的三维场景模型文件,在三维场景模型中加入点光源,使用OpenGL(开源图形库)对三维场景模型进行实时渲染,渲染绘制区域称为画布,绘制过程获得三维场景模型的颜色缓存、法向图缓存及深度图缓存;缓存作为中间结果为后续步骤提供信息,不直接显示在画布上;
输入参数包括:排线大小参考值S、排线间隔参考值I、排线方向参考值D、排线透明度参考值A、排线大小抖动值SJitter、排线水平方向位置抖动值XJitter、排线竖直方向位置抖动值YJitter、排线方向抖动值DJitter、排线透明度抖动值AJitter、透明度渐变模式、画布中排线起始和终止位置、轮廓线阈值Ta和Tb、噪声频率f、噪声振幅系数p、要生成的纸纹大小及粗糙程度参数、画布大小参数。相邻两组排线可以使用相同的参数,也可以通过用户交互使用不同的参数。
步骤2中,提取三维场景的外轮廓以及由曲率变化导致的轮廓线,模拟实际绘画中轮廓线的粗细变化并且消除屏幕锯齿,包括以下步骤:
步骤2-1,提取三维场景模型的外轮廓线:当视线角度与三维场景模型上点的法向夹角的余弦值小于一定阈值时,判定该点是轮廓,该阈值为函数Ta+(Tb-Ta)*Tp的取值,其中Ta为阈值下限,Tb为阈值上限,Tp为百分比差值,Ta、Tb和Tp的取值范围为[0,1],Tp值为三维场景模型上点的法向与光照方向夹角余弦值的绝对值,计算结果使得三维场景模型点的法向平行于光照方向时阈值取最大值,垂直于光照方向时阈值取最小值;对于光滑的集合表面,法向的连续变化导致轮廓阈值的连续变化,最终呈现线条粗细的均匀变化;
步骤2-2,提取三维场景模型的内轮廓线:当三维物体网格的曲率变化时会呈现出内轮廓线,此时采用提取暗示轮廓线(Suggestive Contours)的方法提取三维场景模型的内轮廓线,具体做法是选取模型点法向与视线方向点积在DirectionW方向上取得极小值的点作为暗示轮廓,其中DirectionW是视线方向在模型点切平面的投影方向(参考文章:Suggestive Contours for Conveying Shape);
步骤2-3,对提取的外轮廓线和内轮廓线应用多重采样抗锯齿消除锯齿效果,使轮廓线的显示更平滑。首先开辟普通帧缓存内存16倍大小的超采样帧缓存,设置采样数为16进行采样。在OpenGL(开源图形库)中,采样方法有两种,一种是选取坐标最接近的一个像素作为采样值,这种做法简单快速;第二种选取坐标周围的像素值进行加权平均,这种做法速度稍慢但画面更平滑。可以根据对效率及画面质量的平衡选择不同的采样数以及采样方法。
步骤3中,排线参数的自动生成,包括以下步骤:
步骤3-1,确定排线在三维场景模型中的位置:用户每次绘制一组排线时采用如下两种方式指定排线端点:
在画布上指定一组排线的两个端点,端点位置分别为PosO和Pos1,三维场景模型中将自动在两个端点之间生成两条以上排线,根据输入的排线间隔参考值I和位置抖动值XJitter、YJitter计算生成的排线的位置:第n条排线水平方向的位置为(Pos0.X+(Pos1.X-Pos0.X)*n)+XRange*Random(XJitter),竖直方向的位置为(Pos0.Y+(Pos1.Y-Pos0.Y)*n)+YRange*Random(YJitter)。其中n表示排线的序号,Pos0.X表示点Pos0在水平方向的坐标,Pos0.Y表示点Pos0在竖直方向的坐标,Post.X表示点Pos1在水平方向的坐标,Post.Y表示点Pos1在竖直方向的坐标,XRange和YRange为固定值,表示允许随机的像素范围,Random()表示随机函数,得到结果后记录计算出的一组排线位置,将所有的排线位置投影到三维场景模型中,记录三维场景模型中的排线位置;
用户在画布上指定贝塞尔曲线的三个端点,三维场景模型中将自动在端点确定的贝塞尔曲线上自动生成两条以上排线;对于三个端点Pos2、Pos3、Pos4,首先计算Pos2到Pos3距离与Pos3到Pos4距离之和Len,Len/I得到排线数num,对于第i条排线,取值范围[0,num-1],水平方向的位置为 竖直方向的位置为 当三维场景运动时,排线位置做相应的运动;
步骤3-2,确定排线的基础大小及基础方向:根据输入的排线大小参考值S和排线大小抖动值SJitter计算排线基础大小,排线基础大小为S*(1+Random(SJitter/2)),。根据输入的排线方向参考值D和排线方向抖动值DJitter计算排线基础方向,基础方向为D+Random(DRange*DJitter),其中DRange为固定值;参数范围及计算公式见表1。
表1
步骤3-3,确定排线的基础颜色:基础颜色是指不考虑透明度值的抖动及渐变之前计算的数值,对三维场景模型打光照之后进行渲染,物体的材质可以使用布林材质或者朗伯材质,渲染完成之后对排线位置处的颜色缓存进行采样作为基础颜色;
步骤3-4,对排线基础颜色进行校正:彩铅的颜色与真实颜色相比更加明亮,使用大量实际彩铅的例子拟合出色彩分布曲线,归一化后得到直方图G1;对于待处理排线基础颜色缓存的每个通道归一化得到直方图G2,然后进行直方图匹配(参考文章:CombiningSketch and Tone for Pencil Drawing Production)。划分通道的颜色空间可以采用RGB(红绿蓝空间)、HSL(色相饱和度明度空间)或者YUV(亮度色度空间),在实际的例子中,YUV空间效果较好;
步骤3-5,确定排线透明度及绘制在场景中的颜色:对于透明度值的确定,根据输入的排线透明度参考值A和排线透明度抖动值AJitter计算基础透明度,如果透明度渐变模式参数取值为内渐变,则一组排线中所有排线基础透明度值一致,每一条排线之内进行均匀渐变,排线内像素点的水平方向坐标StrokeX,排线宽度StrokeWidth,排线内像素点的透明度值为其中Random表示以AJitter为参数的随机函数;如果透明度渐变模式参数取值为外渐变,则一组排线中的排线之间进行渐变,设一组排线一共有StrokeNum条,其中第si条排线的透明度为si表示排线序号;算透明度值时须将透明度通道与颜色通道分离,当透明度值最终确定以后,再将透明度通道与颜色通道合并;
步骤4中,生成指定颗粒及大小的纸纹效果,包括以下步骤:
步骤4-1,对纸纹像素值进行均匀采样,根据用户输入的噪声频率f和噪声振幅系数p对画布内的像素点进行均匀采样,噪声频率f取值范围[1,16],噪声振幅系数p取值范围[0.1,1],使用六个噪声函数叠加得到采样点的采样值,噪声函数编号i取值范围[0,5],第i个噪声函数的噪声频率为f*2i,第i个噪声函数的噪声振幅为pi;
步骤4-2,对纸纹像素值进行差值计算:应用步骤4-1得到的采样值,设需要差值的两个像素值分别为a和b,差值点的比例系数为px,计算差值得到差值结果为c。
步骤4-2中,根据步骤1中输入的要生成的纸纹的粗糙程度参数,使用不同的插值算法:
如果是不光滑纸纹,使用线性差值,计算方法为:
c=a*(1-px)+b*px。这种方法计算速度最快,但视觉效果最差,得到的纸纹最粗糙;
如果是较光滑纸纹,使用余弦差值,计算方法为:
c=a*(1-px*PI)+b*(1-cos(px*PI))*0.5,其中PI表示圆周率。这种方法计算速度适中,视觉效果较好,得到的纸纹较平滑;
如果是非常光滑纸纹,使用三次差值,计算方法为:
记录a的前一个像素值a0和b的后一个像素值b1,计算c0=(b1-b)-(a0-a),c=c0*px3+(a0-a-c0)*px2+(b1-a0)*px+a。这种方法需要的参数最多,计算速度最慢,但视觉效果最好,得到的纸纹非常平滑;以上三种方法实现效果均属于经典柏林噪声(参考文章:PerlinNoise)。
步骤5中,对排线应用动态变化的效果,包括以下步骤:
步骤5-1,对步骤3-2计算得到排线基础大小进一步调整:根据摄像机与三维场景模型的实时距离w调整排线的显示大小,使用1减去归一化的w值作为缩放因子ScaleFactor,计算公式为ScaleFactor=1-Normalize(w),其中Normalize是以w为参数的函数。距离近时w值较小,缩放因子取值较大,显示的排线尺寸较大,距离远时w值较大,缩放因子取值较小,显示的排线尺寸较小;根据三维场景模型点的法向与视线的夹角调整排线的尺寸,三维场景模型点的法向与视线的方向平行时排线达到最大尺寸,三维场景模型点的法向与视线的方向垂直时达到最小尺寸;
步骤5-2,生成排线点精灵:在OpenGL中点精灵是指三维场景中的二维平面,永远保持正对摄像机;以步骤3-1中确定的排线位置作为点精灵在三维场景模型中的初始位置,点精灵图像显示的内容为彩铅笔画的形状;
步骤5-3,当摄像机进行平移旋转缩放操作时,控制排线的实时变化,其中缩放表示镜头远近的拉伸。具体做法是实时移动旋转排线在三维场景模型中的位置。移动旋转相机操作通常伴随着光照的变化,这时需要实时采集三维场景中的光照信息用于修改排线的颜色;
步骤6中,合成最终的彩铅效果,包括以下步骤:
步骤6-1,合并轮廓线:在画布上首先绘制排线,之后绘制轮廓线,将轮廓线上非轮廓的部分填充为完全透明像素,然后与排线层进行颜色融合;
步骤6-2,应用纸纹效果,在已有轮廓线加排线的基础上,对画布上的全部像素的透明度值,乘以纸纹的颜色值作为最终的透明度值,透明度值取值范围[0,1],0为完全透明,1为完全不透明;
步骤6-3,可选的后期处理,将动画场景逐帧保存,对每帧应用颜色校正,从而与实际的彩铅效果更加接近。
有益效果:本发明的显著优点是:
(1)本发明为计算机生成彩铅风格效果设计了一个交互式系统,用户通过简单交互生成大量排线,与手工绘制相比大幅提高绘制效率;
(2)本发明提出彩铅风格绘制具有一般性,对于不同三维场景、不同光照效果以及不同动态效果均适用;
(3)本发明为彩铅风格的动画生成提供了高效方法,除了色彩直方图匹配需要后期处理之外,其余动画效果均可以实时显示。
附图说明
图1为本发明方法的基本流程图。
图2为不同参数下的轮廓线提取。
图3为用户交互排线端点的位置。
图4为透明度模式。
图5为实例绘制结果。
具体实施方式
下面结合附图和具体实施方式对本发明做更进一步的具体说明。
本方法的流程图如图1所示,使用OpenGL实时绘制场景,摄像机参数变化时实时捕捉并记录场景渲染的中间结果,比如颜色、法向、深度等,为排线颜色值的采样做准备;获取用户对于每一组排线参数的输入,包括位置、大小、方向等,作为基础参数为进一步处理做准备;根据当前帧修改实时排线参数自动生成排线;轮廓提取和纸纹生成作为两个相对独立的模块,与实时生成的排线合并形成最终的彩铅效果。如果对颜色有进一步要求,可以对每一帧画面进行直方图匹配后期处理。
具体的说,如图1所示,本发明公开了一种三维场景的彩铅风格处理方法,主要包括以下几个步骤:
步骤1,搭建用于用户交互的用户交互界面,导入三维场景模型,输入参数,完成三维场景模型的常规渲染;
步骤2,提取三维场景轮廓:提取三维场景的外轮廓线以及由曲率变化导致的内轮廓线,使用随光照变化的阈值模拟实际绘画中轮廓线的粗细变化;
步骤3,生成排线:根据输入参数自动生成排线并存储;排线的生成需要获取以下几部分信息:用户输入排线参数、三维场景几何信息,以及三维场景光照信息。获取信息之后计算得到三维场景中自动生成的排线并存储;
步骤4,生成纸纹:根据输入参数,使用算法生成纸纹;
步骤5,实现排线动态效果:实时获取摄像机的平移、旋转以及缩放参数,对三维场景模型进行真实感渲染,对渲染结果采样得到排线的实时颜色参数,计算排线的参数变化并显示;
步骤6,生成彩铅效果:将步骤5得到的排线结合步骤2得到的三维场景轮廓以及步骤4得到的纸纹,合成最终效果。
步骤1中,搭建程序界面用于获取用户交互,导入三维模型的OBJ(几何信息)及MTL(材质纹理)文件,完成场景的常规渲染,包括:
导入包含材质和纹理信息的三维场景模型文件,在三维场景模型中加入点光源,使用OpenGL(开源图形库)对三维场景模型进行实时渲染,渲染绘制区域称为画布,绘制过程获得三维场景模型的颜色缓存、法向图缓存及深度图缓存;缓存作为中间结果为后续步骤提供信息,不直接显示在画布上;
输入参数包括:排线大小参考值S、排线间隔参考值I、排线方向参考值D、排线透明度参考值A、排线大小抖动值SJitter、排线水平方向位置抖动值XJitter、排线竖直方向位置抖动值YJitter、排线方向抖动值DJitter、排线透明度抖动值AJitter、透明度渐变模式、画布中排线起始和终止位置、轮廓线阈值Ta和Tb、噪声频率f、噪声振幅系数p、要生成的纸纹大小及粗糙程度参数、画布大小参数。相邻两组排线可以使用相同的参数,也可以通过用户交互使用不同的参数。照相机参数由鼠标键盘获得,与常规三维软件的操作方式类似。
步骤2中,提取三维场景的外轮廓以及由曲率变化导致的轮廓线,模拟实际绘画中轮廓线的粗细变化并且消除屏幕锯齿,包括以下步骤:
步骤2-1,提取三维场景模型的外轮廓线:当视线角度与三维场景模型上点的法向夹角的余弦值小于一定阈值时,判定该点是轮廓,该阈值为函数Ta+(Tb-Ta)*Tp的取值,其中Ta为阈值下限,Tb为阈值上限,Tp为百分比差值,Ta、Tb和Tp的取值范围为[0,1],图2显示了Ta、Tb取不同值时轮廓线外观的变化,Tp值为三维场景模型上点的法向与光照方向夹角余弦值的绝对值,计算结果使得三维场景模型点的法向平行于光照方向时阈值取最大值,垂直于光照方向时取最小值;对于光滑的集合表面,法向的连续变化导致轮廓阈值的连续变化,最终呈现线条粗细的均匀变化,效果如图2所示,图2中(a)为原始图像,图2中(b)为阈值为[0.1,0.3]时的图像,图2中(c)为阈值为[0.2,0.4]时的图像;
步骤2-2,提取三维场景模型的内轮廓线:当三维物体网格的曲率变化时会呈现出内轮廓线,此时采用提取暗示轮廓线(Suggestive Contours)的方法提取三维场景模型的内轮廓线,具体做法是选取模型点法向与视线方向点积在DirectionW方向上取得极小值的点作为暗示轮廓,其中DirectionW是视线方向在模型点切平面的投影方向(参考文章:Suggestive Contours for Conveying Shape);
步骤2-3,对提取的外轮廓线和内轮廓线应用多重采样抗锯齿消除锯齿效果,使轮廓线的显示更平滑。首先开辟普通帧缓存内存16倍大小的超采样帧缓存,设置采样数为16进行采样。在0penGL(开源图形库)中,采样方法有两种,一种是选取坐标最接近的一个像素作为采样值,这种做法简单快速;第二种选取坐标周围的像素值进行加权平均,这种做法速度稍慢但画面更平滑。可以根据对效率及画面质量的平衡选择不同的采样数以及采样方法。
步骤3中,排线参数的自动生成,包括以下步骤:
步骤3-1,确定排线在三维场景模型中的位置:用户每次绘制一组排线时采用如下两种方式指定排线端点:
在画布上指定一组排线的两个端点,端点位置分别为Pos0和Pos1,三维场景模型中将自动在两个端点之间生成两条以上排线,根据输入的排线间隔参考值I和位置抖动值XJitter、YJitter计算生成的排线的位置:第n条排线水平方向的位置为(Pos0.X+(Pos1.X-Pos0.X)*n)+XRange*Random(XJitter),竖直方向的位置为(Pos0.Y+(Pos1.Y-Pos0.Y)*n)+YRange*Random(YJitter)。其中n表示排线的序号,Pos0.X表示点Pos0在水平方向的坐标,Pos0.Y表示点Pos0在竖直方向的坐标,Pos1.X表示点Pos1在水平方向的坐标,Pos1.Y表示点Pos1在竖直方向的坐标,XRange和YRange为固定值,表示允许随机的像素范围,Random()表示随机函数,得到结果后记录计算出的一组排线位置,如图3所示。将所有的排线位置投影到三维场景模型中,记录三维场景模型中的排线位置;
用户在画布上指定贝塞尔曲线的三个端点,三维场景模型中将自动在端点确定的贝塞尔曲线上自动生成两条以上排线;对于三个端点Pos2、Pos3、Pos4,首先计算Pos2到Pos3距离与Pos3到Pos4距离之和Len,Len/I得到排线数num,对于第i条排线,i表示排线序号,取值范围[0,num-1],水平方向的位置为 竖直方向的位置为 当三维场景运动时,排线位置做相应的运动;
步骤3-2,确定排线的基础大小及基础方向:根据输入的排线大小参考值S和排线大小抖动值SJitter计算排线基础大小,基础大小等于S*(1+Random(SJitter/2)),。根据输入的排线方向参考值D和排线方向抖动值DJitter计算排线基础方向,基础方向等于D+Random(DRange*DJitter),其中DRange为固定值,参数范围及计算公式见表1。
表1
步骤3-3,确定排线的基础颜色:基础颜色是指不考虑透明度值的抖动及渐变之前计算的数值,对三维场景模型打光照之后进行渲染,物体的材质可以使用布林材质或者朗伯材质,渲染完成之后对排线位置处的颜色缓存进行采样作为基础颜色;
步骤3-4,对排线基础颜色进行校正:彩铅的颜色与真实颜色相比更加明亮,使用大量实际彩铅的例子拟合出色彩分布曲线,归一化后得到直方图G1;对于待处理排线基础颜色缓存的每个通道归一化得到直方图G2,然后进行直方图匹配(参考文章:CombiningSketch and Tone for Pencil Drawing Production)。划分通道的颜色空间可以采用RGB(红绿蓝空间)、HSL(色相饱和度明度空间)或者YUV(亮度色度空间),在实际的例子中,YUV空间效果较好;由于颜色校正计算较复杂,所以这个过程不适用于实时处理,只用于后期处理;
步骤3-5,确定排线透明度及绘制在场景中的颜色:对于透明度值的确定,根据输入的排线透明度参考值A和排线透明度抖动值AJitter计算基础透明度,如果透明度渐变模式参数取值为内渐变,则一组排线中所有排线基础透明度值一致,每一条排线之内进行均匀渐变,排线内像素点的水平方向坐标StrokeX,排线宽度StrokeWidth,排线内像素点的透明度值为其中Random表示以AJitter为参数的随机函数,如图4中(b)所示;如果透明度渐变模式参数取值为外渐变,则一组排线中的排线之间进行渐变,设一组排线一共有StrokeNum条,其中第si条排线的透明度为si表示排线序号,如图4中(a)所示;算透明度值时须将透明度通道与颜色通道分离,当透明度值最终确定以后,再将透明度通道与颜色通道合并;
步骤4中,生成指定颗粒及大小的纸纹效果,包括以下步骤:
步骤4-1,对纸纹像素值进行均匀采样,根据用户输入的噪声频率f和噪声振幅系数p对画布内的像素点进行均匀采样,噪声频率f取值范围[1,16],噪声振幅系数p取值范围[0.1,1],使用六个噪声函数叠加得到采样点的采样值,噪声函数编号i取值范围[0,5],第i个噪声函数的噪声频率为f*2i,第i个噪声函数的噪声振幅为pi;
步骤4-2,对纸纹像素值进行差值计算:应用步骤4-1得到的采样值,设需要差值的两个像素值分别为a和b,差值点的比例系数为px,计算差值得到差值结果为c。
步骤4-2中,根据步骤1中输入的要生成的纸纹的粗糙程度参数,使用不同的插值算法(现有技术中有多种算法,本实施例中使用了三种常见的算法):
如果是不光滑纸纹,使用线性差值,计算方法为:
c=a*(1-px)+b*px。这种方法计算速度最快,但视觉效果最差,得到的纸纹最粗糙;
如果是较光滑纸纹,使用余弦差值,计算方法为:
c=a*(1-px*PI)+b*(1-cos(px*PI))*0.5,其中PI表示圆周率。这种方法计算速度适中,视觉效果较好,得到的纸纹较平滑;
如果是非常光滑纸纹,使用三次差值,计算方法为:
记录a的前一个像素值a0和b的后一个像素值b1,计算c0=(b1-b)-(a0-a),c=c0*px3+(a0-a-c0)*px2+(b1-a0)*px+a。这种方法需要的参数最多,计算速度最慢,但视觉效果最好,得到的纸纹非常平滑;以上三种方法实现效果均属于经典柏林噪声(参考文章:PerlinNoise)。
步骤5中,对排线应用动态变化的效果,包括以下步骤:
步骤5-1,对步骤3-2计算得到排线基础大小进一步调整:根据摄像机与三维场景模型的实时距离w调整排线的显示大小,使用1减去归一化的w值作为缩放因子ScaleFactor,计算公式为ScaleFactor=1-Normalize(w),其中Normalize是以w为参数的函数。距离近时w值较小,缩放因子取值较大,显示的排线尺寸较大,距离远时w值较大,缩放因子取值较小,显示的排线尺寸较小;根据三维场景模型点的法向与视线的夹角调整排线的尺寸,三维场景模型点的法向与视线的方向平行时排线达到最大尺寸,三维场景模型点的法向与视线的方向垂直时达到最小尺寸;
步骤5-2,生成排线点精灵:在OpenGL中点精灵是指三维场景中的二维平面,永远保持正对摄像机;以步骤3-1中确定的排线位置作为点精灵在三维场景模型中的初始位置,点精灵图像显示的内容为彩铅笔画的形状;此实施方式中录入了三组,每组十种不同的彩铅画笔形状,每一组排线应用由用户指定的一种画笔形状;
步骤5-3,当摄像机进行平移旋转缩放操作时,控制排线的实时变化,其中缩放表示镜头远近的拉伸。具体做法是实时移动旋转排线在三维场景模型中的位置。移动旋转相机操作通常伴随着光照的变化,这时需要实时采集三维场景中的光照信息用于修改排线的颜色;
步骤6中,合成最终的彩铅效果,包括以下步骤:
步骤6-1,合并轮廓线:在画布上首先绘制排线,之后绘制轮廓线,将轮廓线上非轮廓的部分填充为完全透明像素,然后与排线层进行颜色融合;
步骤6-2,应用纸纹效果,在已有轮廓线加排线的基础上,对画布上的全部像素的透明度值,乘以纸纹的颜色值作为最终的透明度值,透明度值取值范围[0,1],0为完全透明,1为完全不透明;
步骤6-3,可选的后期处理,将动画场景逐帧保存,对每帧应用颜色校正,从而与实际的彩铅效果更加接近。
实施例
本实施例的实验硬件环境是:英特尔第二代酷睿i3-2100 3.10GHz双核CPU(处理器),NVDIA GeForce GTS 450GPU(显卡),4G内存,软件环境是MicrosoftVisualStudio2010(软件开发工具)、Qt5(图形用户界面应用程序开发框架)和OpenGL4.3(开源图形库)。
步骤1,搭建程序界面:搭建程序界面用于获取用户交互、导入三维模型,完成场景的常规渲染;
步骤2,三维场景轮廓提取:提取三维场景的外轮廓线以及由曲率变化导致的内轮廓线,模拟实际绘画中轮廓线的粗细变化,使用多重采样抗锯齿;
步骤3,排线自动生成:排线的生成需要获取以下几部分信息:用户输入排线参数、三维场景几何信息,以及三维场景光照信息。获取信息之后计算得到三维场景中自动生成的排线并存储;
步骤4,纸纹生成:根据用户指定的纸纹大小及粗糙程度等参数,使用算法生成纸纹;
步骤5,实现排线动态效果:实时获取摄像机的平移、旋转以及缩放参数,对场景进行真实感渲染,对渲染结果采样得到排线的实时颜色参数,使用算法计算排线的参数变化并显示;
步骤6,生成彩铅效果:将步骤5得到的排线应用步骤2得到的轮廓以及步骤4得到的纸纹,合成最终效果,最终效果如图5所示。
本发明提供了一种三维场景的彩铅风格处理方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
Claims (6)
1.一种三维场景的彩铅风格处理方法,其特征在于,包括以下步骤:
步骤1,导入三维场景模型,输入参数;
步骤2,提取三维场景轮廓:提取三维场景的外轮廓线以及由曲率变化导致的内轮廓线,使用随光照变化的阈值模拟实际绘画中轮廓线的粗细变化;
步骤3,生成排线:根据输入参数自动生成排线并存储;
步骤4,生成纸纹:根据输入参数,生成纸纹;
步骤5,实现排线动态效果:实时获取摄像机的平移、旋转以及缩放参数,对三维场景模型进行真实感渲染,对渲染结果采样得到排线的实时颜色参数,计算排线的参数变化并显示;
步骤6,生成彩铅效果:将步骤5得到的排线结合步骤2得到的三维场景轮廓以及步骤4得到的纸纹,合成最终效果;
步骤1包括:
导入包含材质和纹理信息的三维场景模型文件,在三维场景模型中加入点光源,使用OpenGL对三维场景模型进行实时渲染,渲染绘制区域称为画布,绘制过程获得三维场景模型的颜色缓存、法向图缓存及深度图缓存;
输入参数包括:排线大小参考值S、排线间隔参考值I、排线方向参考值D、排线透明度参考值A、排线大小抖动值SJitter、排线水平方向位置抖动值XJitter、排线竖直方向位置抖动值YJitter、排线方向抖动值DJitter、排线透明度抖动值AJitter、透明度渐变模式、画布中排线起始和终止位置、轮廓线阈值Ta和Tb、噪声频率f、噪声振幅系数p、要生成的纸纹大小及粗糙程度参数、画布大小参数;
步骤2包括以下步骤:
步骤2-1,提取三维场景模型的外轮廓线:当视线角度与三维场景模型上点的法向夹角的余弦值小于一定阈值时,判定该点是轮廓,该阈值为函数Ta+(Tb-Ta)*Tp的取值,其中Ta为阈值下限,Tb为阈值上限,Tp为百分比差值,Ta、Tb和Tp的取值范围为[0,1],Tp值为三维场景模型上点的法向与光照方向夹角余弦值的绝对值,计算结果使得三维场景模型点的法向平行于光照方向时阈值取最大值,垂直于光照方向时阈值取最小值;
步骤2-2,提取三维场景模型的内轮廓线:当三维物体网格的曲率变化时会呈现出内轮廓线,此时采用提取暗示轮廓线的方法提取三维场景模型的内轮廓线;
步骤2-3,对提取的外轮廓线和内轮廓线应用多重采样抗锯齿消除锯齿效果,使轮廓线的显示更平滑。
2.如权利要求1所述的一种三维场景的彩铅风格处理方法,其特征在于,步骤3包括以下步骤:
步骤3-1,确定排线在三维场景模型中的位置:每次绘制一组排线时采用如下两种方式指定排线端点:
在画布上指定一组排线的两个端点,端点位置分别为Pos0和Pos1,三维场景模型中将自动在两个端点之间生成两条以上排线,根据输入的排线间隔参考值I和位置抖动值XJitter、YJitter计算生成的排线的位置:第n条排线水平方向的位置为(Pos0.X+(Pos1.X-Pos0.X)*n)+XRange*Random(XJitter),竖直方向的位置为(Pos0.Y+(Pos1.Y-Pos0.Y)*n)+YRange*Random(YJitter),Pos0.X表示点Pos0在水平方向的坐标,Pos0.Y表示点Pos0在竖直方向的坐标,Pos1.X表示点Pos1在水平方向的坐标,Pos1.Y表示点Pos1在竖直方向的坐标,XRange和YRange为固定值,XRange*Random(XJitter)、YRange*Random(YJitter)表示允许随机的像素范围,Random()表示随机函数,得到结果后记录计算出的一组排线位置,将所有的排线位置投影到三维场景模型中,记录三维场景模型中的排线位置;
在画布上指定贝塞尔曲线的三个端点,三维场景模型中将自动在端点确定的贝塞尔曲线上自动生成两条以上排线;对于三个端点,差值使用贝塞尔曲线函数计算,具体包括:用户在画布上指定贝塞尔曲线的三个端点,三维场景模型中将自动在端点确定的贝塞尔曲线上自动生成两条以上排线;对于三个端点Pos2、Pos3、Pos4,首先计算Pos2到Pos3距离与Pos3到Pos4距离之和Len,Len/I得到排线数num,对于第i条排线,取值范围[0,num-1],水平方向的位置为 竖直方向的位置为 当三维场景运动时,排线位置做相应的运动;
步骤3-2,确定排线的基础大小及基础方向:根据输入的排线大小参考值S和排线大小抖动值SJitter计算排线基础大小,排线基础大小为S*(1+Random(SJitter/2)),根据输入的排线方向参考值D和排线方向抖动值DJitter计算排线基础方向,基础方向为D+Random(DRange*DJitter),其中DRange为固定值;
步骤3-3,确定排线的基础颜色:对三维场景模型打光照之后进行渲染,渲染完成之后对排线位置处的颜色缓存进行采样作为基础颜色;
步骤3-4,对排线基础颜色进行矫正:使用实际彩铅的例子拟合出色彩分布曲线,归一化后得到直方图G1;对于待处理排线基础颜色缓存的每个通道归一化得到直方图G2,然后进行直方图匹配;
步骤3-5,确定排线透明度及绘制在场景中的颜色:对于透明度值的确定,根据输入的排线透明度参考值A和排线透明度抖动值AJitter计算基础透明度,如果透明度渐变模式参数取值为内渐变,则一组排线中所有排线基础透明度值一致,每一条排线之内进行均匀渐变;如果透明度渐变模式参数取值为外渐变,则一组排线中的排线之间进行渐变。
3.如权利要求2所述的一种三维场景的彩铅风格处理方法,其特征在于,步骤4包括以下步骤:
步骤4-1,对纸纹像素值进行均匀采样,根据输入的噪声频率f和噪声振幅系数p对画布内的像素点进行均匀采样,噪声频率f取值范围[1,16],噪声振幅系数p取值范围[0.1,1],使用六个噪声函数叠加得到采样点的采样值,六个噪声函数中,第i个噪声函数的噪声频率为f*2i,第i个噪声函数的噪声振幅为pi,其中i表示噪声函数的序号,取值范围是[0,5];
步骤4-2,对纸纹像素值进行差值计算:应用步骤4-1得到的采样值,设需要差值的两个噪声值即像素值分别为a和b,差值点的比例系数为px,计算差值得到差值结果为c。
4.如权利要求3所述的一种三维场景的彩铅风格处理方法,其特征在于,步骤4-2中,根据步骤1中输入的要生成的纸纹的粗糙程度参数,使用不同的插值算法:
如果是不光滑纸纹,使用线性差值,计算方法为:c=a*(1-px)+b*px;
如果是较光滑纸纹,使用余弦差值,计算方法为:c=a*(1-px*PI)+b*(1-cos(px*PI))*0.5,其中PI表示圆周率;
如果是非常光滑纸纹,使用三次差值,计算方法为记录a的前一个像素值a0和b的后一个像素值b1,计算c0=(b1-b)-(a0-a),c=c0*px3+(a0-a-c0)*px2+(b1-a0)*px+a,c0表示中间结果。
5.如权利要求4所述的一种三维场景的彩铅风格处理方法,其特征在于,步骤5包括以下步骤:
步骤5-1,对步骤3-2计算得到排线基础大小进一步调整:根据摄像机与三维场景模型的实时距离w调整排线的显示大小,使用1减去归一化的w值作为缩放因子ScaleFactor,计算公式为ScaleFactor=1-Normalize(w),其中Normalize是以w为参数的归一化函数,根据三维场景模型点的法向与视线的夹角调整排线的尺寸,三维场景模型点的法向与视线的方向平行时排线达到最大尺寸,三维场景模型点的法向与视线的方向垂直时达到最小尺寸;
步骤5-2,生成排线点精灵:以步骤3-1中确定的排线位置作为点精灵在三维场景模型中的初始位置,点精灵图像显示的内容为彩铅笔画的形状;
步骤5-3,当摄像机进行平移旋转缩放操作时,控制排线的实时变化,其中缩放表示镜头远近的拉伸。
6.如权利要求5所述的一种三维场景的彩铅风格处理方法,其特征在于,步骤6包括以下步骤:
步骤6-1,合并轮廓线:在画布上首先绘制排线,之后绘制轮廓线,将轮廓线上非轮廓的部分填充为完全透明像素,然后与排线层进行颜色融合;
步骤6-2,应用纸纹效果,在已有轮廓线加排线的基础上,对画布上的全部像素的透明度值,乘以纸纹的颜色值作为最终的透明度值,透明度值取值范围[0,1],0为完全透明,1为完全不透明。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610183158.6A CN105869203B (zh) | 2016-03-28 | 2016-03-28 | 一种三维场景的彩铅风格处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610183158.6A CN105869203B (zh) | 2016-03-28 | 2016-03-28 | 一种三维场景的彩铅风格处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105869203A CN105869203A (zh) | 2016-08-17 |
CN105869203B true CN105869203B (zh) | 2018-09-28 |
Family
ID=56624955
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610183158.6A Active CN105869203B (zh) | 2016-03-28 | 2016-03-28 | 一种三维场景的彩铅风格处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105869203B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107045729B (zh) * | 2017-05-05 | 2018-09-18 | 腾讯科技(深圳)有限公司 | 一种图像渲染方法及装置 |
CN113409452B (zh) * | 2021-07-12 | 2023-01-03 | 深圳大学 | 一种三维线条的生成方法、存储介质及系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1996013006A1 (en) * | 1994-10-20 | 1996-05-02 | Mark Alan Zimmer | Digital mark-making method |
CN103489204B (zh) * | 2013-05-15 | 2016-04-06 | 许昌学院 | 一种二维彩色铅笔画自动绘制方法 |
CN104966312B (zh) * | 2014-06-10 | 2017-07-21 | 腾讯科技(深圳)有限公司 | 一种3d模型的渲染方法、装置及终端设备 |
-
2016
- 2016-03-28 CN CN201610183158.6A patent/CN105869203B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN105869203A (zh) | 2016-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Johnston | Lumo: Illumination for cel animation | |
US9142056B1 (en) | Mixed-order compositing for images having three-dimensional painting effects | |
CN108805090B (zh) | 一种基于平面网格模型的虚拟试妆方法 | |
Semmo et al. | Image stylization by interactive oil paint filtering | |
US7239314B2 (en) | Method for 2-D animation | |
US8988461B1 (en) | 3D drawing and painting system with a 3D scalar field | |
Lum et al. | Non-photorealistic rendering using watercolor inspired textures and illumination | |
Way et al. | The synthesis of trees in Chinese landscape painting using silhoutte and texture strokes | |
CN105869203B (zh) | 一种三维场景的彩铅风格处理方法 | |
Zhao et al. | Research on the application of computer image processing technology in painting creation | |
Cui et al. | Image‐based embroidery modeling and rendering | |
Yang et al. | Animating Chinese ink painting through generating reproducible brush strokes | |
Gooch | Interactive non-photorealistic technical illustration | |
Li et al. | Image stylization with enhanced structure on GPU | |
Kerber et al. | Real-time generation of digital bas-reliefs | |
Montesdeoca et al. | Edge-and substrate-based effects for watercolor stylization | |
Seo et al. | Interactive painterly rendering with artistic error correction | |
CN110335332A (zh) | 一种人脸卡通画自动绘制方法 | |
Setlur et al. | Automatic stained glass rendering | |
Wang et al. | A method for ink-wash painting rendering for 3D scenes | |
Xu et al. | PointWorks: Abstraction and Rendering of Sparsely Scanned Outdoor Environments. | |
Chen et al. | Real-time artistic silhouettes rendering for 3D models | |
Seo et al. | A Painterly Rendering Based on Stroke Profile and Database. | |
Ji et al. | Artist-drawing inspired automatic sketch portrait rendering | |
Chen et al. | Synthesizing non photo-realistic rendering effects of volumetric strokes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |