Hatching(素描)渲染——通过光照的强弱,用不同深浅的纹理,实现一种类似素描效果。

Hatching的实现原理是:通过N.L计算点受光的强弱,将该值分成不同的段,不同的光照强度对应不同深浅的素描贴图

算法对应的VS如下:

[cpp] view plaincopy
  1. VS_OUTPUT vs_main( VS_INPUT Input )
  2. {
  3. VS_OUTPUT Output;
  4. Output.Position = mul( Input.Position, matViewProjection );
  5. Output.Texcoord = Input.Texcoord;
  6. float3 normalW = mul( Input.Normal, matView);
  7. float diffuse = min( 1, max(0, dot( vecLightDir, normalW)));
  8. //把diffuse平方两次是为了,把亮度降低点,把整体亮度向暗方向偏移,以得到更好的视觉效果。
  9. diffuse = diffuse * diffuse;
  10. diffuse = diffuse * diffuse;
  11. float factor = diffuse * 6.0;
  12. // 通过两个weight,来记录权值,减少传入ps的变量数。
  13. float3 weight0 = 0.0;
  14. float3 weight1 = 0.0;
  15. // 不同光照强度,对应不同的权值,及不同的纹理贴图
  16. if( factor > 5.0)
  17. {
  18. weight0.x = 1;
  19. }
  20. else if( factor > 4.0)
  21. {
  22. weight0.x = factor - 4.0;
  23. weight0.y = 1.0 - weight0.x;
  24. }
  25. else if( factor > 3.0)
  26. {
  27. weight0.y = factor - 3.0;
  28. weight0.z = 1.0 - weight0.y;
  29. }
  30. else if( factor > 2.0)
  31. {
  32. weight0.z = factor - 2.0;
  33. weight1.x = 1.0 - weight0.z;
  34. }
  35. else if( factor > 1.0)
  36. {
  37. weight1.x = factor - 1.0;
  38. weight1.y = 1.0 - weight1.x;
  39. }
  40. else if( factor > 0.0)
  41. {
  42. weight1.y = factor;
  43. weight1.z = 1.0 - weight1.y;
  44. }
  45. Output.Weight0 = weight0;
  46. Output.Weight1 = weight1;
  47. return( Output );
  48. }

PS为:

[c-sharp] view plaincopy
  1. struct PS_INPUT
  2. {
  3. float2 tex     : TEXCOORD0;
  4. float3 weight0 : TEXCOORD1;
  5. float3 weight1 : TEXCOORD2;
  6. };
  7. float4 ps_main( PS_INPUT input) : COLOR0
  8. {
  9. float4 hattch0 = tex2D(hattch0Map, input.tex)*input.weight0.x;
  10. float4 hattch1 = tex2D(hattch1Map, input.tex)*input.weight0.y;
  11. float4 hattch2 = tex2D(hattch2Map, input.tex)*input.weight0.z;
  12. float4 hattch3 = tex2D(hattch3Map, input.tex)*input.weight1.x;
  13. float4 hattch4 = tex2D(hattch4Map, input.tex)*input.weight1.y;
  14. float4 hattch5 = tex2D(hattch5Map, input.tex)*input.weight1.z;
  15. return hattch0 + hattch1 + hattch2
  16. + hattch3 + hattch4 + hattch5;
  17. }

最终效果

