找回密码
 立即注册
查看: 432|回复: 0

[简易教程] Unity-两个简单的油画渲染方法

[复制链接]
发表于 2021-5-11 09:03 | 显示全部楼层 |阅读模式
本文主要介绍两个简单的油画渲染方式,不会涉及代码,只讲基本思想和结构~
后处理方式渲染油画

首先是一种传统的后处理渲染的方式,算法基本来自论文(Oil Painting Style Rendering Based on Kuwahara Filter),论文流程图如下。
而我基本是按照论文的步骤来的。用Kuwahara Filter(之前水彩画文章也提过,参考知乎呆晒晒的UE4卡通渲染基础教程 Part4:Paint Filter)代替Saliency Map;然后算出ETF图(参考知乎alpacasKing的在Unity中实现基于GPU的线积分卷积(LIC)),将此图当作Paper混合到图上;最后把轮廓线检测当作法线贴图。非常简单~OVER~
最后的效果如下:
笔触方式

另外一个方式则是基于unity asset的一个油画插件,这个方法最终的效果是为了模拟每一笔油画笔触的效果,先上最终效果图吧~
其中最主要的思想是,首先自建一个mesh数据,该mesh数据的顶点是6的倍数。这样设置的目的是在后处理的顶点着色器里把每6个顶点扩展成一个quad,然后就可以用预先设置的笔触贴图渲染这些quad了。简单的说,该mesh数据有6*100个顶点,最后就可以生成100给quad。
最后将这些笔触quad平铺到整个屏幕上,在映射相应的屏幕的颜色值即可。是一个用顶点着色器代替几何着色器的妙招~
上图是仅仅显示quad的图像了。不过这里还进行了一个步骤,首先,把原始的所有笔触quad分层平铺到屏幕射;然后通过颜色的偏移值(ddx、ddy)来控制笔触的大小和显示,也就是说让颜色密度大的地方用大的笔触,反之亦然。
其中每个笔触还有其光照渲染(其实也就是简答的法线光照),旋转(可以根据ETF图来定方向)等等,就不赘述了。
    根据此方式稍微的改进
以上就是原始asset的基本思想。但是这样的方式有个弊端,就是画面抖动会非常剧烈。因此考虑直接在模型上用这种方式,算是一种改进吧。思想也非常简单,就是根据模型生成单独的mesh数据。先写个小插件,在原始模型上均匀采样点,此采样点则是生成mesh的顶点,记住要重复6次哟;然后每个顶点根据其密度赋值一定的顶点色,用于后期控制笔触的大小。最后再与背景的笔触合并,即可。如下图,可看到右边是根据自己生成的mesh重新覆盖了一层笔触渲染,这样笔触可以根据模型旋转而旋转。最终效果图也能看到,右边的模型旋转时候的闪烁效果好了许多~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-20 08:11 , Processed in 0.102633 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表