自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 资源 (1)
  • 收藏
  • 关注

原创 UE4尝试用C++生成一个最简单的StaticMesh

目标通常,一个StaticMesh资源由一个模型文件(如fbx)导入得到。不过如果需要和某种程序化生成工具(如Houdini)交互,则需要用C++代码从特定数据中读取顶点数据然后生成StaticMesh。我想了解下这个过程。我发现基础的步骤并不复杂,概括讲:生成一个空的UStaticMesh创建一个FRawMesh向UStaticMesh中添加一个FStaticMeshSourceModel,然后调用SaveRawMesh接口来将FRawMesh保存进去。调用UStaticMesh的Build

2020-07-30 23:59:03 10247 12

原创 UE4指定一个Asset的编辑器界面

目标一个Asset指内容浏览器中的一个资源,双击它将打开对应的编辑器。例如:“材质”将对应“材质编辑器”,“蓝图”将对应“蓝图编辑器”。假如一个Asset没有特别定义编辑器,那么双击它会默认打开细节面板以编辑UProperty。如果想要自定义一个Asset的编辑器,则需要:大大大大大大本篇的目标是新建一个插件,在其中创建一个自定义的Asset,然后定义其编辑器界面。0. 创建插件用空白为模板创建插件,名字取为TestAssetEditorPlg1.创建一个Asset一个Asset,本质

2020-07-29 23:48:11 3837

原创 观察Niagara特效系统中的基本概念

目标在之前的博客中我观察了Cascade粒子系统中的基本概念,相较于前者,Niagara特效系统拥有更多的概念。但考虑到Niagara的主要目标就是:“让美术师可以直接全权掌控效果而不必求助于程序员”,因此复杂度更高是很自然的。本篇的目标是通过:参考《Niagara关键概念 | Unreal Engine Documentation》等官方文档、简单观察源代码、进行些简单的实践,来对Niagara特效系统中的以下概念有更深的了解:Niagara系统Niagara系统“Niagara系统” 是一

2020-07-26 23:55:19 3353

原创 【UE4源代码观察】学习队列模板TQueue

