非真实渲染

1649 篇文章 11 订阅
1623 篇文章 22 订阅

http://blog.csdn.net/bugrunner/article/details/5435078

 

 轮廓和边界的提取是非真实渲染中一个常用的表现方法,由于它的卡通描述风格,尽管结构简单但却对整体效果的表现有极大的增强效果。基本的轮廓边界提取方法有基于图像空间和基于3D空间的方法:

基于图像空间的方法利用传统渲染管线来得到当前模型投影的辅助信息,然后用这些信息来提取模型的轮廓和边界。这种方法速度较快,效率较高,但是提取的轮廓可能会不连贯,而且得到的轮廓是基于像素而非几何的,因此一般不可控,不太容易在此基础上进行其它NPR效果的扩展。

基于3D空间的方法是在3D模型的基础上对几何图元进行空间分析,处理的3D对象可以是网格化描述,也可以是曲面方程描述的,这种方法可以生成参数化的轮廓边界线方程,这样就可以在这些参数化的轮廓线上施加其它多种丰富的NPR效果。但受限于当前计算机的运算能力,使用基于3D的轮廓提取方法不太容易达到实时,因而这种方法在游戏之中的使用就受到了限制。

这里采用了基于图像空间的边界轮廓提取方法,基本实现:

1.       在当前视角下对场景进行渲染得到法向量图、深度图(当然,在实现时可以将两者合并)。

DepthNormal

2.       使用法向量贴图和深度贴图进行基于2D的场景轮廓边界探测。

3.       将得到的边界与场景进行有机融合,并添加其它的NPR渲染效果,如Toon Shading、Gooch Shading等。

 

NPR Effect 

 

NPR Effect1   NPR Effect2 

 

    该算法实现中的主要操作在于结合法向量纹理与深度纹理图来进行模型轮廓和边界的探测:对于当前屏幕空间中的每个像素点,在它周围进行扩展,访问纹理并得到周边点的深度和法向量,然后将其与当前点上的深度和法向量进行比较来判断它们之间的变化是否大于某一阈值,如果大于则认为有突变,即其是处在边界之上的,否则认为其没有处在边界之上。但由于受采样的粒度及3D到2D投影变换的影响,采样比较得到的轮廓边界线可能会出现宽度不一致的情况,对于这个问题可以采用图像处理中的边界细化的操作,对初始轮廓边界线再施加一个流程的处理得到宽度一致的轮廓线,并且在这个过程中可以对轮廓和边界线的宽度进行再控制。

 

  Toon Shading是一种简单、基本的卡通着色方式,其着色的主要效果是用大块、突变的色调来代替正常情况中的渐变色调,从而表现出卡通效果。使用这种渲染方法,然后再结合轮廓边界线的勾勒,这种渲染方式也能得到很赏心悦目的表现效果。

       其主要实现方式即是计算得到当前像素得的法线与光线之间的夹角,然后根据此夹角大小在颜色表中查找当前像素所应具有的Toon color,用这个颜色值进行逐像素的着色即可。当然了,在实现之中使用当前法向量与光线方向之间的余弦值可得到成角度相同的效果。这里用到颜色表可以单纯地根据材质来确定,也可以结合纹理,进行而得到带有纹理的Toon着色效果。在色调变化不太丰富,场景规模较小的情况下这个颜色表也可以直到写入到程序之中。

一个具有四阶颜色变化的Toon颜色表如下:

CT 

 

在此基础上生成Toon Shading效果图如下:

TS GKT

TS HEBE

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值