[LayaAir3]关于多pass模版测试

let forwardPass = subShader.addShaderPass(HeroVS, HeroFS);
        forwardPass.statefirst = true;
        forwardPass.renderState.cull = Laya.RenderState.CULL_BACK;
        forwardPass.renderState.stencilWrite = true;
        forwardPass.renderState.stencilRef = 1;
        forwardPass.renderState.stencilTest = Laya.RenderState.STENCILTEST_GREATER;
        forwardPass.renderState.stencilOp = new Laya.Vector3(Laya.RenderState.STENCILOP_KEEP, Laya.RenderState.STENCILOP_KEEP, Laya.RenderState.STENCILOP_REPLACE); 
        let xRay = subShader.addShaderPass(XRayVS, XRayFS);
        xRay.renderState.depthWrite = false;
        xRay.renderState.depthTest = Laya.RenderState.STENCILTEST_GREATER; 
        xRay.statefirst = true;
        xRay.renderState.cull = Laya.RenderState.CULL_BACK;
        xRay.renderState.stencilRef = 0;
        xRay.renderState.stencilTest = Laya.RenderState.STENCILTEST_EQUAL;
        xRay.renderState.stencilOp = new Laya.Vector3(Laya.RenderState.STENCILOP_KEEP, Laya.RenderState.STENCILOP_KEEP, Laya.RenderState.STENCILOP_KEEP);
 
 
 
 看到官方案例里面,有实现描边的多pass方案MultiplePassOutlineMaterial,我的目标是:实现角色被遮挡部分特殊效果显示,里面要用到模版测试,发现renderState中有模版测试的设置,但是发现没有起到效果,而深度测试起效,模版测试不起效,导致角色自遮挡部分也会特殊效果显示,这不是我想要的,请问下官方,这种方法是否支持,我也看到官方关于模版的demo,里面有对整个Material的renderState的模版测试设置,开启关闭后,小球显示,隐藏,是有效果的,不知道官方是否支持多pass的模版测试,还有就是自定义shader里面,是否支持模版测试代码定义,这样方便资源管理。
已邀请:

Heured

赞同来自:

试了一下,官方是支持的,不过有两个细节要注意一下,Camera的DepthTextureFormat要调成DepthStencil_24_8,pass的statefirst属性要置true

要回复问题请先

商务合作
商务合作