自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【UE4】PMC程序化生成戈德堡多面体详解(六边形星球)

游戏实机录屏【魔方超新星】30天独立开发PCG Minigame《盖亚计划》作品展示,尚有不足,大佬轻喷目录游戏实机录屏一、简介二、设计思路2.1 Disco Ball2.2 Fibonacci Sphere2.3 Goldberg Polyhedron2.3.1 细分+对偶(最终方案)2.3.2 对偶+截角(更优)三、参考文献一、简介在制作Minigame初期,游戏风格想模仿《文明6》与《Polygonal Planet Proje...

2021-07-16 17:43:44 4688 1

原创 【图形学】后处理下的HDR、颜色分级、颜色映射与颜色空间

目录一、Color Grading1.1概念1.2 内置在Unity/UE4二、HDR、LDR与VDR2.1 LDR2.2 HDR2.3 VDR三、Tone Mapping3.1 概念3.2 算法发展史3.3 ACES算法四、常见的颜色空间标准参考一、Color Grading1.1概念Color Grading(颜色分级、颜色校正)俗称调色,是游戏后期处理中最常见也是必要的一个环节。它能够改变或矫正最终图像的颜色和亮度,你可以把它想象...

2020-06-03 15:42:30 7350

原创 【UE4+Houdini+Bridge】程序化地形生成和野外植被撒点工具制作思路

附上B站:最终效果图HDA可调参数展示二、制作步骤这里仅将最终的制作思路作讲解,期间零碎的测试不再赘述。2.1 Houdini制作步骤2.1.1 地形创建通过学习与研究,我决定采用擅长制作程序化地形的Height Field节点,在该领域花费了较多的时间,首先创建一个默认大小的Height Field高度图区域,大小刚好是题目要求的1k x 1k。Grid Spacing网格上两点之间的距离,相当于这块高度图的分辨率大小,设置为2。使用Height Field No.

2020-05-19 15:52:02 10583 6

原创 【OpenGL C++ UE4】获取模型顶点及面索引数据,并优化存储结构供UE4绘制

目录一、功能需求二、成果三、环境配置四、详细步骤4.1Max制作三棱锥并处理4.2 核心代码4.2.1 传入结构体数据4.2.2 顶点去重、更新索引4.2.3 输出本地CSV文件一、功能需求想必你肯定会问我一个问题,UE4直接导入模型不好么?哈哈,前提是在做毕设时,导师提供的只有顶点与面索引数据,没有模型。下文详细介绍了毕设开发中的难点,涉及三...

2020-02-24 17:44:53 5624

原创 【UE4 C++】由点面数据,批量绘制ProceduralMesh并转化为StaticMesh资产

创建继承自Blueprint Function Library类的C++文件

2020-02-23 23:01:10 10872 17

原创 【Opengl C++】基于二叉树与叶子链表的二维矩形装箱算法

Github获取源码:https://github.com/ColorGalaxy/Bin-Paking-Algorithm基于二叉树与叶子链表算法思维对输入的矩形数据进行动态排版,缩进式树状打印与Opengl绘制显示排版结果。实现了将全部的矩形紧凑封装在一个近似正方形的空间中,提高了空间利用率,能达到90%以上,减少了内存资源的浪费。配置:简单的使用了Glut库进行Opengl绘制...

2020-02-21 00:15:49 2352 3

原创 【UE4 附源工程】GGJ 2020极限48小时开发的逆向解谜游戏

GGJ 2020的主题是Repair我是团队队长研一在读栗子,负责程序、搭建整体逻辑并对所有同伴制作的资源在UE4中进行整合。GGJ:官方展示作品地址B站:游戏录屏与玩法解说Github源工程下载:https://github.com/ColorGalaxy/UE4-GGJ2020-SLUOS-KRAD游戏简介:《SLUOS KRAD》是一款逆向解谜游戏,你将扮演...

2020-02-21 00:08:47 1104

原创 【UE4 附源工程】VR直升机模拟飞行与轰炸制作流程

