美文网首页工作生活游戏开发
Godot Shader笔记:你的第一个3D Shader 第二

Godot Shader笔记:你的第一个3D Shader 第二

作者: 吃烧烤的老王 | 来源:发表于2019-06-30 06:52 被阅读0次

    原文地址:Docs » Shading » Your first shader » Your first Spatial shader: part 2

    从高层次来看,Godot所作的就是提供用户一些可以选择性设置的参数属性(比如:AO,SSS_Strength,RIM等)。这些参数属性分别对应着不同复杂的效果(环境光遮挡Ambient Occlusion,次表面散射SubSurface Scattering,边缘光Rim Lighting等)。如果这些参数属性不设置的话,对应的代码会在编译前被剔除,使得shader不会对不需要的效果付出运算代价。这种机制使用户很容易实现复杂的PBR shader,而不需要编写复杂的shader代码。当然,Godot也允许你完全忽略掉这些参数,编写完全自定义的shader。

    完整的参数属性列表请参看Spatial shaders

    顶点函数(vertex function)和片元函数(fragment function)的区别之一是:顶点函数对每一个顶点运算,并设置VERTEX(position)和NORMAL等属性,而片元函数对每个像素运算,并设置模型的ALBEDO (color)属性。

    你的第一个3D片元函数

    正如本教程之前章节提到的。Godot中片元函数的标准用法是设置不同的材质属性,然后让Godot完成剩余的工作。为了提供更好的灵活性,Godot还提供一种叫做渲染模式(render node)的东西。渲染模式需要设置在shader的顶部,直接写在shader_type的下面,渲染模式将指定shader拥有哪些内置功能。

    例如,如果不希望某个对象被光照影响,可将它的渲染模式设为unshaded

    render_mode unshaded;
    

    你也可以同时添加多个渲染模式。比如,如果像使用卡通着色来代替更具真实感的PBR着色,可以将漫反射模式(diffuse mode)和镜面反射模式(specular mode)设置为卡通风:

    render_mode diffuse_toon, specular_toon;
    

    这个内置功能模型机制使你可以通过改变几个参数来实现复杂的shader。

    完整的渲染模式列表请参看Spatial shaders

    在教程的这个部分,我们将手把手教你将上个部分的那个凹凸不平的地形变成一个海洋。

    首先让我们通过设置ALBEDO属性来改变水的颜色。

    让我们把它变成美丽的蓝色。

    void fragment() {
     ALBEDO = vec3(0.1, 0.3, 0.5);
    }
    
    image

    我们把水面设置为非常暗的蓝色,因为水面绝大多数的蓝色将来源于天空的折射。

    Godot的PBR模型依赖于两个主要参数:金属度(METALLIC )粗糙度(ROUGHNESS)

    ROUGHNESS决定材质的平滑/粗糙程度。一个较低的ROUGHNESS会让材质看起来像发亮的塑料,而一个较高的ROUGHNESS会让材质看起来颜色更统一。

    METALLIC决定材质近似于金属的程度。它的值域在0和1之间。可以把METALLIC想象为(镜面)反射(reflection)和漫反射(ALBEDO)色之间的平衡。一个很高的METALLIC几乎可以使ALBEDO被忽略,看起来就像环境(译者注:原词为sky,翻译成环境貌似更好理解一些)中的一面镜子,而一个很低的METALLIC 会对环境色和漫反射色有更均衡的表现。

    ROUGHNESS从左到右从0增长到1;METALLIC从上到下从0增长到1。

    image

    注意:对于标准的PBR着色,METALLIC应该接近0或1,只有当混合材质的时候才把值设在它们之间。

    水并不是金属,所以我们将它的METALLIC属性设为0.0。但是水是高度反射的,所以我们将它的ROUGHNESS设为非常低。

    void fragment() {
     METALLIC = 0.0;
     ROUGHNESS = 0.01;
     ALBEDO = vec3(0.1, 0.3, 0.5);
    }
    
    image

    相关文章

      网友评论

        本文标题:Godot Shader笔记:你的第一个3D Shader 第二

        本文链接:https://www.haomeiwen.com/subject/spjvcctx.html