PBR:应用于虚幻引擎4贴图和材质创建的启示

2023-11-02

PBR

PBR:应用于虚幻引擎4贴图和材质创建的启示

Li Wen Lei, HuNing 在 2015/10/28 23:00:31 |  新闻

PBR材质似乎在一夜之间改变了人们对于引擎实时渲染画面的理解。在游戏中我们也能够体验到锈蚀的金属,厚重的皮革,精细的纹理,更加真实的世界从此展现在眼前。从此,PBR材质成为了“次时代”游戏必备的标准。

在GDCC2015,来自Epic Games资深开发者支持美术设计师李文磊,为大家带来应用于虚幻引擎4贴图和材质创建的启示。

以下内容是演讲实录:

PBR是个不老不新的话题,很早它就出现在预渲染的渲染器里,随着硬件越来越快,尤其是显卡,最近几年逐渐的开始应用到实时渲染中来。

今天就和大家一起来聊聊虚幻引擎实时渲染引入PBR以后,我们怎么来正确的使用它

PBR即基于物理的渲染,渲染包括灯光,shader, 材质, 贴图,以及他们之前如何交互影响的,今天的演讲内容主要分三部分内容。1.真实世界的光,材质,以及他们之间的交互是如何的,2. UE4里是如何来模拟真实世界的,3.我们该怎么做才是正确的。

要学会使用PBR首先需要了解什么是PBR,需要从真实世界的这些PBR材质特有的属性拆分开来去了解他们,这样我们就需要了解光,物体表面材质以及光是如何与材质交互的。 光包括了颜色,亮度,衰减,强度,形状等主要属性,真实的世界中永远是多光源并存,除非身处于宇宙深空之中。

我们把自身能发光的物体叫做直接光源,自身不发光仅仅反弹其他光源的物体叫做非直射光源。分析下这张图,从美术角度我们把他分成主光,辅光,装饰光。虽然天色已晚主光还是来自于天空,天空的光线来自于太阳的散射,因此主光来自于一个天空的非直射光

附光来自于路灯,大的城市照明。这些光大都数也是反弹光,而非灯泡光源直接照射到。因此前景的人物基本是在一个天光的环境下低对比低照度的灯光环境下

那么自然界中的材质是如何跟光交互的呢?灯光照射到物体表面后两种情况,反射或继续前行折射。折射后的光线被吸收(一般转化为热),或离散。光线被吸收的行为不是发生在表面,而是次表面,或者内部反射不会带出任何颜色。

吸收会使光线强度降低,吸收某一光谱的光线,余下的光线颜色变化,但方向不变

离散后方向改变,强度不变这里对于绝缘体和导体,两者与光的交互是完全不同的

绝缘体,即非金属的反射率普遍很低,一般在2%-8%左右,大部分光线进行折射,折射后的光线或者被吸收,或者重新离散出来。这部分折射的光线吸收率和材质的明度有关,暗的吸收多,亮的吸收少;离散后光线的颜色也取决于物体表面颜色;

对于导体,即金属,反射率普遍很高,达到70%-100%,所以大部分光线会以镜面反射的形式反弹回来。小部分光线折射后完全被吸收(光是一种粒子,被导体吸收),不同的金属吸收不同波长的光线,导致镜面反射回的光线带有颜色;

漫射和镜面反射:漫射为反射光线方向随机,不一致;镜面反射为一个方向。镜面反射会根据物体表面的粗糙程度表现不同结果。但无论光滑粗糙,反射的总能量是一样的,而且光线反射后的强度不变。漫射是光线被折射的表现。光线从一种媒介进入另一种媒介,并在里面经过多次的散射后从近似入射点的位置返回原来的介质中。漫射过程中除了光线的离散光线还会被吸收(转化成热能)。光线进入介质不深,那么进入点和离开点的差别就可以被忽略。那种光线离散性高,但吸收性弱的材质有时指参与介质或者叫透明材质。比如烟,牛奶,皮肤,翡翠,大理石等。

      

而在更细微的层面,比如显微镜下,微表面就是物体表面细微的不规则。根据不同的流程可以叫粗糙度,光滑度,光泽度。表面的不规则度其实对于慢反射的影响视觉上不大,因为漫射的这种离散和吸收过程是发生在材质内部的而非表面。

微表面理论就是建立在物体表面这种细微不规则性的基础上的。可以把它看作许许多多不同方向的面,这些面就叫做微表面。光线对于这些面对入射角都是不一样的,反弹后的角度也不一样,并且有的地方被挡住,有的地方会产生阴影,视觉上会产生模糊的反射

