简介
记录从GDC2023里学的东西
车漆效果
GDC2023干货分享 90帧高质量写实手游的程序实现与美术设计 - 网易游学的文章 - 知乎
王牌竞技中的汽车涂层
使用了双层BRDF和双层法向量
双层BRDF可以分为两个部分:表面层和基底层,每个部分都有自己的BRDF函数。表面层通常是一个镜面反射,基底层通常是一个漫反射。两个层之间有一个菲涅尔项来计算光线在表面层和基底层之间的反射和透射比例,网易提供的图片中,正中位置也存在着对于周边环境的反射结果,或许是通过 Lerp(base,base+surface,value) 插值的方式控制
Bing大小姐提供的伪代码
1 |
|
抗锯齿
GDC2023干货分享 90帧高质量写实手游的程序实现与美术设计 - 网易游学的文章 - 知乎
没有选择使用TSAA,而是使用其他方式实现抗锯齿
- 去除法线细节
- 高光锯齿(通过法线导数计算边缘锯齿形状,应该是做遮罩)
通过法线导数计算边缘锯齿形状
1
2
3
4
5
6用法线导数来计算出边缘的锯齿形状是一种常用的抗锯齿技术,它可以根据法线贴图的变化来估计表面的倾斜程度,从而调整纹理坐标的偏移量,使得边缘看起来更平滑。具体的步骤如下:
i. 计算法线贴图的梯度,即在屏幕空间x和y方向上的偏导数,可以使用DDX和DDY函数来实现。
ii. 根据梯度的大小和方向,计算出一个偏移量,通常是一个小于1的比例,可以根据需要调整。
iii. 将偏移量加到纹理坐标上,得到新的纹理坐标,用于采样纹理。
iiii. 重复以上步骤,直到达到满意的效果或者超过最大迭代次数。 - 烘培ao到顶点,改善缝隙细节
动态光照
GDC2023干货分享 90帧高质量写实手游的程序实现与美术设计 - 网易游学的文章 - 知乎
使用 Parallax IBL (Parallax-Corrected Image-Based Lighting,视差图像光照)来改善环境反射效果,使用烘焙的SH(球谐函数Spherical Harmonics,简称SH))来模拟动态光源产生的反射效果
Unity中应该对应的是反射探针
场景优化
全局光照优化
天空盒的处理,LDR(Low Dynamic Range,低动态范围成像) 和 HDR(High Dynamic Range,高动态范围成像) 天空效果的区别
然而,很多手机并不支持 HDR 成像的纹理压缩格式 ASTC(Adaptive Scalable Texture Compression,自适应可扩展纹理压缩)。使用 Modified Reinhard curve(修改后的Reinhard曲线)将 HDR 图像映射到 LDR图像格式,在shader中对其进行解码
将远景烘培到天空盒中
人眼自适应
树木优化
对法线的优化
将混合的法线信息烘焙到 Billboard 上,以创建 3D 模型,从而计算 Billboard 的动态阴影,奥日中场景的阴影好像也是用这种方式实现的
对网格的优化
使用简单网格模拟画面远处的树,估计是LOD和直接用低精度模型
纹理压缩
将PBR渲染中用到的漫反射贴图、法线贴图、(AO、Roughness、Metallic)贴图,压缩成一张贴图,使用时解析
三张贴图用九维向量表示,通过PCA找到最佳四维平面对九维向量进行拟合
1 | from sklearn.decomposition import PCA |
使用PCA对图片进行压缩
对于 jpg 压缩效果不错,png 感觉一般jpg
1 | import numpy as np |
png
1 | import numpy as np |
n_components 的值需要根据情况设置,感觉可能有地方写的有问题