From 9cb84acf4c621a3fbd32c0d91ede4e65843e9dcd Mon Sep 17 00:00:00 2001 From: BlueRose <378100977@qq.com> Date: Tue, 18 Jul 2023 16:02:58 +0800 Subject: [PATCH] vault backup: 2023-07-18 16:02:58 --- .../使用Curve进行深度适配的Outline.md | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/03-UnrealEngine/Rendering/Material/使用Curve进行深度适配的Outline.md b/03-UnrealEngine/Rendering/Material/使用Curve进行深度适配的Outline.md index b74b885..42f74d9 100644 --- a/03-UnrealEngine/Rendering/Material/使用Curve进行深度适配的Outline.md +++ b/03-UnrealEngine/Rendering/Material/使用Curve进行深度适配的Outline.md @@ -11,28 +11,33 @@ rating: ⭐ ![[MultiDraw_OutlineMaterial.png]] -UE单位为cm,理论上范围为10cm~10000cm(1000m)。假设标准的角色身高为180cm(110~200cm变化比较轻微)定义一个标准数StandardCharacterHeight。 +## ControlCurve + +UE单位为cm,理论上描边宽度控制范围为10cm~10000cm(1000m)。假设标准的角色身高为180cm(110~200cm变化比较轻微)并以此定义一个标准数StandardCharacterHeight,经过观察`10~ ControlWidthRangeMax`范围适合使用CurveTexture。而超过ControlWidthRangeMax = StandardCharacterHeight * 2的区域基本是一个线性区间,所以可以使用一个线性函数来控制。 -经过观察`10~StandardCharacterHeight * 2`范围适合使用CurveTexture,超过StandardCharacterHeight * 2的区域基本是一个线性区间。 -{360 0.5} {10000 0.018} +以下为原始数据: -斜率 k = 0.0005/1cm +| | | | | | | | | +| --- | --- | --- | ---- | --- | ---- | --- | ---- | +| x轴 | 15 | 20 | 25 | 30 | 40 | 60 | 100 | +| y轴 | -12 | -9 | -7.2 | -6 | -4.5 | -3 | -1.8 | +经过重映射后: +| | | | | | | | | +| --- | ----- | ---- | ---- | ------ | ----- | ------- | ---- | +| x轴 | 0.15 | 0.2 | 0.25 | 0.3 | 0.4 | 0.6 | 1 | +| y轴 | 0.667 | 0.75 | 0.8 | 0.8333 | 0.875 | 0.91666 | 0.95 | -x轴 10=>0 , 180 => 1 - -18=0 , -0.018 +考虑需要让描边变得平滑以及让效果更好的考虑,所以以此为基础数据进行了调节(平移曲线并且调整了几个点),以下去本人设置的曲线:![[MultiDraw_OutlineCurve.png|800]] - 15 20 25 30 40 60 100 - -12 -9 -7.2 -6 -4.5 -3 -1.8 +### 线性函数斜率k的计算 +取得ControlWidthRangeMax上一点(360 0.5)与最大范围x=10000的一点(10000 0.018),即可取得斜率 k = 0.0005/1cm。 +实际使用0.0005的效果不佳,经过调整最终斜率使用0.002。 - 0.33 0.25 0.2 0.1666 0.125 0.08333 0.05 - 0.667 0.75 0.8 0.83334 0.875 0.91666 0.95 - - -最终斜率使用0.002 - +### Remap +```c++ half invLerp(half from, half to, half value) { return (value - from) / (to - from); @@ -47,8 +52,4 @@ half remap(half origFrom, half origTo, half targetFrom, half targetTo, half valu half rel = invLerp(origFrom, origTo, value); return lerp(targetFrom, targetTo, rel); } - - - - -以下去本人设置的曲线:![[MultiDraw_OutlineCurve.png]]] \ No newline at end of file +``` \ No newline at end of file