继续来研究卡通渲染,上一篇已经了解卡通渲染两个核心了,比较重要的point就是“具有艺术风格的光线渲染算法”,上次我们直接使用的diffuse去计算光照,严格来说不算“艺术风格”,这里就来介绍一个学术界推崇的卡通渲染光线计算:Cel-shading,首先贴上维基百科cel-shading

cel-shading的核心思想:Cel-shading is often used to mimic the style of a comic book or cartoon and/or give it a characteristic paper-like texture

那么怎么处理cel-shading呢?如下:

Cel Shading is a style of computer rendering that replaces the shading gradient of conventional rendering with flat colors and shadows (as seen at right)

上面的意思就是将颜色丰富的渐变色彩变成单调的平面色彩,简单来说操作上就是降低色阶数量,达到一种卡通的光照效果,比如下面的表情包:

可以认为就是白灰双色阶的光照,至于片段光照权重就是用N·L,也就是单位法向量与单位光源朝向向量的点积,得到的权重weight去判断采样白色或者灰色。

当然为了丰富Cel-shading的细节,可以使用多层次渐变的采样贴图,而不是直接去代码赋值颜色,比如维基的贴图,如下:

这时候为了采样uv两个方向上的像素值,使用N·L和N·V两个数值去组建uv采样。

接下来就来写shader实现了,如下:

Shader "Custom/CelShader"
{Properties{_PaletteTex("Pallette Tex",2D) = "white" {}_PaletteFactor("Pallette Factor",Range(0,2)) = 1_Extsn("Extsn Value", Range(0,1)) = 1_OutColor("Outline Color", Color) = (0,0,0,1)}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"struct appdata{float4 vertex : POSITION;float4 normal : NORMAL;};struct v2f{float4 vertex : SV_POSITION;float3 worldNormal : TEXCOORD1;float3 worldP2S : TEXCOORD2;float3 worldP2V : TEXCOORD3;};sampler2D _PaletteTex;float _PaletteFactor;v2f vert (appdata v){v2f o;o.worldNormal = UnityObjectToWorldNormal(v.normal.xyz);o.worldP2S = normalize(WorldSpaceLightDir(v.vertex));o.worldP2V = normalize(WorldSpaceViewDir(v.vertex));o.vertex = UnityObjectToClipPos(v.vertex);return o;}fixed4 frag (v2f i) : SV_Target{float u = dot(i.worldNormal,i.worldP2S);float v = dot(i.worldNormal, i.worldP2V);//采样调色板颜色时顺便*光源颜色fixed4 celcol = fixed4(tex2D(_PaletteTex, float2(u, v)).rgb*_LightColor0.rgb*_PaletteFactor, 1);return celcol;}ENDCG}Pass{Cull frontCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float4 normal : NORMAL;};struct v2f{float4 vertex : SV_POSITION;};float _Extsn;float4 _OutColor;v2f vert(appdata v){v2f o;v.vertex += v.normal * _Extsn;o.vertex = UnityObjectToClipPos(v.vertex);return o;}fixed4 frag(v2f i) : SV_Target{fixed4 col = _OutColor;return col;}ENDCG}}
}

效果图如下:

和普通的standard相比,是不是更加卡通化?Cel-shading可以看得出来,是代码较简洁,运行效率较高的一种卡通风格算法,当然还有其他更复杂效果更好的算法了,后面再聊。

Cartoon CG:卡通渲染(Cel-shading)相关推荐

  1. [图形学] 《Real-Time Rendering》卡通渲染

    原文:<Real-Time Rendering,Third Version> Toon Shading章节 11.1 卡通着色 正如不同的字体能给文字带来不同的风格一样,不同的渲染风格也有 ...

  2. Cartoon CG:卡通渲染(tone-based-shading)

    常用的卡通渲染技术中,还有一个tone-based-shading,顾名思义基于色调的渲染技术,具体什么意义呢?比较官方的介绍如下: tone-based-shading详解 In a colored ...

  3. Unreal Engine 4 卡通着色(Cel Shading)教程

    原文|<Unreal Engine 4 Cel Shading Tutorial> 作者|Tommy Tran Feb 27 2018 阅读时长|20分钟 内容难度|中等 文章目录 开始吧 ...

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

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

  5. 卡通渲染及其相关技术总结

    原文链接https://blog.uwa4d.com/archives/usparkle_cartoonshading.html 这是侑虎科技第246篇原创文章,感谢作者洛城供稿,欢迎转发分享,未经作 ...

  6. unity 3d物体描边效果_从零开始的卡通渲染描边篇

    序言: 一直对卡通渲染非常感兴趣,前后翻找了不少的文档,做了一些工作.前段时间<从零开始>的手游上线了,试着渲染了一下的其中模型,觉得效果很不错.打算写一个专栏记录其中的渲染技术.在后面的 ...

  7. python 动画场景_clarisse电影级CG场景渲染中文教学

    clarisse电影级CG场景渲染中文教学 clarisse电影级CG场景渲染中文教学 clarisse电影级CG场景渲染中文教学 clarisse电影级CG场景渲染中文教学 clarisse电影级C ...

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

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

  9. 着色器实例 代码+注释 更新中【描边、卡通渲染、法线颜色、贴图动画等等】

    描边着色器 // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader " ...

最新文章

  1. 初学者如何学Java开发
  2. 脚本程序转变为可执行程序的第三方库——pyinstaller
  3. 计算机硬件市场调查实验报告,计算机组装与维护实训报告范例.doc
  4. 在Java中键入Safe SQL
  5. 基于Confluent+Flink的实时数据分析最佳实践
  6. 绕过安全沙箱限制加载在线图片
  7. 通用单向链表设计(一)——接口的设计
  8. 在windows上搭建redis集群(Redis-Sentinel)
  9. sqoop建表_使用Sqoop创建/导入配置单元表
  10. ?请问怎样将excel表格中的时间格式读取为字符串格式?
  11. bat文件 cmd命令获取系统日期格式
  12. SSH关于公钥认证Permission denied的问题
  13. Mysql私有增强性命令小记
  14. paip.提升用户体验----c++ c# 配色方案
  15. 怎么删除服务中的mysql服务
  16. win10 如何做到 C盘 的绝对干净,所有软件都安装到D盘,C盘只用来存操作系统。
  17. 转录组测序(RNA-seq)详细建库步骤与原理
  18. 视频倍速播放方法(有效!)
  19. 【Pandas】Pandas求某列字符串的长度,总结经验教训
  20. windows 2008 R2 断电进入修复模式,并且无法使用usb键盘鼠标的解决方法

热门文章

  1. Spring Boot遇上jello
  2. c语言猜大小游戏的代码,C语言编程 如何构建一个简单的猜数字小游戏
  3. mac系统占用100多G怎么清除 mac内存系统占用了好多怎么清理
  4. VUE:img标签加载图片失败时,显示一张自定义默认图片
  5. CSS样式居中代码小结
  6. 一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
  7. 首次加载页面时,Android Chrome上永远不会触发Touchstart事件
  8. 【降维之NMF】NMF(非负矩阵分解)实例
  9. 自动报加班系统(Automatic Baojiaban Xitong,ABX)
  10. 数据结构 串 KMP 模式匹配详解 通俗易懂