热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

虚幻4皮肤材质_虚幻4渲染编程(材质编辑器篇)【第三卷:正式准备开始材质开发】...

Myblogdirectory:YivanLee:专题概述及目录​zhuanlan.zhihu.comIntroduction:前面两章我

My blog directory:

YivanLee:专题概述及目录​zhuanlan.zhihu.com
689c06f1a96d9ad629ee2eae55e41e9c.png

Introduction:

前面两章我们已经完成了对工具的研究,下面我们久正式开始启程啦!后面的内容可能就比较美术了。

还是老规矩上个效果先:

(高级纱材质)

d90ab34f431d1b16754202e8c83a23bf.png

不过这一节我们不会立刻开始开发材质,我们先探究一下材质的基础。(上面的可不是alpha blend,没有透明乱序和高光混合损失!)。上面那个效果我会在后面介绍布料的章节连同:丝绸,纱,布,皮,麻,镭射重金属,棉等一起介绍。


main content:

现在的次世代游戏,材质表现已经成为游戏中非常重要的一部分,本专栏将一步步简述游戏开发中的材质开发。

首先要普及一个概念,到底什么叫“材质”。是一个材质球吗?是一个shader吗?是几张贴图吗。我理解的材质准确地说应该叫 shading。请不要把它翻译为“着色”,我认为这是不对的。在计算机里shading包含了很多事情。一个材质的表现需要模型,贴图,shader,灯光,后期等一系列配合。

在我们开始我们的材质开发之旅之前我们需要具备以下知识:

(1)C++和C#

(2)DirectX+HLSL或者OpenGL+GLSL等,还需要直到一些图形学知识。

(3)3DMax或Maya,Photoshop,SusbtancePainter和SubstanceDesigner,Zbrush等DDC软件

(4)引擎的话需要掌握Unity和UnrealEngine4

后面的文章将默认阅读者已经掌握或至少入门以上知识。如果你还没有掌握上述的知识,也不必担心,可以大家一起来讨论学习自然就会了。或者现在先去看以下上述罗列的基础知识。也可以去看看我以前的一些文章,希望有所帮助

下面是我们主要需要用到的软件:

5a3e2acbfeddb4d34141f22c315c1103.png

其中VS的插件需要以下:

7f0b7a3797e88eca52dd8d1599324357.png
a3c575ac350fd30719dc52580cf92d90.png

UnrealVS这个插件是虚幻引擎自带的,在引擎目录的extra下即可找到,其余的插件除VSAssist外全部都能在VS的拓展里找到。

VSCode需要以下插件:

895f5caa06b876f589f14c945892b598.png

也是直接在VSCode的拓展更新里就能找到。编写max脚本会非常方便。如果你喜欢用maya请跳过这一步。

下面我们来对材质作进一步探索。现在的游戏工业大致有两个走向,一个是真实向如刺客信条起源等。一个是风格化向,如塞尔达,二之国等。特别是欧美等大作,都是喜欢写实风格,但是其实不管是那种方向,其实都感觉你中有我我中有你。就拿神秘海域4来说,其实他写实的背后也做了不少风格化处理,这一点很好论证,你拿刺客信条的画面和神秘海域的做对比就能轻易发现,各个写实类游戏都有自己的风格化的东西在里面。一提到写实我们会常常听到PBR。所以到底什么是PBR呢?

PBR顾名思义,基于物理的渲染,可以更加准确地表示光和表面的相互作用。PBR其实是一套渲染方案,它不是一个材质球,不是几张贴图,不是SubstancePainter!!!我们在做PBR材质的时候,需要让我们的贴图是基于物理的,我们的shader是基于物理的,我们的灯光是基于物理的,我们的摄像机需要是基于物理的等等。如果只是shader的计算是基于物理的,那只能叫PBS。下面我们就来梳理一下PBR材质制作过程。

很多美术被很多错误的理论所误导,比如有些人会去根据经验,金属的metalic是多少,布料的Rouph是多少。这些其实会变化的,不同的引擎,不同的计算公式,这些值多多少少都会有变化,那么如何才能做出正确的效果呢,最好的办法就是在你们项目所在的环境下去实验,找出正确的那几个值。

99cb76c61a16bba0593e2e1961745b8d.png

我们可以做一个阵列,这样就一目了然了。

5d170c74574c4284528775e5397978c7.png

不同的项目不同的计算公式,这些值多多少少都会有所变化,我们可以去挨个实验,找出非金属,高光塑料皮革,亚光塑料皮革,高光金属,亚光金属的值,然后把这个值记录下来,以后就按照这个值去做。当然会有偏移,偏移造成的主要原因是脏迹挂痕造成的。

其实现在业界流行的这套PBR材质模型能够描述游戏内90%的材质效果,如金属石头,沙子泥土等等,但是这并不意味着有了这个我们能做一切事情了,有些比较特别的材质如宝石,头发,皮肤,眼睛,绒布,皮毛,羽毛等可能现在的这套比较流行的PBR材质模型就不适用了。而且PBR材质模型也有很多种,更多详情可以去网上搜搜PhysicbasedRendring相关文章。游戏内使用的基于物理的渲染大部分也都是拟合的。为什么头发布料不适用PBR那套模型公式呢?因为原理就不一样。想了解原理的话只有去看各大论文了,在RTR3里有对这些公式模型的详细描述。

【贴图】

第一:BaseColor

既然是基于物理的渲染,贴图自然也要基于物理。BaseColor一般储存为sRGB,线性空间中的颜色值。线性空间和gama空间的关系必须要搞清楚。一般颜色的计算这些都是线性空间下的。在制作PBR材质的时候,Basecolor的亮度很有讲究。非金属的基本上应该服从正太分布,然后金属集中在240左右附近。

77665815a23501f1f7d42a38cb669a43.png

可以把PS的图像模式改成LAB模式,然后窗口打开直方图来检测BaseColor的制作是否合法。

BaseColor一般应该是一致的,平台的,没有过亮或过暗的,BaseColor应该只包含纯颜色信息不应该有光影信息。颜色代表了非金属材料的反射率,除了遮挡外,应该没有光照信息,黑色值不应该低于30 sRGB或50sRGB(如果材质颜色低于的话,你以为你是黑洞啊),亮度值不应高于240 sRGB

第二:Normal

法线贴图烘焙的时候主要是注意坐标空间,左右手坐标系。杜绝手动PS这些操作。除非你有特异功能可以人眼光线追踪。

第三:Metalic和Rouphness

金属度和光滑度这一点上需要特别注意,因为PBR模型其实是拟合的(也可以说是带有一定trick的)。所以其实并无法表现所有零到一各个数值的完美效果,我们只能取其中一小段来使用会比较完美。这个取值范围会根据不同的PBR模型不同的环境而变化。具体值需要自己取实验。

第四:贴图使用

在贴图的制作过程中,可能我们并不会刻意地去关心什么贴图应该绘制什么东西。可能这个问题会有点奇怪,但是仔细想想,美术在贴图制作过程中一般都是怎么好看怎么来,也不会刻意去关心到底贴图里面应该画什么。举个例子,布料的纹路到底应该怎么表现呢?画在Diffuse上?那那种有高光的布条怎么办?美术可能会说,这个好办,在光滑度或者金属度上也画上去啊!但是问题就来了,贴图就那么几张。假设贴图上能保存的我们肉眼能看到的纹理信息的总量是10单位,那么我们想尽可能多地表达我们的信息,那么就会涉及到储存空间不够用的问题。所以合理地分配什么信息储存在什么贴图上,可以有效地使我们贴图的利用率更高。比如水渍使用光滑度去表现就可以了,没必要使用Diffuse或者别的。这样还能避免过噪和贴图压缩带来的信息损失。

【模型】

在游戏开发过程中其实会常常遇见一个问题,模型到底应该如何拆分?怎么建模怎么布线这些我就不多说了,这些都是角色师应该知道的。我们站在材质的角度上想这个问题。一个材质至少是一次DrawCall,如果角色材质过多,会导致DrawCall过多,当然DrawCall的多少和游戏运行效率不是必然关系。那么我们应该如何拆分模型呢?

可以确定的是,在其他外在因素一定的情况下,如果游戏瓶颈在Drawcall上的话,材质数量越少越好。当材质计算很复杂的情况下,可以把模型拆开使用两个材质,可能效率反而还有所提升。单单就从效果上说的话,如果引擎架构是像Unreal那种分材质模型或者光照模型的话,那么模型拆分就是根据光照模型的数量种类来拆,如果是像unity那种不分这些概念的话,那么就可以按照复杂度等因素来拆,其实这个还是一个比较灵活多变的概念,这里只是一个声明性的论述,希望引起大家的关注罢了。

【动画和物理模拟】

有些人可能会疑问了,这不是材质么,跟动画和物理模拟有关系么。其实是有一定关系的,我们需要知道一些相关的东西。比如我们制作布料材质,我们需要去设定布料模拟状态下布料的运动状态的物理硬度这些。布料的表现,布料的物理模拟至少占了一半的比重。比如我们要做草的材质,这时候是需要考虑草的摆动因素的,如果草的摆动通过操控顶点着色器来实现的话。

至此我们大概描述了一下材质的一些东西。后面我们就会开始实际动手制作研究材质了。还有很多细节我们没有讨论到或者上面有很多东西还很粗略,后面我们慢慢来细化。


Summary and outlook:

Enjoy it


Next:

YivanLee:虚幻4渲染编程(材质编辑器篇)【第五卷:布料,丝绸纱皮革棉】



推荐阅读
  • 添加环境光使正方体显示更真实
    本文介绍了如何给正方体添加环境光以使其显示更真实。通过在代码中加入环境光的计算,可以让物体的背光部分不再完全黑色,从而增加物体的真实感。代码中使用了顶点属性、光照颜色、光照方向、环境光等参数来计算物体的漫反射,并将计算结果与顶点颜色相乘得到最终的颜色。通过调整环境光的参数,可以达到不同的光照效果。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
  • 20189216 2018-2019-2 《密码与安全新技术专题》第二次作业
    201892162018-2019-2《密码与安全新技术专题》第二次作业课程:《密码与安全新技术专题》班级:1892班姓名:鲍政李学号:20189216上课教师:谢四江上课日期: ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何基于ggplot2构建相关系数矩阵热图以及一个友情故事
    本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • 我有一个带有H2数据库的springboot应用程序。该应用程序会在启动时引导数据库,为此,我在 ... [详细]
author-avatar
手机用户2502936007
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有