首页 > 代码库 > 【NPR】非真实感渲染实验室

【NPR】非真实感渲染实验室

写在前面


前几天在知乎看到一个问题——关于非实感图形学或者风格化渲染有哪些好的书或者paper,我刚好接触过一些就去里面回答了一下。答完以后突然想在Unity里搞一个这种集锦,把一些简单的NPR论文或者教程在Unity里实现一下。于是这两天就做了一下。

我把这个项目放到了GitHub(https://github.com/candycat1992/NPR_Lab)上,有兴趣的同学能够去看一下。

项目链接:https://github.com/candycat1992/NPR_Lab

实现了哪些NPR


就这两天的工作,我主要挑选的是关于卡通渲染一些最早的论文,比如1998年的A Non-Photorealistic Lighting Model for Automatic Technical Illustration,这篇是最早提出在卡通渲染使用色调来模拟插画风格的文章。

因为Unity封装的太好了,一些论文中的效果我没有在Unity里做出来,等到Unity更新之后开放很多其它功能的时候我会更新。

这个项目不出意外的话我会一直更新的。假设大家一些希望看到的NPR效果能够跟我说。有时间的话我会尝试去实现。

每次更新项目,假设加入了新的渲染效果。我也会在项目的README里注明。比如,在我写这篇文章的时候,我一共实现了五个简单的NPR:

  • Antialiased Cel Shading

    Related Scene: AntialiasedCelShadingScene

    Reference: http://prideout.net/blog/?p=22

    技术分享

  • Tone Based Shading

    Related Scene: ToneBasedShadingScene

    Reference: Gooch A, Gooch B, Shirley P, et al. A non-photorealistic lighting model for automatic technical illustration[C]//Proceedings of the 25th annual conference on Computer graphics and interactive techniques. ACM, 1998: 447-452.

    技术分享

  • Stylized Highlights

    Related Scene: StylizedHighlightsScene

    Reference: Anjyo K, Hiramitsu K. Stylized highlights for cartoon rendering and animation[J]. Computer Graphics and Applications, IEEE, 2003, 23(4): 54-61.

    技术分享

  • Pencil Sketch Shading

    Related Scene: PencilSketchShadingScene

    Reference: Lake A, Marshall C, Harris M, et al. Stylized rendering techniques for scalable real-time 3D animation[C]//Proceedings of the 1st international symposium on Non-photorealistic animation and rendering. ACM, 2000: 13-2

    技术分享

  • Hatching

    Related Scene: HatchingScene

    Reference: Praun E, Hoppe H, Webb M, et al. Real-time hatching[C]//Proceedings of the 28th annual conference on Computer graphics and interactive techniques. ACM, 2001: 581.

    技术分享


背后的原理


这些实验大部分都是參考了论文。少数是基于一些教程。

它们大多数仅仅使用到了shader。在项目的README里。我给出了每种效果參考的资料以及在项目中的场景名字。我本来打算每种效果都写一篇博文来讲一下原理,但近期在写书并且还有实验室方面的工作要做,时间没那么充裕,因此更新会慢。但就眼下实现的几种效果来说。大家都能够从论文中找到实现原理,并且shader也都不复杂。



写在最后


这个项目也是纯属兴趣,假设大家有不论什么意见和建议欢迎给我留言。假设发现我的实现有误。也一定要告诉我。

最后,希望大家能够hava fun~

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

【NPR】非真实感渲染实验室