产品设计

SAP WebIDE编辑器的主题设置

我的本地Eclipse和sublime Text等编辑器,为了保护视力都设置的是黑色或者豆沙绿的背景,而SAP WebIDE JavaScript编辑器默认的背景色还是纯白色,看久了眼睛很累: 这个背景色其实也是可以更换的:WebIDE里选择Preferences 把theme改成Tommorow Night Blue(dark)即可: 要获取更多Jerry的原创文章,请关注公众号”汪子熙”:

UE4静态光,固定光,动态光的区别(待更新)

区别 官网链接 静态光 固定光 动态光 由于静态灯仅使用光照贴图,因此在游戏玩法之前将其阴影烘焙。这意味着它们不能影响移动(动态)对象,在游戏过程中不会以任何方式改变,正如我们在示例中看到的那样。但是,当照明也是静态的对象时,它们能够产生区域(接触)阴影。这是通过调整Source Radius属性来完成的。但是,应该注意的是,接收柔和阴影的表面可能必须正确设置其光照贴图分辨率才能使阴影看起来很好。 静态灯的主要用途是用于移动平台上的低功耗设备。 固定灯是用于保持在一个位置的灯,但能够以其他方式改变,例如亮度和颜色。这是他们与静态灯不同的主要方式,静态灯在游戏过程中不会以任何方式改变。但是,应该注意,运行时亮度的变化只会影响直接照明。间接(反弹)照明,因为它是由Lightmass预先计算的,不会改变。 在三种光线移动中,固定光源往往具有最高质量,中等可变性和中等性能成本。 固定灯的所有间接照明和阴影都存储在Lightmap中。直接阴影存储在Shadowmap中。这些灯使用了距离场阴影,这意味着即使在点亮的物体上具有相当低的光照贴图分辨率,它们的阴影也可以保持清晰。 可移动灯光投射出完全动态的光线和阴影,可以改变位置,旋转,颜色,亮度,衰减,半径以及几乎所有其他属性。他们投射的光线都没有被烘焙到光照贴图中,目前它们不能有任何间接照明。 固定灯和静态光一样将其间接照明存储在光照贴图中。间接照明不能在运行时通过改变亮度和颜色来改变,就像直接照明一样。这意味着即使灯具有未选中的Visible,其间接照明也将在灯光构建期间放入灯光图中。灯光上的IndirectLightingIntensity可用于在照明构建时缩放或禁用给定灯光的间接照明。 然而,有一个名为IndirectLightingIntensity的后期处理音量设置,它允许您缩放灯光图对所有灯光的贡献,可以在运行时从蓝图中更改。 动态阴影 固定光 光源的实时阴影具有主要的性能成本。具有阴影的完全动态光通常比无阴影的动态光花费二十倍(20倍)渲染。出于这个原因,固定灯能够在静态物体上产生静态阴影,但有一些限制。 动态对象(如静态网格组件和具有可移动设置的SkeletalMeshComponents)必须从距离场阴影映射集成到静态阴影中。这是通过每个物体的阴影来完成的。每个可移动的物体从静止的光中产生两个动态阴影:一个处理投射到物体上的静态世界的阴影,一个处理投射到世界上的物体的阴影。在这种设置下,固定光源的唯一阴影成本来自它所影响的动态对象。这意味着,根据有多少动态对象,成本可以从很小到很大。有了足够多的动态对象,使用可移动的光会更有效。 方向固定光(Directional Stationary Lights)的特殊之处在于,它们通过级联阴影映射支持整个场景的阴影,同时也支持静态阴影。这是非常有用的水平与许多动画树叶;你想要在玩家周围有移动的阴影,但又不想为覆盖大范围的视野而付出很多级联的代价。动态阴影在距离上逐渐消失为静态阴影,因此过渡常常难以区分。要设置此设置,只需更改动态阴影距离静止光的方向光静止为您希望褪色发生的范围。 即使在方向灯上使用级联阴影映射,可移动组件仍然会创建PerObject阴影。这种行为在动态阴影距离较小的情况下是有用的,但是在较大的距离下会产生不必要的开销。若要禁用PerObject阴影并保存性能,请禁用对灯光上的可移动对象使用Inset阴影。 动态光 动态灯光设置投阴影使用整个场景的动态阴影,这有一个显着的性能成本。性能成本主要来自于光影响的网格数,以及这些网格的三角形计数。这意味着投射大半径可移动光的阴影成本将是小半径可移动光成本的许多倍。 动态光lightmap缓存 当一个点或聚光灯不移动时,我们可以从阴影映射中存储该光并在下一帧中重用它。这使得阴影投射可移动的点和聚光灯在环境通常不移动的游戏中更便宜。阴影贴图缓存应该是任何UE4项目中自动启用的功能。要检查并查看使用阴影贴图缓存获得的性能,可以通过执行以下操作启用和禁用阴影贴图缓存: 选择要在项目级别中投射动态阴影的所有灯光。 按Backtick(`)键打开控制台并键入Stat Shadowrendering以查看动态阴影的当前成本。 再次按Backtick(`)键打开控制台并键入r.Shadow.CacheWholeSceneShadows 0以禁用动态阴影缓存 请务必记下CallCount和InclusiveAug部分中的数字 现在再次按Backtick键打开控制台并键入r.Shadow.CacheWholeSceneShadows 1以重新启用阴影缓存。如果您比较CallCount和InclusiveAug数字,您可以看到此功能对动态阴影性能的影响。 虽然阴影映射缓存可以降低在UE4项目中使用动态阴影的成本,但是如果与不支持的特性一起使用,则存在一些限制,可能会导致呈现构件。 默认情况下,缓存只能在对象满足以下要求时才会发生: Primitives被设置为静态或固定。 在水平面上使用的材料不使用世界位置偏移量。 光需要是一个点或聚光灯,移动设置为可移动,并启用阴影投射。 灯光必须保持在一个位置。 使用动画镶嵌或像素深度偏移的材质在缓存阴影深度时可能会导致伪影。