在引擎中的明暗shading计算引入了各种函数理论模型,来尽量逼近模拟自然界的物理现象

我们可以通过BRDF来了解UE4里面是如何模拟的。

BRDF 双向反射分布函数(Bidirectional Reflectance Distribution Function,BRDF)场景中的光照射到材质表面反射到视点的光亮度计算方法函数,来定义材质属性。它描述了入射光线经过某个表面反射后如何在各个出射方向上分布,这可以是从理想镜面反射到漫反射

UE4 PBS中引入了各种BRDF理论模型,也可以在shader里选择默认模型,最终需要效率和效果的一个最佳结合点。

通过一些简单的参数,我们可以在引擎中用来区分不同类型材质的反射特性。

在UE4材质里面,每一个input都有着各自的特性,他们的组合成为了一个个不同属性的物理材质。

通过一个简单的Metallic参数的调整,我们就可以轻易区分两个完全不同的材质。

物体表面的反光属性也是这样一个非常重要的参数,通过这张图片,我们就能够非常清晰的区分开来。

那么如何制作一个高质量的PBR材质,如何选择使用的工具,如何设置灯光呢?、

首先观察生活中的真实物体是非常重要的环节,它能够给你一个基本的概念,不同的材质应该有哪些不同的属性。在设计过程中,我们会有一些描述性的词语来清晰说明目标材质的属性(文字+图片),描述词汇包括

材质类型:钢,塑料,铁,玻璃,油漆

材质明度颜色

材质表面处理:打磨过的,抛光,磨砂

材质环境影响细节描述: 生锈的,刮擦的,磕碰的,脏的,油腻的,油漆剥落的,积灰的,崭新的

翻译这些信息到UE的材质属性,材质类型的信息来区分金属还是非金属,材质明度及颜色来定义BaseColor,表面处理关系到Roughness,环境影响复杂多变,牵扯到包括以上多个通道。

比如脏旧磕碰的金属掉漆的表面:掉落油漆的部分为金属,未掉落部分为油漆,在材质类型金属性的定义里区分开来;磕碰信息从法线贴图,粗糙度贴图;新旧又影响镜面反射的量和连续性,又和粗糙度贴图有关

在项目开始前问几个问题:

  1. 材质需要共用吗?
  2. 材质的精度要求高吗?
  3. 材质需要统一管理迅速迭代吗?
  4. 需要自定义或允许改变外观吗?
  5. 效率/内存:材质能够多复杂?贴图能够支持多少?
  6. 是否需要复用?
  7. CG or Game?
  8. 需要改变贴图吗?
  9. 内存多大?
  10. 客户端大小?
  11. 编辑器内还是外
  12. 其他问题

通过创建区分材质,将一个模型不同的区域区分开来,区分大块面材质的意义在于一个物件有多种材质,必须有区分它们的mask,方便随时修改不同材质区域的贴图,提供在引擎中更换不同区域的材质的可能性,为进一步在表面增加细节提供区分的通道

区分材质的信息是灰度图,不同的区域可以放在一张RGBA贴图的各个通道里;根据材质的数量可以是单张或多张。

真实的世界中,每一个材质都有许多的细节,所以接下来,为材质添加更多的细节,比如划痕,污渍,环境元素等,这些信息来自于模型起伏,法线,可以手动选取;经常由一些工具软件生成,这些工具软件可以比较只能的根据已有的模型信息判断和生成出自然的细节。

将大块面的材质区分通道和细节材质区分通道进行混合,由于大块面材质区分通道和细节材质区分通道是分离的给混合提供了更多的自由度,这种自由度表现在可以控制哪些细节可以出现或者被屏蔽在哪些区域。

现在在市面上可以看到大量的工具可以帮助在UE4里面完成PBR材质的制作,在这里我们列举出了一些主流的配套工具。

制作的过程分为三个部分,从高模和低模创建出NormalMap,ID Mask ,AO和Cavity。然后再上面添加必要的细节,最终导入UE4。

在这里我们可以通过这些工具来增加细节贴图,在引擎中合并,这样可以让材质更为真实。

通过以下这些步骤,我们就能够表现多层材质

  1. 导入:主MASK, 细节MASK, NORMALMAP, AO, CAVITY
  2. 创建基本材质,包括基本材质中细节添加的可能性
  3. 创建母材质,混合基本材质
  4. 添加更多变化:图案,潮湿度/多孔性
  5. 创建材质实例