队列“队列”是一个基础的数据结构,UE4对其有模板实现:TQueue,它在\Engine\Source\Runtime\Core\Public\Containers\Queue.h中定义。本篇记录了对它源码的观察。大体上,可以看到一个队列结构的教科书式的实现。但是代码实现上还牵扯到一些我还不熟悉的知识,因此我也将其记录下来。TQueue/** * Template for queues. * * This template implements an unbounded non-intrusi

2020-07-24 00:06:57 4156 5

原创 学习C++右值引用

值类型每一个C++表达式都有一个 “值类型”——它是编译器在表达式计算过程中创建、复制和移动临时对象时必须遵循的规则的基础。例如:“=”左边的值就是 “左值(lvalue)”,计算时其地址发挥了作用。“=”右边的值就是 “右值(rvalue)”,计算时其数据发挥了作用。除此之外还有其他的 “值类型”,他们之间的关系如下:详见Value Categories: Lvalues and Rvalues (C++) | Microsoft Docs左值引用在 “右值引用” 出现之前,只有一种“

2020-07-23 00:25:58 320

原创 实现一个最基础的智能指针

“智能指针”想要解决的问题假设,现在有一个对象(为了便于测试,在其构造函数与析构函数中输出信息):class TestObject //测试用对象{public: //构造函数 TestObject() { cout << "构造TestObject" << endl; } //析构函数 ~TestObject() { cout << "析构TestObject" << endl; } //测试函数 void TestFun

2020-07-19 23:40:07 346

原创 讨论如何在UE4蓝图中改变Houdini参数

问题假如一个HDA有参数暴露:那么将其导入到UE4,并拖入到场景中之后,就可以在它创建出的Actor的细节面板上找到参数:然而问题是,这些Houdini参数是无法在蓝图中访问的:这并不奇怪,因为对于UE4中一般的Actor或者Component,他们的参数会用UPROPERTY()标注。随后,UE4的反射机制会得到这些参数,并在细节面板中为其生成界面。而如果UPROPERTY()指明了这个参数可以被蓝图调用,则蓝图中便能够访问到。然而,对于AHoudiniAssetActor并不是这样,HD

2020-07-17 23:55:29 1989 3

原创 UE4使用FScopeLock做线程锁

多线程访问公共资源问题当设计多线程的程序时一个需要注意的是:如果一个资源能被多个线程所访问,那在某种情况下可能会出问题。对于UE4来说,它有自己的机制来处理这个问题。下面,我将先在UE4中创建一个会出问题的例子,接着尝试用UE4提供的机制来处理。创建一个实验例子最方便的实验途径,就是创建插件了。以编辑器模式为模板创建插件,然后命名为testThreadLockTestRunnable.h声明了一个FRunnable。这个文件放在插件目录\Plugins\testThreadLock\Sour

2020-07-14 13:07:39 5432

原创 C++实验在基类的构造函数中调用被子类重载的虚函数

子类重载虚函数在C++中,子类可以重载基类的虚函数,这是C++语法中一个重要的多态。例如,ClassB继承自ClassA,且重载了基类的一个函数,则被调用时将会触发重载的版本:#include<iostream>using namespace std;class ClassA{public: virtual void TestFunc() { cout << "ClassA::TestFunc" << endl; }};class C

2020-07-13 18:58:26 1591 3

原创 学习MaximGumin的“波函数坍缩”算法用来自动生成与输入有相似性的位图

目标 Maxim Gumin 在2016年开发并开源的算法(MIT许可)步骤:1.翻译介绍2.研究源代码3.搞到Unity中,然后尝试自己用一个新图案翻译先从效果上看,这个算法可以生成与输入位图具有局部相似性的结果:这里 “局部相似性” 的具体含义是:对于结果中任意一个N乘N尺寸的图案,都能在输入中找到。N乘N尺寸图案在输入中的分布概率,应该和结果中的N乘N尺寸图案的分布概率是相近的,尽管后者图案的总数更多。换句话说:在“结果”中遇到某一个特定图案的概率,应该趋近于在“输入”中遇到这

2020-07-12 23:14:39 4985

原创 试用UE4新的地形编辑功能:地形编辑层与Landmass中的地形蓝图笔刷

目标在最近虚幻引擎公众号推的一篇文章中有一个《在虚幻引擎中构建自然环境》的视频。它运用了引擎的一些新功能,快速、程序化地生成了一个场景:内容包括下面几个方面:地形蓝图笔刷展示了使用地形蓝图笔刷快速程序化生成山脉的高度与权重层。地形的分层编辑展示了地形编辑层功能,可以使编辑分层。运行时虚拟纹理使用运行时虚拟纹理用水面mesh计算出“潮湿”信息,改变地形与模型材质上的信息4.GrassType(这个功能是以前的老功能,只是和现有的新功能有更有趣的交互)程序化植被。(是另一个插件)

2020-07-07 23:37:51 12794 6

原创 学习UE4动画蓝图:实现双脚贴地

目标在上一篇博客《学习UE4动画蓝图:配置脚部IK》中,IK功能解决了“脚部陷入地下”的问题,但是还是有“脚部悬空”的问题。《[UE4蓝图]虚幻4中完整实现脚部IK(二)(完结) - 知乎》这篇文章提出可以将根骨骼向下偏移来解决这个问题,我决定使用这个思路,下面是我的实践。1.偏移根骨骼1.1 动画蓝图的 AnimGraph 中添加对根骨骼的偏移添加一个变换(修改)骨骼节点:Bone to Modify 选择根骨骼rootTranslation Mode 选择Add to Existing,

2020-07-05 16:37:24 2646

原创 学习UE4动画蓝图:配置脚部IK

目标设想,当角色所在的地面平坦时,双脚和地面贴合的高度,正是胶囊体与地面接触的高度,此时没有视觉上的问题。然而,当角色所在的地面不平坦时,双脚各自所在的位置,和胶囊体与地面接触的高度是不一样的,此时就会出现“脚部陷入地下”或者“脚部悬空”的视觉问题。而IK是解决这个问题的一个途径。本篇主要参考了官方的“内容示例”:在上一篇博客中《学习UE4动画蓝图:配置手部IK》中,我已经体验了IK功能并将其配置到手部,使得角色挥拳的时候拳头会被“墙”阻挡而不至于穿墙。对于现在脚部的处理,思路上很相似:都是使用射线

2020-07-05 13:08:43 2719

原创 学习Cascade粒子系统:观察内容示例所展示的特性

目标内容示例中有展示粒子特效的场景:目标是观察场景中几个范例想要展示的是粒子系统的哪个功能,并尝试了解如何操作。需要注意的是:由于并没有实际用资源复现一遍,所以很可能有疏漏之处,即有些效果的实现还需要做其他操作。本篇的目标并不是完全学会操作实现这些功能,而是使自己对这些功能有个大致的印象,我相信这有助于后续对更复杂粒子系统的学习。1.1 GPU粒子展示了GPU粒子可以支持更多的粒子数目。特性详见《GPUSprites类型数据 | Unreal Engine Documentation》概

2020-07-04 15:13:32 1080

原创 观察Cascade粒子系统中的基本概念

目标参考《粒子系统的关键概念 | Unreal Engine Documentation》以及UE4源代码,尽可能对Cascade粒子系统中的以下概念有更深的了解:粒子系统(ParticleSystem)粒子发射器(ParticleEmitter)粒子系统模块(ParticleModule)发射器Actor1. 粒子系统(ParticleSystem)“粒子系统” 是一种资源,可以直接在内容浏览器中被创建:双击这个资源可以进入Cascade粒子编辑器。源代码中的定义和注释如下:/*

2020-07-04 00:10:26 1146

原创 学习UE4动画蓝图:配置手部IK

目标1. 确定启用IK的骨骼名,添加插槽首先,打开骨架资源upperarm_r-lowerarm_r-hand_r是要启用IK的骨骼链。在lowerarm_r中添加插槽RightLowerArmSocket,在hand_r中添加插槽RightHandSocket2. 动画蓝图的 AnimGraph1. 创建“双骨骼IK节点”其中IKBone是骨骼链末端的骨骼,是hand_r。2. 确定合适的 JointTargetLocation双骨骼IK节点有一个参数是需要事先测试得出的,为此

2020-07-02 21:35:21 5411 1

GetHRESULTMessage(WindowsSDK10.0.19041.0).txt

将HRESULT转变为字符串。 生成的方式见博客 https://blog.csdn.net/u013412391/article/details/108861088

2020-09-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除