在延迟渲染路径中动态添加光源(通过着色器)

时间:2016-05-24 04:59:02

标签: c# unity3d cg

我目前正在编写一个基于gpu的粒子系统,我目前正试图实现发光粒子(这样场景也会被点亮)。

我正在生成四边形的组合网格(每个粒子一个),并尝试在片段着色器中使用gbuffer输出的发射属性,但这只会产生发光粒子(与绽放相机效果相结合),不会照亮环境。 (网格使用Graphics.DrawMesh渲染)

我尝试的另一件事是使用Graphics.DrawProcedural(通过使用几何着色器生成四边形,而不是使用预先计算的网格)。一般来说,我更喜欢这种方法,但我甚至无法以这种方式实现发光效果(我不知道为什么:/)。

有没有办法在光照通过发生之前动态添加光源(可能通过一个着色器,它将包含位置作为输入的计算缓冲区)?或者也许我错过了另一种方法?

提前致谢:)

编辑:也许DynamiGI.SetEmissive可以某种方式使用?

编辑2:这是我想要实现的一个例子:https://www.youtube.com/watch?v=hPLeUNddCoM

编辑3(对于那些对我的发现感兴趣的人,直到现在):不能使用DynamicGI,因为"实时" GI也是预先计算的,仅适用于静态GameObjects。如果没有经过CPU的往返,似乎没有办法动态照亮场景:粒子数据必须被复制回CPU然后......(我真的不知道,你可以激活一堆点光源,对于性能而言并不是很愉快。看看我发布的视频,看起来粒子数据被复制回cpu以在运行时更新渲染的网格(在0:17你可以在编辑器中看到一堆四边形,我想每个粒子一个)。这是我认为我可以使用DynamicGI.SetEmissive的地方,但我不能。

0 个答案:

没有答案