Unreal插件开发的一些技巧

Unreal插件开发的一些技巧,第1张

阅读此文章之前,建议先看下入门版: https://www.jianshu.com/p/ec0ae889f417

首先,UE本身提供了很多拓展接口,基本可以满足日常插件开发的需要,我举些例子:

但是,上述这些正道接口,也只能覆盖90%的开发需求。那么剩下10%如何处理呢?

public目录中头文件引用方法太入门,本文不再赘述。

private目录中的头文件引用方法,例如:Unreal\Engine\Source\Editor\AnimationBlueprintEditor\Private\AnimationBlueprintEditor.h

首先,在当前插件模块的build.cs文件中添加Private目录:

然后在某个源码文件,直接include:

使用private头文件后,virtual或inline函数,你都可以直接调用了。

其他函数可能会报链接错误。咋办呢?

很简单,把这个函数的实现copy到你的cpp里即可。

UE官方其实提供了一种访问private变量的方法:所有标记了UPROPERTY的变量都是可以通过正道访问的。

例如, FAnimLinkableElement的SlotIndex变量:

访问SlotIndex的方法如下:

另外,不标记UPROPERTY的私有变量,其实也可以访问的,前提是变量的offset计算正确,这个太黑,就不提了。

我业余时间,写了个运行时,替换virtual函数的程序,链接在此: https://github.com/xiaoyaoliu/vimrc/tree/master/documents/cpp_samples/ReplaceVirtualFunction

例如,在动画蓝图中的Slot动画节点的右键菜单中添加新的UI入口。

具体的效果不再赘述,同其它软件中的图层混合模式相同。

————————————————————————————————————————————————————————————————————————

以程序方式生成要添加至材质的渐变,从而消除对纹理的需求并节省内存。渐变函数以程序方式生成根据纹理坐标表达式产生的渐变。与创建基于纹理的渐变相比,这些函数可节省内存。

DiamondGradient(菱形渐变)函数使用 UV 通道 0 来产生径向渐变,同时允许用户调整渐变衰减率。

SmoothCurve(平滑曲线)函数接收现有的纹理通道或渐变,并使用程序式曲线来控制从暗到亮的过渡。用户可调整此曲线的切线以更改结果。

ValueStep(值阶)函数接收现有的纹理通道或渐变,并根据用户的输入来输出纯黑白色图像。结果是一个蒙版,它代表与输入值相等的渐变部分。

————————————————————————————————————————————————————————————————————

这些函数用来对现有的图像纹理进行调整,例如改变对比度或色调。图像调整函数用于对纹理执行基本的颜色校正 *** 作。这些函数非常有用,它们允许您对纹理执行校正 *** 作或改变,而不必担心因为要将单独的版本装入内存而产生开销。

CheapContrast_RGB(低成本对比度_RGB)函数通过将直方图的高端重新映射到低端值,并将直方图的低端重新映射到高端值,提升输入的对比度。这类似于在 Photoshop 中应用色阶调整 ,以及将黑色和白色标志拉入到一个位中。用户可控制提升对比度的程度。

与普通的 CheapContrast(低成本对比度)函数 不同,此函数可接收"矢量 3"作为输入,从而允许其对彩色图像执行对比度 *** 作。

SCurve(S 曲线)函数通过沿 S 曲线插入图像的每个通道值,提升图像的对比度。这类似于在 Photoshop 中应用曲线调整 ,以及对 S 曲线设置 RGB 曲线或使用预先设置的"提高对比度 (RGB)"。

SmoothThreshold(平滑阈值)函数接收渐变、插值率和阈值(分界值)。然后,它根据输入,将平滑对比度应用于渐变。以下是每个输入的作用明细:

————————————————————————————————————————————————————————

预先配置的数学函数,例如计算 π 以及将矢量分量相加等等。数学函数对纹理中像素的值执行基本数学方程式。

————————————————————————————————————————————————————————————————————————————————————————————————————————————

未归入现有类别的杂项函数。杂项函数包括各种不容易归入任何其他现有类别的一次性函数。将这些函数放在这里是为了避免产生太多只有一个函数的类别。

正如其名称所指,此节点的作用只是直接传递。无论将什么内容传递到此节点,都会通过输出毫无变化地返回该内容。此节点比所有其他节点更适合于组织用途,因为它允许您在比另一节点更接近的位置通过"说明"(Desc)属性对节点进行标注,这在所需节点位于图中较远的位置时特别有用。

Flipbook(图像序列)函数接收一个"2D 纹理",例如精灵帧网格,并输出它们按顺序回放的动画。

————————————————————————————————————————————————————————————————————————————————————

这些函数用于处理材质网络中的不透明值。

SoftOpacity(软不透明度)函数接收一个不透明度值,然后对其运行各种计算,从而产生一种柔和的感觉。它应用菲涅耳效果、基于深度的阿尔法以及像素深度。最终的结果会导致对象随着摄像机接近而逐渐消失。

————————————————————————————————————————————————————————————

这些专用函数用来帮助设置复杂粒子网络的外观。

——————————————————————————————————————————————————————————————————————————————————

枢轴点绘制器工具1.0材质函数

这些函数使您能够利用枢轴点绘制器MAXScript。

枢轴点绘制器 材质函数使您能够接入枢轴点绘制器 MAXScript ,后者将旋转信息存储在网格的顶点中。这种方法非常适合于处理静态网格上的动态运动。

虽然没有这些函数也可以利用枢轴点绘制器所提供的数据,但这些函数确实让使用过程更为简单。这些函数可以处理并组织枢轴点绘制器 MAXScript 存储在模型 UV 中的全局位置及角度信息。

————————————————————————————————————————————————————————————

以程序方式生成的纹理和 *** 作,例如根据现有的高度贴图来创建法线贴图。

此函数提供一种快捷的方法来根据现有的黑白高度贴图建立法线贴图,而不必将另一个纹理装入到内存中。

这些函数帮助计算各种反射类型的值。

此函数接收球形反射纹理并使其与视图一致。通过输入定制反射矢量,可以按一定的偏移来执行计算。

此函数使用法线贴图来生成一个反射矢量,该反射矢量独立于默认反射矢量以及基本着色器上的法线输入。

这些函数用于处理特殊的明暗处理类型,例如"模糊明暗处理"网络。

此函数用于提供草地明暗处理的漫射部分。与 FuzzyShading(模糊明暗处理)相似,此函数允许您在边缘处混入一种新颜色,方法如下:首先按给定的百分比去饱和度,然后对去饱和度后的区域应用定制颜色。

各种用于帮助处理纹理的函数,例如重新投射 UV 以及裁切等等。

TextureCropping(纹理裁切)函数用于将给定的纹理裁切为纹理坐标平面上更小的偏移位置。此函数适合用来将一个颜色块放到自发光纹理区域上。

灰度图、高度图和法线贴图

UE4中的光源有以下几种:

定向光源主要用作为基本的室外光源,或者用作为需要呈现出是从极远处或者接近于无限远处发出的光的任何光源。

点光源是像传统的"灯泡"一样的光源,从一个单独的点处向各个方向发光。

聚光源也是从一个单独的点处向外发光,但是其光线会受到一组锥体的限制。

天光则获取场景的背景并将它用于场景网格物体的光照效果。

光源主要的特性-移动性:

静态和动态的区别:

静态:什么都不可以变,变了就要重新编译生成

固定:只可以改变颜色和强度

可移动:性能最差,效果和修改最好

还有个关于光的特性:自动曝光 在项目的渲染设置中。

关于雾 雾霾的雾在这里设置和创建:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11674497.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存