CustomStencil shader 理解

CustomStencil shader在Engine/Content/BufferVisualization\CustomStencil

材质蓝图内容:

在场景中的效果如下:

  • 需要r.customdepth=3 ,BufferVisualization选择CustomStencil。
  • mesh需要设置:

分析材质:

材质最终效果由两部分差值获得,一个根据scenetexture(CustomStencil)计算颜色,另一个根据scenetexture(CustomStencil)现实显示数字。

计算颜色部分在本篇不分析。主要分析一下显示数字

ScreenPosition(ViewprotUV):屏幕UV输入

Stencil Text Tiling:frac(a.xy * 20) :将屏幕横排和竖排都划分20份。

UV的U:

  • Text U Coord:((a.x - 0.25f) / 0.5f) * 3.f :将横坐标分成六份(在20份基础上划分)
  • Unit Value:((int)trunc((a < 1.f) ? (b / 100) : ((a < 2.f) ? (b / 10) : b)) % 10) :横轴在不同位置,更加数值填写不同数值。该方式表示填写六份中的前三份。
  • Letter U Coord: lerp(a / 64.f, (a + 1) / 64.f, b - trunc(b)) :差值采样对应图片上的数字。
  • TextureSample:
    • 图片:
    • 图片Tiling方法:

UV的V:

  • Letter V Coord :(a.y - 0.3) / (0.7 - 0.3):将采集的图片放在屏幕的0.3到0.7.(20份基础上)

这样就完成采样,数值的显示。

然后是数值显示和颜色进行差值

Text Box Mask:abs(a - 1.5) <= 1.5 && abs(b - 0.5) <= 0.5:U采用前三个,所以范围是0到3,V是0到1范围。为了计算速到,用公式方式abs表示。

应用

如果想表示四个字符,如下图,如何做呢?

改三个地方:

1.Unit Value:((int)trunc((a < 1.f) ? (b / 1000) : ((a < 2.f) ? (b / 100) : (a < 3.f) ? (b / 10) : b)) % 10):要多计算一位。

2.Text Box Mask:abs(a - 2) <= 2 && abs(b - 0.5) <= 0.5:U变成四个表示,范围成了0到4。

3.

Unit Value不能使用SceneTexture(CustomStencil),手动设置一个数值连上。理由是SceneTexture(CustomStencil)只能返回0-255.

为啥研究这个?

想修改SceneTexture(CustomStencil)返回值大于255.因为在输出Semantic Map时,如果Semantic的种类大于255,就无法展示。比如AirSim表示语义图,要小于255.

接下来研究如何修改SceneTexture(CustomStencil)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值