4

UE5.2中OvrLipSync无法使用的问题

 8 months ago
source link: https://blog.ch-wind.com/ue5-ovrlipsync-fix/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

UE5.2中OvrLipSync无法使用的问题

19 Oct 2023 ue5

OvrLipSync插件之前在UE4中使用还是比较正常的,但是在UE5.2上引入的时候发现生成的数据始终无法驱动动画。

当前使用的UE版本为UE5.2.0。

先直接上结论,输入指令:

au.editor.ForceAudioNonStreaming 1

后再转化就可以了。

这个插件之前用的时候是直接可以用的,所以没有怎么关注过细节。

这次稍微看了下实现,发现其原理还是比较简单的。尤其是针对离线数据使用的情况,其实就是针对语音文件生成了一个Visemes的数组。之后在语音播放时,根据当前播放的时间取到对应需要的MorphTarget值,然后设置到动画上。

由于这个过程在调试的时候不是很好判定,所以直接修改了插件的代码来观察生成的数据:

USTRUCT()
struct OVRLIPSYNC_API FOVRLipSyncFrame
{
	GENERATED_BODY()

	UPROPERTY(EditDefaultsOnly)
	TArray<float> VisemeScores;

	UPROPERTY(EditDefaultsOnly)
	float LaughterScore;

	FOVRLipSyncFrame(const TArray<float> &visemes = {}, float laughterScore = 0.0f)
		: VisemeScores(visemes), LaughterScore(laughterScore)
	{
	}
};

这样就可以在资产文件中观察生成的数据了,可以看到生成的数据全部都是0。

于是转到生成逻辑,发现在DecompressSoundWave内部调用InitAudioResource时,在检查IsStreaming的地方没通过,导致实际没有返回插件预期的数据。

虽然要比较正式的修改的话需要进一步的跟进流程来确定怎么调整,但是这部分代码是OvrLipSync官方维护的,要动起来也得花时间去看它的结构。发现有一个开关可以在编辑器内关闭这个行为后就没有跟进了。

这样可能只能在编辑器内起作用,但是由于实际使用的时候是直接调用生成的离线数据的。打包后离线数据的使用没有影响。

由于没有使用实时数据动态生成的需求,就没有继续跟进了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK