3d人物半透明

  • Creator 版本: 3.8.6

  • 目标平台:

  • 重现方式:编辑3d人物模型,使其半透明化,采用材质builtin-standard,transparent模式,人物衣服半透明化但是能看到衣服下面的腿了,如何调整参数或者修改材质解决来隐藏 图片

  • 首个报错:

  • 之前哪个版本是正常的:

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率:

加一个pass先进行深度写入

我写shader是个二把刀,写了几个版本都有报错 :sweat_smile:,方便写一下吗

// 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

2赞