US5L7——属性的特性
US5L7——属性的特性 本章代码关键字 123456[HideInInspector] // 从Inspector面板隐藏属性[NoScaleOffset] // 让贴图属性在材质面板上隐藏纹理Tiling和Offset选项[Normal] // 检测关联的纹理贴图是否为法线贴图,如果不是法线,会弹出修复提示[HDR] // 让2D纹理贴图或者颜色属性开启高动态范围(HDR)效果,使数值突破 1 的限制,常用于自发光属性[Space] // 在某一个属性前添加一个空白行,如果填入数值,可以添加对应行数的空白行[Header()] // 可以在材质属性面板上添加标题文字 属性的特性 所谓的属性的特性,就是在属性前加上一些类似特性的限制 让属性在 Inspector 窗口中进行 有限制的显示 或者 特殊的布局显示 常用的限制特性 从 Inspector 面板隐藏属性...
US5L6——PowerSliderDrawer和IntRangeDrawer
US5L6——PowerSliderDrawer和IntRangeDrawer 本章代码关键字 12[PowerSlider] // 让属性在Inspector窗口中显示为一个指数滑块,相比普通的线性滑块,它可以更方便的调整那些变化范围较大、非线性分布的参数[IntRange] // 让属性在Inspector窗口中显示为一个整数范围滑块,使得滑块只能按整数调整 PowerSliderDrawer的使用 作用:PowerSliderDrawer 是 Unity 自带的继承自 MaterialPropertyDrawer (材质属性绘制器) 的类 使用它修饰属性,可以让该属性在 Inspector 窗口中显示为一个指数滑块, 相比普通的线性滑块,它可以更方便的调整那些变化范围较大、非线性分布的参数, 比如:当属性的值范围较大,但其效果对某些特定范围特别敏感时,可以通过 PowerSlider 进行更直观的调整 它和普通滑块属性的区别是: 普通滑块属性默认是线性分布,即滑块的位置与参数值成正比 PowerSlider 提供了...
US5L5——EnumDrawer和KeywordEnumDrawer
US5L5——EnumDrawer和KeywordEnumDrawer 本章代码关键字 12[Enum()] // 让float属性在Inspector窗口中显示一个下拉列表[KeywordEnum()] // 让属性在Inspector窗口中显示一个下拉列表,同时生成对应的选项关键字 EnumDrawer的使用 作用:EnumDrawer 是 Unity 自带的继承自 MaterialPropertyDrawer(材质属性绘制器)的类 使用它修饰属性,可以让该属性在 Inspector 窗口中显示一个下拉列表,供用户选择,使用方式为: 1[Enum(显示名1, 值1, 显示名2, 值2, ...)] 属性名("显示名称", Float) =...
US5L4——ToggleDrawer
US5L4——ToggleDrawer 本章代码关键字 1[Toggle] // 将float数据以开关的形式在材质属性面板上显示 自带Shader材质属性绘制类 通过之前的学习,我们知道通过继承 MaterialPropertyDrawer(材质属性绘制器)实现的类,可以自定义 Shader 属性在 Inspector 窗口的外观 而自带 Shader 材质属性绘制类指的就是 Unity 内部实现好的继承自 MaterialPropertyDrawer(材质属性绘制器)的绘制类 可以让我们在 Shader 属性语句块中直接使用,让属性在Inspector窗口中具备特殊样式,方便我们进行材质球参数设置 ToggleDrawer 作用:将 float 数据以开关的形式在材质属性面板上显示,数值只能设置为 0 或 1,0 为关闭,1 为开启 使用场景: 开启或关闭某个特效(比如是否启用边缘) 切换某些功能(比如是否使用纹理颜色) 控制条件分支逻辑 等等 用法:在属性语句块中声明属性时,在属性前加上 [Toggle] 或...
US5L3——Shader变体和关键字
US5L3——Shader变体和关键字 本章代码关键字 12#pragma shader_feature // 声明局部关键字,只有关键词启用时才会生成对应Shader变体#pragma multi_compile // 声明局部关键字,不管是否启用都会生成对应Shader变体 Shader 中的变体 Shader Variant(变体)指的是一个 Shader 的特定配置,通过不同的 关键字(Keywords) 和 设置组合 来实现不同的效果 每一种关键字组合或设置都会生成一个独立的 Shader 变体,最终以二进制形式存储在构建文件中供运行时使用 说人话:Shader 变体就是基于一个 Shader 文件当中的代码,编译生成多个版本的 Shader 它基于关键字来生成各种不同的版本 举例说明:一个 Shader 中有两个关键字,每个关键字有两种状态(启用或禁用),最终生成的变体数量就是 22 = 4 变体 1:没有启用任何关键字(默认)。 变体 2:启用了 关键字1。 变体 3:启用了 关键字2。 变体 4:同时启用了 关键字1 和...
US5L2——MaterialPropertyDrawer类
US5L2——MaterialPropertyDrawer类 MaterialPropertyDrawer MaterialPropertyDrawer(材质属性绘制器)用于自定义材质属性在材质面板中的显示和交互方式的 材质属性通常在 Shader 中通过属性语句块定义。默认情况下,Unity 提供了一些基础的控件(如滑块、颜色选择器等) 通过继承 MaterialPropertyDrawer(材质属性绘制器),你可以为自定义 Shader 属性创建更加灵活和直观的控件 MaterialPropertyDrawer 和 ShaderGUI 的区别 ShaderGUI 是用来自定义整个材质面板的, 而 MaterialPropertyDrawer(材质属性绘制器)是用来自定义某一个属性的 相当于可以更加精细的来进行属性自定义显示封装 MaterialPropertyDrawer 类的声明 新建一个 C# 脚本,继承自 MaterialPropertyDrawer 类,类名最好以 Drawer 结尾 重写 void OnGUI(Rect position,...
US5L1——ShaderGUI类
US5L1——ShaderGUI类 前置知识:UG1——IMGUI系列,UED——Unity编辑器拓展 本章代码关键字 123456789101112ShaderGUI // 用于自定义材质Inspector界面的基类,通过继承ShaderGUI,可以完全控制材质编辑界面的布局和功能void OnGUI() {} // 继承ShaderGUI的类需要重写该方法以实现自定义材质Inspector界面MaterialEditor // 提供与材质交互的接口,比如材质属性值等materialEditor.target // 可以利用它获取到材质球,需要手动as一次materialEditor.ShaderProperty() // 可以将属性设置为对应名字,并且使用默认GUI显示MaterialProperty //...
US5——Shader进阶知识
US5——Shader进阶知识 本系列学习内容: 自定义材质面板 ShaderGUI类 MaterialPropertyDrawer类 Unity 自带 Shader 材质属性绘制类 Shader变体和关键字 ToggleDrawer EnumDrawer和KeywordEnumDrawer PowerSliderDrawer和IntRangeDrawer 属性的特性 帧调试器 表面着色器
US4L8-5——噪声雾效
US4L8-5——噪声雾效 噪声雾效 因此所谓的噪声雾效,其实就是在我们之前已经实现的屏幕后处理效果中的全局雾效中, 结合噪声和内置时间参数,去实现出不规则、动态的全局雾效,让我们的雾效更具动态感,真实感! 实现的全局雾效相关内容可见:US3S11L6——深度纹理实现全局雾效 噪声雾效基本原理 一句话总结噪声雾效基本原理: 噪声雾效可以基于我们之前实现的屏幕后处理效果的全局雾效进行修改,通过添加噪声纹理结合 Shader 内置时间变量实现雾的不均匀以及动态效果 关键点: 不均匀效果的实现 我们可以利用柏林噪声算法生成的噪声纹理灰度图来制作不均匀感。 从灰度图中采样得到 0~1 范围的值,再通过减去 0.5 的方式将其区间变为 -0.5~0.5 之间, 并用这个系数参与最后的雾的混合因子计算中,从而让均匀的雾变得不均匀。 123456float2 speed = _Time.y * float2(_FogXSpeed, _FogYSpeed); // 雾的动态计算float noise = (tex2D(_Noise, i.uv +...