Levels – 在UE4中创建高质量植被

一篇翻译文章,介绍了一些制作植被的思路和方法,如何在UE4中创建写实的植被;部分段落为概括翻译或略过,以下为发表在知乎的链接: https://zhuanlan.zhihu.com/p/56529198

UX——[Universal Style]

基于Microsoft通用设计风格(UWP风格)。 官网:https://docs.microsoft.com/zh-cn/windows/uwp/design/style/color Theme:主题(亮色暗色、系统自动选择) foreground:前景颜色 background:背景颜色 accent:强调色 color:https://doc.qt.io/qt-5/qtquickcontrols2-universal.html#pre-defined-universal-colors 视觉效果:

SecureCRT_16750正版破解注册机

一个好用的连接工具, 小伙伴给的, 分享了. 链接: https://pan.baidu.com/s/1vfyGpyU7B10sLHmp16AdMA 提取码: 221r 压缩包里的 keygen.exe 是注册机, 添加到 Windows Defender 白名单里, 不然会被杀掉. 我的是 win10, 实测是会被杀的. 解压缩后先安装, 然后把 Crack 包里的两个文件拷到安装目录里. 打开 keygen.exe, 点击 Path. 在打开的窗口选择 SecureCRT 的程序打开. 窗口自动关闭后会弹出另一个窗口. 接着在打开的窗口选择 LicenseHelper.exe 再打开. 然后就得到 License 的信息了. 这个窗口不要关. 打开软件后注册吧. 大概就是打开软件后在 Help 里选择 Enter License Data 然后点击下一步, 在这个窗口填入上面获取到 License 的那个窗口的信息即可.

pytorch ShuffleNetV2 知识整理

算法提出是从这里引出的: https://blog.csdn.net/u012426298/article/details/80688080 各种算法比较: https://blog.csdn.net/sun_28/article/details/78170878 pytorch实现,有torch转caffe: https://github.com/miaow1988/ShuffleNet_V2_pytorch_caffe https://github.com/Randl/ShuffleNetV2-pytorch 这个有测试速度,cpu 416 100ms 改变通道数:1:改为了96通道后,速度变成了200ms了,与mobilenetv2就差不多了 self.num_of_channels = {0.5: [24, 48, 96, 192, 1024], 1: [96, 116, 232, 464, 1024], 1.5: [24, 176, 352, 704, 1024], 2: [24, 244, 488, 976, 2048]} https://github.com/jacke121/ShuffleNetV2-pytorch https://github.com/timctho/shufflenet-v2-pytorch/blob/master/net.py 这有测试 https://github.com/ZHANG-SHI-CHANG/ShuffleNetV2-Pytorch/blob/master/ShuffleNetV2.py https://github.com/xingmimfl/pytorch_ShuffleNet_ShuffleNetV2/blob/master/shufflenet_v2.py https://github.com/Bugdragon/ShuffleNet_v2_PyTorch/blob/master/ShuffleNetv2.py https://github.com/Randl/ShuffleNetV2-pytorch

UE4材质中的纹理合成