游戏简介:课程设计作品:基于UE4 4.23的VR直升机飞行真实模拟与导弹发射与爆炸仿真通过WASD控制水平方向移动,空格与Ctrl键控制垂直方向移动B站录屏展示:https://www.bilibili.com/video/av88606797Github源工程下载:https://github.com/ColorGalaxy/UE4-VR-Helicopter-Bomb-Sim...

2020-02-13 16:20:15 1689 1

原创 【Houdini】使用Labs Auto UV实现对“程序化建模围栏”动态自动展UV

目录程序化生成栏杆(Procedual Generation Railing)的动态自动展UV效果一、安装Game Development Toolset二、创建GameDev Auto UV展开UV三、Auto UV的四种方法与参数含义程序化生成栏杆(Procedual Generation Railing)的动态自动展UV效果Auto UV采用Auto Seam方法...

2019-12-02 22:36:33 2829 6

原创 【Houdini】入门教程、快捷键与节点含义相关学习笔记(图)

目录个人关于Houdini的一些看法快捷键视图窗口节点窗口参数窗口节点含义与使用个人关于Houdini的一些看法业内一直传言,Houdini的学习门槛非常高,更是包含建模、材质、渲染、动画、粒子、烟火、流体、破碎等等各个系统庞大繁杂。同时经验与思路非常重要,就算死记硬背了各个节点的含义,也没法很好的驾驭它,就像弹钢琴知道每个键的音和位置,脑子里还得有乐谱才能弹奏好...

2019-12-02 15:01:13 14722 5

原创 【UE4 C++】实现旋转小球的第三人称自由视角

本文将介绍用C++实现一个简单的玩家可通过WASD控制移动,Shift进行加速,鼠标控制视角旋转和缩放的小球。本人也只是一个UE4初学者,大佬勿喷。一、技术难点小球通过角速度控制旋转,因此想实现自由视角相机,它就不能作为小球的子物体。 小球的移动方向始终要保持与视野前方相同。二、最终效果图模型资源链接:https://pan.baidu.com/s/1e2ba...

2018-07-26 13:31:11 2642 1

原创 常见的2D与3D碰撞检测算法

具体实现时,我们需要确定所有可能作为分离轴的候选轴,并将两个物体在每个轴上的投影计算出来,判断它们是否重叠。时空优化的碰撞检测(Spatial-Temporal Collision Detection, STCD):这个算法利用物体的上一帧与当前帧中的运动以及周围环境的改变,预测物体的下一次碰撞。其基本思想是,如果两个物体未发生碰撞,那么可以找到一条分离轴(即一条直线或平面),两个物体在该轴上的投影不会重叠。具体实现可以通过遍历每个物体的所有轴,利用第三步中的函数检测两个物体是否在该轴上的投影重叠。

2023-03-24 11:57:52 3011 1

原创 【UE4 C++】运用AABBTree快速精确检测StaticMesh是否发生相交

【代码】【UE4 C++】运用AABBTree快速精确检测StaticMesh是否发生相交。

2023-03-15 18:07:18 1202

原创 【UE4】空间划分Octree、BVH、BSP简介

BVH层次包围体:全称为Bounding Volume Hierarchy,它是一种将树形结构应用于多维划分的方法,可以使用较小数量的特定方法来查找射线所穿过的所有物体,并且能够有效地处理离散数据。特别是那些拥有大量复杂多边形的场景,与其每次进行整个场景的碰撞检测,我们可以先把场景分解到许多的Physics Volume里面去,再利用AABB Tree优化交互检测效率。这是一种快速的查找物体的算法,广泛应用于 3D 游戏中的空间划分、碰撞检测等领域。二者都是对三维坐标的优化算法,用于加速复杂的计算。

2023-03-15 17:31:26 1835

原创 【Houdini】Orient to Normal/Direction

2022-04-01 11:29:06 1310

原创 【UE4】FlatShading

Flat Shading(平坦着色)是指单个三角形用单个颜色,不会像Ground Shading或Phong Shading顶点间颜色会进行插值。这样能更好的观察模型上每个三角面的分布。由于DDX、DDY仅在deferred rendering下生效,因而该效果不支持移动端下的forward shading。...

2021-10-27 15:25:21 1119 1

原创 【Houdini】如何查找HDA面板下参数对应的节点

