wmm 发表于 2024-7-15 17:45

在Unity中如何表示物体概况凹凸?

在Unity中如何表示物体概况凹凸?

lynmm 发表于 2024-7-15 17:45

在这里我举例了3种表现物体表面凹凸方法,下面是对这3种方法的详细介绍:



[*]方法1,给模型增加更多顶点

[*]如果想要做出右图这样的地平面,仅仅是用一些顶点去做的话,需要有非常非常多的顶点,也就是使用高模,但在游戏的实时渲染中,根本不可能用面数、三角形、顶点数量这么多的模型来进行实时渲染
[*]显卡能进行实时渲染的性能指标是有限的,所以我们一般会使用另外一种方式

[*]方法2,低模加上一张贴图

[*]用一张专门表示物体表面细节的贴图来绘制物体细节,物体表面只需要用一个平面模型就可以了,剩下的细节全部通过这张贴图来进行表现(如上方右图)
[*]但这种方式做出的细节非常有限,因为这张贴图只是把这些凹凸画上去了,光照在物体表面产生的反射比较粗糙,只是白花花的一片光亮
[*]一束灯光照射在贴图上产生不同方向、不同强度的反射,才能使渲染出的结果更加真实、细腻,只是贴一张贴图,没有基于每一个像素点来计算光照,只是基于整个大三角形进行计算,肯定无法得到细致的物体表面细节

[*]方法3,方法3仍然是使用低模,保留漫反射贴图,只是增加了一张法线贴图



[*]前面的方法只是贴一张图上去,因为物体表面的方向统一都是朝上的,自然表现不出细节,所以要增加一张法线贴图,法线贴图里存放的是物体的每一个像素点的方向信息
[*]比如上图贴图中的泥土的法线方向可能是朝着地面的,石块表面因为比较光滑,它的法线方向就可能是朝上的,有了所有物体的表面细节后再进行渲染就能得到更加精细的光照的效果
[*]灯光方向虽然是一致的,但它会根据物体表面的法线方向来计算反光,由于每个像素点的法线方向都不一样,计算出的反射方向自然也不一样,所以它能够表现出更细致的光照细节
详细内容可以参考《视差贴图:更逼真的纹理细节表现》公开课

netiis 发表于 2024-7-15 17:45

除了法线贴图以外,还有parallax mapping和displacement mapping可以表现物体表面凹凸。之前写过两篇文章,有兴趣可以参考一下:
异次元的归来:用Unity实现Parallax Mapping异次元的归来:用Unity实现displacement希望对你有帮助。

johnjane 发表于 2024-7-15 17:46

正好有看到过这个问题
有关的视频
分几节讲得蛮好的
希望能帮到你




Shader进阶教程——制作表面凹凸技术之偏置贴图

jmu2005 发表于 2024-7-15 17:47

法线贴图
页: [1]
查看完整版本: 在Unity中如何表示物体概况凹凸?