Unity-Chan Toon Shader卡通渲染学习

这篇具有很好参考价值的文章主要介绍了Unity-Chan Toon Shader卡通渲染学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(本文记录一下从0-1复刻UTS2,持续更新中)

一、UTS2介绍

Unity-Chan Toon Shader 2.0 (UTS2) 是一款用于图像和视频的卡通着色器,旨在满足从事卡通着色 3DCG 动画的创作者的需求。

unity3d 卡通shader,Shader,学习,笔记

UTS2开源项目地址:GitHub - unity3d-jp/UnityChanToonShaderVer2_Project: UnityChanToonShaderVer2 Project / v.2.0.9 Release

二、从0-1复刻UTS2

(1)3 Basic Colors

UTS2的漫反射部分主要有三个层组成,分别是基本颜色、第一阴影色和第二阴影色,分别对应着美术理论中的白、灰、黑。

unity3d 卡通shader,Shader,学习,笔记

基本颜色主要是对受光面着色,也就是物体的亮部:

 unity3d 卡通shader,Shader,学习,笔记

第一阴影色对受光面到背光面之间过渡的阶段着色:

 unity3d 卡通shader,Shader,学习,笔记

第二阴影色对背光面着色:

unity3d 卡通shader,Shader,学习,笔记

然后是几个参数可以调节这三个颜色的范围以及羽化程度:

unity3d 卡通shader,Shader,学习,笔记

BaseColor Step用于调节第一阴影色的范围:

unity3d 卡通shader,Shader,学习,笔记

Base/Shade Feather用于调节第一阴影色的羽化程度:

 unity3d 卡通shader,Shader,学习,笔记

ShadeColor Step用于调节第二阴影色的范围:

unity3d 卡通shader,Shader,学习,笔记

1st/2nd_Shades Feather用于调节第二阴影色的羽化程度:

 unity3d 卡通shader,Shader,学习,笔记

简单实现代码:

float4 baseMap_var = tex2D(_BaseMap, i.uv);
float3 baseMap_RGB = baseMap_var * _BaseMapCol; //基本色
float4 _1st_ShadowMap_var = lerp(tex2D(_1st_ShadowMap, i.uv), baseMap_var, _Use_BaseAs1st);
float3 _1st_ShadowMap_RGB = _1st_ShadowMap_var * _1st_ShadowMapCol; //第一阴影色
float4 _2nd_ShadowMap_var = lerp(tex2D(_2nd_ShadowMap, i.uv), _1st_ShadowMap_var, _Use_1stAs2nd);
float3 _2nd_ShadowMap_RGB = _2nd_ShadowMap_var * _2nd_ShadowMapCol; //第二阴影色
float halfLambert = 0.5 * dot(setNormalDir, lightDir) + 0.5; //半兰伯特模型
float base_1stShadow_mask = saturate(1.0 - (halfLambert - (_BaseColStep - _BaseShadeFeather)) / _BaseShadeFeather); //基本色到第一阴影色的插值参数
float _1st_2ndShadow_mask = saturate(1.0 - (halfLambert - (_ShadeColStep - _1st2nd_ShadesFeather)) / _1st2nd_ShadesFeather); //第一阴影色到第二阴影色的插值参数
float3 diffuse = lerp(baseMap_RGB, lerp(_1st_ShadowMap_RGB, _2nd_ShadowMap_RGB, _1st_2ndShadow_mask), base_1stShadow_mask); //插值实现颜色过渡

主要使用了两个lerp实现颜色过渡。

(2)High Color

unity3d 卡通shader,Shader,学习,笔记

1.HighColor Tex用于指定高光贴图;

2.HighColor Power控制高光强度;

3.Specular Mode决定是否使用正常的高光效果;

启用:

unity3d 卡通shader,Shader,学习,笔记

关闭:

unity3d 卡通shader,Shader,学习,笔记

这种高光边界分明,且颜色缺少渐变。

4.Color Blend Mode决定高光的混合方式;

Additive方式使颜色更亮,上面两者高光形式都可以使用:

unity3d 卡通shader,Shader,学习,笔记

Multiply方式使颜色更暗,只能用于第二种高光形式:

unity3d 卡通shader,Shader,学习,笔记

5.HighColor Mask用于指定高光遮罩,决定高光范围以及大小;HighColor Mask Level调节遮罩强度。

简单实现代码:

float4 highColorTex_var = tex2D(_HighColorTex, i.uv); //高光贴图
float4 highColorMask_var = tex2D(_HighColorMask, i.uv); //高光遮罩贴图
float3 halfDir = normalize(lightDir + viewDir); //半程向量
float specular = 0.5 * dot(halfDir, lerp(i.nDirWS, setNormalDir, _Is_NormalMapToHighColor)) + 0.5;
float tweakHighColorMask_var = saturate(highColorMask_var.g + _HighColorMaskLevel) * lerp(1.0 - step(specular, 1.0 - pow(_HighColorPower, 5)), pow(specular, exp2(lerp(11, 1, _HighColorPower))), _Is_SpecularToHighColor); //两种高光形式
float3 specualrCol = (highColorTex_var * _HighColor * tweakHighColorMask_var).rgb;
diffuseCol = lerp(saturate(diffuseCol - tweakHighColorMask_var), diffuseCol, lerp(_Is_BlendAddToHighColor, 1, _Is_SpecularToHighColor)); //和漫反射的混合方式

