ssRender实现ADSA——NOH效果

先上效果:

首先普及一下什么是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也是不错的想法。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值