材质贴图都完事了?还没结束呢。PBR的关键之一灯光:创建真实的灯光环境。 (这里不谈论艺术的灯光环境,仅追求真实)

真实的灯光包括直射光,非直射光, 并且HDR,在灯光半径范围内的物体表面会被灯光直接照亮,并有高光点;范围外物任何照明(包括漫射和镜面反射)。

在真实世界中灯光理论上是没有范围的,虽然随着距离增加照度降低,但始终会有影响,在镜面反射上尤为明显。

这种反射在UE4里需要由高动态的环境反射贴图来表现,是一种IBL的照明方式。

有了灯光的烘托,一把次时代PBR材质的武器就正式登场了。

PBR材质是未来的标准,在传统材质转换到PBR材质的过程当中,我们会遇到很多的挑战。对于传统贴图到PBR贴图没有一键转换的工具,因为有些信息计算机是无法猜测出来的,还是需要主观去判断。目前有两种PBR流程贴图转换可以使用工具。

现在的灯光有直射光,阴影,也有间接光,间接反射等,所以贴图上不需要把灯光信息画上去,只要专注于表达材质属性。我们不需要画高光颜色(反色)来达到一个看上去是白色的;线性空间渲染意味着对于basecolor的明度范围大概30-50 到180-250

能量守恒使得高光如何怎么变都不会增加或减少,就不需要手动的来调整贴图使得粗糙的地方高光贴图暗,光滑的地方高光贴图亮。这时候就需要用已有的信息或修改后生成roughness,Cavity:来定义微表面的变化。

通过这样的调整,我们就能够将传统的材质转化到PBR材质。为我们的游戏添加更好的质感。

