UV的概念与UE4TexCoord应用

本文介绍了UE4材质系统中的UV概念及其应用,通过实例解释了UV如何将三维模型转换为二维贴图,并探讨了使用TexCoord进行纹理坐标操作的技术细节。

UE4材质基础入门

什么是UV?

我们平时经常接触的三维模型,不管他是多复杂,都是由很多个面来组成。

但是在模型不只是用来看外形,还需要在模型上制作贴图,让模型看起来更生动。

但是模型本身是三维的,图片却只能作为二维的方式存储,UV其实只是三维转换到二维的一种解决办法。左侧就是切割好的三维模型,右侧则是把切好的部件以二维的方式平铺开的样子。


如果还没理解,这里有个更生动的gif可以参考。

 

当然uv还有很多种稍难理解的用法,比如unity中常见的素材,很多模型公用一个贴图这是怎么做到的呢?

我还是用这个杯子作为例子,这次我把这个杯子复制成三份重新分配了一下UV摆放位置。


然后我在贴图上面写上1,2,3来区分三个杯子,左侧是把同一张贴图贴到三个模型上的样子,右侧是制作好的贴图。


每个模型每一个部件,都要映射到uv相应的位置。即使是三个模型,我用同一张贴图给哪一个杯子,他们都可以正常显示该有的样子。

总结一下,对UV拆分最简单的理解,就像猎人用刀子切割猎物身上的毛皮,然后铺平放在地上一样,是从一个三维转换成二维的方法。


在ue4材质中Texcoord是什么

这个案例不适用于上面杯子这种拆分方式的UV。

我们先把Texture Coordinate拆分开,分别看两渐变。


R和G通道分别来看,都只是0~1的渐变,但是最好的理解方式,是把他们看成U方向和V方向的坐标,然后参考一下杯子案例中的UV坐标与UV轴向。

 

我还没探究过为什么ue4中uv的(0,0)点在左上角,基于UV可以重复向外扩展,(0,0)~(1,1)平面中的内容和(0,0)~(-1,-1)是一致的,这里先忽略这个问题。

不难发现UV中实际上也是有坐标的,但是这个坐标有什么实际用途,可以用这个例子来讲解如何通过拉伸,将这个红蓝图片在模型上只显示我们想要的那部分。


 回到我们用mask拆分好的TexCoord的R、G通得到的两个方向的渐变。


然后结合R、G通道的渐变与UV坐标分析一下我们想要的结果,然后通过公式计算可以得到一个只有红色背景的1。

这个大图是重点

这个大图是重点

这个大图是重点(看不清请用浏览器打开图片链接)


我们现在在刚才的基础上扩展一下,如何通过计算得出下面这三种结果。


题外话,如果你很容易可以算出上面三个练习,现在可以来看看这个。想想texcoord加了一个渐变之后传给UVs,为什么导致了扭曲。每个像素指向的坐标发生了哪些变化?


题外话扩展篇,如果可以理解为什么发生了扭曲,可以顺便思考一下通过这个思路来实现一个可控的仿鱼眼镜头效果。


素材:


### UV旋转在Unreal Engine中的用法 在Unreal Engine (UE) 中,UV旋转是一种常见的技术需求,用于调整材质贴图的方向和位置。通过控制UV坐标,开发者能够实现更复杂的视觉效果以及优化资源利用率。以下是关于如何处理UV旋转的具体方法及其背后的原理。 #### 使用自定义节点进行UV旋转 为了实现UV旋转功能,可以通过材质编辑器内的表达式来完成这一目标。具体来说,可以利用`Rotate About Axis`函数或者手动编写矩阵变换逻辑来进行UV坐标的旋转操作。下面是一个简单的例子: ```hlsl // 定义输入参数 float2 uv = TexCoord; float angleInRadians = RotationAngle * PI / 180; // 构建二维旋转矩阵并应用UV上 float cosTheta = cos(angleInRadians); float sinTheta = sin(angleInRadians); uv.x = uv.x * cosTheta - uv.y * sinTheta; uv.y = uv.x * sinTheta + uv.y * cosTheta; ``` 上述代码片段展示了如何基于给定的角度值计算新的UV坐标[^1]。此过程涉及三角学基本概念——正弦余弦函数的应用,从而构建出适用于平面几何对象的旋转变换矩阵。 #### 利用引擎内置工具简化流程 除了手写脚本外,还可以借助于Unreal Engine提供的现成功能模块快速达成目的。例如,在创建Material Graph时拖拽“Rotator”组件至画布即可轻松设置任意方向上的偏转角度[^4]。这种方法不仅直观易懂而且减少了潜在错误发生的可能性。 另外值得注意的是,当涉及到跨平台开发特别是移动端性能考量方面,合理规划纹理映射策略显得尤为重要。正如Epic Games团队针对Fortnite项目所做的那样,他们采取了一系列措施提升渲染效率其中包括但不限于硬件遮挡查询(Hardware Occlusion Queries)[^1], 这些改进同样有助于缓解因频繁修改UV而导致额外开销的问题。 最后提醒一点,尽管Windows环境下可以直接运行带有源码工程文件(.uproject),但如果计划部署iOS版本的话,则仍需依赖Mac设备执行最终打包步骤[^2]. ### 示例代码展示 这里给出一段完整的Shader Code供参考: ```c++ void main() { float AngleDegrees = 45.0f;//设定所需度数 vec2 CenterPoint = vec2(0.5); //中心点默认位于中间 mat2 RotateMatrix = mat2(cos(Angle),-sin(Angle), sin(Angle),cos(Angle)); gl_FragColor=texture2D(TextureSampler,(TexCoord-CenterPoint)*RotateMatrix+CenterPoint); } ``` 以上即为有关Unreal Engine中UV旋转的相关讨论及其实现方式介绍。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值