刚刚用多个灯实现了这个想法(没有多个灯的想法在这里360 FOV depth buffer by topology and 2D shadows),但是我不确定它是否正确渲染http://www.youtube.com/watch?v=bFhDiZIHlYQ,我只是将每个场景渲染到屏幕使用GraphicsDevice.BlendState = BlendState.Additive;关于灯光,所以场景只是彼此相加。
问题是 - 它看起来是否正确?
答案 0 :(得分:0)
回答这个问题。对不起,但我已经腐败了,让我解释一下。
人眼是对数的。为了将某些东西感知为亮度的两倍,我们需要将进入眼睛的光线平方。声音也一样。
然而,屏幕的RGB值是线性RGB 128,128,128,亮度是64,64,64的两倍。它必须是线性的,否则我们的着色算法将不起作用。堕落太快了。
嗯,我们的计算错误,但制造我们屏幕的人知道这一点并尽可能地纠正它。
而不是我解释看这个Youtube Computer Color is Broken
因此,为了获得正确的混合,您需要在两个渲染之间创建正确的混合。没有混合状态来解决这个问题,因此您必须创建一个自定义像素着色器来完成这项工作。 output.color = sqrt(pow(input1.color,2)+ pow(input2.color,2));
这是非常微妙的,但是改变两个光源的颜色,然后在线性和对数混合之间切换,你会想知道你是如何在一开始就忍受破碎的渲染输出。
我将所有渲染和光照计算作为光子计数,平方输入颜色和平方根输出颜色。
alpha怎么样?是的?我不确定。