【问题标题】:How to get full list of Unity shader properties如何获取 Unity 着色器属性的完整列表
【发布时间】:2016-06-10 11:29:53
【问题描述】:

我对着色器很陌生,一直在寻找 Unity 着色器属性的完整列表。我还没有找到任何这样的文件。我找到的是SL-Properties。在哪里可以找到属性及其功能的完整列表?

更新

SL-Properties 中给出了一个示例,显示了水着色器的属性列表,即_WaveScale_Fresnel_BumpMap 等。了解这些特定属性可以更轻松地找到解决方案。在发现以下属性之前,我最近尝试编写类似于笔画的代码。

fixed _Stroke;
half4 _StrokeColor;  

【问题讨论】:

  • 我找不到获取特定着色器属性列表的方法...拼命尝试更改材质的BlendOp...

标签: unity3d shader unity5 cg


【解决方案1】:

Unity 有自己的着色器语法,称为 ShaderLab

有关它的所有必要信息都可以在此website 上找到。
至于属性,请查看link

由于 nvidia 不再是 not supporting CG,最新的统一版本实际上使用 HLSL 编译器编译着色器并将生成的字节码转换为 GLSL。 CG 着色器代码几乎没有变化。如今,您可以使用 HLSL 语法利用 CG 不支持的现代着色器功能,例如计算着色器和曲面细分。

例如这些着色器属性:

_MyColor ("Some Color", Color) = (1,1,1,1) 
_MyVector ("Some Vector", Vector) = (0,0,0,0)
_MyRange ("My Range", Range (0, 1)) = 1
_MyFloat ("My float", Float) = 0.5 
_MyInt ("My Int", int) = 1 
_MyTexture2D ("Texture2D", 2D) = "white" {} 
_MyTexture3D ("Texture3D", 3D) = "white" {}
_MyCubemap ("Cubemap", CUBE) = "" {}

将在 Cg/HLSL 代码中声明为:

fixed4 _MyColor;
float4 _MyVector;
float _MyRange;
float _MyFloat; 
int _MyInt;
sampler2D _MyTexture2D;
sampler3D _MyTexture3D;
samplerCUBE _MyCubemap;


ShaderLab 中的属性类型以这种方式映射到 Cg/HLSL 变量类型:

• 颜色和矢量属性映射到 float4half4fixed4 变量。
• Range 和 Float 属性映射到 floathalffixed 变量。
• 纹理属性映射到常规 (2D) 纹理的 sampler2D 变量。
• 立方体贴图映射到 samplerCUBE
• 3D 纹理映射到 sampler3D

【讨论】:

  • 我应该如何在属性和cg中声明一个uint?我尝试完全像 _MyInt(显然将类型从 int 更改为 uint)但它没有编译。
  • 您还没有真正回答过这个问题:在哪里可以找到着色器属性的完整列表?
【解决方案2】:

Unity 中着色器的属性只是引擎可见的公共变量,因为 Cg 着色器被包装在 ShaderLab 程序中。

您可以在 Andy Touch 的演示文稿中看到 Unity 中着色器的结构:https://www.youtube.com/watch?v=zr1zQpdYG1Q&t=7m36s

所以,当你看到 fixed _Stroke; half4 _StrokeColor; 稍后在您的代码中,它只是 Cg 程序使用并绑定到这些属性的实际变量。

检查相邻的Unity docs section 以了解这些属性如何映射到着色器变量。

【讨论】:

    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2010-09-16
    • 2016-04-29
    • 1970-01-01
    相关资源
    最近更新 更多