整体框架
Material 使用顶点着色器与像素着色器来进行渲染.UE4使用HLSL作为着色器语言,会为不同平台进行交叉编译.
把模版着色器HLSL代码与材质编辑器产生的代码相结合,产生最终的HLSL代码.
为了保持高性能,无法在HLSL代码中一次支持所有用例,UE4会自动为不同的特定用例添加额外的HLSL代码,最终产生对应于特定用例的HLSL代码.这个过程叫Permutation.不同用例可以在材质编辑器细节面板的Usage中指定(一般是自动设置).
另外各种Switch节点的true或者false的组合都会产生不同的Permutation版本. Switch.png性能
性能取决于像素着色器必须运行的像素个数,以及像素着色器自身的复杂程度.在材质编辑器下方的统计窗口里可以看到材质编译后产生的指令个数.在编辑其中使用快捷键Alt + 8,可以直观的查看着色器复杂度. zhi'ling由于程序化的材质很容易太复杂而效率低下,所以在实时渲染中大部分材质都是基于纹理的.虽然过多的纹理会消耗一定存储资源,但显然这种由空间换时间的折中是值得的.
半透明材质会开销巨大,计算复杂,尽量少用.大量透明层互相叠加也很容易导致性能下降.使用透明材质尽量小心.
基于物理的渲染PBR
基于物理的渲染,意味着要模拟光线与物体之间真实的互相作用的模型,而不是模拟我们主观上认为的光线的作用模型.PBR的结果更准确,看起来更自然,并且PBR材质在所有光照条件下都有同样出色的表现.
它可以让艺术工作流水线变得可以预测.它被称为统一着色:除了极个别特殊情况,其他所有情况下都是用统一的同一种着色方式.
BaseColor , Metallic , Roughness , Specular ,四个属性共同影响着PBR材质的渲染效果.我们可以基于现实中的材质测量出一系列标准的属性值.然后基于它们快速且准确的制作出效果一致的高质量PBR材质.
注意:另一个预测量的属性值
压缩和内存
纹理是在导入时进行压缩的,默认情况下纹理都要被压缩.
BC - Block Compression - BC1,BC3,BC5,BC7
DXTC - DirectX Texture Compression - DXTC1,3,5
默认压缩格式是DXTC1/5 或 BC1/3.
BC3(DXTC5) - 带有alpha通道
BC1(DXTC1) - 不带alpha通道
透明通道不会被压缩.
法线贴图比较特殊.压缩格式BC5
多级渐进纹理,纹理尺寸和纹理池
- 纹理池:在内存中预留的一定大小的用来专门存放纹理的空间.其大小可通过r.Streaming.PoolSize来控制.如果纹理池大小不够用,会使用纹理的低分辨率Minmap,导致场景里物体变得模糊. 纹理池大小
- Minmaps:纹理宽和高的值必须是2的整数次幂,这样才能自动生成Minmap.远处物体加载更小的纹理,可以有效减少远处物体的内存消耗,提高场景加载速度,一定程度上避免物体出现噪点.
-
每个材质最多可以使用16个纹理采样器,由于材质本身会占用几个内部纹理采样器,我们打开最多可以自由使用13个纹理采样器.有两种方法绕开此限制:
1.使用共享采样器,这样一个材质最多可以使用128个采样器,可以在纹理采样器的细节面板中设置. 共享采样器
2.使用纹理合并,使用作图工具把不同纹理合并到同一个纹理的不同RGB通道中.变相达到增加采样器的效果. 纹理合并
Render To Texture
RTT:在编辑器或者在运行时生成一张纹理.可以把一个材质或者一个相机镜头烘焙到一张纹理上,这就叫做Render To Texture. SceneCapture2DRender Target
DrawMaterialToRenderTarget
六大材质编辑器工具
- 材质编辑器 -- 最主要的工具
- 材质函数
- 材质层
- 材质实例
- 参数集
- HLSL
表达式和常用组合
-
常用表达式
CommonExpressions -
常用组合
Basic combinations01
Basic combinations02
Basic combinations03 -
UV修改组合
UV01
-
时间修改
1.png -
平滑的渐变生成
1.png
-
外部输入
1.png
-
其他
1.png
网友评论