原文:https://home.gamer.com.tw/creationDetail.php?sn=3315244 某台湾网站上看到的文章,比起youtube上讲Indirect Lighting的视频要直观易懂。 Indirect Lighting Cache(间接光照缓存) 官方文档 http://api.unrealengine.com/INT/Engine/Rendering/LightingAndShadows/IndirectLightingCache/index.html Indirect Lighting Cache是类似于Unity的LightProbe,间接光照就是当光线直射到一个物体上后,光线反弹后所得到的颜色,反弹后的光线还会再去影响到周边的物体,如同白色的桌面上摆着红色的物体,物体周围会有些微的红色。 而Indirect Lighting Cache还有一种功能就是提供动态物件能获得间接光的资讯,例如像是当角色靠近一面红色墙壁时,会有些微的红光反映在角色身上。 在UE4里面建构光照后会自动产生Indirect Lighting Cache,可以从编辑画面的Show > Visualize > volume light sample显示当前Indirect Lighting Cache的情形。 显示间接光照缓存 没有间接光照缓存的情况,角色不会受到静态灯光的颜色影响 有间接光照缓存时,角色即会受到静态灯光影响 可以从上图看到场景中那些小正方形就是间接光照缓存的颜色,周围的物件会受到靠近的间接光照颜色影响。 Lightmass Importance Volume(重要光照范围) 官方文档 http://api.unrealengine.com/INT/Engine/Rendering/LightingAndShadows/Lightmass/Basics/index.html 在建构光照贴图时,若场景中没有给予Lightmass Importance Volume,会对整个场景做间接光照的采样,产生Indirect Lighting Cache,这对大型游戏场景是相当的浪费,像是游戏角色到不了的中、远景不需要产生Indirect Lighting Cache,这时候就可以在场景中置入Lightmass Importance Volume,指定特定区域内才会产生Indirect Lighting Cache,节省不少建构光照的时间。 Modes视窗中的Volumes页签找到Lightmass Importance Volume 拖曳至场景后,调整Scale直到包覆特定区域即可 建构光照后会在Lightmass Importance Volume区域内看到产生的间接光照缓存

Continue reading

示例: void UMyUserWidget::NativeConstruct() { Super::NativeConstruct(); auto MyCanvas = WidgetTree->ConstructWidget<UCanvasPanel>(UCanvasPanel::StaticClass()); if(MyCanvas) { auto MyButton = WidgetTree->ConstructWidget<UButton>(UButton::StaticClass()); MyCanvas->AddChild(MyButton); WidgetTree->RootWidget = MyCanvas; } } 其他参考 Create widget in pure C++ https://answers.unrealengine.com/questions/470481/create-widget-in-pure-c.html?sort=oldest

Continue reading

The layers are, Player Screen + Player Screen Widgets Viewport + Touch Interface + Viewport Widgets 其他参考 Create widget in pure C++ https://answers.unrealengine.com/questions/470481/create-widget-in-pure-c.html?sort=oldest

Continue reading

