Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 如何在世界空间中为阴影贴图和百分比过滤选择灯光大小?_Opengl_3d_Directx_Shader_Shadow Mapping - Fatal编程技术网

Opengl 如何在世界空间中为阴影贴图和百分比过滤选择灯光大小?

Opengl 如何在世界空间中为阴影贴图和百分比过滤选择灯光大小?,opengl,3d,directx,shader,shadow-mapping,Opengl,3d,Directx,Shader,Shadow Mapping,嗨,计算机图形学和数学专业人士:-) 简短问题:如何让艺术家在世界空间中为通过百分比接近过滤(PCF)过滤的阴影贴图选择有意义的灯光大小,是否可以使用相同的技术来支持点光源和方向光源 更长的问题:我已经实现了阴影映射,并通过应用百分比接近过滤(PCF)来过滤边缘。过滤器内核是一个泊松盘,与常规的矩形过滤器内核不同。可以将泊松圆盘视为单位圆内或多或少随机分布的样本位置。因此,过滤区域的大小只是一个因子乘以核的每个2D样本位置(泊松盘) 我可以调整泊松圆盘的半径/系数,并在运行时更改聚光灯(透视平截

嗨,计算机图形学和数学专业人士:-)

简短问题:如何让艺术家在世界空间中为通过百分比接近过滤(PCF)过滤的阴影贴图选择有意义的灯光大小,是否可以使用相同的技术来支持点光源和方向光源

更长的问题:我已经实现了阴影映射,并通过应用百分比接近过滤(PCF)来过滤边缘。过滤器内核是一个泊松盘,与常规的矩形过滤器内核不同。可以将泊松圆盘视为单位圆内或多或少随机分布的样本位置。因此,过滤区域的大小只是一个因子乘以核的每个2D样本位置(泊松盘)

我可以调整泊松圆盘的半径/系数,并在运行时更改聚光灯(透视平截体)或平行光(或透视平截体)的半影大小。这非常有效,但是参数的值实际上没有任何意义,这对于小的3d样本甚至游戏来说都是很好的,在这些游戏中,人们可以投入一些时间来根据经验调整值。我想要的是一个名为“LightSize”的参数,它在世界空间中具有实际意义。例如,如果大型场景中的建筑长度为100个单位,则灯光大小必须大于具有书架特写镜头的场景中的灯光大小,才能产生相同的平滑阴影。另一方面,一个固定的光照大小会在架子上产生非常平滑的阴影,在建筑物外产生非常硬的阴影。这个问题与软阴影、接触硬化等无关,因此忽略物理上精确的拦截器接收器估计;-)

哦,看看我的精彩MS绘画插图:

想法1:如果我直接使用LightSize作为过滤器大小,系数0.5将产生对角线为1.0、半径为0.5的泊松圆盘。由于纹理坐标在[0,1]范围内,因此会产生一个过滤器大小,用于评估每个片段的整个纹理:想象阴影贴图中心的片段,该片段将获取分布在整个纹理区域内的相邻纹理。这当然会产生非常大的半影,但我们称之为“最大值”。例如,0.05的半影系数将导致对角线为0.1,因此每个碎片将评估其相邻纹理的10%左右(忽略圆圈等。仅从侧视图考虑2d)。此方法有效,但当聚光灯的角度变大或平行光的平截头体改变其大小时,半影会改变其宽度,因为LightSize定义了纹理空间(UV空间)中的半影。半影应保持不变,与近平面的大小无关。想象一个合适的正交截头台。当相机旋转时,安装的平截头体的大小会发生变化,半影的大小也会发生变化,这是错误的

想法2:将光大小除以世界空间中近平面的大小。这对于正交投影非常有效,因为当平截头体的大小变大时,LightSize将被较大的值除以,以便半影在世界空间中保持不变。不幸的是,这不适用于透视平截头体,因为近平面的距离会导致近平面的大小发生变化,因此半影大小现在取决于近平面距离,这是不规则的

感觉必须有一种方法让艺术家可以在世界空间中选择有意义的灯光大小。我知道PCF只是物理上合理光源的近似值(相当糟糕),但想象一下: 当使用世界空间中的泊松盘多次采样光源时,可以通过为每个采样位置渲染硬阴影来创建物理上精确的阴影。这适用于聚光灯。定向灯的情况不同。可以使用“平行光原点的角度”,并为每个稍微旋转的平截头体渲染多个硬阴影。这在现实世界中根本没有任何物理意义,但平行光不存在,所以。。。顺便提一下,光源的采样通常被称为多视图软阴影(MVS)


你有什么建议吗?可能是聚光灯和平行光的处理方式有所不同,而PCF不允许我对透视平截头体使用有意义的真实世界灯光大小吗?

如果使用正交投影,则灯光实际上没有任何“大小”概念。虽然我不太确定你的问题是什么意思。想象一下平行光/正交投影的“解决方案”,通常使用原点的角度。例如,在三维建模环境中,可以使用变换矩阵在空间中放置平行光。原点毫无意义,但引擎通常让艺术家指定一个角度,以便灯光可以投射软阴影(想想从稍微旋转的位置渲染的数百个硬阴影)。现在我想知道PCF阴影贴图是否有类似的概念。但我也不能为透视平截体想出一个有意义的值^^