前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【ThreeJS】场景后处理增加圆形暗角效果

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

作者头像
Ning@
发布2021-11-10 15:19:38
1K0
发布2021-11-10 15:19:38
举报
文章被收录于专栏:烤包子烤包子

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);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档