美文网首页游戏开发
Godot Shader笔记:着色器语言( 三)

Godot Shader笔记:着色器语言( 三)

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

    原文地址:Docs » Shading » Shading reference » Shading language

    精度(Precision)

    可以对uniform, variable, argument 以及 varying等数据添加精度修改器(modifier):

    lowp vec4 a = vec4(0.0, 1.0, 2.0, 3.0); // 低精度, 每分量8字节并映射到0-1区间
    mediump vec4 a = vec4(0.0, 1.0, 2.0, 3.0); // 中等精度,每分量16字节或半长浮点精度
    highp vec4 a = vec4(0.0, 1.0, 2.0, 3.0); // 高精度, 全长浮点精度或整型值域(默认)
    

    对于某些运算以损失精度为代价,使用较低精度,可以换取一些数学运算方面的提速。注意:在顶点处理函数(vertex processor function)几乎不会这样做(此时一般都采用高精度),但是在片元处理器中,使用较低精度是很有效的。

    记住,以移动设备为主的一些架构,在这个机制上收益匪浅,但也存在一些约束(主要是不同精度间的转换也存在一些计算量)。请阅读针对目标架构的相关文档获取更多信息。不过说实话,移动设备的驱动Bug很多,所以要避免麻烦的话,请使用简单的shader,而不要指定精度,除非你真的需要。

    运算符(Operators)

    Godot 着色器语言支持和GLSL ES 3.0一样的运算符集。下面是按照优先级(precedence)排序的运算符列表:

    优先级 类目 运算符
    1 (最高) 括号(parenthetical grouping) ()
    2 一元运算符(unary) +, -, !, ~
    3 乘法类(multiplicative) /, *, %
    4 加法类(additive) +, -
    5 按位移动(bit-wise shift) <<, >>
    6 逻辑(relational) <, >, <=, >=`
    7 相等(equality) ==, !=
    8 按位与(bit-wise and) &
    9 逻辑异或(bit-wise exclusive or) ^
    10 按位或(bit-wise inclusive or) |
    11 逻辑与(logical and) &&
    12 (最低) 逻辑或(logical inclusive or) ||
    分支控制(Flow control)

    Godot着色器语言支持大多数常见的过程控制形式:

    // if and else
    if (cond) {
    ​
    } else {
    ​
    }
    ​
    // for loops
    for (int i = 0; i < 10; i++) {
    ​
    }
    ​
    // while
    while (true) {
    ​
    }
    

    注意:在现代GPU中,死循环是可以存在的,并且它可能会冻结你的程序(包括编辑器)。Godot无法保护你远离死循环,所以请小心不要犯这种错误。

    丢弃(Discarding)

    在片元(fragment)和光处理函数中可以使用discard关键字。它将意味着片元被弃用。

    相关文章

      网友评论

        本文标题:Godot Shader笔记:着色器语言( 三)

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