Unreal Engine

虚幻4中的C++单元测试


在虚幻4项目开发中,利用 Automation 系统进行代码单元测试。

Fork-Join是并行编程中常用的设计模式,这个博客用一个实例来演示通过虚幻4TaskGraph来实现这种模式。

基于任务的并行编程是现代C++的一个趋势,虚幻4中的TaskGraph也是这样一个方向。这个帖子就分享一下 TaskGraph 的基本用法。

Lambda可以让代码简化很多,可维护性也能提高很多,但是它也有一些小细节,不小心的话,可能程序Crash了还不知道是哪里的问题。

引擎中提供两种蓝图异步节点的实现方式,这里我们主要介绍 Blueprint Async Action 的实现方式。

虚幻引擎基于C++14标准开发,理解并运用好现代C++的语言特性对掌握Unreal C++就至关重要。转移语义是非常重要的,我们就从实用性的角度来理解一下这个概念。

这篇博客主要是深入理解蓝图整个流程的的底层机制,包括节点编辑、编译、字节码解释执行。理解了这些,对前面几篇所讲的蓝图扩展,可以有一个更清晰的认识

前面两篇博客我们都是通过ExpandNode来实现蓝图节点的功能,这一篇来介绍另外一种重要的蓝图扩展方式,就是Node Handler。

通过派生class UK2Node和class SGraphNodeK2Base,为蓝图添加自定义节点,实现一个“动态添加/删除输入Pin”的蓝图节点。

通过派生class UK2Node,为蓝图添加自定义节点;这篇博客我们先实现一个最简单的自定义节点,下篇文章将完成“动态添加输入Pin”的蓝图节点。

使用UFunction CustomThunk函数方式,实现蓝图模板功能节点,用来处理任意类型的数组,并探索实现细节背后的蓝图机制。

前面的文章我们讲了虚幻4中的反射率方程,及其各个部分的公式,这篇文章我们就来讲明白这个方程是如何在实时渲染中求解的!

以反射率方程为线索,理解 PBR 技术集合中的各个技术点,进而理解整个 PBR 的原理,以及虚幻4引擎中的实现方案。上半部分,主要是理解其原理。

虚幻4渲染系统架构解析


2016年9月24日我在MDCC 2016 VR 峰会上我做了一个技术分享,这里是这次分享的技术资料

在2016年6月参加了CSDN的VR技术开放日活动,分享了开发VR小游戏的教程。这篇文章是当时技术分享后所写的。

虚幻4视频教程


在2015年,我与CSDN学院合作推出的系列虚幻4入门教程,希望能够帮助更多的同学克服虚幻引擎上手难度大的问题。

Unreal Cookbook 2015


虚幻4的一些常用功能、技巧的例子。

Graphics

可视化的OpenGL简史


使用隔壁组的数据可视化技术为OpenGL做了一个版本历史气泡图,并一起回顾一下OpenGL一路走来的历程,分享一下我与OpenGL的故事。

DirectX Raytracing 渲染管线介绍。

SIGGRAPH 2018 见闻录


亲历 SIGGRAPH 2018 大会的体验 & 经验总结。

针对顶点缓冲、Index缓冲等数据,glTF 提供一个高效的二进制存储方式。

渲染3D图形需要模型,这篇文章我们就聊一下处理模型的方式,以及glTF中如何定义Mesh数据的。

在这篇文章中我们将介绍 Scene Graph 的概念,以及在 glTF 标准中是如何定义 Scene Graph 数据的。

glTF是Khronos Group制定的一套3D内容的格式标准,包括场景、Mesh、动画、材质等方面。通过学习它,可以对3D引擎中的核心数据结构有一个基础的的理解,对于深入掌握3D引擎技术有很大的帮助。

Shadow Mapping原理与实践


通过本文,你可以理解 Shadow Mapping 算法原理,已经如何编程实现它。

游戏程序员的自我修养

D3D9 Shader实例教程


2007年上半年写的一系列基于D3D9 API的Shader开发教程,包括从基本的光照计算,到延迟渲染等。

游戏程序员的自我修养

我的第一份工作是开发图形化的MUD,这是当时工作的一个总结。顺便说一下,当时的产品叫做笑傲江湖武侠社区,是国内最早实现商业化运作的网络游戏,比《魔力宝贝》早半年左右。

GameDev

ECS 与面向数据的设计


《守望先锋》使用了 ECS 的架构方式,但是为什么 ECS 会成为一个更好的架构呢?这篇文章就来讲一下 ECS 背后的‘面向数据的设计(Data-Oriented Design)’,你将会明白这个 Why。进而,你将发现面向数据...

2009年混合语言编程总结


2009年开始,我在之前《功夫Online》的引擎经验之上结合对Unreal Engine 3的理解,开始构建自已的新一代3D引擎,这篇文章是当时对于混合语言编程在游戏开发中应用的一个总结。

游戏程序员的自我修养

D 语言游戏编程入门


曾经一度研究过D语言,这是当时写的一篇介绍D语言如何进行OpenGL开发的文章。

游戏程序员的自我修养

D 语言简介


曾经一度研究过D语言,这是当时写的一篇介绍D语言的文章。

《功夫Online》是我在《仙剑3》之后的一个MMORPG项目,引擎是从头开发的;经历了前期半年的快速搭建架构,基本可用,加上后面2年的不断完善,自认为从渲染效果到运行效率都远超同期基于OGRE的产品。后面的在2009年大热的《...

游戏程序员的自我修养

这是在《功夫Online》开发进入最困难阶段的时候,结合《仙剑3》项目的运作,对于游戏开发项目规划做的一个总结。

游戏程序员的自我修养

2006年第一次总结关于游戏程序员的知识体系的博文

游戏程序员的自我修养

总结在大宇软星工作期间对可重用代码的一点领悟

Unity3D

在Unity3D中实现一个Lua组件,用来整合Lua上层逻辑代码。

炉石使用Google.ProtocolBuffers来处理网络消息,这里我们就分析一下消息打包、解包等代码是适合实现的。

游戏程序员的自我修养

探讨一下如何在Legacy动画系统之上附加Root Motion功能,其实很简单。

接着上一篇文章,继续分析炉石的卡牌和技能。

分析《炉石传说》的卡牌、技能的静态数据组织。

分析《炉石传说》的AssetBundle的管理机制。

经过前面两篇文章的分析,我们对炉石的代码已经不陌生了,接下来我初步尝试分析其游戏逻辑代码。

分析一下炉石这款游戏中一共有哪些Scene,他们各自负责什么,以及它内部的逻辑、UI的处理方式。

分析《炉石传说》游戏的启动流程,这中间就涉及到了游戏基础数据的管理&初始化,各种管理器级别的类,以及相互引用关系。

学习Unity3D引擎,除了官方的手册以外,其他人的经验也是非常有益的。偶尔看到老外这篇文章,觉得还不错,于是翻译过来和大家共享。