0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PBR:应用于虚幻引擎4贴图和材质创建的启示 的相关文章

  • gitlab中组的分类及权限介绍

    gitlab基本功能 gitlab是支持人员权限管理的 且在其内部支持分组规划 一般情况下的分组都会对应到研发部的各个部门 比如前端组 后端组 大数据组 数据分析组 测试组 运维组 当然以上的分组配置为一般中小互联网企业的人员架构 若是在大
  • WuThreat身份安全云-TVD每日漏洞情报-2023-05-10

    漏洞名称 Ppick CMS 远程代码执行 RCE 漏洞 漏洞级别 高危 漏洞编号 CVE 2023 25828 CNNVD 202303 2203 相关涉及 Pluck CMS 漏洞状态 POC 参考链接 https tvd wuthre
  • FFTW使用小结

    简介 FFTW Fastest Fourier Transform in the West 是由 MIT 的 Matteo Frigo 博士和 Steven G Johnson 博士开发的一个完全免费的软件包 FFTW 最初的 releas
  • npm install 提示 path xxx/node_modules/node-sass npm ERR! command failed 解决方法

    起因 近期要维护公司的一个后台 该后台是前人基于 go vue admin 开发 但是我前后经历了多次无法进行 npm install 每次安装依赖都出现类似于 path xxx node modules node sass npm ERR
  • Linux伪文件系统proc

    简介 proc文件系统是一个伪文件系统 用作内核数据结构的接口 它通常安装在 proc 其中大部分文件是只读的 但是有些文件允许更改内核变量 目录 1 常用文件 1 1 监控内存 1 2 监控网络 1 3 查看文件锁 1 4 系统统计数据
  • 【H.264/AVC视频编解码技术详解】十六:帧内预测编码的基本原理

    H 264 AVC视频编解码技术详解 视频教程已经在 CSDN学院 上线 视频中详述了H 264的背景 标准协议和实现 并通过一个实战工程的形式对H 264的标准进行解析和实现 欢迎观看 纸上得来终觉浅 绝知此事要躬行 只有自己按照标准文档
  • Base64加解密__完整版有解释

    提示 本文章纯原创 转载请注明原出处 文章目录 前言 MainActivity代码 activity main代码 前言 关于base64加解密 相信各位也看过许多文章 那么今日我出一份完整版的Androidbase64加解密APP Mai
  • git将本地文件push到阿里云Code:出现Permission denied (publickey)错误

    1 问题出现 将本地的 Git 仓库推送到阿里云 出现错误 Permission denied publickey fatal Could not read from remote repository 2 原因 1 原因是SSH keys
  • selenium通过cookie跳过登录验证码实现登录

    一般做ui自动化面对验证码一直是一个问题 在网上页百度了一些关于验证码的问题 有通过把验证码提取下来通过pytesser tesseract OCR 等库处理 但是这些比较麻烦 还是因为本人比较渣看不懂 后来想到了webapi学过cooki
  • react方法返回html_react渲染markdown内容-使用react-markdown

    在react中渲染markdown内容有很多方法 后端将markdown渲染成html返回给前端进行渲染 react将markdown渲染成html进行渲染 react使用框架直接对markdown进行渲染 最方便的就是使用react使用框
  • 在 Windows 下关闭135/139/445端口的方法

    一 关闭 135端口 第一步 运行dcomcnfg 打开 组件服务 计算机 在 我的电脑 上右键点击 选 属性 然后点默认属性 把 在此计算机上启用分布式COM E 的勾去掉 接着返回到 默认协议 移除 面向连接的 TCP IP 协议 这操
  • VMware虚拟机实用经验总结大全

    1 VMware虚拟机实用经验之支持的Guest OS VMWare支持如下Guest OS MS DOS Win3 1 Win9x Me WinNT Win2000 WinXP Win Net Linux FreeBSD NetWare6
  • Vue学习之起步——浅谈文件系统

    学习前谈 大家都知道 Vue是一个比较火的前端框架 作为一个开发者 我们虽然没必要深究其底层原理 但是 它的 文件系统 执行脉络我们还是得梳理清楚的 首先 Vue启动时会进入 main js 即 main js 是入口文件 import V
  • c语言if语句习题,C语言练习

    C语言练习 D 算法只能被有限的用户使用 18 有如下嵌套的if语句 以下选项中与上述if语句等价的语句是 A k aB B b gt C b C B k aD k a 19 有以下程序 程序运行后的输出结果是 A 0 B 1 C 2 D
  • (一)K8S集群部署——master节点部署

    1 集群配置 本次部署使用三台服务器 master 192 168 0 2 node1 192 168 0 4 node2 192 168 0 14 服务器配置均为 CentOS 7 6 64位 8核 16G 100G 2 master部署
  • Unity 3D 读入本地 xml 文件

    Load and Display XML Data in Unity 3D 如果你能翻墙从 youtube 上就可以看到怎么用 using UnityEngine using System Collections
  • IDM怎么设置下载会更快

    虽然IDM的下载速度已经足够彪悍 其优秀的智能动态文件分段功能和安全的分段下载技术 让大多数下载器都望尘莫及 但贪心的我们总是希望下载速度能更快 实际上 IDM也隐藏了部分功力 并可通过配置设置将隐藏的 功力 发挥出来 一般来说 Inter
  • 基于MFC对话框的Windows服务程序

    最近需求要写个服务程序 部分功能用MFC类库实现将非常方便 因此就没打算使用win32的服务程序 虽然那样对于服务很简单 首先写好mfc的对话框程序 调试什么的 功能也都完成好 这一部分和平常的mfc对话框程序没有差别 之后的服务启动后打开
  • Elasticsearch--索引备份与迁移

    Elasticsearch集群备份 以及在不同集群之间迁移数据 类似mongodb的mongodump功能 Elasticsearch也提供了备份集群中索引数据的策略 snapshot API 它会备份整个集群的当前状态和数据 并保存到集群
  • java操作rabbitmq

    JMS JMS是JavaEE规范中的一种 类比JDBC JMS即Java消息服务 JavaMessage Service 应用程序接口 是一个Java平台中关于面向消息中间件的API很多MQ产 品都实现了JMS规范 但RabbitMQ官方并

