标签: unreal-engine4

从HDR图像中选择亮度(曝光)

我目前卡在图片上的视频节目中.

问题:

我正在从UE4中提取图片,由于存在错误,在渲染截图期间并未考虑所有灯光.输出是HDR图像.我希望得到更好的亮度,因为导出的图像非常暗,就像第一次曝光一样.

在此输入图像描述

使用UE4中的"曝光偏差"参数,我能够真实地获得场景的亮度,但不能将此参数应用于屏幕截图渲染: 在此输入图像描述

尝试:

使用Tonemapper算法(特定cv::TonemapDrago)我能够获得更好的图像结果: 在此输入图像描述

对于我的情况,Tonemap算法的主要问题是因为全局亮度根据区域的亮度而改变:在第二个图像中,窗口增加了大量的光,因此算法降低了所有亮度以调整平均值.在渲染的视频中,光线变化非常残酷.

我试图改变亮度和饱和度而没有成功.我已经修改了TonemapDrago尝试使用常量的代码来执行算法的某些步骤.

题 :

我想从HDR图像中"选择曝光时间".Tonemap基于同一图像的几个曝光时间,在我的情况下并不有趣.

欢迎任何其他想法.

编辑:

CV :: Mat深度为5,类型为CV_32FC3

cout << mat.step 给我19200

以下是我用来尝试解决问题的2个示例:

第一张图片

与光窗口的图像

编辑2:

无法用gimp打开.HDR图片,带有"explosure blend"插件的事件.我可以使用Photoshop获得足够的结果.那背后的算法有什么想法吗?OpenCV的6个Tonemap算法中的任何一个允许选择曝光校正. 在此输入图像描述

编辑3:

我已经按照这个tuto中的算法解释了openGL,它给了我这个C +代码:

cv::Mat exposureTonemap (cv::Mat m, float gamma = 2.2, float exposure = 1)
{
  // Exposure tone mapping
  cv::Mat exp;
  cv::exp( (-m) * exposure, exp );

  cv::Mat mapped = cv::Vec3f(1.0) - exp;
  // Gamma correction 
  cv::pow(exp, 1.0f / gamma, exp);

  cv::imshow("exposure …
Run Code Online (Sandbox Code Playgroud)

c++ opencv hdr unreal-engine4 opencv3.0

8
推荐指数
1
解决办法
1248
查看次数

为什么 GetAllActorsOfClass 返回空?

我有一个PlayerControl.cpp派生自 Pawn 类的类

在那个班级中,我有一个方法可以获取 Map 中的所有 Actors

TSubclassOf<AEnemy> ClassToFind;
 TArray<AActor*> FoundEnemies;
 UGameplayStatics::GetAllActorsOfClass(GetWorld(), ClassToFind, FoundEnemies);
Run Code Online (Sandbox Code Playgroud)

但是 FoundEnemies 数组总是空的,当我在 BP 中做同样的事情时它可以工作。

有人能告诉我为什么这在 C++ 中不起作用吗?或者如果我做错了,如何做正确的?

c++ unreal-development-kit unreal-engine4 unreal-blueprint

8
推荐指数
1
解决办法
8253
查看次数

在 VS2019 或 VSCode 中使用 Unreal Engine 4.24.2 时,如何修复这些错误的 Intellisense 错误?

我正在遵循虚幻编程快速入门指南

我复制并粘贴了指南底部的代码示例。我试过同时使用 VS2019 和 VSCode,都给我同样的错误:

UStaticMeshComponent *AFloatingActor::VisualMesh
pointer to incomplete class type is not allowed
Run Code Online (Sandbox Code Playgroud)
static <error-type> UStaticMesh
name followed by '::' must be a class or namespace name
Run Code Online (Sandbox Code Playgroud)

还有几个……

当我在虚幻引擎中编译时,它编译时出现 0 个错误并按预期工作。

有什么办法可以修复这些错误的错误并继续使用智能感知/获取代码完成?

我真的只是希望能够看到我正在使用的组件的成员函数和定义,因为我是 Unreal 的新手。

这是指南中的代码,因为我在这个演示项目的源代码中有它:

FloatingActor.h

UStaticMeshComponent *AFloatingActor::VisualMesh
pointer to incomplete class type is not allowed
Run Code Online (Sandbox Code Playgroud)

FloatingActor.cpp

static <error-type> UStaticMesh
name followed by '::' must be a class or namespace name
Run Code Online (Sandbox Code Playgroud)

c++ intellisense visual-studio unreal-engine4 visual-studio-code

8
推荐指数
1
解决办法
5100
查看次数

检查A是否是B的子类?

我目前正在使用虚幻引擎4,似乎我无法避免一些演员表.

AController* c = this->GetController();
APlayerController* p = (APlayerController*)c;
Run Code Online (Sandbox Code Playgroud)

有没有办法可以在我演员之前检查是否c是一个PlayerController

c++ unreal-engine4

7
推荐指数
2
解决办法
4332
查看次数

虚幻引擎4中的C++嵌套JSON

我有一个JSON对象,我从我的服务器,看起来像这样:

{
    "state":"1",
    "player1": {
        "alias":"Player Name",
        "ready":"0"
    }
}
Run Code Online (Sandbox Code Playgroud)

我能够获取JSON,将其解析为FJsonObject,并使用此代码序列化检索JSON对象的第一级中的任何数字或字符串:

TSharedPtr<FJsonObject> JsonParsed;
TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(json);
if (FJsonSerializer::Deserialize(JsonReader, JsonParsed))
    //Use JsonParsed
Run Code Online (Sandbox Code Playgroud)

这段代码读取字符串:

FString AJSONContainer::getStringWithKey(FString key)
{
    return storedJSON->GetStringField(key);
}    
Run Code Online (Sandbox Code Playgroud)

边注:

AJSONContainer只是一个Actor类,我用它来从Blueprints调用这些函数.


这一切都很好,但是当我尝试从二级读取东西时,事情就不起作用了.

我编写了这段代码来提升下一级别:

TSharedPtr<FJsonObject> nested = storedJSON->GetObjectField(key);
Run Code Online (Sandbox Code Playgroud)

但所有要求获得领域的电话nested都没有.

nested->GetStringField(anotherKey); //Nothing
Run Code Online (Sandbox Code Playgroud)

所以,例如,使用上面的JSON,这个:

TSharedPtr<FJsonObject> nested = storedJSON->GetObjectField("player1");
FString alias = nested->GetStringField("alias");
Run Code Online (Sandbox Code Playgroud)

alias 将它打印到控制台时没有任何价值.


难道我做错了什么?为什么二级JSON不起作用?

c++ json unreal-engine4

7
推荐指数
1
解决办法
6883
查看次数

alpha 通道和透明通道有什么区别?

我以为他们是一样的。

但是最近我发现 png 和 targa 纹理在 UE4 中表现不同。

今天我在Adobe读到一些东西,

Alpha 通道可以包含任何内容,而透明度是一种特定的通道关系。

它还说,

(透明通道)每个图像像素由一组可见着色剂的数值和一个包含不透明度信息的附加数值表示。

这让我很困惑。

他们保存不同的数据吗?Alpha 通道是否比透明通道“更强”?

photoshop png unreal-engine4

6
推荐指数
1
解决办法
5699
查看次数

虚幻引擎在 Linux 上启动时崩溃

我已经从源代码编译了虚幻引擎,一切都很成功。但是当我尝试启动 UE4Editor 时它崩溃了。控制台上的错误是:

[2017.04.14-05.25.55:381][  0]LogExit: Exiting.
Engine crash handling finished; re-raising signal 11 for the default handler. Good bye.
Run Code Online (Sandbox Code Playgroud)

附加崩溃日志和诊断文件。

环境:

Linux andrii-asus 4.4.0-72-generic #93-Ubuntu SMP Fri Mar 31 14:07:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

UE4.log:

Log file open, 04/14/17 08:20:46
LogInit:Display: Running engine without a game
LogPlatformFile: Not using cached read wrapper
LogInit:Display: RandInit(-1053205140) SRandInit(-1053205140).
LogTaskGraph: Started task graph with 5 named threads and 6 total threads with 1 sets of task threads.
LogStats: Stats thread started at …
Run Code Online (Sandbox Code Playgroud)

linux segmentation-fault unreal-engine4

6
推荐指数
1
解决办法
8952
查看次数

如何调试虚幻引擎源代码

我想问一下有没有办法用Visual Studio源代码调试虚幻引擎源代码:

源代码)。

每次我尝试在他们的源代码中设置断点时,只是说它无法到达该断点。

unreal-engine4

6
推荐指数
1
解决办法
1万
查看次数

如何在 Unreal 蓝图中创建与 Unity LookAt 等效的内容?

在虚幻中,我想要

  1. 旋转角色,使前向向量指向目标的当前位置,
  2. 确保我的演员的向上向量与我的目标的向上向量相同

在Unity3D中,这非常简单。这是一行代码(源代码):

transform.LookAt(target, Vector3.up);
Run Code Online (Sandbox Code Playgroud)

在蓝图中,有一个名为“Find Look at Rotation”的节点。问题是没有向上矢量参数,因此当您接近目标时,可能会出现不需要的滚动旋转。

那么,如何在 Unreal 蓝图中创建相当于 Unity LookAt 的功能呢?

c++ vector rotation unreal-engine4 unreal-blueprint

6
推荐指数
2
解决办法
2万
查看次数

在 UE 5 中,我不断收到此错误 Unable to build while Live Coding is active

自从我升级到 UE 5 以来,我不断收到此错误

错误 实时编码处于活动状态时无法构建。退出编辑器和游戏,或者如果在编辑器或游戏中迭代代码,请按 Ctrl+Alt+F11

有什么解决办法吗?

unreal-engine4 unreal-engine5

6
推荐指数
3
解决办法
2万
查看次数