• 在CG/HLSL中访问着色器的内容


    着色器在Properties代码块中声明 材质球的各种特性。如果你想要在着色器程序中使用这些特性,你需要在CG/HLSL中声明一个变量,这个变量需要与你要使用的特性拥有同样的名字和对的上号的类型。比如以下这些类型:

    _MyColor ("Some Color", Color) = (1,1,1,1) 
    _MyVector ("Some Vector", Vector) = (0,0,0,0) 
    _MyFloat ("My float", Float) = 0.5 
    _MyTexture ("Texture", 2D) = "white" {} 
    _MyCubemap ("Cubemap", CUBE) = "" {} 
    

    在CG/HLSL代码中,要使用他们,就需要声明如下变量:

    fixed4 _MyColor;
    float4 _MyVector;
    sampler2D _MyTexture;
    sampleCUBE _MyCubemap;
    

    属性的值如何提供给着色器

    在这些地方找到着色器属性值并提供给着色器:

    • 在材质特性区域设置的每个渲染器值。这个是典型的“每个实例”型数据(一堆共享一个材质球的物体,却可以单独定制各自的颜色)
    • 在被渲染的物体上的材质的设置值。
    • 全局着色器属性,要么通过unity自带渲染代码,要么从你自己的代码中获取。

    上面三点的优先级顺序为:实例属性值覆盖所有值;然后是材质数据被使用;最后如果着色器属性在这两者(实例、材质球数据)中都不存在,那么使用全局属性。最后,如果着色器中没有属性定义,那么“缺省”(float是0,颜色是黑色,贴图是空的白图)值被使用。

    序列化和运行时 材质球属性

    材质球可以包含 序列化的和运行时设置的属性值。

    序列化数据是定义在shader 属性代码块中的所有数据。通常来说,这些值需要被存储在材质球中,并且用户可以在Inpsector面板中编辑他们。

    一个材质球也可以有一些没有被定义在 属性代码块中,但是也可以被shader使用的属性。典型的案例是这些属性是在运行时通过脚本设置的。比如 Material.SetColor.注意矩阵和数组都只能存在于非序列化的运行时属性中。(因为属性块中没法定义矩阵与数组)。

    特别的贴图属性

    对于每一个被设置为 shader/材质球的 属性的贴图,unity也设置了一些额外的信息到额外的向量属性中去。

    Texture tiling & offset

    材质球的贴图属性中通常都有缩放和偏移量字段。这个信息是通过一个float4{TextureName}_ST传给着色器的;

    属性:

    • x 包含 X 方向缩放值
    • y 包含 Y方向缩放值
    • z 包含 X 偏移量值
    • w 包含Y 偏移量值

    举个例子,如果一个着色器抱哈一个叫_MainTex的贴图,它的缩放信息就会存储在 _MainTex_ST向量中。

    Texture size

    {TextureName}_TexelSize - 一个float4属性包含了贴图的尺寸信息:

    • x 包含 1.0/宽度
    • y 包含 1.0/高度
    • z 包含 宽度
    • w 包含 高度

    Texture HDR 参数

    {TextureName}_HDR - 根据所使用的颜色空间,一个float4属性包含如何解码潜在HDR(例如rgbm编码)纹理的信息。

    Color space and color/vector shader data

    当使用 线性颜色空间,所有的材质球颜色属性都提供的是sRGB颜色,但是会转换为线性值再传递给着色器。

    比如,如果你的 着色器属性代码块包含一个颜色 属性,叫做“MyColor”,然后对应的“MyColor” HLSL变量将会得到这个颜色的线性值。

    对于那些被标记为Float 或者Vertor的类型属性,默认情况下没有颜色空间转换;它们被假定不包含颜色信息。给float/vector属性加上[Gamma]特性,然后用来表明它们是特别的sRGB 空间,就像这样是可以的。

  • 相关阅读:
    启动控制面板命令大全
    C#下载网页为mht文件
    基于C#语言的可编程表达式计算器设计
    FileSystemWatcher监视文件变动
    C#梁朝伟变刘德华之山寨实现
    Json之语法,格式
    Regex类
    C# 索引器
    优化正则表达式的诀窍
    正则表达式(二) 零宽断言与懒惰匹配以及平衡组
  • 原文地址:https://www.cnblogs.com/leiGameDesigner/p/8456704.html
Copyright © 2020-2023  润新知