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

PBR贴图基础知识 阅读详情
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材质。为我们的游戏添加更好的质感。

虚幻引擎---材质篇 虚幻引擎材质篇 阅读详情

相关推荐

UE5笔记【三】UE5材质Materials

UE5材质Materials

xiaoyaolangwj的博客 8961

PBR常用贴图及使用事项

PBR常用贴图及使用事项

m0_63839748的博客 7002

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

PBR基于物理渲染技术中介绍制作材质及贴图的一个参考文档

UE4 利用粒子系统制作云层

1:UE4 Cloud材质制作 话不多说直接上图,材质节点如下 材质节点主要有这几个部分 CloudSpeed法向量 Time(时间) 节点用来向材质(例如,Panner(平移)、Cosine(余弦) 或其他时间相关操作)添加经历时间。 Multiply (乘) 将接触的材质的值相乘。 属性 忽略暂停(Ignore Pause) 如果为 true,那么时间将一直推进,即使游戏暂停也是这样。 周期...

qq_37874809的博客 2528

别再为STM32F407的USB高速通信发愁了!手把手教你用USB3320(ULPI接口)搞定硬件设计

本文详细介绍了STM32F407通过USB3320(ULPI接口)实现高速USB通信的硬件设计实战。从USB3320的选型优势到原理图设计避坑,再到PCB布局和固件配置,提供了一套完整的解决方案。特别针对USB PHY芯片的常见问题,如供电处理、信号完整性和初始化代码,给出了专业建议和调试技巧,帮助工程师高效完成高速USB通信设计。

weixin_42527401的博客 387

MATLAB实战:利用扫频数据重构系统伯德图的关键步骤

本文详细介绍了如何利用MATLAB处理扫频数据并重构系统伯德图的完整实战流程。内容涵盖数据导入与清洗、增益与相位的精确计算、频率响应数据对象(frd)的构建、数据平滑与插值处理,以及最终生成专业伯德图并进行关键参数(如相位裕度)标注的方法。文章重点解决了从实测“黑盒子”系统数据出发,获取直观频率响应特性曲线的核心问题,为控制系统分析与设计提供了实用指南。

weixin_29098117的博客 397

ue4材质节点大全_UE4_材质_视差节点(BumpOffset)

