Unity制作二次元卡通渲染角色材质——5、脸部的特殊处理

Unity制作二次元材质角色


回到目录

大家好,我是阿赵。
这里继续讲二次元角色材质的制作。这次是讲头部的做法。

1、脸部

在这里插入图片描述

之前在分析资源的时候,其实已经发现了这个模型的脸部法线有问题,导致在做光照模型的时候,脸部很奇怪。
把fbx文件导入到3DsMax里面,可以发现
在这里插入图片描述

这个模型为了做口里面的牙齿和舌头的动画,把脸部的布线做得很极限。
然后尝试把整个脸打同一个光滑组,发现脸部的法线还是不能正常过渡,于是检查一下模型脸部的顶点,发现很多部位并没有焊接在一起。
在这里插入图片描述在这里插入图片描述

所以要解决脸部的问题,首先要先处理一下原始的模型,把该焊接的点给焊接一下。
在这里插入图片描述

进入点层级,全选所有点,然后焊接一下。
接下来给整个脸打一个光滑组
在这里插入图片描述

到这里,这个模型的脸部结构暂时来说比较正常。但由于脸部的结构特殊性,所以如果我们真的按照光照模型的NDotL去计算光影,脸部的光影在某些角度会非常的恐怖,比如这样:
在这里插入图片描述

之前我写过2篇文章去解决这个问题,各位有兴趣可以去看看:
1.使用阈值图修改角色脸部阴影
在这里插入图片描述

2.用MaxScript修改模型法线映射
在这里插入图片描述

这里我选择了第2种方法去处理。
可以看到,集中在脸部的地方,法线非常的密集,而且方向比较的杂乱。这其实是正常而且合理的,因为脸部的转折很多。但用这些法线来计算光影,效果会很奇怪。
在这里插入图片描述

使用我之前用MaxScript写的映射法线的工具,进行一下球形法线映射
在这里插入图片描述
在这里插入图片描述

现在脸部的法线就会变成很平滑的过渡,方向非常的统一。这样的法线对于脸部来说其实是不对的,但是在做光影的时候,会比较的正常。然后配合一下之前ILM贴图的G通道,把脸部的阴影减淡一些,就可以。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
这样看起来,脸部的影子就正常很多了。
这样看起来,脸部的

2、眼镜

在这里插入图片描述

如果只是赋予正常的身体材质,眼镜是这样的。
我们希望眼镜的效果大概有这些:
1.有基本颜色
2.有透明度,起码可以看到眼睛
3.有高光
4.有反射
所以我在身体材质的基础上做了一些修改:
在这里插入图片描述

1.使用正常的透明混合Blend SrcAlpha OneMinusSrcAlpha
2.使用了BlinnPhong高光
3.还是用Matcap做假反射,不过找了一个和眼镜本身颜色比较接近的Matcap反射球
完整Shader:

Shader "azhao/ToonGlass"
{Properties{_BaseMap ("BaseMap", 2D) = "white" {}_specColor("specColor",Color) = (1,1,1,1)_shininess("shininess", Range(1 , 100)) = 1_SpecAdd("SpecAdd",float) = 1.0_MatCapTex("MatCapTex", 2D) = "white" {}_MatCapIntensity("MatCapIntensity",Range(0,2)) = 1_MatCapPow("MatCapPow",Range(0,5)) = 1_MatCapUVScale("MatCapUVScale",Range(0,1)) = 1}SubShader{Tags { "RenderType"="Opaque" }LOD 100Blend SrcAlpha OneMinusSrcAlphaPass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#pragma multi_compile_fwdbase#include "AutoLight.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;float2 uv2 : TEXCOORD1;float3 normal:NORMAL;};struct v2f{                float4 pos : SV_POSITION;float2 uv : TEXCOORD0;float2 uv2 : TEXCOORD1;float3 worldPos :TEXCOORD2;float3 worldNormal :TEXCOORD3;};sampler2D _BaseMap;float4 _BaseMap_ST;float4 _specColor;float _shininess;float _SpecAdd;sampler2D _MatCapTex;float _MatCapIntensity;float _MatCapPow;float _MatCapUVScale;//获取HalfLambert漫反射值float GetHalfLambertDiffuse(float3 worldPos, float3 worldNormal){float3 lightDir = UnityWorldSpaceLightDir(worldPos);float NDotL = saturate(dot(worldNormal, lightDir));float halfVal = NDotL * 0.5 + 0.5;return halfVal;}//获取BlinnPhong高光float GetBlinnPhongSpec(float3 worldPos, float3 worldNormal){float3 viewDir = normalize(UnityWorldSpaceViewDir(worldPos));float3 halfDir = normalize((viewDir + _WorldSpaceLightPos0.xyz));float specDir = max(dot(normalize(worldNormal), halfDir), 0);float specVal = pow(specDir, _shininess);return specVal;}float2 GetMatCapUV(float3 normalWorld){float3 normalView = mul(UNITY_MATRIX_IT_MV, normalWorld);return normalView.xy*0.5 + 0.5;}v2f vert (appdata v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _BaseMap);o.uv2 = TRANSFORM_TEX(v.uv2, _BaseMap);o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;o.worldNormal = UnityObjectToWorldNormal(v.normal);return o;}half4 frag (v2f i) : SV_Target{// sample the texturehalf4 col = tex2D(_BaseMap, i.uv);half specVal = GetBlinnPhongSpec(i.worldPos, i.worldNormal);float2 MatCapUV = GetMatCapUV(i.worldNormal)*_MatCapUVScale;float4 MatCapCol = tex2D(_MatCapTex, MatCapUV)*_MatCapIntensity;MatCapCol = pow(MatCapCol, _MatCapPow);half3 finalRGB = col.rgb + _specColor * specVal*_SpecAdd;finalRGB = finalRGB * (0.5) +MatCapCol.rgb*0.5;half alpha = col.a;return half4(finalRGB,alpha);}ENDCG}}
}

到这里,这个二次元卡通角色的材质基本上就做完了。下面说一下在这个例子里面,由于资源的原因没有做到的一些细节。虽然很遗憾不能做出效果,但也从理论上说一下应该怎样做吧。

1、头发

一般来说,头发如果有单独的问题贴图和法线贴图,比较容易做出一束一束的感觉。
可惜我这个模型素材里面,头发的贴图并没有单独的,只有一个和皮肤一样的baseMap,所以只能做到一片一片的效果。
在这里插入图片描述

然后也可以稍微从高光的角度去调整一下。
之前用于身体部分的高光的光照模型是BlinnPhong,所以光照会是一片的,我们可以试试改成Anisortropic各向异性高光。

//获取Anisortropic各向异性高光
float GetAnisortropicSpec(float3 worldPos, float3 worldNormal, float3 worldTangent)
{float3 binormal = cross(worldNormal, worldTangent);float3 lerpVal = normalize(lerp((worldNormal + binormal), binormal, _tangentVal));float3 viewDir = normalize(UnityWorldSpaceViewDir(worldPos));float3 halfDir = normalize((viewDir + _WorldSpaceLightPos0.xyz));float anistropicVal = dot(lerpVal, halfDir);float specDir = max(anistropicVal*anistropicVal, 0);float specVal = pow(specDir, _shininess);return specVal;
}

在这里插入图片描述

各向异性的高光一般是用于做一条一条形状的高光,不过由于我这个模型实在有点过于光滑,也没有法线贴图,所以这种感觉不是很明显。

2、眼睛

为了方便观察,先把眼镜隐藏了
之前我们做内描线的时候,其实发现了一个特别的东西,就是这个眼睛的贴图,居然不是在baseMap,而是在ILM贴图的A通道
在这里插入图片描述
在这里插入图片描述

在这个眼球或者瞳孔的地方,我虽然加上了高光和Matcap,但发现眼睛他其实并没有什么效果。这是因为,这里的瞳孔其实只是2个平面,在平面上面,不论是高光还是Matcap都不可能出现眼球的球形高光变化。
这个时候,要么把眼球改成真的球形,要么,使用法线贴图。
如果有法线贴图。法线贴图的做法是先采样一个凹进去的部分,然后给他赋予颜色,再把法系翻转,采样一个凸出来的部分,在凸出来的部分上面做高光和Matcap。
由于我手上这个模型并没有提供法线贴图,所以这部分我暂时就演示不了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/72808.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二次元HTML导航页网站源码

简介: 二次元HTML导航页网站源码,非常好看的一款单页源码,感兴趣的同学可以看看! 网盘下载地址: http://kekewl.org/p6BqAjZzdqL0 图片:

【有手就会系列】四步通过文字生成二次元小姐姐图片

首先fork项目,启动环境选择16G的A100显卡,直接点击运行加载模型,接着就到了生成小姐姐的时候啦 你需要设置想生成的小姐姐的描述,由于模型是通过英文训练的,所以建议中文翻译成英文输入,填入你想要的描述 不…

wordpress二次元主题

几款开源的wordpress二次元主题,演示地址可到Github查看。 boxmoe Github:https://github.com/baomihuahua/boxmoe-dove- Kratos Github:https://github.com/seatonjiang/kratos Sakura Github:https://github.com/mashiroz…

记一次添加桌面二次元人物的经历

VScode的一个自定义背景插件 事情是这样的: 前两天上课的时候,看到老师VScode背景有个二次元人物: 作为一名二刺猿爱好者,当然要想搞一个,于是找到插件: 肯定不能满足于这默认背景的吧,于是找…

二次元动漫人物脚部的画法

“脚”画不好的原因是,长度和粗细的比例平衡。相反,如何知道了平衡的方法的话,那么人的身体一定可以画好。这次就对于脚的画法进行详细的讲解吧~ 为了画好漫画,人物的脚部往往都是不能避免的部位。虽然脸和上半身可以画得很好&am…

用Paddle自动生成二次元人物头像

用Paddle自动生成二次元人物头像 想画出独一无二的动漫头像吗?不会画也没关系!只需要输入一些随机数让卷积神经网络为你画出精致并且独一无二的动漫头像! 同时本项目也是绝佳的学习DCGAN的例子,通过趣味解读深入浅出地了解GAN的魔…

【TA】Unity角色二次元风格渲染

NRMToonLitSample Author : 文若 我的Demo地址 : NRMToonLitSample 学习视频地址 : Kerry大佬的 技术美术实战培训课程——卡通人物渲染方案 文章目录 NRMToonLitSample1. 模型贴图基本信息2. 基础渲染效果2.1 基础shader Toon2.2 光照模型效果第一步&am…

Fiora一款二次元的Web多人在线网络聊天系统

源码介绍 Fiora是一款偏二次元的Web多人在线聊天应用,使用Node.js、Mongodb、Socket.io和React编写,使用起来还行,挺简洁的,这里水个搭建教程,有兴趣的可以玩玩。 源码功能 好友,群组,私聊&a…

Unity制作二次元卡通渲染角色材质——1、资源分析

Unity制作二次元材质角色 回到目录 大家好,我是阿赵。 开始制作二次元角色材质之前,我觉得应该是先分析一下,我手上拿到的这个角色模型资源,总共有哪些信息是我们能用的。 所以这篇文章我不会分享具体的Shader,但我感觉…

WPF 3D 贴图: 为你的二次元老婆们做个3D画廊

文章目录 WPF3D系列为你的二次元老婆们做个3D画廊 WPF3D系列 💎WPF 3D初步|源码 新建一个立方体并调整视角相机控制:位置和视角的调节 💎键盘控制|源码💎鼠标控制|源码 💎为你的二次元老婆们做个3D画廊|源码&#x1f…

关于人工智能写作的发展以及看法

人工智能技术的快速发展使其应用领域得以扩展。从金融服务到小说创作,人工智能技术都占有了一席之地。 人工智能可以取代编辑吗?近日某公司开发了一个神码AI人工智能写作软件,据说现在人工智能可以理解超过85%的内容。现在也可以…

换一种姿势阅读《人工智能简史》

2017 年 12 月,一本名为《人工智能简史》的图书发布。这个时间节点对于多数普通人的生活来说不算特别,但正是从前一年开始,人工智能在世界范围内开始进入了一段新的飞速发展期。2017 年和 2018 年也是中国 AI 企业的创业热潮期。 你说这个时代…

【转载】人工智能发展简史

网络查阅资料时候,看到的对人工智能发展简史,较为完整的讲述,故转载,仅供学习使用,原文链接:https://www.aminer.cn/ai-history。侵删。 人工智能到底是什么?通常来说,人工智能&…

人工智能再次超越人类,这次是阅读理解

在斯坦福大学举办的阅读理解比赛中,由微软和阿里巴巴分别独立开发的人工智能的得分都超过了人类。 在斯坦福大学举办的阅读理解比赛中,由微软和阿里巴巴分别独立开发的人工智能(AI)模型的得分均超过了人类。 这一人工智能里程碑是…

与AI合作穿越剧 编剧徐婷:AI脑洞大,但无法替代人类的情感表达

热门喜剧秀《周六夜现场》本季提前结束,美剧《亿万》最新第七季的更新搁浅,漫威新电影《新刀锋战士》暂停拍摄……美国影视娱乐行业的编剧们以抵制AI为由的大罢工,开始影响诸多作品的产出,据说造成了100亿美元的损失。 这场罢工已…

人工智能简史+电子版原文

自从学习了人工智能,对其的发展史产生了浓厚的兴趣,于是选择了《人工智能简史》这本书细细品味。下面将分享我看书时的一些体会。 人工智能的发展过程 我们想要理解人工智能,首先要知道这个名词从何而来。1956年达特茅斯会议被公认为人工智能…

AI:周志华老师文章《关于强人工智能》的阅读笔记以及感悟

AI:周志华老师文章《关于强人工智能》的阅读笔记以及感悟 导读 关于人工智能,长期存在两种不同的目标或者理念。一种是希望借鉴人类的智能行为,研制出更好的工具以减轻人类智力劳动,一般称为“弱人工智能”,类似…

《人工智能》之《绪论》习题解析

教材:《人工智能及其应用》,蔡自兴等,2016m清华大学出版社(第5版) 参考书: 对应同系列博客:《人工智能》之《绪论》 《人工智能》之《绪论》习题解析 1 什么是人工智能?试从学科…