前言

DDGI(Dynamic Diffuse Global Illumination,动态漫反射全局光照)[1]是由Nvidia于2019年推出的基于光线追踪(Ray Tracing)的一种动态漫反射全局光照方案。

该方案基于Nvidia的RTX(Ray Tracing X)[2]标准和微软的DXR(DirectX Raytracing) API,本文所讲的是此方案基于在ue中的实现。

我们接下来将会领略一下这套方案的风采,窥探一下其中的某些细节,并沿途购买一些周边扩展知识。

本文将会分两次介绍光线追踪部分,第一次会介绍一下实现DDGI最基础流程所必须的一些概念和实现。第二次会在我们十分熟悉DDGI之后再进一步了解一下光追管线是如何与材质、着色等结合在一起,并最终得到一个相对完整的渲染流程拼图的过程。

阅读全文 »

前言

书接前文【cg】【球谐光照】预备知识之拉普拉斯方程

本篇我们来继续研究球谐函数的解及其性质。上回书说到求解拉普拉斯方程的结果着落在了伴随勒让德多项式上,本文我们首先会先接着上文的结论讨论一下伴随勒让德多项式的一相特性,必最终解出球谐函数的具体表达式。然后接着类比傅立叶变换研究一下球谐函数的投影和重建过程。最后讨论球谐函数的两个重要性质,即正交完备性旋转不变性

阅读全文 »

前言

本篇会以多项式乘法作为引子,进一步了解快速傅立叶变换的原理和实现,从而深入理解傅立叶变换以及广义傅立叶变换的原理,为后面进一步推导和理解球谐函数打一下基础。

阅读全文 »

前言

本文开始介绍一些常见的空间加速结构,这些加速结构可能会被广泛地应用于各个开发场景,在渲染、光线追踪等情境下尤甚。本文是一个开始,只入门性质地介绍一些浅显的理论和精简的实现。

阅读全文 »

前言

在使用ue4时我们经常会碰到需要把UObject类和json文件互相转换的情形。

ue4本身封装了相当充足的处理json的接口,所以我们可以通过多种方式达到这一目的。比如对于UObject的每一个成员属性,都手动调用生成json格式文本的接口,最终生成json格式的字符串保存到磁盘文件里,这种方法可以命名为钻木取火。还比如我们可以依托于ue4的反射信息,在不必关心UObject具体内容的情况下自动生成json格式,这种方法才是火柴取火

我们将以如下一个简单的UObject为例,分别在ue4里使用钻木取火火柴取火来实现其与json文件的互转。并在此之后尝试把这个火柴看能不能优化成一个用起来得心应手的打火机

1
2
3
4
5
6
7
8
9
10
UCLASS()
class UFoo : public UObject
{
GENERATED_UCLASS_BODY()

UPROPERTY(EditAnywhere)
int32 ID;
UPROPERTY(EditAnywhere)
FString Name;
};
阅读全文 »

前言

某日午时小憩,与某巨佬闲聊,谈及关于brdf的两个问题,发现从前虽有涉猎,但未求甚解,甚为惭愧,掩面而去。。今痛定思痛,翻阅典籍,重新推演,豁然开朗,但觉从未有如此刻般了然,遂记于此,聊以为物外之趣。

阅读全文 »

前言

今日起开始研究ue4的多线程机制。感觉这部分内容还挺多的,所以想从根源上弄清楚一些,这样以后看ue4就是单线程的了,岂不爽哉。大略读了一下源码,又结合了网上一些大牛的文章,基本的学习路线差不多确定了,这里列一下。

基本的多线程机制 -- FRunnable + FRunnableThread

线程池 -- FQueuedThread + FQueuedThreadPool

异步任务 -- FAsyncTask

TaskGraph

本篇先从最简单的FRunnable开始。

阅读全文 »