官方解释:凹凸贴图偏移(BumpOffset)是虚幻引擎4术语,就是通常所谓的“视差贴图”。BumpOffset表达式可以使材质产生深度错觉,而不需要额外的几何体。深度信息。高度贴图的值越亮,材质的“凸出”效果越明显;当摄像机在表面上移动时,这些区域将产生视差(位移)。较远”,其位移程度最小。个人总结:在不改变原有模型面数的情况下,增加贴图的视觉深度实现方式:传入高度图给Height输入点(注意:...

weixin_39857899的博客 2017

VN5620硬件接口介绍

VECTOR, VN5620, 诊断

Fecostar的博客 7476

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

PBR:应用于虚幻引擎4贴图和材质创建的启示 Li Wen Lei, HuNing 在2015/10/28 23:00:31|新闻 Share on Facebook Share on Twitter Share on Google+ Share on LinkedIn PBR材质似乎在一夜之间改变了人们对于引擎实时渲染画面的理解。在游戏中我们也能够...

weixin_30878361的博客 208

基于单片机的自动喷淋系统设计【毕业设计】

随着人民生活质量提高与生活节奏的加快,城市居民对于花草绿植的家庭培养与装饰需求增加,随之因浇灌植物的需要,智能浇花系统的市场逐渐扩大。现有自动浇花系统大部分只能通过设置固定浇水时间而难以实现适时、适量浇水,或在植物环境土壤含水量低时进行报警而并不能实际补水。为克服局限性而设计以单片机为控制中心的自动浇花系统。通过湿度传感器检测目标植物环境土壤湿度数据,再经ADCO832将其放大转换为数字量,由单片机读取输出向LCD1602 显示屏显示并通过比对键盘向单片机所设置的湿度范围而利用中断服务程序进行补水需求判断。

qq_48771816的博客 1711

CAD二次开发c# .net加载cui\cuix菜单文件

public static void LoadMyCui(string cuiFile) { Document doc = Application.DocumentManager.MdiActiveDocument; object oldCmdEcho = Application.GetSystemVariable("CMDECHO"); object oldFileDia = Application.GetSys..

2127

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

PBR材质似乎在一夜之间改变了人们对于引擎实时渲染画面的理解。在游戏中我们也能够体验到锈蚀的金属,厚重的皮革,精细的纹理,更加真实的世界从此展现在眼前。从此,PBR材质成为了“次时代”游戏必备的标准。在GDCC2015,来自Epic Games资深开发者支持美术设计师李文磊,为大家带来应用于虚幻引擎4贴图和材质创建的启示。以下内容是演讲实录:PBR是个不老不新的话题,很早它就出现在预渲染的渲染器里...

weixin_40004057的博客 666

STM32入门教程:水位传感器应用

这是一个简单的STM32水位检测系统的入门教程。希望通过学习本教程,您能对STM32微控制器的基本应用有更深入的了解,并能成功构建一个水位检测系统。如果您需要更详细的代码实例和教程,请参考相关的STM32开发手册和应用笔记。STM32是一款功能丰富且广泛应用于嵌入式系统的微控制器系列。在本教程中,我们将介绍如何使用STM32微控制器和水位传感器构建一个水位检测系统。

wx_linying1029的博客 533

虚幻4皮肤材质_PBR:应用于虚幻引擎4贴图和材质创建的启示 - 纳金网

PBR材质似乎在一夜之间改变了人们对于引擎实时渲染画面的理解。在游戏中我们也能够体验到锈蚀的金属,厚重的皮革,精细的纹理,更加真实的世界从此展现在眼前。自此,PBR材质成为了“次时代”游戏必备的标准。在GDCC2015,来自Epic Games资深开发者支持美术设计师李文磊,为大家带来应用于虚幻引擎4贴图和材质创建的启示。以下内容是演讲实录:PBR是个不老不新的话题,很早它就出现在预渲染的渲染器里...

weixin_36194553的博客 540

河洛理数【陈抟】先天命卦大运

首先我们把前文提及的天干和地支进行上下划分,那么每一年的年份都是使用一天干和一地支进行组合,即如上的甲子、癸亥,那么下一年就是天干和地支都进行顺延一位进行组合,如甲子年下一年就是乙丑年,但是由于天干是十个、地支有十二个,所以要遍历一遍的话,就正好是 60 年。1924 年 ~ 1983 年(中元) 1984 年 ~ 2043 年(下元) 2044 年 ~ 2103 年(上元)2、找到卦中第一个(从下往上,也就是初爻、二到五爻、上爻)对应时辰的阴阳爻。5、也就是所属的元堂爻。

Daniel专栏 2071

高效批量转换Java接口为MCP服务:降低重复劳动的实战指南

高效批量转换Java接口为MCP服务:降低重复劳动的实战指南

专注于编程、AI、人工智能等多个领域内容研究和分析 722

PBR材质系统原理简介

一、自然界材质要学会使用PBR首先需要了解什么是PBR,需要从真实世界的这些PBR材质特有的属性拆分开来去了解他们,这样我们就需要了解光,物体表面材质以及光是如何与材质交互的。光包括了颜色,亮度,衰减,强度,形状等主要属性,真实的世界中永远是多光源并存的。那么自然界中的材质是如何跟光交互的呢?灯光照射到物体表面后两种情况,反射或继续前行折射。折射后的光线被吸收(一般转化为热),或离散。光线被吸收的...

weixin_42660918的博客 3万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

UE4材质基础总结

目录 图形学基础知识 材质和材质实例概念 动态材质实例概念 材质细节面板关键参数 PBR基础(Physically based rendering) 材质节点基础参数 材质图表的计算节点 使用贴图制作PBR材质 玻璃&水材质制作(初级) 角色皮肤、毛发材质制作(初级) 材质函数 材质UV计算技巧 材质常用属性设置&节点 后处理材质基础 图形学基础知识 除了自发光物体,成像皆由视网膜接收物体各尺度平面反射的光线构成 光照效果一般可分为漫...

Ctrlturtle的博客 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

[浅析]UE4材质基础总结

图形学基础知识 除了自发光物体,成像皆由视网膜接收物体各尺度平面反射的光线构成 光照效果一般可分为漫反射和镜面反射(高光)两部分 漫反射:凹凸不平的表面反射的没有方向性的光 镜面反射:若反射面比较光滑,当平行入射的光线射到这个反射面时,仍会平行地向一个方向反射出来 光源照射物体时,将会与物体产生多种交互现象,反馈大致为: 光源到达物体表面时、物体原子会将光子部分吸收partially absorbed,能量守恒转化为热能,反射的部分较弱;且根据折射率具有不同角度微平面散射scattered, 穿透的部分将

鬼泣依旧 8938

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

UE4 导出材质到Unity(贴图烘焙)

参考:https://blog.youkuaiyun.com/qq_21153225/article/details/92664175 UE4(4.20以上)中有个功能,烘焙贴图,这个功能极大的方便在不同软件中制作材质的成本。下面介绍下该功能具体方法 UE4步骤 UE4 StarterContent中的默认场景,以如下场景为例,在Unity中重现。 导出所有模型 Asset Actions -...

Deveuper的博客 2万+

虚幻UE 材质-PBR基于物理的渲染

注意:本篇不会深入讲解PBR各个模块的核心理论,以较为通顺的方式讲解,如需核心理论可以前往链接:处学习。

UE成长之路,欢迎大家的关注! 4719

UE4 虚幻引擎,处理PBR材质

处理PBR(Physically Based Rendering基于物理的渲染)材质 虚幻引擎可以提供非常真实的基于物理的材质和渲染系统,基于物理的材质是一种以三种材质核心输入为基础的实时算法,十分方便美术师使用。这三种输入分别是Mtallic金属感,Specualr高光度,Roughness粗糙度。 利用这三项输入我们即可打造出建筑表面所需的任何照片级真实度材质。除金属感,高光度和粗糙度外还有其他输入。World Postion offset(世界坐标偏移)它可以通过材质控制对象顶点。对于大部分建筑可

qq_39934403的博客 2592
上一篇: 各种移动GPU压缩纹理的使用方法
下一篇: UE4 Console Commands List
凭谁问
博客等级 码龄15年 178粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值