资讯
展览资讯 大型展会 灯光节 大型盛典 赛事 中标捷报 产品快讯 热门话题 艺术节 活动 演出 新闻 数艺报道 俱乐部签约
观点
大咖专访 观点洞察 书籍推荐 吐槽 设计观点 企业访谈 问答 趋势创新 论文 职场方法 薪资报价 数艺专访
幕后
幕后故事 团队访谈 经验分享 解密 评测 数艺访谈
干货
设计方案 策划方案 素材资源 教程 文案资源 PPT下载 入门宝典 作品合集 产品手册 电子书 项目对接
  • 0
  • 0
  • 0

分享

Unity社区精华帖 | Rendering学习:模型与材质

2022-05-23

本文首发于 [Unity官方开发者社区],该公众号是 Unity 官方中文社区账户,文末有跳转链接,欢迎大家关注。


想要在游戏里渲染出好看的画面,我们首先要有模型和相应的材质通过 CPU 提交相关信息给 GPU,那么这些模型和材质到底包含了什么东西呢?



模型


  点线面


模型实际上就是若干个点按照一定的顺序连成线,线连成面,面连成多边形模型。



  模型文件


在 Unity 中我们常用的模型文件有 OBJ 和 FBX,我们来看看文件中包含了什么。


以 OBJ 文件为例:


v(vertex)代表顶点坐标数据,即模型空间中某个顶点的 XYZ 坐标。



vt(vertex Texcoord)代表顶点纹理坐标,即所说的 UV 坐标,U 是水平轴,V 是纵轴,范围在 0-1 之间。



vn(vertex normal)代表顶点法线。



OBJ 与 FBX 格式对比:



  UV


在模型制作的过程中,有个重要的步骤叫做展 UV。简单来说,我们把模型(比如一个人物角色)剪开平铺在一个面上,横轴为 U,纵轴为 V,范围在 0-1 之间。我们可以将其视为角色的“皮肤”,展在二维平面上为其绘制,并最终“贴”回到模型上,让其有更丰富的外表细节。


这就是 UV 纹理贴图,可以说,它定义了图片上每个点的信息(比如颜色值),而每个点又跟模型上的每个点是相对应的。



但是展 UV 绝对是个技术活,展一个正方体盒子当然没什么难度,就如同我们小学美术课把一个立方体剪成六个面一样,当模型复杂起来时展 UV 也更难。UV 展好的话,其表现平整干净,就像是直接从模型上扒下来的纸张,展不好的话,其效果表现就是扒下来的纸张像是叠了好几次,皱巴巴的。


展好 UV 后艺术家们会用 photoshop,bodypainter,substance painter 等 DCC 软件(Digital Content Creating )绘制贴图。


当然纹理贴图不止能存储模型的 RGB 颜色值,还能存储各种各样的信息,后续文章会提到。


材质


我们在一开始画画的时候会发现怎么画都不像,除了物体的形态外,重要的还有光影,因此我们想要让我们的渲染结果更加“真实可信”,我们还需要为其添加具有正确光照模型的材质。


而现实世界中,每一样物体又有不同的材质,即会有不同的光照效果,我们先来简单看一下几种光照情况。


  漫反射(diffuse)


漫反射经典的经验模型是兰伯特模型(Lambert)。红色的为入射光它假设所有的光线被均匀地反射出去,亮部暗部取决于入射光与模型表面法线的夹角,夹角越小越亮,因此夹角为 0 时为最亮部,夹角为 180 是为理论上最暗部。


公式如下:

Diffuse = baseColor *LightColor * dot(LightDir , Normal);


baseColor 理解为纹理贴图的颜色,lightColor 理解为灯光的颜色(比如太阳光一般表示为金黄色之类的),dot 点乘结果为(-1,1),但是对于颜色值来说,只要值 <=0>




  镜面反射


镜面反射就是将入射光线根据模型表面法线进行反射,并且只有在反射方向有能量,其他方向能量均为 0,因此会根据视方向(即相机观察角度)有不同的表现。


公式为:

Specular = pow(saturate(dot(ReflDir,ViewDir)),smoothness) * LightColor


从公式中可以反射方向与视方向做点乘,夹角越小镜面反射越强烈,而结果配合 smoothness 做 power,表示越光滑的表面高光点越小,越粗糙的表面高光点越分散。



  折射


不同的介质有不同的折射率,而光从一种介质到另一种介质的时候光的方向会发生变化,比如从空气进入水中,有一部分能量会发射,另一部分能量进入水中后改变了方向。反射和折射能量的多少是由菲涅尔定律决定的。


公式为:
R = refract(View,Normal,ration)

ReflColor = tex2D(skybox,R)


ration 是原介质折射率/新介质折射率。

 


  粗糙镜面反射


可形成磨砂表面质感。



  粗糙镜面折射


可形成磨砂玻璃折射的效果。



  次表面散射(3s 效果)


当光照(比如太阳光)照射到我们的皮肤上时(尤其是耳朵手指这些比较“薄”的部位)会出现透红的效果。照在玉石,树叶,水果等物体上也会发生。



《孤岛惊魂5》和《神秘海域4》中的皮肤渲染:



  多层材质


一个很好的例子就是木地板打蜡或刷光油,木地板是一层材质上面的光油也是一层材质。




参考资料:


[1] Unity 官方文档:

https://docs.unity3d.com/2021.2/Documentation/Manual/materials-introduction.html


[2]《GPU Gems 3》:真实感皮肤渲染技术总结--毛星云

https://zhuanlan.zhihu.com/p/42433792


[3] Unity Shader 入门精要–冯乐乐


[4] TA 百人计划

https://learn.u3d.cn/tutorial/technical-artist-may



点击关注 [Unity 官方开发者社区]

精彩技术文章一网打尽~


长按关注

Unity 官方微信

第一时间了解Unity引擎动向,学习最新开发技巧


阅读原文

* 文章为作者独立观点,不代表数艺网立场转载须知

本文内容由数艺网收录采集自微信公众号Unity官方平台 ,并经数艺网进行了排版优化。转载此文章请在文章开头和结尾标注“作者”、“来源:数艺网” 并附上本页链接: 如您不希望被数艺网所收录,感觉到侵犯到了您的权益,请及时告知数艺网,我们表示诚挚的歉意,并及时处理或删除。

数字媒体艺术 科技艺术 模型与材质 游戏

12613 举报
  0
登录| 注册 后参与评论