【问题标题】:transform world space normals to screen space normals将世界空间法线转换为屏幕空间法线
【发布时间】:2012-12-28 08:21:33
【问题描述】:

将世界空间中定义的表面法线转换为屏幕空间中的法线的正确方法是什么?我不认为它们可以简单地乘以投影矩阵,因为透视分割将事物转换为剪辑空间,据我所知,在这个空间中,与图像平面共面的平面保持共面。

但是我正在寻找的转换应该导致转换的法线,这样图 A 中描绘的蓝色世界法线应该导致不同的屏幕空间法线(因为,即使它们的平面与图像平面共面,它们也不会面对相机) - 另一方面,图形 B 中描绘的法线在变换后应该(或多或少)相等,因为它们的表面面向相机。

我在寻找什么样的转变?如何计算?

我需要这个来制作一些屏幕空间效果。

【问题讨论】:

  • 你的例子是错误的。这不是屏幕空间的外观和工作方式。它是在平面上的投影,而不是在球体上的投影。

标签: 3d transformation space projection normals


【解决方案1】:

您正在寻找基于基础的转换矩阵。关于如何计算这个矩阵的步骤有相当不错的视频。检查KhanAcademy video

编辑

您没有提供有关您正在使用的技术(OGL、DX、着色器、自己的投影...)的任何信息,但您绝对应该阅读一些有关切线空间的文章,例如Messing with Tangent Space..

【讨论】:

  • 我知道如何将法线从切线空间转换到对象空间或世界空间,反之亦然。这不包括屏幕空间
  • 但是某些对象的法线与屏幕空间是如何连接的..?法线始终是法线,无论你从哪个角度看它们..
【解决方案2】:

尝试像往常一样将法线从模型(到视图)空间转换 - 使用 inverse-transpose 矩阵。

【讨论】:

  • 这不包括我的问题。这是关于正确地将法线转换为眼睛空间。这与投影无关
  • 是的,我知道事情没那么简单。在您的情况下,法线变换的结果取决于具有此法线的表面的 位置 ...
  • @user1282931 - 你能在眼睛空间中执行你的屏幕空间效果吗?
  • 完全正确 - 每个法线向量的原点都会影响结果!不,我不能在眼睛空间中执行它们。我需要根据屏幕空间法线向量计算对纹理的查找
  • 那么可能只是简单地变换(投影)法线的原点和另一个点(原点被该法线移动)。然后让这两个变换点在投影空间中重新计算法线。
【解决方案3】:

假设您想用任意 4x4 矩阵变换点 P 处的法线 N。让我们用模型部分 T(具有旋转、缩放和平移)和最后一行作为 W 的部分来表示矩阵。这使我们可以这样说:

Transform(P) = (T * P) / dot(W,P)

现在,投影法线可以看作是一个限制(d -> 0):

(Transform(P+dN) - Transform(P)) / d

展开这个等式,然后从分母和分母中删除“d”,得到这个公式:

dot(W,N) * (Transform(N) - Transform(P)) / dot(W,P)

这是未经测试和验证的,但我认为鉴于对这个问题缺乏肯定的答案,我会试一试;)

【讨论】:

    猜你喜欢
    • 2019-04-07
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 2019-10-26
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多