3个版本 (破坏性)
0.3.0 | 2023年3月6日 |
---|---|
0.2.0 | 2022年11月13日 |
0.1.0 | 2022年9月12日 |
#2148 in 游戏开发
每月 22 次下载
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功能的展示。
您可以通过按下鼠标右键来绕地球旋转,并使用鼠标滚轮进行缩放和缩小。
cube
:在一个基本3D场景中,带有视差材质的旋转立方体,鼠标左键点击以切换视角。
问题和限制
- 此功能没有实现轮廓,因此网格的轮廓不会随着高度图而改变
- 因此,应该优先考虑顶部较重的高度图(树皮、砖块)
- 此功能没有实现自阴影,可能会导致意外的大切边
- 自阴影在sunblackcat文章中有描述,但bevy的光照系统需要同时处理多种光类型和多个光源,这比我现在能处理的要复杂。
- 高度图是相对于更常见的用法进行了反转
文献
代码基本上是从维基百科上链接的sunblackcat实现中复制的。
优化措施包括
- https://www.diva-portal.org/smash/get/diva2:831762/FULLTEXT01.pdf
- https://www.gamedevs.org/uploads/quadtree-displacement-mapping-with-height-blending.pdf
- https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-4-next-generation-speedtree-rendering
- https://old.reddit.com/r/GraphicsProgramming/comments/pgkogk/whatever_happened_to_quadtree_displacement_mapping/
- https://www.youtube.com/watch?v=8hThP-Yni_o
请注意,(1)表明(2)比POM慢,而(3)超出了小型开源crate的范围(除非你愿意付钱给我)。
待办事项
- 可用性
- bevy-inspector-egui定义(
位于编译标志后面,现在推导出Reflect
) - 泛型化着色器(应该可以使用传统的Phong着色器)
- 转换方法
from_standard(StandardMaterial, height_map)
- 如果可能,基于
normal_map
自动计算height_map
- 实现(5)中的见解
- 高度图不需要与法线图具有相同的精度
- 当高度图没有尖锐的差异时效果更好(因此模糊输入图像)
- 通过考虑距离到位置,可以进一步减少层(在视频中称为“步骤”)的数量
- bevy-inspector-egui定义(
更改日志
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.png
和elevation_surface.png
调整数值以突出地球的不同拓扑特征,normal_map.jpg
也是由此生成的。 - 反照率(也称为基本颜色)是使用等角投影缩小后的2002年NASA蓝色地球卫星视图。
metallic_roughness.png
和base_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