经常看别人做的HDA时一头雾水,找不到参数面板上参数对应的节点,不能更快的理解本人的思路。其实通过Dependencies可以索引到。

2021-10-22 14:30:38 1310

原创 【Houdini】新发现的整理节点排版快捷键

以前只知道Shift+L可以整理所有/选中的节点,现在发现了一种更便捷的方式,长按A对着节点向需要整理的方向滑动即可。

2021-10-22 14:14:09 3041

原创 【UE4 C++】Enum to FString/TEXT/FName

Enum->FName UEnum::GetValueAsName(YourEnum) Enum->FString UEnum::GetValueAsString(YourEnum) Enum->TEXT UEnum::GetDisplayValueAsText(YourEnum)

2021-09-23 20:19:03 2602

原创 【UE4 C++】在UObject中GetWorld为NULL的原因

错误:SimpleTileFactory = NewObject<USimpleTileFactory>();正确:SimpleTileFactory = NewObject<USimpleTileFactory>(this,TEXT("SimpleTileFactory"));在NewObject时,忘记传入Outer就会导致GetWorld中的Outer为空,无法得到World。...

2021-09-23 13:24:08 3293

原创 【UE4 C++】FRotator下的Pitch、Yaw、Roll对应轴

在创建结构体FRotator时,参数依次为Pitch、Yaw、Roll,若你认为这对应的是细节面板中的X、Y、Z值,那就错了。 在UE4中Pitch、Yaw、Roll真正意义上依次对应的是绕Y、Z、X轴旋转,这在源码中也得到了印证。...

2021-09-23 13:06:32 2833

原创 【UE4】刷草后构建光照巨慢,还提示光照贴图分辨率过大的解决办法

问题简单的在地形上刷了不大的一片草后,点击构建光照,居然异常的慢,还有警告提示Light Map Size太大,请降低光照贴图分辨率或是减少草的数量,这就令人很疑惑了,因为Cast Shadow已经关闭了呀。InstancedFoliageActor_0 The total lightmap size for this InstancedStaticMeshComponent was too big and it was automatically reduced. Consider redu

2021-09-18 22:25:25 4672

原创 【C++ 11】emplace_back()和push_back()的区别

emplace_back()函数是C++11 新增加的,其功能和 push_back() 相同,都是在 vector 容器的尾部添加一个元素。区别就在于底层实现的机制不同。push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。总而言之,emplace_back() 的执行效率比 push_ba..

2021-08-30 21:18:19 911

原创 【Houdini】点击按钮运行特定的Python脚本