(3)Normal Map

unity3d 卡通shader,Shader,学习,笔记

Normal Map的使用不多说,重点说一下用不同按钮实现对法线是否影响不同光效果的控制:

3 Basic Color按钮

unity3d 卡通shader,Shader,学习,笔记

High Color按钮

unity3d 卡通shader,Shader,学习,笔记

主要使用Lerp函数来决定要不要使用法线贴图。

参考:游戏诞生之日09 - 美术篇 卡通渲染着色器 UTS2 - 知乎 (zhihu.com)文章来源地址https://www.toymoban.com/news/detail-760820.html

到了这里,关于Unity-Chan Toon Shader卡通渲染学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity制作二次元卡通渲染角色材质

    Unity制作二次元材质角色   大家好,我是阿赵。接下来准备开一个系列,讲一下二次元卡通角色的渲染。   先来看看成品,我从网上下载了著名游戏《罪恶装备》里面的一个角色模型。在没有做材质之前,把贴图赋予上去,给一个Unlit材质,这个角色的样子大概是这样的

    2024年02月14日
    浏览(45)
  • Unity3D学习记录01:URP渲染管线以及3D游戏场景设置

    以下内容所使用的版本均为Unity2022.3 先在 Window-Package Manager-Unity Registry 里面搜索添加Universal RP   Unity中,创建渲染管线的方式为Asset文件夹下右键 Create-Readering-URP Asset(with Universal Asset) 会创建以下两个Pipeline:  接着在图中的设置里添加这两个渲染管线(Project Setting在Edit窗口下

    2024年02月08日
    浏览(57)
  • 【Unity天空盒】卡通渲染中如何实现云的消散效果

    写在前面 完成大气渲染之后,接下来就是考虑云渲染了。因为我想做的天空盒本身是想跟着这位大佬Unity 卡通渲染 程序化天空盒 - 知乎里叙述的进程来的,里面云实现的是原神里的云,原神又是在崩3的基础上加上了消散效果。但现在能找到的一些教程or展示的视频里,很多

    2023年04月08日
    浏览(42)
  • Unity制作二次元卡通渲染角色材质——5、脸部的特殊处理

    Unity制作二次元材质角色 回到目录 大家好,我是阿赵。 这里继续讲二次元角色材质的制作。这次是讲头部的做法。 之前在分析资源的时候,其实已经发现了这个模型的脸部法线有问题,导致在做光照模型的时候,脸部很奇怪。 把fbx文件导入到3DsMax里面,可以发现 这个模型

    2024年02月09日
    浏览(38)
  • Unity制作二次元卡通渲染角色材质——4 、内外描边和细节添加

    Unity制作二次元材质角色 回到目录 大家好,我是阿赵。 这里继续讲二次元角色材质。这次打算讲一下描边和细节的添加。 外描边的做法也不止一种,比如后处理方法的偏导数ddx/ddy之类的,也能整个屏幕的求出边缘。但一般来说单模型渲染常用的描边方式,是写多一个Pass,

    2024年02月08日
    浏览(34)
  • Unity制作二次元卡通渲染角色材质——3、高光反射与ILM贴图

    Unity制作二次元材质角色 回到目录 大家好,我是阿赵。 这里继续来讲二次元角色的材质。上次讲了光影的色阶化问题,这次继续讲光照模型效果的问题。 之前我们说过,光照模型的最后效果是: 环境色+漫反射+高光+反射。 这里我们可以先忽略环境光,然后之前做了漫反射

    2024年02月11日
    浏览(60)
  • Unity制作二次元卡通渲染角色材质——2、色阶化光影的多种做法对比

    Unity制作二次元材质角色 回到目录 大家好,我是阿赵。 这里继续讲二次元角色渲染。之前说过,最基本的卡通渲染,包含了色阶化光影和描边二个元素。所以这里先来说一下色阶化光影的多种做法对比。 从上一篇文章里面可以知道,这个模型提供了2套贴图,分别是baseMap和

    2024年02月14日
    浏览(35)
  • Unity3D Shader系列之深度纹理

    这篇总结下场景扫描的效果。场景扫描背后的原理其实挺简单,先获取相机的深度图,再获取相机绘制的画面,然后从深度图中取出当前像素的深度值,如果深度值在我们扫描线的深度值的范围内,那么当前像素的颜色就为扫描线的颜色与原画面颜色的叠加。所以实现这个效

    2023年04月11日
    浏览(35)
  • Unity3D Shader系列之描边

    总结下描边效果的实现方式,主要有以下几种: ①法线外拓+ZTest Always ②法线外拓+Cull Front ③法线外拓+ZWrite Off ④法线外拓+模板测试 ⑤基于屏幕后处理 法线外拓的原理如下: 基本原理还是很简单的:模型渲染两次,第一次渲染时将模型的顶点沿法线方向外拓,然后绘制描边

    2023年04月08日
    浏览(45)
  • Unity3d 图片Image置灰shader

    置灰公式:    value=color.r x 0.299 +color.g x 0.587 + color.b * 0.114 color.rgb = lerp(color.rgb, Luminance(color.rgb), _Factor); 或 color.rgb = dot(color.rgb, fixed3(0.299, 0.587, 0.114));

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包