#bevy #3d #graphics #game-engine

bevy_mod_paramap

为bevy游戏引擎提供的视差映射着色器(凸起和POM)

3个版本 (破坏性)

0.3.0 2023年3月6日
0.2.0 2022年11月13日
0.1.0 2022年9月12日

#2148 in 游戏开发

每月 22 次下载

Apache-2.0

44KB
586

Bevy视差映射

视差映射 是一种图形效果,通过根据视口的视角移动纹理的像素,为简单的2D纹理添加深度感。

这并不是类似于超级马里奥世界的“视差”。这是为3D渲染设计的。这项技术在《恶魔之魂》的Bluepoint重制版中取得了成功。

此Crate添加了一个自定义材质,它通过视差映射扩展了默认的bevy PBR材质。 ParallaxMaterial 资产是bevy PBR材质的直接副本,增加了 height_map: Handle<Image> 字段(它不是 Option,因为如果您没有高度图,也可以使用默认的着色器)。

height_map 是一个表示特定像素处物体高度的灰度图像。

ParallaxMaterial 允许选择用于视差的算法。通过将 algorithm 字段设置为 ParallaxAlgo,您可以选择使用Relief Mapping。默认情况下,ParallaxMaterial 使用视差遮挡映射(POM)方法。(请参阅着色器源代码以了解算法的作用)

示例

此存储库包含两个示例。

cargo run --example <example_name>
  • earth3d:地球的旋转视图。利用高度图,但也利用了所有bevy PBR字段。这是一个很好的bevy功能的展示。
    您可以通过按下鼠标右键来绕地球旋转,并使用鼠标滚轮进行缩放和缩小。

https://user-images.githubusercontent.com/26321040/189361740-1a0876d2-9b39-49f3-a8cb-8837601b5b39.mp4

  • cube:在一个基本3D场景中,带有视差材质的旋转立方体,鼠标左键点击以切换视角。

https://user-images.githubusercontent.com/26321040/189361802-3db6aa98-fa7f-4440-b5a7-20d73a36ac23.mp4

问题和限制

  • 此功能没有实现轮廓,因此网格的轮廓不会随着高度图而改变
    • 因此,应该优先考虑顶部较重的高度图(树皮、砖块)
  • 此功能没有实现自阴影,可能会导致意外的大切边
    • 自阴影在sunblackcat文章中有描述,但bevy的光照系统需要同时处理多种光类型和多个光源,这比我现在能处理的要复杂。
  • 高度图是相对于更常见的用法进行了反转

文献

代码基本上是从维基百科上链接的sunblackcat实现中复制的。

优化措施包括

  1. https://www.diva-portal.org/smash/get/diva2:831762/FULLTEXT01.pdf
  2. https://www.gamedevs.org/uploads/quadtree-displacement-mapping-with-height-blending.pdf
  3. https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-4-next-generation-speedtree-rendering
  4. https://old.reddit.com/r/GraphicsProgramming/comments/pgkogk/whatever_happened_to_quadtree_displacement_mapping/
  5. https://www.youtube.com/watch?v=8hThP-Yni_o

请注意,(1)表明(2)比POM慢,而(3)超出了小型开源crate的范围(除非你愿意付钱给我)。

待办事项

更改日志

  • 0.2.0:更新bevy依赖项到0.9
  • 0.3.0:更新bevy依赖项到0.10

版本矩阵

bevy 最新支持的版本
0.10 0.3.0
0.9 0.2.0
0.8 0.1.0

许可

assets目录下的地球图像属于公有领域,并取自维基百科。我亲自编辑了它们,你可以自由地以任何方式重新使用编辑后的版本,不受限制。

  • 高度图elevation_water.pngelevation_surface.png调整数值以突出地球的不同拓扑特征,normal_map.jpg也是由此生成的。
  • 反照率(也称为基本颜色)是使用等角投影缩小后的2002年NASA蓝色地球卫星视图。 metallic_roughness.pngbase_color.jpg是从该图像派生出来的。
  • 发射纹理来自2012年的NASA蓝色地球项目。它是地球的夜间卫星视图。
  • 一个替代的高质量高度图可以在以下位置找到:https://commons.wikimedia.org/wiki/File:Srtm_ramp2.world.21600x10800.jpg

代码和资产版权归各自作者所有。

原始代码版权©2022 Nicola Papale

本软件许可协议为Apache 2.0。

依赖项

~31–66MB
~1M SLoC