
如图所示,我在预设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,改成认透明的