前面的话

上一篇Unity酱~ 卡通渲染技术分析(一) 写了CharaMain.cginc,服装的渲染是怎么实现的。这篇来分析一下头发跟皮肤的实现

头发

本来以为unitychan的头发会有各向异性的实现,没想到她也是用的CharaMain.cginc实现的。我们来看看头发的材质



其他实现都一样,也是通过高光反射贴图来控制高光区域跟反射区域

计算法线跟视角向量的点积,这样的效果是越垂直于视角向量的高光越大,然后用RGB贴图来控制哪些区域更容易出高光

反射依然是用A通道来控制,越白的地方,反射的越强

如何实现皮肤效果

这么漂亮的皮肤,其实只用了两个效果就实现了

漫反射+边缘光

这一次我们来详细说一下漫反射的实现

	float_t normalDotEye = dot( i.normal, i.eyeDir );
float_t falloffU = clamp( 1 - abs( normalDotEye ), 0.02, 0.98 );

还是用法线跟视角向量的点积,并且限制在了0.02到0.98的范围。

本来是夹角越小的值越大,夹角越大的值越小,用1 - 去点积的绝对值后,表示越靠近视角向量的,就越接近0。跟视角向量夹角越大,值也就越大,也就是边缘的部位值会越大

	float4_t falloffSamplerColor = FALLOFF_POWER * tex2D( _FalloffSampler, float2( falloffU, 0.25f ) );
float3_t combinedColor = lerp( diffSamplerColor.rgb, falloffSamplerColor.rgb * diffSamplerColor.rgb, falloffSamplerColor.a );

用刚刚求出来的值,采样的这张衰减贴图,也就是反映出皮肤质感的重要一步了!值越大,采样出的颜色就越接近肉色。也就是越边缘越接近肉色

FALLOFF_POWER 是一个衰减系数,skin shader中的值为1,也就是不衰减

再加上边缘高光

总结

unity chan的技术分析差不多完了,主要的技术特点如下:

  1. 漫反射是用N.V的值去采样一张衰减贴图实现的,这张贴图还可以用来实现皮肤效果
  2. 通过一张高光反射贴图来控制高光的细节,以及哪些区域要显示反射
  3. 边缘光没用菲涅尔反射,而是采样rim贴图后去乘以漫反射值得到的边缘高光
  4. 描边不是纯色的,采样了纹理颜色,再做了暗化处理

最后再来两张照片吧~~ 这套渲染效果其实还是蛮不错的

