0

我一直在为我计划制作的策略游戏开发一个等距的 minecraft 游戏引擎。如您所见,它确实需要一些照明。很难区分不同的海拔,因为一切都是相同的阴影。所以我的问题是:我可以只对精灵的特定部分进行着色吗?所有这些块都只是精灵,所以如果我对整个图像进行着色,它将对整个块进行着色。

引擎截图

4

1 回答 1

1

好吧,这取决于您如何进行照明。

基本上,精灵只是由两个三角形组成的带纹理的四边形。

传统的基于顶点的照明(由内置但现已弃用的函数支持)将仅计算该四边形的 4 个角的照明,其他所有内容都将被插值。这是相当快的,但可能会导致错误的照明 - 尤其是聚光灯和大四边形。

如果您只使用定向光照,您可能会将法线贴图应用到您的四边形,从而以每个纹素的方式影响光照,但这可能仍然不是您想要的。

现代方法是使用着色器,即按像素评估照明。然后,您必须为您的四边形提供每个纹理像素的光照信息,然后在片段/像素着色器中使用该信息。

只是为了澄清,一些术语在这种情况下的含义:

  • per-texel:纹理中的每个像素,这些值可能会被插值
  • per-pixel:每个输出像素,即每个屏幕像素

编辑

我刚刚看了你的截图,如果相邻的精灵不在同一水平线上,你似乎必须改变精灵边缘的阴影。假设您已经知道哪个精灵边缘应该是可见的(即在该边缘有一个级别变化),您可能只是更改形成该边缘的顶点的阴影。

如果您不使用任何照明,您可能只是开始将顶点颜色设置为白色,并为需要着色的顶点设置一些较暗的颜色。然后将纹理颜色与顶点颜色相乘,这会导致边缘更暗。

或者,如果这些级别具有不同的深度(即不同的 z 值),您可以使用一些着色器进行边缘检测(例如,一些 SSAO 实现)。

编辑 2

如果您使用普通的旧顶点照明,则应用加权法线可能会有所帮助。基本上,您从共享顶点的那些三角形的法线计算加权顶点法线。

有几种方法可以做到这一点,一种是根据该顶点处的角度对面进行加权。您可以将法线乘以这些角度,然后将它们相加,最后归一化生成的法线。

该计算的结果可能是这样的(ASCII 艺术):

|       |         /
|_______|________/             
                 | /     |       |
                 |/______|_______| 

向上的线是法线,底线是侧视图中的精灵。

于 2011-11-28T15:27:59.670 回答