NPR-Hatching素描渲染相关推荐

  1. NPR技术(2)—Hatching 素描渲染

    转载请注明出处:http://blog.csdn.net/tianhai110 Hatching(素描)渲染--通过光照的强弱,用不同深浅的纹理,实现一种类似素描效果. Hatching的实现原理是: ...

  2. Unity Shader 素描渲染

    一.效果 Unity3D Shader 素描渲染 技术参考:https://io-meter.com/2014/12/31/sketch-rendering/ 效果思路来源于以前看的一部电影<小 ...

  3. [OpenGL] Hatching 素描画效果

    参考:http://hhoppe.com/proj/hatching/ 第一部分 : 论文概述 里面包含了论文和演讲稿,接下来是对Real-Time hatching论文的一个概述: 主要的挑战: ( ...

  4. mfc三视图和斜等测图实现_如何在UE4中实现NPR(非真实感)渲染效果?

    如何在UE4中实现NPR(非真实感)渲染效果?本文作者尝试在UE4中制作了秋叶原南出口的画面,并分享了全部的制作过程,希望对大家有所帮助. 在虚幻引擎中制作秋叶原南出口 我经常在artstation上 ...

  5. Chapter14_非真实感渲染

    非真实感渲染(Non Photorealistic Rendering,NPR),用于卡通,水彩风格渲染. 卡通风格渲染(黑色描边,分明的明暗变化) 基于色调的着色技术(tone-based shad ...

  6. 崩三类卡通渲染解析及制作规范

    一.本篇文章分为三部分 1,卡通材质解析. 2,优化方向. 3,制作规范. 二.正文部分 1,卡通材质解析 卡通渲染属于非真实感计算机图形学(NPR)的范畴,然而崩三的卡通渲染又在国内被称为行业的标杆 ...

  7. Unity Shader - Simple Toon Shading - 简单卡通渲染

    文章目录 最终效果 - Final Effect 无光照,只有纹理与主色调 Shader 加描边 - Outline GIF Shader 添加光影 - RecieveShadow 自身接收阴影 Sh ...

  8. unity-NPR-卡通渲染

    title: unity-NPR-卡通渲染 categories: Unity3d tags: [unity, shader, npr, ta] date: 2019-03-07 11:44:18 c ...

  9. 【项目分析笔记】卡通感风格的渲染方法和思考

    本文是基于腾讯TA大咖的一篇分享作的笔记,主要内容来自于Unity社区的分享,下面指路.基于个人的阅读习惯和一些陌生的方法做了补充和引用.主要是面对NPR的一个渲染效果分析,通俗易懂适合新手阅读. 引 ...

最新文章

  1. gnu linux空间包括什么,不知道这十项Linux常识,就别说自己玩过Linux
  2. 谈谈:.Net中的序列化和反序列化
  3. an example of Ascii using 问号 as example
  4. 并发编程(多进程1)
  5. java vm art_Android虚拟机art流程:JavaVM 和 JNIEnv 的初始化 - 神农笔记
  6. EVENT:10228 trace application of redo by kcocbk
  7. 支付宝退款接口及反回参数
  8. linux查看二进制文件乱码
  9. 判断平面内两直线平行c语言,5.2 平行线及其判定教学设计模板
  10. 常用的台式计算机,台式电脑常见简单故障排除
  11. FrameMaker 2019中文版
  12. 【原创】关于改变电脑默认安装地址后桌面快捷键显示“指定路径不存在”错误的解决方法之一
  13. np.ones(),np.zeros(), np.empty(),np.full(),np.ones_like() 基本用法
  14. 1055 习题4-9-3 逆序输出正整数各位上数字
  15. 嵌入式Linux设备驱动程序开发指南17(IIO子系统一)——读书笔记
  16. 微信小程序canvas 证件照制作
  17. 常见html5营销类型有哪些,常见的品牌营销都有哪几种形式
  18. MatLab实现的ftt大数乘法
  19. 【阿里巴巴】学习Java在面试过程中跳槽成功的心得总结
  20. Mysql 性能优化教程

热门文章

  1. JavaScript---常用的鼠标事件mouseover 和mouseenter的区别
  2. 香港科大詹华强发明头发检测吸毒新技术
  3. 谁说郭德纲的相声没有教育意义?
  4. Linux协议栈配置文件,Linux TCP/IP 协议栈调优 | 鸟窝
  5. elementui校验表格出现英文
  6. Windows10专业版任务栏右下角按钮左键无效右键有效的问题的解决
  7. Django教程(安装PythonPycharmDjango)
  8. 【A_star二维路径规划】基于matlab A_star算法无人机二维路径规划(起终点障碍物可设置)【含Matlab源码 1321期】
  9. 计算机二级Excel考点精讲(—)
  10. OpenGL(八)使用 subroutine 切换可编程管线