keywords:UE4、BindUFunction、BindUObject、Pass Arguments、Variable 示例1: void UMyClass::FunctionWithVar(const FString& MyVar, TFunction<void(const FString&)> InFunction) { MyLambdaHandle = OnMyDelegate.BindStatic([MyVar](TFunction<void(const FString&)> callback) {callback(MyVar);}, InFunction); // TODO: You have to track MyLambdaHandle to be able to unregister it when needed } https://answers.unrealengine.com/questions/715835/bindufunction-with-variable-capture-in-c.html 示例2: 使用固定参数绑定 DECLARE_DELEGATE(RefreshOne); class MyClass { public: MyClass() { one.BindRaw(this, &MyClass::MyFunction, (uint8)1); } void MyFunction(uint8 Val) { // Whatever } void Invoke() { one.Execute(); // Will call this->MyFunction((uint8)1); } private: RefreshOne one; }; 使用动态参数绑定

Continue reading

原文:https://blog.csdn.net/tommy_wxie/article/details/12841735 1.将ndk中的arm-linux-androideabi-addr2line可执行文件的路径加入配置文件~/.bashrc中,例如: export PATH=$PATH:~/dlna/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin 2.使配置生效: source ~/.bashrc 3.使用工具。例如: arm-linux-androideabi-addr2line -C -f -e ~/workspace/DLNA/libs/armeabi/libctrlpt.so 0003deb4 其中,0003deb4为堆栈信息中pc的值。 android应用崩溃的调试方法 有两种方法可以分析 crash 的堆栈信息 1,google提供了一个python脚本,可以从 https://github.com/maxme/android-ndk-stacktrace-analyzer 下载这个python脚本,然后使用 adb logcat -d > logfile 导出 crash 的log,使用 arm-eabi-objdump 位于build/prebuilt/linux-x86/arm-eabi-4.2.1/bin下面把so或exe转换成汇编代码,如:arm-eabi-objdump -S mylib.so > mylib.asm,使用脚本 python parse_stack.py <asm-file> <logcat-file> 2,直接使用NDK下面的arm-linux-androideabi-addr2line (D:\android-ndk-r8\toolchains\arm-linux- androideabi-4.4.3\prebuilt\windows\bin\arm-linux-androideabi-addr2line.exe) 例如: arm-linux-androideabi-addr2line -C -f -e libxxx.so 0x#####(address) 出现 ??:0 , 没法展示源代码行数的问题 在Android.mk 文件中: LOCAL_CFLAGS := -D__STDC_CONSTANT_MACROS -Wl,-Map=test.map -g 补充2个编译参数 -Wl,-Map=test.map -g .

Continue reading

Paper 2D Sprites http://api.unrealengine.com/CHN/Engine/Paper2D/Sprites/index.html Paper 2D Import Options http://api.unrealengine.com/CHN/Engine/Paper2D/Importing/index.html VaTexAtlas:一款支持TexturePacker json数据导入UE4插件 https://github.com/ufna/VaTexAtlas UMG Animation https://docs.unrealengine.com/latest/INT/Engine/UMG/UserGuide/Animation/index.html

Continue reading

1,准备Mesh 准备一个现成模型资源。这里从Blender中提取现成的猴头模型 按住Shift + A -》 Mesh -》 Monkey 自动生成UV 然后执行Smooth 然后增加细分级别 最终效果: 2,导出FBX File -》 Export -》 FBX 导出选项中勾选Select Objects。 3,导入SP File -》 New,打开创建工程界面,设置Mesh的FBX文件位置(刚刚导出的FBX),其他不用修改。 因为当前示例中的AO、Normal等等贴图我们会在SP中自动生成,所以这里“Import Mesh NOrmal Map …”中可以不添加任何东西,如果你的模型已经有现成的贴图,可以在这里Add。 点击OK,在SP中可以看到默认贴图和UV 4,烘焙贴图 在Layer面板中,点击 Bake Textures,打开烘焙选项面板 不勾选ID,并设置贴图大小 点击Bake DefaultMaterial Textures,稍等一会后,就可以在Project中看到6张贴图 5,编辑材质 打开Smart Materials 选一个要想材质,这里我选择的是Steel Rust Surface 然后拖拽到Layer面板钟 立即可以看到效果 同时,在TextureSet Settings中可以看到自动帮我们设置好了前面烘焙好的各种贴图 SP提供的智能材质很多,这些材质帮你省去了手动调参数的步骤,相当于材质模版。材质里面的具体参数我没深究过,所以我也不详细讲各种参数的使用了,这些参数具体可以看SP官方视频或文档。

Continue reading

keywords:C++操作控制UMG动画、Widget Animation 示例代码: void UMyMenuWidget::AssignAnimations() { UProperty* prop = GetClass()->PropertyLink; // Run through all properties of this class to find any widget animations while( prop != nullptr ) { // Only interested in object properties if( prop->GetClass() == UObjectProperty::StaticClass() ) { UObjectProperty* objectProp = Cast<UObjectProperty>(prop); // Only want the properties that are widget animations if( objectProp->PropertyClass == UWidgetAnimation::StaticClass() ) { UObject* object = objectProp->GetObjectPropertyValue_InContainer( this ); UWidgetAnimation* widgetAnim = Cast<UWidgetAnimation>(object); if( widgetAnim !

Continue reading

原文 http://ios.tedu.cn/data/notes/276329.html 问题一 ssh_exchange_identification: Connection closed by remote hostrsync: connection unexpectedly closed (0 bytes received so far) [sender]rsync error: error in rsync protocol data stream (code 12) at /home/lapo/packaging/rsync-3.0.4-1/src/rsync-3.0.4/io.c(632) [sender=3.0.4] 解决方法 首先保证远程机器 OSX 上的 ssh 并发数配置足够,使用命令查看 grep MaxStartups /etc/ssh/sshd_config 一般输出如下格式 10/20/30 意思是连接达到10之后以20%的概率拒绝新连接直到30为止,可以根据需求调大第一个值并重启 其次保证 RemoteToolChainPrivate.key 文件存在于 C:\Users\用户名\AppData\Roaming\Unreal Engine\UnrealBuildTool\SSHKeys\远程机器地址\mac 文件夹下,没有的话需要在 Edit -> Project Settings… -> Platforms -> iOS -> Build 中进行配置,配置好远程 OSX 机器的地址,用户名,然后点击 Generate SSH Key 生成 问题二 编译失败,出现如下错误

Continue reading

UE4联机烘焙出现问题和解决方式 https://blog.csdn.net/shenmifangke/article/details/78394872 UE4联机编译光照 http://www.cnblogs.com/ghl_carmack/p/8580617.html 如果还是只有在本地编译那么可能会是下列问题造成的: 1、 任务太小,不值得联机编译。 2、 没有打开File And Printer Sharing。 3、 如果是Win10的话切换为专用网络,Win7切换为工作网络或者家庭网络。主要是为了确保已经开启了File And Printer Sharing。 4、 Swarm agent waiting for remotes to become available。一种情况下是它也在自己编译,另外可能就是没有打开File And Printer Sharing。 5、 其它的问题请参考Swarm Agent Troubleshooting

Continue reading

iOS版本材质丢失或马赛克的问题(Material Mosaic) 问题现象: 在Mac上以ios渲染模式运行,材质丢失,打包到真机上运行,材质变成马赛克。 解决办法: 打开材质蓝图,勾选Use Full Precision。 参考自: https://answers.unrealengine.com/questions/211323/layered-landscape-material-on-mobile.html

Continue reading

添加头文件目录 Header Search Paths对应系统或者第三方库的头文件;#include <> User Header Search Paths 对应用户自己代码的头文件;#include “” 添加静态库依赖 设置证书签名 https://stackoverflow.com/questions/34346436/xcode-7-2-no-matching-provisioning-profiles-found 清除缓存 点击xcode偏好设置->Locations->Derived Data,点击箭头定位到目标文件夹,将此文件夹清空并清空回收站,再重新编译即可。 有时候这个错误可以通过清理缓存解决: Command /usr/bin/codesign failed with exit code 1 编译静态库 http://blog.csdn.net/weidfyr/article/details/50590693 如果用模拟器版本静态库去链接真机版本,可能会出现的错误: file was built for archive which is not the architecture being linked (arm64) 解决办法:静态库编译成真机版本

Continue reading

Author's picture

Neil Wang

久长唯有品格

TechArtist

Yichang·Hubei