随机推荐

  • Rsync的配置与使用

    一 介绍 不想看直接可以跳过 Rsync 是一个远程数据同步工具 可通过 LAN WAN 快速同步多台主机间的文件 Rsync 本来是用以取代rcp 的一个工具 它当前由 rsync samba org 维护 Rsync 使用所谓的 Rsy
  • [Transformer]CSWin Transformer: A General Vision Transformer Backbone with Cross-Shaped Windows

    CSWin Transformer 基于交叉十字形窗口的视觉Transformer框架 Abstract Section I Introduction Section II Related Work Section III Method P
  • 使用数字滤波器处理音频噪声(附Matlab程序)

    本篇文章主要介绍使用窗函数法构造FIR数字滤波器 并且滤除音频文件的噪声 以下为完整的程序 修改一下文件的位置 直接复制应该就可以 1 音频文件的采集与分析 Matlab输入的音频文件需要 wav 文件 可以使用一些软件转换格式 例如酷狗音
  • C#音频采集 (笔记)

    using System using System Collections Generic using System Text using System IO using System Threading using Microsoft D
  • Effective C++第七章-模板和泛型编程之模板特化和代码膨胀

    模板特化 class A public void func1 void func2 class B public void func1 void func2 template
  • 用JS的canvas实现数字签名

    用JS的canvas实现数字签名 思路 先创建画布 鼠标按下 同时随着鼠标的移动来绘制签名 最后鼠标松开绘制结束 直接上代码啦
  • electron 1. hello world

    cnpm init y cnpm i electron D 安装electron package json name news windows version 1 0 0 description main main js scripts t
  • 爬取电影天堂

    电影天堂爬虫之网页分析 from lxml import etree import requests BASE DOMAIN http www ygdy8 net url http www ygdy8 net html gndy dyzz
  • java中的sleep()和wait()的区别

    对于sleep 方法 我们首先要知道该方法是属于Thread类中的 而wait 方法 则是属于Object类中的 sleep 方法导致了程序暂停执行指定的时间 让出cpu该其他线程 但是他的监控状态依然保持者 当指定的时间到了又会自动恢复运
  • Java中的桥接模式(Bridge Pattern)

    Java中的桥接模式 Bridge Pattern Java中的桥接模式 Bridge Pattern 是一种结构性设计模式 它将抽象部分和实现部分分离 使它们可以独立变化 同时通过桥接对象将它们连接起来 桥接模式通过将继承关系转变为对象组
  • 简单了解Docker、Dubbo

    简单了解Docker Dubbo 以Docker为例的容器 Docker是什么 Docker的原理 以Dubbo为例的RPC调用框架 如何理解REST RPC Dubbo是什么 简单了解Docker Dubbo 以Docker为例的容器 D
  • 分号和逗号

    分号是语句的结束字符 逗号是声明变量时分割符 分号一般表示语句的终结 或者用来分隔for语句中的3段 逗号一般用来分隔先后两条子句 或在函数定义或调用中分隔参数 如 var i 0 j 2 for var k 0 k lt j k i i
  • 【华为OD机试真题】密室逃生游戏(python)100%通过率 超详细代码注释 代码优化

    华为OD机试真题 2022 2023 真题目录 点这里 华为OD机试真题 信号发射和接收 试读 点这里 华为OD机试真题 租车骑绿道 试读 点这里 密室逃生游戏 题目描述 小强正在参加 密室逃生 游戏 当前关卡要求找到符合给定 密码 K 升
  • 爬虫时如何利用BeautifulSoup获取我们需要的数据?

    爬虫大致可以分为三步 第一步 发送request请求获得html内容 第二步 清洗数据 即从html原网页数据中筛选我们需要的数据 第三步 将需要的数据储存 在第二步筛选数据是 我们往往可以利用BeautifulSoup来完成 下面就如何利
  • 数据结构:线性表(顺序存储)顺序表类(实现顺序表的创建,输出,插入,删除功能)

    线性表顺序存储一般就是以数组的形式存储 一切都是对数组的操作 下面给出一个类定义的头文件 和一个实例 顺序表类 文件名 sq LList h include
  • jquery.入口函数_5个jQuery.each()函数示例

    jquery 入口函数 这是jQuery each 函数的广泛概述 此函数是jQuery最重要和最常用的函数之一 在本文中 我们将找出原因 并看看如何使用它 什么是jQuery each jQuery的each 函数用于遍历目标jQuery
  • python的class(类)中的object是什么意思?

    那写object和不写object有什么区别 好的 再用代码来理解它们的区别 coding utf 8 author zhengtong class Person 不带object name zhengtong class Animal o
  • 教女朋友一周学会 python 爬虫_1

    今天开始我将简单介绍一下网络爬虫 并开始带大家学习如何写爬虫 一 爬虫介绍 1 什么是爬虫 你可以把互联网想想成一个巨大的蜘蛛网 而爬虫就是一个小蜘蛛在网的各个节点中穿梭 就像探测机器一样 基本操作就是模拟人去浏览各个网站 浏览数据 查看信
  • 图像识别检测题(1)

    1 下列关于神经网络训练 错误说法是 A 激活函数的选择不会影响网络训练的结果 B 我们经常会使用Xavier初始化方法初始化网络权重 C batch size太小 训练loss震荡可能会比较大 D Adam是一种常用的优化算法 2 下面可
  • PBR:应用于虚幻引擎4贴图和材质创建的启示

    PBR 应用于虚幻引擎4贴图和材质创建的启示 Li Wen Lei HuNing 在 2015 10 28 23 00 31 新闻 Share on Facebook Share on Twitter Share on Google Sha