shader可以修改投影代码吗?

屏幕截图 2023-11-13 120059
如图所示,我在预设unlight shader上添加了alpha test,来使MeshRenderer渲染出sprite的感觉,但是阴影这块不受alpha clip的影响,我在shader代码里没有看到投影相关的代码,理论上应该有个投影pass吧?但是shader里并没有。是不是有办法可以覆盖投影代码呢?这样只要在对应的像素做一次采样再根据该点的alpha值判断是否投影这样就能成了

放下shader代码,实际上就是预设shader加了一行ALPHA_TEST,从这里看不到投影的pass,但是再设置项目阴影后依旧可以看到影子
// Effect Syntax Guide: https://docs.cocos.com/creator/manual/zh/shader/index.html

CCEffect %{

techniques:

  • name: opaque

    passes:

    • vert: legacy/main-functions/general-vs:vert # builtin header

      frag: unlit-fs:frag

      properties: &props

      mainTexture: { value: white }

      mainColor: { value: [1, 1, 1, 1], editor: { type: color } }

      alphaThreshold: { value: 0.5, traget: colorScaleAndCutoff.w, editor: { parent: USE_ALPHA_TEST } }

  • name: transparent

    passes:

    • vert: general-vs:vert # builtin header

      frag: unlit-fs:frag

      blendState:

      targets:

      • blend: true

        blendSrc: src_alpha

        blendDst: one_minus_src_alpha

        blendSrcAlpha: src_alpha

        blendDstAlpha: one_minus_src_alpha

      properties: *props

}%

CCProgram unlit-fs %{

precision highp float;

#include <legacy/output>

#include <legacy/fog-fs>

#include

in vec2 v_uv;

in vec3 v_position;

uniform sampler2D mainTexture;

uniform Constant {

vec4 mainColor;

};

vec4 frag () {

vec4 col = mainColor * texture(mainTexture, v_uv);

CC_APPLY_FOG(col, v_position);

ALPHA_TEST(col);

return CCFragOutput(col);

}

}%

顶一下,我搜了下shader阴影相关,但是完全找不到有关的内容,难道阴影真的就是定死的?只能按环境设置和物体形状来?

頂一下。。。

shader里面用discard去掉透明区域试试

试了一下,结果是一样的,阴影部分并没有被修改

可能是shadowmap阶段用了一个独立的简易shader,不受你这个shader影响

场景设置
不应该呀,我场景设置阴影用的不是shadow map

cocos creater有没有除错工具可以把一帧的渲染分阶段展示出来?

建议直接在地上铺一张渲染成灰色的图作为影子。

引擎里改planar的shader,改成认透明的