java如何为雪碧的特定部分着色
我一直在为我计划制作的一款战略游戏开发一个等距的minecraft风格的游戏引擎。正如你所见,它确实需要一些照明。很难区分不同的海拔,因为所有的东西都是相同的阴影。所以我的问题是:我能给雪碧的特定部分着色吗?所有这些块都只是精灵,所以如果我对整个图像进行着色,它会对整个块进行着色
你可以在下面搜索框中键入要查询的问题!
我一直在为我计划制作的一款战略游戏开发一个等距的minecraft风格的游戏引擎。正如你所见,它确实需要一些照明。很难区分不同的海拔,因为所有的东西都是相同的阴影。所以我的问题是:我能给雪碧的特定部分着色吗?所有这些块都只是精灵,所以如果我对整个图像进行着色,它会对整个块进行着色
# 1 楼答案
这取决于你如何照明
基本上,精灵只是由两个三角形组成的有纹理的四边形
传统的基于顶点的照明(由内置功能支持,但现在已弃用)将只计算该四边形的4个角的照明,其他所有内容都将进行插值。这相当快,但可能会导致错误的照明-尤其是聚光灯和大四边形
如果只使用定向照明,可能会对四边形应用法线贴图,从而以逐纹理的方式影响照明,但这可能仍然不是您想要的
现代的方法是使用着色器,即照明是按像素计算的。然后必须为四边形提供逐纹理照明信息,然后在片段/像素着色器中使用
为了澄清一下,本文中一些术语的含义:
编辑
我刚刚看了你的截图,如果相邻的精灵不在同一水平面上,你似乎必须改变精灵边缘的阴影。假设您已经知道哪个精灵边应该是可见的(即,在该边上有一个级别更改),您可以只更改形成该边的顶点的着色
如果不使用任何照明,可以开始将顶点颜色设置为白色,并为需要着色的顶点设置较暗的颜色。然后将纹理颜色与顶点颜色相乘,这将产生较暗的边缘
或者,如果这些级别具有不同的深度(即不同的z值),则可以使用一些着色器进行边缘检测(例如,一些SSAO实现)
编辑2:
如果使用普通的旧顶点照明,应用加权法线可能会有所帮助。基本上,可以从共享一个顶点的三角形的法线计算加权顶点法线
有几种方法可以做到这一点,其中一种是根据顶点的角度对面进行加权。可以将法线乘以这些角度,然后相加,最后对得到的法线进行规格化
计算的结果可能是这样的(ASCII艺术):
向上的线是法线,底线是侧视图中的精灵