如何创建一个好的金属着色器?
对于不同的金属,说或多或少地腐蚀/生锈等等。
我知道与普通材料的不同之处在于,金属应该使镜面反射光“着色”,但是例如当我用金做到这一点时,它看起来只是“黄色”,而根本不是金属。
任何帮助表示赞赏!
如何创建一个好的金属着色器?
对于不同的金属,说或多或少地腐蚀/生锈等等。
我知道与普通材料的不同之处在于,金属应该使镜面反射光“着色”,但是例如当我用金做到这一点时,它看起来只是“黄色”,而根本不是金属。
任何帮助表示赞赏!
Answers:
我最近为正在进行的游戏创建了用于清洁金属和拉丝金属的着色器,我对结果感到非常满意。
清洁金属: 我的实验中最重要的功能是使用立方体贴图进行环境反射。我使用实时渲染到纹理的环境来实现它们,但是静态图像通常也可以提供良好的效果,并且更容易模糊它们。第二个最重要的功能是菲涅耳效应,它使物体的轮廓更好。例如,这使球看上去更圆滑。不一定需要使用镜面照明,因为立方体贴图可以直接提供高光。HDR渲染对于使立方体贴图反射看起来更好也很重要。
拉丝金属: 对于拉丝金属,使用刷子纹理很容易获得良好的效果,类似这样,以及各向异性照明。对于各向异性照明,您可以从网上找到教程,但是我以blinn-phong为基础实现了自己的教程,但是从半向量中我消除了80%的切线方向。这意味着除了模型中的法线外,您还需要切线或切线。对于金属拉丝金属,环境反射非常棘手。您可以基于切线/切线方向从多维数据集中的多个方向进行采样,但是要获得良好的结果,可能需要大量采样。但是,由于使用多个光源的纹理和各向异性照明已经看起来非常不错,因此不一定需要这样做。在我的情况下,最终结果如下所示:
正如Nicol在评论中所说,高质量的金属着色器包含很多东西。为了获得最佳效果,您的渲染器必须是伽玛校正的,并使用基于物理的着色模型(尤其请参见Naty Hoffman在该链接上发表的两篇论文)。
考虑到这些问题,制造金属材料的典型方法是具有非常低或不存在的漫反射色和高镜面反射率,范围从50%到100%(在线性颜色空间中)。如您所述,对于某些金属,镜面反射将被着色。
由于金属的外观完全是镜面的,很少或没有漫射,因此反射将非常重要。如果仅镜面反射点光源,则由于缺少其余的环境,您将获得黑色材料的外观(即使非常粗糙的金属也将反射其周围环境的模糊图像)。获得更多反射的典型方法是使用立方体贴图。但是,实时图形中的逼真的反射是一个巨大的话题,并且有很多不同的方法。