找到官方shader并分析
- 下载对应资源包
- 找到
\DefaultResourcesExtra\Skybox-Cubed.shader
- 找到
\CGIncludes\UnityCG.cginc
- 观察变量, 观察tag, 观察代码
需要注意的内容
ASE要处理的内容
核心修改
添加一个Custom Expression
节点
code
内容为:
return DecodeHDR(In0, In1);
output type
设置为 float3
input
设置为两个float4
操作
把cube的采样的节点输入进来,即可,使用hdri的天空盒子了
解释
使用了UnityCG.cginc
文件中的decodehdr
函数, 从而可以使用, 官方也是使用了这个函数才可以使用的.但是这个函数不在官方api中, 所以只能通过自定义的方式来处理.
关于ASE节点 Amplify Shader Editor/Custom Expression的说明
Node Parameter | 描述 |
---|---|
Name | 自定义表达式名称。它将用于在内部命名生成的变量或函数。 |
Mode | 确定如何使用放置在“代码”文本区域上的代码。 |
Create: 放置在编码区域上方并连接到输入的结果将直接分配给输出端口 | |
Call: 放置在代码区域上的指令内联放置在着色器主体上,并且不会分配给任何内容。这对于调用在着色器的另一部分或包含的 cginc 上声明的函数特别有用。 | |
在呼叫模式处于活动状态时,将添加一个特殊的输入端口 In,该端口充当中继器,将连接到它的内容直接传递到节点输出端口。 | |
文件:可以将.cginc/.hlsl 文件拖放到新的“源”字段中,并自动将其作为 #include包含在着色器中。函数调用使用在 Name 上设置的值,后跟在创建的输入端口上设置的值。 | |
Available only on File Mode | |
Source | 要包含的库文本文件 |
Precision Suffix | 如果打开,它会自动向函数调用添加精度后缀。( 将_float或_half添加到函数调用 p.e MyFunctionCall_float()) |
Default Parameters | |
Precision | 声明节点内部变量时使用的精度。 |
定义变量可以容纳的字节数,从而有效地定义值的精确度。它的用处是由必要的硬件规格绑定的。最低精度稍快,但可能会产生错误和伪影。 | |
Float: 最高精度,适用于值可能非常高或非常低的值(即:位置、坐标等) | |
Half: 在大多数情况下,中等精度与 Float 一样好,但精度只有其一半 | |
Inherit: 对主节点属性使用全局精度集 | |
Code | 写入自定义表达式或函数的文本区域。创建函数或自定义表达式,具体取决于其正文是否包含 return 语句。 |
Set Unique | 如果打开,则会在函数/变量名称后附加一个唯一 ID。这允许不同的自定义表达式具有相同的名称。 |
例如,如果用户希望通过自定义表达式生成函数并由其他人使用,则应将其关闭以保持原始名称。 | |
Auto-Register | 即使与输出节点不存在连接,也可以注册由自定义表达式生成的函数。 |
Output Type | 新创建的表达式的变量类型或新创建的函数的返回类型。仅当呼叫模式关闭时可见。 |
Dependencies | 允许用户选择它所依赖的其他自定义表达式,以确保首先写入它们。 |
Inputs | 允许添加 (+)或删除 (-) 输入端口。输入端口可以通过直接调用其名称在代码区域内使用。 |
Qualifier | 指定函数模式下当前输入参数的类型限定符。在此模式下,将创建一个函数,并使用其分配的限定符将每个输入端口设置为函数输入参数。 |
In - 调用函数时,分配给参数的值将被复制到参数中。它可以在功能内部进行修改,因为它不会影响原始功能。 | |
Out - 函数调用方未初始化的值。该函数负责初始化此参数,所有更改都在上面完成,如果它也会被复制到函数调用时设置的原始变量中。 | |
InOut - 结合以前的限定符,值将设置为函数调用传递的限定符,但在函数体中对它所做的所有更改都将复制到原始限定符中。 | |
Precision | 用于为此输入端口创建的局部变量的精度。 |
定义变量可以容纳的字节数,从而有效地定义值的精确度。它的用处是由必要的硬件规格绑定的。最低精度稍快,但可能会产生错误和伪影。 | |
Float: 最高精度,适用于值可能非常高或非常低的值(即:位置、坐标等) | |
Half: 在大多数情况下,中等精度与 Float 一样好,但精度只有其一半 | |
Inherit Local: 对节点属性使用全局精度集 | |
Type | Data Type for the input port |
int - Int data type | |
float - Float data type | |
float2 - Vector2 data type | |
float3 - Vector3 data type | |
float4 - Vector4 data type | |
float3x3 - Matrix3x3 data type | |
float4x4 - Matrix4x4 data type | |
sampler1D - Sampler1D data type | |
sampler2D - Sampler2D data type | |
sampler3D - Sampler3D data type | |
samplerCUBE - SamplerCUBE data type | |
Name | 输入名称,在内部也用作变量或函数参数名称。 |
Value | 输入电流值。仅当相应的输入端口未连接时才可见。 |