Unity酱~ 卡通渲染技术分析(二)的更多相关文章

  1. Unity酱~ 卡通渲染技术分析(一)

    前面的话 unitychan是日本unity官方团队提供的一个Demo,里面有很好的卡通渲染效果,值得参考学习 上图是我整理出来的shader结构,可以看到Unity娘被拆分成了很多个小的部件,我想主 ...

  2. 基于Unity 5的次世代卡通渲染技术 -- Unite 2017 米哈游总监贺甲分享实录

    在5月12日Unite2017开发者大会上,米哈游技术总监兼美术指导贺甲进行了主题为次世代卡通渲染的演讲.一下为详细分享内容: 大家好,首先自我介绍一下,我叫贺甲,在米哈游担任技术总监和美术指导工作, ...

  3. Unity Shader 卡通渲染 基于退化四边形的实时描边

    从csdn转移过来,顺便把写过的文章改写一下转过来. 一.边缘检测算法 3D模型描边有两种方式,一种是基于图像,即在所有3D模型渲染完成一张图片后,对这张图片进行边缘检测,最后得出描边效果.一种是基于 ...

  4. Unite 2018 | 《崩坏3》:在Unity中实现高品质的卡通渲染(上)

    http://forum.china.unity3d.com/thread-32271-1-1.html 我们已经发布了Unite 2018 江毅冰的<发条乐师>.Hit-Point的&l ...

  5. Unite 2018 | 《崩坏3》:在Unity中实现高品质的卡通渲染(下)

    http://forum.china.unity3d.com/thread-32273-1-1.html 今天我们继续分享米哈游技术总监贺甲在Unite Beijing 2018大会上的演讲<在 ...

  6. Unity Shader入门精要学习笔记 - 第16章 Unity中的渲染优化技术

    转自冯乐乐的 <Unity Shader 入门精要> 移动平台的特点 为了尽可能一处那些隐藏的表面,减少overdraw(即一个像素被绘制多次),PowerVR芯片(通常用于ios设备和某 ...

  7. Unity 渲染教程(二):着色器基础

    转载:https://www.jianshu.com/p/7db167704056 这是关于渲染基础的系列教程的第二部分.这个渲染基础的系列教程的第一部分是有关矩阵的内容.在这篇文章中我们将编写我们的 ...

  8. Unity——卡通渲染实现

    效果展示: 原模型: 一.简单分析 卡通渲染又叫非真实渲染(None-Physical Rendering-NPR),一般日漫里的卡通风格有几个特点: 1.人物有描边 2.有明显的阴影分界线,没有太平 ...

  9. 背景建模技术(二):BgsLibrary的框架、背景建模的37种算法性能分析、背景建模技术的挑战

    背景建模技术(二):BgsLibrary的框架.背景建模的37种算法性能分析.背景建模技术的挑战 1.基于MFC的BgsLibrary软件下载 下载地址:http://download.csdn.ne ...

随机推荐

  1. Jmeter+Jenkins 搭配进行接口测试

    单纯通过Jmeter的界面进行Web的接口测试,效率低下.为此将Jmeter的接口测试与Jenkins联合,实现持续集成.配置完成后,只需修改运行的Jmeter脚本即可,运行结束后测试结果发送到指定邮 ...

  2. JS获取时间戳的几种方法与区别

    var today = new Date() Date.now()) Date.parse(today) today.valueOf()) today.getTime() 可以看出,第二种是精确到秒的 ...

  3. 图解kubernetes调度器SchedulerCache核心源码实现

    SchedulerCache是kubernetes scheduler中负责本地数据缓存的核心数据结构, 其实现了Cache接口,负责存储从apiserver获取的数据,提供给Scheduler调度器 ...

  4. 与drawable的较量(一)

    前言 在android ui中drawable 是一个非常关键的要点,因为我们现在使用的花里胡哨的APP,都在胡里花哨的drawable 构建的. drawable,英文翻译为可拖拽的.说白了就是自己 ...

  5. DFS——深度优先搜索的一般格式

    DFS是一种深度优先的搜索思想,运用递归完成搜索,本质上也算是穷举思想的一类,可以通过剪枝进行优化. DFS的核心是回溯和递归, 如果以迷宫为例,一般会指定走各个方向的顺序(例如先左再上再右再下).从 ...

  6. C++ 排序引用的优化

    链接:https://www.nowcoder.com/acm/contest/83/B来源:牛客网 题目描述 第一次期中考终于结束啦!沃老师是个语文老师,他在评学生的作文成绩时,给每位学生的分数都是 ...

  7. Linux下安装Ant

    前言 Apache Ant 是一个构建工具,可以将软件编译.测试.部署等步骤联系在一起完成自动化工作,比如可以利用Ant来执行Jmeter的 jmx 脚本,生成了 jtl 测试结果文件,接着再利用An ...

  8. Identity 4 -1创建一个登录中心

    准备知识 官网地址:https://identityserver4.readthedocs.io/ 通过nuget安装 Identity Server4

  9. QTP测试web时:打开ie浏览器进行录制但qtp录制脚本为空

    1. 关闭ie的保护模式:设置——internet选项——安全——取消勾选“启用保护模式” 这一步很关键,之前试过很多步骤,只有这个成功了. 修改后如果可行即可.如果不行再进行下面操作: 2.关闭杀毒 ...

  10. ios---剪裁圆形图片方法

    剪裁圆形图片 - (instancetype)xmg_circleImage { // 1.开启图形上下文 // 比例因素:当前点与像素比例 UIGraphicsBeginImageContextWi ...