惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
罗磊的独立博客
宝玉的分享
宝玉的分享
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
博客园_首页
量子位
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
S
SegmentFault 最新的问题
雷峰网
雷峰网
小众软件
小众软件
博客园 - 聂微东
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
Jina AI
Jina AI
Hugging Face - Blog
Hugging Face - Blog

音视频开发进阶

音视频教程-第三节 音视频教程-第二节 真的,AI 可能就是新时代的信息差 充值 Cursor 之后,工作有了哪些变化?🤔 个人'蒸馏'大模型能做哪些有意思的事情 DeepSeek 大模型在 Mac 上的部署和运行 音视频教程-第一节 【WebRTC 专栏】-- Android 开发集成 WebRTC 库的几种方式 【WebRTC 专栏】-- 在 Mac M1 等系列芯片编译和开发 WebRTC-Android 库 Meta Llama3 大模型在 Mac 上的部署和运行 iOS VideoToolBox 解码 HEVC Open-GOP 视频的问题排查 Flutter 状态管理之 InheritedWidget 使用和分析 用 ChatGPT 回答技术问题怎么样 ? 音视频开发系统入门大致路线 UE 4.27 添加自定义 ShadingModel 用 UE4 虚幻引擎做个捏脸小功能~~ UE4 材质练习系列基础 OpenGL上下文创建以及共享机制 007 | 播放器系列专栏-解析 MP4 文件读取信息 006 | 播放器系列专栏-在 Mac 上查看 MP4 格式信息 干货 | 快速抽取缩略图是怎么练成的? 关于直播、WebRTC、FFmpeg 的那些事 005 | 播放器系列专栏-在 Windows 上查看 MP4 格式信息 将音视频中的花屏、绿屏、黑屏问题一网打尽 关于音视频里面的解码帧率和渲染帧率 004 | 播放器系列专栏-认识MP4视频(下) 003 | 播放器系列专栏-认识MP4视频(上) 入门或者转行音视频,应该要怎么做? H264视频文件如何缩放分辨率 002 | 播放器系列专栏-FFmpeg依赖库的配置
UE4 材质练习 之 凹凸贴图偏移的使用
音视频开发进阶 · 2022-09-12 · via 音视频开发进阶

一个专注音视频领域的小圈子

UE 中提供了 凹凸贴图偏移 的贴图来实现修改 UV 坐标达到提升表面细节,使材质产生深度错觉。凹凸贴图偏移是 UE4 中的术语,其实就对应于 LearnOpenGL 网站上的 视差贴图

视差贴图原理

理解了视差贴图的含义就很容易明白凹凸贴图偏移的作用了,它的原理如下图所示:

首先需要提供一张代表高度图的纹理,这样每个像素点都对应一个高度值,上图中的红线可以理解成高度值分布,点 A 对应的高度值就是 H(A)。

以视线方向看向点 A 时,由于高度的遮挡实际看见的是点 B,所以在纹理采样时只要在点 A 的坐标基础上加上点 B 的坐标偏移就行了,但是实际上很难准确预测点 B 的存在,它只是粗略估算得到的。

所以在实际操作时,一般采样点 A 对应的高度值,然后在视线方向以高度值大小进行缩放,向量 P 就是缩放后的结果,这个时候再用点 A 的坐标加上向量 P 在坐标轴上的偏移就行了。

视差贴图存在一定的局限性,主要在于点 B 和向量 P 之间有时候变化很块导致预测误差较大,所以才有了后面的陡峭视差映射和视差遮蔽映射,在 UE 中也提供了视差遮蔽映射的计算,不过本篇先使用简单的视差映射。

理解了视差映射的基础概念后,就很容易明白 UE 中凹凸贴图偏移的对外参数含义了。

BumpOffset 使用

首先针对每个像素都要有个高度值,这一般用个高度图来表示就行了,对应 BumpOffset 中的 Height 节点,其实也可以用一个常量来表示高度值。

一般都是用一张高度度来表示每个像素的高度信息,不过 BumpOffset 并不接受 RGB 通道作为连接节点,因为高度信息使用 R、G、B 单个通道来表示就行了。

同时由于高度图要进行纹理采样,那么务必涉及到对纹理坐标 UV 的操作了,BumpOffset 中的 Coordinate 节点就是对应 UV 的调整。

最后的输入节点 HeightRationInput 就是对采样的高度值进行比例系数的缩放,可让外部调整放大的倍数。不光是 BumpOffset 有这系数操作,在涉及到纹理采样的操作中都会有对采样后的 RGB 数据进行相应的调节操作,比如对采样后的 RGB 数据乘以 1 保持原始状态,也可以把要乘的数作为参数暴露给外界进行调整。

根据视差贴图的原理可知,BumpOffset 的输出结果就是对纹理采样坐标的偏移,通过这个偏移实现深度错觉,所以要把输出节点连接到 Diffuse、Roughness、Normal 节点的 UV 上。

视差遮蔽映射

UE 还提供了视差遮蔽映射的方法,如下图所示:

它同样也是用来实现高度效果的,原理就是 LearnOpenGL 网站上的 视差遮蔽映射

其中输入参数 Heightmap Texture 对应高度图纹理对象,不再是纹理采样,而 Heightmap Channel 表示选择纹理对象的哪个通道作为高度值,UVs 表示对高度图纹理坐标进行相关操作

输入参数 Min Steps 和 Max Steps 表示分层最小和最大数目,输出参数 Parallax UVs 和 BumpOffset 的输出参数一致,表示对纹理采样的偏移值。

视差遮蔽映射会比简单的视差贴图实现更好的效果,但是性能上也会损耗多一些。

原创文章,转载请注明来源:    UE4 材质练习 之 凹凸贴图偏移的使用