纹理合成的需求 UE4材质常常需要合成不同的纹理。常用的合成运算,有好几种选择,下面单独介绍。 下面这两种图片,是合成之前的图片。 UE4材质中的乘法 乘法是最常用的合成运算。 下面是这两张图用乘法合成的效果。 乘法合成很简单,取值范围在运算之后仍然是0~1。 但是合成之后会变暗,这是因为两个0~1的数相乘,会变得更小,所以更暗。下图是材质节点。 UE4材质中的加法 这是加法合成的效果。 两个0~1之间的数相加,范围是0~2,所以需要再除以2。下图是材质节点。 但是为什么整体会变亮?其实不只是变亮,而是亮度趋向于平均值。亮的地方更暗,暗的地方更亮。 这就是均值运算造成的结果。 UE4材质中的除法 下图是合成的效果。 下图是材质节点。 其实除法一般不用于纹理合成,原因很简单,两个0~1之间的数相除之后,其取值范围变化非常大。可能会有很多像素点的值直接超过1,表现为白色。合成之后的结果也证明了这一点。 另外,哪个除以哪个,效果也不同。下图是交换之后的结果。 UE4材质中的减法 同样的,减法不满足交换律。下图是减法合成的效果。 下图为材质节点。 两个0~1之间的数相减,其取值范围为-1~1,而小于0的颜色按照0来算,所以很多像素点直接就是黑色。 你也可以进行先加1再除以2的运算,但是效果。。并不好,下图就是。 UE4材质中的插值(Lerp) 插值可以取得更多样的效果,因为插值引入了第三个参数。 下图是材质节点。 而Lerp的Alpha参数分别为0.5、0.2、0.8的效果。 可以看到,插值可以很好地控制合成效果。 而插值的第三个参数,可以使用一个灰度图。下图就是用一张黑白相间的灰度图合成的效果。 原文地址:原文地址 本文首发于翰者学堂

虚幻4常见问题

问题1: 问题描述:UE4找不到游戏模块 UE4 the game module’fps’could not be found 解决方案: 重新编译一遍C++项目,通过C++项目启动UE4生成游戏模块,为了防止生成失效可以启动uproject文件再关闭C++启动项目 问题2: 问题描述:打包失败,游戏模块dll路径拒绝访问,代码重新生成失败 解决方案: 设置代码项目为启动端,只点生成,打包不要用uproject启动打包,用C++项目启动打包就不会出现问题了 问题3: 问题描述:int和int32有区别吗? 解决方案: 并没有区别,UE4命名规范用的int32 问题4 问题描述:UE4无法新建C++项目 解决方案: 1.检测新建项目路径是否有中文 2.UE4版本脱离了启动端是离线版本,请使用在线版本开发C++项目 问题5: 问题描述:UE4开发安卓程序需要什么环境 解决方案: 需要安卓环境,分别是SDK、NDK、ANT、JDK 问题6: 问题描述:UE4插件安装容易发生打包失败 解决方案:尽量不要使用插件 问题7: 问题描述:IOS开发,蓝图可以打包,C++不能 解决方案:一般都是xcode的锅,可以尝试降低xcode版本 问题8: 问题描述:UE4 IOS项目开发远程打包失败 解决方案:检测xcode有没有设置为默认指定路径 命令:sudo xcode-select -s 你的Xcode安装路径/Contents/Developer 问题8.1: 问题描述:Unable to clean target while hot-reloading. Close the editor and try again. 解决方案:删除save文件重新生成 问题9: 问题描述:iOS 关闭强制使用https 解决方案:IOS->Extra PList Data写入NSAppTransportSecurity NSAllowsArbitraryLoads 问题10: 问题描述:虚幻报错LogPlayLevel: Compiling with non-standard Xcode (xcode-select): /Library/Developer/CommandLineTools/

UE4为组件Component注册事件时没有效果的问题解决

按照UE4的教程: .h文件: // 在 Project Settings 的 Description 页面填入版权声明。 #pragma once #include "GameFramework/Actor.h" #include "FPSProjectile.generated.h" UCLASS() class FPSPROJECT_API AFPSProjectile : public AActor { GENERATED_BODY() public: // 设置该 actor 属性的默认值 AFPSProjectile(); // 游戏开始时或生成时调用 virtual void BeginPlay() override; // 每帧调用 virtual void Tick( float DeltaSeconds ) override; // 球体碰撞组件。 UPROPERTY(VisibleDefaultsOnly, Category = Projectile) USphereComponent* CollisionComponent; // 发射物运动组件。 UPROPERTY(VisibleAnywhere, Category = Movement) UProjectileMovementComponent* ProjectileMovementComponent; // 在发射方向上设置发射物初速度的函数。 void FireInDirection(const FVector& ShootDirection); // 发射物命中物体时调用的函数。 void OnHit(UPrimitiveComponent* HitComponent, class AActor* OtherActor, class UPrimitiveComponent* OtherComponent, FVector NormalImpulse, const FHitResult& Hit); }; cpp文件: