先上效果:
首先普及一下什么是NOH,NOH是车机地图的导航路线与高精地图的高精自定位能力,顾名思义车辆跟随显示的引导线自动行驶,完全由AI系统帮助驾驶。
1.ssRender实现的NOH引导线效果是通过shader完成。首先在引擎端Material下创建New Material和New Shader添加内置的shader代码
2.vertex代码不需要我们需改,只需要需改Fragment就可以了。为了和车道线同步转弯NOH的算法和车道线的算法一致,都是通过贝塞尔曲线实现,具体的算法公式如下,这里的t换成uv.y即可
3.纵向车道线的形状利用贝塞尔曲线完成,宽度用smoothstep插值运算完成即可
4.颜色自己定义就好了,alpha的变化利用sin的周期变化来实现
5.完整代码
precision mediump float;
varying vec2 ssUV;
uniform sampler2D BaseColor14;
uniform float ssOpacity;
uniform float test;
uniform float ssTime;
uniform float show;
uniform float lineV;
float Band(float t, float start, float end, float blur)
{
float step1 = smoothstep(start - blur, start + blur, t);
float step2 = smoothstep(end + blur, end - blur, t);
return step1 * step2;
}
float Rect(vec2 uv, float left, float right, float bottom, float top, float t)
{
float band1 = Band(uv.x, left, right, t);
float band2 = Band(uv.y, top, bottom, t);
return band1 * band2;
}
void main()
{
vec4 color = texture2D(BaseColor14, ssUV);
vec2 uv = ssUV;
vec3 col = vec3(0.198,0.572,1.0);
float x = uv.x;
float y = uv.y;
float tempV1 = pow((1.-y), 2.);
float tempV2 = 2.*y*(1.-y);
float tempV3 = pow(y, 2.);
float m_lineL1 = lineV*0.01+0.13;
float line = tempV1*m_lineL1 + tempV2*0.53 + tempV3*0.53;
float mask = Rect(vec2(x,y), line-y*0.05, line+y*0.05+0.02, 0.9, 0.0, 0.002) * show;
float alphac = step(0.5,mask);
gl_FragColor = vec4(col*1.0, test*color.a *alphac*sin(y + 2.5*ssTime));
}
今天的分享就到这了,ssRender对于shader的支持还是不错的。利用引擎来学习shader也是不错的想法。