这种光类型已在INSIDE游戏中使用,被称为正交聚光灯(又称为局部定向光)。我假设这是一种定向光,其行为类似于聚光灯,并具有正方形或矩形衰减,但是将其集成到我的延迟管线中并获得这种光类型的一般概念有些困难。 >经典定向光:
dot(worldNormal, lightDir)
我希望您能给我一些提示。
非常感谢!
#1 楼
艾伦·沃尔夫(Alan Wolfe)位置不错,但我将以任何方式总结一下:)渲染“单位”大小的框[-1; 1] < br采样zbuffer并转换为局部光坐标(请参见我们的幻灯片以获取实现此操作的快速方法)。位置在-1; 1之外。
然后在方便的任何空间中进行法线和lightdir之间的点积(您可以从对象到世界的矩阵中提取worldspace-lightdir)。 br />投影纹理很容易,UV坐标只是局部空间xy(移动到[0; 1])
使用衰减纹理就可以了,坐标只是局部空间z(移动到[0 ; 1])
在实际游戏中,您当然希望使用某种加速来尽早丢弃;我们使用了老式的模板剔除(并且应该使用深度边界),但是平铺剔除,群集剔除或类似方法可能更好。 ,但是iirc在大多数现代GPU上实际上并没有优势,因为不会将早期的丢弃归结于分层zbuffer朝zless方向填充。
评论
$ \ begingroup $
那是来自男人本人!我不确定是否会有所帮助,但这是shadertoy中的raytraced实现:shadertoy.com/view/4lV3zV
$ \ endgroup $
–艾伦·沃尔夫(Alan Wolfe)
16-10-5在14:07
#2 楼
我将从研究延迟贴花开始(例如,您可以从此处开始,此博文中有很多有用的链接)如果您了解如何计算头寸并将其与交易量进行比较,那么能够在照明阶段应用相同的逻辑。
评论
您是否偶然有您想要实现的屏幕截图? (:不幸的是,没有,但这是一个小图。做一个简单的定向光点(worldNormal,lightDir)很容易,但是如何限制它。
这不是一个完整的答案,但实际上您想测试一个点是否在灯光定义的定向框中。您可能希望在边缘离光源越来越远时使其柔化,但这更具挑战性。