-
Creator 版本: 3.8.6
-
目标平台:
-
重现方式:编辑3d人物模型,使其半透明化,采用材质builtin-standard,transparent模式,人物衣服半透明化但是能看到衣服下面的腿了,如何调整参数或者修改材质解决来隐藏
-
首个报错:
-
之前哪个版本是正常的:
-
手机型号:
-
手机浏览器:
-
编辑器操作系统:
-
重现概率:
加一个pass先进行深度写入
我写shader是个二把刀,写了几个版本都有报错 ,方便写一下吗
// Effect Syntax Guide: https://docs.cocos.com/creator/manual/zh/shader/index.html
CCEffect %{
techniques:
-
passes:
-
vert: depth-vs:vert
frag: depth-fs:frag
depthStencilState:
depthFunc: less_equal
depthTest: true
depthWrite: true
blendState:
targets:
-
blend: true
blendMask: none
-
-
vert: unit-vs:vert
frag: unlit-fs:frag
depthStencilState:
depthFunc: less_equal
depthTest: true
depthWrite: false
blendState:
targets:
-
blend: true
blendSrc: src_alpha
blendDst: one_minus_src_alpha
rasterizerState:
cullMode: none
properties:
mainTexture: { value: white }
diffColor: { value: [1, 1, 1, 1], editor: { type: color } }
blendScale: { value: 0.0, editor: { slide: true, range: [0.0, 1.0], step: 0.1, type: float } }
-
-
}%
CCProgram depth-vs %{
precision highp float;
#include <legacy/input-standard>
#include <builtin/uniforms/cc-global>
#include <builtin/functionalities/world-transform>
vec4 vert(){
StandardVertInput In;
CCVertInput(In);
mat4 matWorld,matWorldIT;
CCGetWorldMatrixFull(matWorld,matWorldIT);
vec4 v_pos = cc_matProj*(cc_matView*matWorld)*In.position;
return v_pos;
}
}%
CCProgram depth-fs %{
precision highp float;
#include <legacy/output>
vec4 frag () {
return CCFragOutput(vec4(0.,0.,0.,1.));
}
}%
CCProgram unit-vs %{
precision highp float;
#include <legacy/input-standard>
#include <builtin/uniforms/cc-global>
#include <builtin/functionalities/world-transform>
out vec4 v_pos;
out vec2 v_uv;
out vec4 w_normal;
vec4 vert(){
StandardVertInput In;
CCVertInput(In);
mat4 matWorld,matWorldIT;
CCGetWorldMatrixFull(matWorld,matWorldIT);
w_normal=vec4(In.normal,1.0)*matWorldIT;
v_pos = cc_matProj*(cc_matView*matWorld)*In.position;
v_uv = a_texCoord;
return v_pos;
}
}%
CCProgram unlit-fs %{
precision highp float;
#include <legacy/output>
#include <legacy/fog-fs>
#include <builtin/uniforms/cc-global>
in vec2 v_uv;
in vec4 v_pos;
in vec4 w_normal;
uniform sampler2D mainTexture;
uniform FsConstant {
vec4 diffColor;
float blendScale;
};
vec4 frag () {
//获取世界空间下的法线
vec3 worldNormal = normalize(w_normal.xyz);
//获取世界空间下的平行光方向
vec3 worldLightDir = normalize(-cc_mainLitDir.xyz);
//对纹理采样
vec4 texcolor=texture(mainTexture,v_uv);
//贴图反射率
vec3 albedo=diffColor.xyz*texcolor.xyz;
//获取环境光
vec3 ambient = cc_ambientSky.xyz*albedo;
//漫反射颜色=I*max(dot(N,L))
vec3 ld=albedo.xyz*cc_mainLitColor.xyz*max(0.0,dot(worldNormal,worldLightDir));
vec4 fcol=vec4(ld+ambient,blendScale*texcolor.a);
return CCFragOutput(fcol);
}
}%
给你个参考 添加一个深度写入pass