# 着色器: rendinst_flag_colored ## 概述 这是专为布料模拟而设计的简单着色器。 **参数:** - `script:t="frequency_amplitude=1,1,1,1"` – 随机频率和振幅的间隔; - `script:t="wave_length=1"` – 波长; - `script:t="wind_direction=0,0,1,0"` – 风向; - `script:t="use_painting=1"` – main 参数启用绘画; - `script:t="paint_palette_row=1"` – 在基于 *daNetGame* 的项目中绘制参数,类似于 [rendinst_simple_painted](rendinst_simple_painted.md) 着色器; - `script:t="paint_white_point=0.1"` - `script:t="paint_black_point=0.05"` - `script:t="paint_mult=1"` - `script:t="micro_detail_layer=0"` – 微细节设置; - `script:t="micro_detail_layer_v_scale=1"` - `script:t="micro_detail_layer_uv_scale=1"` ## 功能 此着色器使用两个纹理(漫反射和法线)来启用基本几何体动画。您可以为顶点位移配置正弦参数,从而在较密集的网格上获得更平滑的结果。 ```{important} 确保仅将着色器应用于使用顶点颜色绘制的几何体,否则使用着色器可能会导致游戏错误。 ``` ## 动画几何 要设置动画的网格区域由顶点颜色的 R 通道定义。不使用 G 和 B 通道。

Vertex Color

Result

```{note} 始终将未使用的顶点颜色通道重置为黑色,因为它们默认为白色(所有通道都设置为最大值)。 ``` ## 参数 - `script:t="frequency_amplitude=1,1,1,1"` – 定义频率和振幅间隔。(在这种情况下,频率控制波振荡的速度,而不是波长): - 第 1 和第 2 个分量 – 频率范围(最小值、最大值), - 第 3 和第 4 个分量 – 振幅范围 (最小值、最大值)。 在任务开始时,从这些间隔中选择随机值,并在整个游戏中保持不变。该位置的不同资产将使用不同的值进行动画处理。

Frequency = 1

Amplitude = 1

Frequency = 3

Amplitude = 3

随机值在 *Asset Viewer* 中不可见,因此请首先验证组件 1 和 3 中的最大值(因为这些值显示在 *Asset Viewer*中)。 之后,将这些值移动到组件 2 和 4,并在组件 1 和 3 中设置最小值。 - `script:t="wave_length=1"` – 定义波长。 较长的波长会减少振荡细节,因为正弦波会拉伸,而模型只能捕获其中的一小部分。

Wavelength = 1

Wavelength = 0.5

Wavelength = 5

- `script:t="wind_direction=0,0,1,0"` (临时参数) – 风向由临时参数定义,因为规划了一个全局风系统。在 *Asset Viewer* 和 *daEditor* 中,风向基于全局轴运行,因此请确保在游戏中验证波向: - 第 1 个组件控制沿 X 轴的振荡; - 第 2 个组件控制沿 Z 轴(垂直)的振荡; - 第 3 个组件控制沿 Y 轴的振荡。

wind_direction=1,0,0,0

wind_direction=0,0,1,0

- `script:t="use_painting=1"` – 基于 *daNetGame* 的项目绘制参数的工作方式类似于 [rendinst_simple_painted](./rendinst_simple_painted.md) 着色器,不同之处在于此着色器默认不绘制。要启用绘画,请按如下方式设置参数: - '1' – 启用绘画; - '0' – 禁用绘画(可选)。 ## 在基于 daNetGame 的项目中与 Global Wind 合作 此着色器还支持使用全局风图和一组附加参数的风动画。以前的算法仍然可用,风行为由 `shadervar wind_type`参数控制。 新算法是首选算法,因为它考虑了风强度变化,包括风发射器。 **参数:** - `wind_type = 0` – 使用旧的动画算法,不受外部因素的影响,并使用 `frequency_amplitude`, `wind_direction`, `wind_strength`, 和 `wave_length`进行配置。 - `wind_type = 1` – 忽略顶点中的 R 通道的新算法 color,而是使用距 Flagpole 轴的标准化距离(范围从连接点的 '0' 到 Flag 末端的 '1')。 - `wind_type = 2` – 在顶点颜色中使用 R 通道的新算法。 为了正确作,R 通道必须从连接点的 '0' 持续增加到标志末端的 '1',尽管增加不需要是线性的。如果标志的大部分颜色均匀,则可能会出现不正确的行为。 - `flagpole_pos_0`, `flagpole_pos_1` – 在模型的坐标系中定义连接标志的线段。沿此线段的点保持静止。对于单个固定点,可以使用非常短的段。 - `flag_length` – 定义标志的长度,或从轴到标志末端的距离。此值不需要精确;将其设置为比实际大小大 10-15% 是可以接受的,但不建议将其设置为更小。 其他可选参数包括: - `flag_movement_scale = 1` – 控制风从其静止位置弯曲和移动旗帜的程度。 - `stiffness = 0.1` – 确定标志的抗弯曲阻力。 - `stretch = 0.1` – 控制标志的拉伸程度: - `0` – 无拉伸, - `1` – 无限拉伸。 - `sway_speed = 1` – 定义标志弯曲的速度。 - `bend = 2` – 塑造旗帜的弯曲方式。 - `deviation = 4` – 控制标志偏离其平衡位置时的形状。 ```{seealso} 您可以查看具有不同参数配置的着色器结果 [此处](https://drive.google.com/drive/folders/10mY9r2kewTMMaSTC5YUr2pLRlPb2b-LA?usp=sharing). ```