【ThreeJS】场景后处理增加圆形暗角效果

1.Shader脚本

var DarkMaskShader = {

	uniforms: {
		"tDiffuse": {
			value: null
		},
		"maskColor": {
			value: new THREE.Color(0x000000)
		},
		"maskAlpha": {
			value: 1.0
		},
		"markRadius": {
			value: 0.15
		},
		"smoothSize": {
			value: 0.5
		}
	},

	vertexShader: [

		"varying vec2 vUv;",

		"void main() {",

		"	vUv = uv;",
		"	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",

		"}"

	].join("\n"),

	fragmentShader: [

		"uniform float maskAlpha;",
		"uniform vec3 maskColor;",
		"uniform float markRadius;",
		"uniform float smoothSize;",

		"uniform sampler2D tDiffuse;",

		"varying vec2 vUv;",

		"float sdfCircle(vec2 coord, vec2 center, float radius)",
		"{",
		"	vec2 offset = coord - center;",
		"	return sqrt((offset.x * offset.x) + (offset.y * offset.y)) - radius;",
		"}",

		"void main() {",

		"	vec4 texel = texture2D( tDiffuse, vUv );",
		"   float sdfValue = sdfCircle(vUv, vec2(0.5, 0.5), markRadius);",
		"	if (sdfValue < 0.0){",
		" 		gl_FragColor = texel;",
		"	}else{",
		"		float a = smoothstep(0.0, smoothSize, sdfValue);",
		"   	gl_FragColor = mix(texel, vec4(maskColor, maskAlpha), a);",
		"	}",
		"}"

	].join("\n")

};

2.后处理通道增加ShaderPass

let effectDarkMask = new THREE.ShaderPass( DarkMaskShader );
finalComposer.addPass(effectDarkMask);

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值