Step 1打开节点的Parameter面板,添加参数Button与String,点击ApplyStep 2String参数中勾选 [Multi-line String] 、选择编写的 [语言类型]Button参数在 [Callback Script] 中填写如下代码,并在Code中定义onClick()函数exec(hou.pwd().parm('python').eval());onClick()或exec(kwargs['node'].parm('python').ev..

2021-08-26 20:54:05 2738 2

原创 【UE4+Houdini】地形材质效果优化的几种方式(含源工程)

本文节选自自然环境程序化内容生成工具集的设计与实现 —— Github源码,查看Houdini与UE4源工程以及开发文档详见链接,不够专业,仅供参考。目录4.1隐藏纹理重复感4.1.1 Distance Tilling技术4.1.2 Macro/Micro Variation Tilling技术4.2 纹理拉伸处理4.3 纹理采样数量优化4.4 距离控制曲面细分4.5材质函数实现4.1隐藏纹理重复感Quixel Megascans上扫描真实环...

2021-07-26 15:03:49 4499 3

原创 【Houdini】Copy to Points时Orient无效,原因是参数存在优先级

问题阐述在复制模型到点集时,想控制模型的旋转值,但通过Attribute Randomize为点随机添加了orient值后,并没有效果。用Grid当作点集测试却有效果,在大头的帮助下才知道在Copy to Points时,参数具有优先级,所以会出现一些参数无效的效果,这里就是由于本来存在transform,优先级高于orient。复制参数优先级http://127.0.0.1:48626/copy/instanceattrs.html Ifpivotexists, use ..

2021-07-22 20:35:09 2313

原创 【Houdini】如何设置视口中Normal的显示长度

问题在视口中观察Normal的方向时,经常会感到预览长度特别短,甚至看不清是否存在Normal?解决办法在View窗口下按下“D”键,调出Display Options面板,在Guides类别下可以看到Scale Normal参数。可以看到默认值只有0.2,那么将其调整为20,就能明显看到法线方向了。友情提示:背景设为黑色在这里。...

2021-03-11 18:39:10 2421

原创 【Houdini】Error 234:报错节点无法显示错误详情

报错内容点击报错节点的感叹号时,无法正常显示错误详情,而是弹出一个Houdini Console,这是python的utf-8问题。File "C:\PROGRA~1\SIDEEF~1\HOUDIN~1.351\python27\lib\site-packages\pkg_resources.py", line 425, in __init__ self.add_entry(entry) File "C:\PROGRA~1\SIDEEF~1\HOUDIN~1.351\pytho

2021-02-23 11:04:33 3809 3

原创 【UE4】多视角相机捕获图像如何同屏拼接在一起

前段时间有个Demo移植的需求,需要把实时裸眼3D多视角立体显示的Unity版本移植到UE4,主要包含后处理Shader、相机矩阵变换、多视角画面平铺拼接三大部分。对现有的多窗口显示方法进行查阅后,发现主要有Multiplayer与Render Target+UI两种实现思路,由于需要采集的视角数量多、后处理Shader必须作用在拼接的图像上,最终选择了后一种。一、Multiplayer(存在局限性)首先在项目设置中开启Use SplitScreen选项。通过添加多个Player,结合S

2020-11-07 20:38:09 7270 6

原创 【UE4 Packaging】压缩包体大小

官方文档针对安卓包大小压缩与优化有详细的描述,“控制 APK 包的容量 — Unreal Document”,大多数PC也同样适用。在尽量避免导入与项目无关的资源的情况下,我的Minigame包体大小也达到了800M之大,通过优化处理将大小压缩到了160M,现将所采取的措施总结如下。1.项目设置1.1 共享材质着色器代码&共享材质本地库勾选“Project Settings -> packaging -> Share Materail Shader Code &

2020-09-16 17:28:30 4094 2

原创 【Unity】2D Sprite 箭头跟随鼠标旋转

使用该方法可以制作类似TNT里的弹道方向瞄准示意。一、效果图二、制作步骤2.1 箭头方向向上、将锚点设为底部2.2 创建2D Spirte,并添加脚本void Update(){ Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector3 direction = (mousePos - transform.position).normalized;

2020-08-18 21:44:33 1613

原创 【UE4】后处理制作马赛克效果

材质节点制作原理就是将图像UV放大,作Floor运算再除回去,这样会得到非线性插值的UV值。效果未开启后期开启后期

2020-07-17 20:51:56 1678

原创 【C++】运行时类型识别RTTI与反射详解

RTTIRTTI(Run-Time Type Information)运行时类型识别的英文缩写,它提供了运行时确定对象类型的方法。面向对象的编程语言,像C++,Java,delphi都提供了对RTTI的支持。 本文将描述 RTTI 的概念、简略介绍 RTTI 的一些背景知识、并通过具体例子和代码介绍什么时候使用以及如何使用 RTTI的两个重要运算符 typeid 和 dynamic_cast的使用方法。背景知识其实,RTTI 在C++中并不是什么新的东西,它早在十多年以前就已经出现了。但是大多数

2020-07-11 15:04:29 1820

原创 【UE4 图形学】材质Shader中尽量避免使用if,能够提升性能的原因

原因GPU的warp内部是按照SIMD(Single Instruction Multiple Data)单指令多数据流模式执行的,也就是说同时只能处理一条指令,当出现分支指令时,只能先执行True的指令,再执行False的指令,这样导致的指令串行执行现象叫做Branch Divergence,它会影响GPU并行化处理的执行效率,降低程序性能。在Shader中使用if往往就会导致分支指令的出现,因而如果能通过其他手段,常用方式是使用其他的内置指令替代if,就能做到性能优化。举个栗子:...

2020-07-10 14:27:44 2002

原创 【Unity 编辑器扩展】Multi-object editing not supported报错解决

在你的Editor类声明前添加属性[CanEditMultipleObjects]即可。没有该属性的编辑器在选中多个物体时,就会提示“Multi-objecteditingnotsupported”,出现其他绘制均不显示的错误情况。注:该Editor脚本文件必须放置在工程中Assets/Editor文件夹中,脚本头文件引用处必须添加using UnityEditor;。using System.Collections;using System.Collections.Generic;...

2020-06-26 15:04:19 3511 2

原创 【Unity&Android】adb配置与输出app崩溃日志

最近遇到Unity打包的App在手机上运行奔溃,需要抓一下崩溃日志,于是记录一下adb强大又简单的抓取功能。Android Debug Bridge(安卓调试桥) tools,是一个命令行窗口,用于通过电脑端与模拟器或者是设备之间的交互。找到你已安装SDK路径下的adb.exe,将该文件夹路径“E:\adt-bundle-windows-x86_64-20140702\sdk\platform-tools”,添加到系统变量Path中。然后在cmd中,输入"adb version"查.

2020-06-23 19:56:06 1771

原创 【C++】结构体/联合中的数据成员对齐规则

对齐规则1、每个数据成员在内存中的存储起始位置必须是自身大小的整数倍,如32位下的int占4个字节,则存储地址必须是4的整数倍。struct node{ char a;//起始0是1的倍数,a存放在0 int b;//起始1不是4的倍数,起始调整为4,b存放在4};sizeof(node) = 82、若结构体node里有其他的结构体成员node2,则结构体成员node2要从其内部最大元素大小的整数倍地址开始存储。struct node//共占16字节{ ...

2020-05-21 18:13:07 356

原创 【C++】编译过程

C++编译过程可分为四个阶段预处理阶段:对源代码文件中文件包含关系(头文件)、预编译语句(宏定义)进行分析和替换,生成预编译文件。编译阶段:将经过预处理后的预编译文件转换成特定汇编代码,生成汇编文件。汇编阶段:将编译阶段生成的汇编文件转化成机器码,生成可重定位目标文件。链接阶段:将多个目标文件及所需要的库连接成最终的可执行目标文件。...

2020-05-21 16:05:05 183

原创 【C++】构造函数、析构函数可以是虚函数么?

构造函数不能是虚函数1、创建一个对象必须明确指出它的类型,否则无法创建,一个对象创建成功,编译器获得它的实际类型,然后去调用对应的函数,而如果构造函数声明为虚函数,会形成一个死锁,虚函数是在运行才能确定确定其调用哪一个类型的函数,而具体哪一个类型是编译器通过对象的类型去确定的,但是此时对象还未创建也就没法知道其真实类型。2、虚函数对应一张虚函数表,这个虚函数表是存储在对象的内存空间的,如果构造函数是虚函数就需要通过虚函数表来调用,可是对象还没有实例化,也就是内存空间还没有,找不到虚函数表,所以构造函

2020-05-21 16:01:13 854 1

原创 【C++】虚函数、纯虚函数、多态与虚表机制详解

虚函数在类的定义中,前面有 virtual 关键字的成员函数就是虚函数。注:派生类中的成员函数 与 基类中虚函数同名且同参数的函数,不加virtual也自动成为虚函数。多态多态的实现是通过虚函数。多态的作用是增强程序的可扩充性,即程序需要修改或增加功能的时候,需要改动和增加的代码较少。多态的关键在于通过基类指针或引用调用一个虚函数时,编译阶段不能确定到底调用的是基类还是派生类的函数,运行时才能够确定——这叫动态联编。虚函数因为用了虚函数表机制,调用的时候会增加内存开销,具体见下文。

2020-05-21 15:16:45 1322

【UE4】C++编写的第三人称视角小球Ploygon风格小游戏项目以及源码

该游戏玩法为玩家控制小球到达终点,包含小球移动,第三人称相机,死亡触发器,复活点更新触发器,场景关卡设计等项目源码内容。均为C++实现,适合UE4新手学习。

2018-07-26

空空如也

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

TA关注的人

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