当前位置: 首页 > news >正文

Unity3D Shader 属性详解

Unity3D Shader 属性详解

在 Shader 里,我们经常能看到这样的代码片段:

Properties
{_Color ("Main Color", Color) = (1,1,1,1)_MainTex ("Base Texture", 2D) = "white" {}
}

这些写在 Properties {} 里的内容,就是 Shader 属性(Properties)

它们的作用是让 美术或程序 能够在 Unity 材质面板C# 脚本 中修改 Shader 内部变量,从而让同一个 Shader 产生不同的视觉效果。

Properties 是什么

Properties 块定义的是 Shader 可以从外部编辑的参数

这些参数会自动出现在材质球(Material)面板上。

SubShader 中,你会用到同名变量(例如 _Color_MainTex),Unity 会自动把它们链接起来。

Properties
{_Color ("Main Color", Color) = (1,1,1,1)
}SubShader
{fixed4 _Color; // 对应 Properties 中的 _Color
}

Properties 的常见类型

类型示例默认值格式面板表现
Color_Color("Main Color", Color) = (1,1,1,1)RGBA颜色选择器
Vector_Offset("Offset", Vector) = (1,0,0,0)4D 向量四个浮点输入框
Range_Intensity("Intensity", Range(0,1)) = 0.5数值区间滑动条
Float_Power("Power", Float) = 2.0单个数值数值输入框
2D_MainTex("Base Texture", 2D) = "white" {}贴图纹理选择框
Cube_CubeMap("Environment", Cube) = "" {}立方体贴图CubeMap 选择
3D_VolumeTex("Volume", 3D) = "black" {}三维贴图Volume 选择

Properties 与 Shader 变量的对应关系

定义完 Properties 后,要在 CG 代码里定义同名变量,类型要匹配:

Properties 类型CG/HLSL 变量类型
Color / Vectorfloat4 / fixed4
Range / Floatfloat / half / fixed
2Dsampler2D
CubesamplerCUBE
3Dsampler3D

例如:

Properties
{_Color ("Main Color", Color) = (1,1,1,1)_MainTex ("Base Texture", 2D) = "white" {}
}SubShader
{fixed4 _Color;sampler2D _MainTex;
}

C# 中修改 Shader 属性

在脚本中可以通过材质访问这些属性:

Renderer renderer = GetComponent<Renderer>();
Material mat = renderer.material;// 设置颜色
mat.SetColor("_Color", Color.red);// 设置纹理
mat.SetTexture("_MainTex", someTexture);// 获取浮点数
float power = mat.GetFloat("_Intensity");

注意:属性名要与 Shader 中的变量名(如 _Color完全一致

默认贴图关键字

Unity 内置了一些特殊的默认贴图关键字,方便调试:

默认字符串说明
"white"白色纹理
"black"黑色纹理
"gray"灰色纹理
"bump"法线贴图默认纹理
""空贴图

例如:

_MainTex ("Texture", 2D) = "white" {}

表示如果没有指定纹理,就使用一张白色默认贴图。

Range 与 Float 的区别

Range 只是带有一个 UI 滑条的 Float

两者在 Shader 代码里其实是一样的类型。

_RangeValue ("Brightness", Range(0, 2)) = 1
_FloatValue ("Brightness", Float) = 1

在代码中它们都对应一个 float,区别仅在于 Inspector 显示方式。

隐藏属性与调试技巧

有时你不希望某个属性在面板中显示,可以用 [HideInInspector]

[HideInInspector]_HiddenValue ("Hidden", Float) = 1

其他常用标签:

修饰符说明
[NoScaleOffset]关闭纹理的 Tiling/Offset 控制
[Normal]表示贴图是法线贴图
[HDR]支持高动态范围颜色
[Toggle]显示成开关
[Enum]枚举选择
http://www.dtcms.com/a/533103.html

相关文章:

  • 做招聘的h5用哪个网站宁德网站开发
  • 多模态网络的设计和模态对齐相关
  • 91、使用paddleocr V5进行算能开发板适配
  • dw班级网站建设当前主流的网络营销方式
  • 网站打开为建设中如何用python做网站
  • dedecms导购网站模板庄河城乡建设管理局网站
  • CAP 定理详解
  • TVM | Define
  • 三蛋空间 wordpress乐云seo官网
  • 用易语言做攻击网站软件网络营销特点是什么
  • 网站定制开发前期要有一定的规划百度网盟推广费用投入
  • 9. 从0到上线:.NET 8 + ML.NET LTR 智能类目匹配实战--Web API 接口与前端集成:把能力对外开放
  • 数据库的安全与保护(终)
  • AI 应用层革命(四)——人机共生的哲学与终极形态
  • 工程建设业主官方网站做视频网站的备案要求
  • 设计模式-适配器模式(Adapter)
  • 为什么建设法律法规网站东莞网站制作公司
  • 成品网站w灬源码伊甸如何选择网站托管公司
  • Lamda表达式
  • 面经分享--招银云创汇总
  • IDEA Debug高阶技巧
  • 备案做电影网站怎么自己制作一个网站
  • 腾讯云部署gitlab
  • 杭州蚂蚁 做网站的公司html官方下载
  • 构建AI智能体:七十五、用扣子平台创建工作流:从自动化到智能化的进阶之路
  • 高通AR1平台的智能眼镜全检系统
  • 搜索引擎推广的基本方法有海南搜索引擎优化
  • 做推广效果哪个网站好十堰哪家网站制作公司技术好
  • 爬完数据就完了?用 Pandas 做数据清洗与预处理
  • nestjs 架构篇:控制器、服务、数据访问