![v2-1ad12d3878b418723d310861e97e5475_1440w.jpg?source=172ae18b](http://img-01.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-1ad12d3878b418723d310861e97e5475_1440w.jpg?source=172ae18b)
制作demo时有没有遇到过,急需大量角色资源,但又无从下手的烦恼?
Dota 2 - www.dota2.comV社早已公开Dota2的模型,模型骨骼贴图一应俱全,可以直接用他的资源来进行demo制作。
左边是unity内渲染,右边是dota2展示界面
![v2-56e73e577a74ee2bfcd80e57a75c9444_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-56e73e577a74ee2bfcd80e57a75c9444_b.jpg)
看似一切美好,下载模型贴图,扔到unity,网上找个DotaShader,贴图一贴,转为人形骨骼,就可以随意套动作库。
然而这个想法,让我经历了一周的噩梦。
先总结下我这一周的感想:
- 他给的贴图问题很大,需要睁大眼睛看清楚
- 国内对dota2渲染写的文章,就没一个是对的。
- 官方没有发shader,需要从网上犄角旮旯处拼凑
- Dota2用魔改BlinnPhong模拟PBR效果,有点吃力不讨好
下面开始正文
|1.Dota2贴图问题
先看一下原始贴图资源
![v2-cbafdc937419ed755b11516bf158bfad_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-cbafdc937419ed755b11516bf158bfad_b.jpg)
一个材质球有接近20张贴图。平均一个角色3个材质球,多的时候有6个。
首先检查一下贴图,你会发现一堆问题
![v2-f2a128abc765890cbaa364d97baf2e1e_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-f2a128abc765890cbaa364d97baf2e1e_b.jpg)
- 法线上有某个uv的水印(大概是2u,但是模型内没有2u)
- 某些贴图uv是反过来的(红圈处),而且不是每个角色都这样
- 你以为这就完了?下了多个角色后会发现,有些法线是DX有些是OpenGL。
![v2-e5d819ff0a8fc06237b3d753b020f3d9_b.png](http://img-03.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-e5d819ff0a8fc06237b3d753b020f3d9_b.png)
贴图上有乱七八糟的信息?uv有问题?不同人物的贴图命名规范还不一样?
怕不是valve派实习生用截帧工具抓出来的资源,真有你的啊G胖
|2.国内网站上关于Dota2渲染文章的错误
官方提供的文档只有一个
http://wiki.polycount.com/w/images/8/85/Dota2ShaderMaskGuide.pdfwiki.polycount.com后来修改了一版
Dota 2 Workshop - Item Shader Maskssupport.steampowered.com![v2-0ea4e2c65c40d2af88bd1ccddea247f4_ipico.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-0ea4e2c65c40d2af88bd1ccddea247f4_ipico.jpg)
很多人写的文章只包含四五张图片,对几张不理解的mask和warp图绝口不提。
更有甚者能毫无根据得脑补一套算法,也是厉害。
关键最终渲染不好看。
我在了解到网上没有现成shader后,揭开了SubstancePainter 和 Marmoset Toolbag的Dota2Shader。兴致冲冲,以为找到了光明。结果看了两宿后才知道,他们只是为自家软件做的,很多参数上来就power个256次,而且还缺很多贴图。
所以我根据以往经验来推断Dota2Shader。
|3.我来拼凑shader
先把熟悉的贴图拿出来
![v2-83d10ab4ebbeaef1afc220defd3107c0_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-83d10ab4ebbeaef1afc220defd3107c0_b.jpg)
color | 固有色(不是漫反射,漫反射金属为黑色) |
---|---|
cubemap | 天空球 |
detail * detailMask | 细节图(单独调节缩放) * 细节遮罩 →加到固有色上 |
metalnessMask | 金属度 |
normal | 法线 |
SelfillumMask | 发光遮罩 →遮罩 * 固有色 = 自发光图 |
translucency | 透明度 |
然后把Warp和条状贴图拿出来,这些贴图之后再说
![v2-9d27b58e3568687d6350fd06af9425dd_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-9d27b58e3568687d6350fd06af9425dd_b.jpg)
剩下四个
![v2-1e863c2f8828e0c899f46ed44ada27da_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-1e863c2f8828e0c899f46ed44ada27da_b.jpg)
分别是RimMask,specularExponent ,specularMask,tintByBaseMask
从名字可以看出来,他们分别和菲涅尔,高光形状,高光颜色有关。Mask是乘上去,Exponent是指数(power的幂)
![v2-8df348f7c08e650f0ea60a9a7afec9ed_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-8df348f7c08e650f0ea60a9a7afec9ed_b.jpg)
菲涅尔 * RimMask
![v2-7f720deb4e59a6d5ab2d87d5b5c99531_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-7f720deb4e59a6d5ab2d87d5b5c99531_b.jpg)
BlinnPhong^Exponent * SpecularMask
![v2-048fed4a0c1d4a170b9464340d145634_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-048fed4a0c1d4a170b9464340d145634_b.jpg)
Lerp(固有色,自选高光颜色,Tint),相当于在制造pbr的specular贴图。
specular贴图在standard里用的是Lerp(0.04, 固有色, 金属度),有兴趣的可以试一试,长的差不多。不过这个颜色可以自己调。
![v2-e2f9dc97a0942a1737e435731bbce6fa_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-e2f9dc97a0942a1737e435731bbce6fa_b.jpg)
好,大部分素材都集齐,回头看一下我印象里光照模型。
![v2-c5dc048c68f2b56196a234b98f39a510_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-c5dc048c68f2b56196a234b98f39a510_b.jpg)
直射光 / 环境光 的 漫反射 / 镜面反射 一共四项。
先看directDiffuse也就是直射光漫反射
![v2-e5790d72e57e0a8bbe303c0bd1e7f312_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-e5790d72e57e0a8bbe303c0bd1e7f312_b.jpg)
他用到了halfLambert + DiffuseWarp,具体效果如上图
用这个方法可以实现一点点假3s效果
其次,他使用DiffuseWarpMask当作UV的V,用于在一个材质球内使用多种颜色的DiffuseWarp
注意DiffuseWarp要改为sRGB和UVClamp
![v2-3af1920b4b6fe247797ea07be32e1e60_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-3af1920b4b6fe247797ea07be32e1e60_b.jpg)
看蓝胖皮肤侧面偏紫,土猫更是有红绿两层颜色。
indirectDiffuse就当一个颜色,加上去解决。
最麻烦的是两个specular
我在游戏内一直想找光滑度特别高,能反射旁边环境的材质,也就是反射球indirect specular
![v2-0969b655af481598a8a90a6f5982eda5_b.gif](http://img-02.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-0969b655af481598a8a90a6f5982eda5_b.gif)
在unity内,长这样
然后我对比了下游戏内,没有发现任何一个角色有反射球内容。Dota2最接近黑色光滑金属的龙骑,也没有反射球内容。
而且打开角色资源内的CubeMap会发现,他只有周边和底部有亮色。
![v2-d97d536b65afa2fe670c49d31f9024ca_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-d97d536b65afa2fe670c49d31f9024ca_b.jpg)
于是我推断,dota内是不是没有传统的direct specular和indirect specular,而是一个魔改的DOTASpecular!
依靠这个想法,我在substance的dota2中寻找线索
![v2-ae5533dcdeef3dd558d4561746d709d7_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-ae5533dcdeef3dd558d4561746d709d7_b.jpg)
菲涅尔 * 法线朝上的面 * 自选颜色,这不就是indirect specular吗。
moba游戏内,必然存在朝上的面对着天空,朝下的面对着地面。
妙啊,靠rim来模拟环境光
cubemap不用在反射球,我猜测是加到directSpecular的灯光颜色内,让高光颜色更加丰富一些。
整理一下,dota光照模型
![v2-dfe3bf0005ddb5fd04fc2d48ff20ea37_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-dfe3bf0005ddb5fd04fc2d48ff20ea37_b.jpg)
其中有一段max(Fresnel(外黑内白),DiffuseWarpMask),
我的理解是让主光的高光在模型边缘处减少,避免高亮的边缘出现,是一个很主观的参数
剩下的几张warp
fresnelWarpColor,fresnelWarpRim,fresnelWarpSpec这三张必然和NdotV有关
![v2-5250896d16d4aa2fb93435f3d03c47c8_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-5250896d16d4aa2fb93435f3d03c47c8_b.jpg)
![v2-01c0531cee6032f13a29dc1a8fa47ff6_b.png](http://img-02.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-01c0531cee6032f13a29dc1a8fa47ff6_b.png)
颜色很像PBR常用到的F0公式。OneMinus,Pow5 和 带F0的Fresnel,分别对应三张贴图,大概吧。
bloom和selfIllumMask1,我猜测和后处理bloom有关。reflectance实在没猜出和什么有关。
|4.我的感想
本来想白嫖dota2模型制作demo,结果折腾这么久的幺蛾子。
真想快速使用,套standard材质,把固有色法线金属度光滑度自发光一贴,啥事没有。
既然都自定义渲染,就不要太纠结具体过程(说的就是我),只要制作软件和游戏内达成一致就好,画面好坏的最后还是得看美术。
Dota2作为一个2013年的游戏,为了兼容当年低端电脑,使用了很多trick技术。放在现在看,贴图分辨率/模型面数/渲染技术,比手机游戏标准还低,但是画面表现还算不错。
这让我不禁感慨科技发展。
1.这套渲染不适用于什么
想模拟现实中的材质,PBR还是有无可比拟的优势。(主要是高光)
PBR材质不等于写实风格游戏。同理,卡通风格游戏也可以用PBR材质。
枪火重生,守望先锋等一系列游戏都是用PBR渲染。只是在模型设计和配色上偏卡通。
![v2-a499d2405e6e2c9561dd1f2c9863e999_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-a499d2405e6e2c9561dd1f2c9863e999_b.jpg)
2.这套渲染适用于什么
物理材质无法满足你,想使用风格化渲染,就可以尝试各种warp贴图来定制渲染。
如二次元的渲染。
不过在制作贴图的软件上,得配套完善工作流,要不然面对20来张不知所谓的贴图,任何美术都得崩溃。
![v2-2f9462c2ecac4e7957bb401e5614a468_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-2f9462c2ecac4e7957bb401e5614a468_b.jpg)
最后来一张蓝胖镇楼。
下面是我的artstation地址:
https://www.artstation.com/luteliwww.artstation.com
当然你也能看看我原来写的文章
![zhihu-card-default_ipico.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=34c776fb-8e2e-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/zhihu-card-default_ipico.jpg)
如需转载请与作者联系并标注作者名字和原始网址