Logo with GodRays Effect | 射线光晕特效 | Three.js后期特效处理教程

在本教程中,我们将在几分钟内演示如何使用JavaScript和Three.js 创建一个带有god ray背景的蝙蝠侠徽标。让我们看看!

在上一个教程中,我们已经向您展示了如何使用Three.js将三维汽车模型导入到网页中。本教程将重用Code来导入蝙蝠侠徽标模型。

add-3d-model-website-2

接下来我要找一个适合蝙蝠标志的模型。我在Sketchfab上找到了一个免费版本,所以让我们下载它。

下面是上一个教程中的Code。让我们用蝙蝠侠的标志替换汽车模型,并将模型缩放大小从0.5改为100。
let loader = new THREE.GLTFLoader();
loader.load(‘scene.gltf’, function(gltf){
let bat = gltf.scene.children[0];
bat.scale.set(100,100,100);
scene.add(gltf.scene);
animate();
});

让我们将场景背景更改为黑色,并更改相机位置和角度。我也会增加视场角和视距。
scene.background = new THREE.Color(0x020202);
camera = new THREE.PerspectiveCamera(60,window.innerWidth/window.innerHeight,1,50000);
camera.position.y = 310;
camera.position.z = 500;

接下来我们要调整灯光Source。我们已经有多个灯光Source从上一个教程。现在我们只需要一个背景光。我将灯光颜色设置为暖黄色并降低亮度。也可以改变方向使背景发光。
let directionalLight = new THREE.DirectionalLight(0xffccaa,3);
directionalLight.position.set(0,0,-1);
scene.add(directionalLight)

现在要创建一个体积光或上帝光线,我们需要创建一个光Source的形状。让我们创建一个圆形。上帝光线效果的颜色由光线Source材质的颜色决定。我要调成黄色。我会把它放在蝙蝠标志后面。还可以添加一个小的水平比例来创建椭圆形状。
let circleGeo = new THREE.CircleGeometry(220,50);
let circleMat = new THREE.MeshBasicMaterial({color: 0xffccaa});
let circle = new THREE.Mesh(circleGeo, circleMat);
circle.position.set(0 ,100 ,-500);
circle.scale.setX(1.2);
scene.add(circle);

场景准备好了。下一步是在我们刚刚创建的形状上添加上帝射线后处理效果。有一个很棒的Three.js后处理库,可以帮您完成繁重的工作。只需从github下载最新版本或使用npm install命令,就可以了!

下载后,复制postprocessing.js并将其包含到带有脚本标记的页面中。

<script src=“postprocessing.min.js”></script>

下一步使用上帝射线效果构造器创建一个效果对象。我们将通过摄像机和我们的圆形。最后一个是可选对象,我们可以自定义上帝光线的特性。

这些数字没有实际的公式。这取决于你希望你的光是怎样的。尝试图书馆的官方演示,以了解更多关于每个属性的信息。

好的,效果对象已经准备好了。下一步是创建通行证。Pass是我们如何在后期处理中使用着色器的。我们需要的第一个关卡是一个renderPass。通常,我们将使用webgl渲染来渲染场景。但由于要应用后处理,我们将不得不使用renderPass。
let godraysEffect = new POSTPROCESSING.GodRaysEffect(camera, circle, {
resolutionScale: 1,
density: 0.8,
decay: 0.95,
weight: 0.9,
samples: 100
});

接下来是effectPass。在这里,你将通过我们创建的上帝光线效果对象。可以向过程添加多个效果。我们还需要将render to screen属性设置为true才能启用它。

最后一步是创建一个效果生成器,在这里您将添加所有的过程。您需要将普通呈现程序传递给构造函数。然后使用addPass添加所有的通行证。

然后用composer渲染场景。

function animate() {
composer.render(0.1);
requestAnimationFrame(animate);
}

看起来不错,但如果你仔细看,你会看到锯齿状的边缘。

3D-batman-logo-Godrays-5

我们可以通过添加抗锯齿效果来解决这个问题。使用此库中提供的smapass。

这就是本Three.js教程的全部内容。希望有帮助!

<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8 />
<link rel=“stylesheet” type=“text/css” href=“styles.css” />
</head>
<body>
<script src=“three.min.js”></script>
<script src=“GLTFLoader.js”></script>
<script src=“OrbitControls.js”></script>
<script src=“postprocessing.min.js”></script>
<script>
let scene, camera, renderer, composer,controls;
function init() {
scene = new THREE.Scene();
scene.background = new THREE.Color(0x020202);
camera = new THREE.PerspectiveCamera(60,window.innerWidth/window.innerHeight,1,50000);
camera.position.y = 510;
camera.position.z = 500;
controls = new THREE.OrbitControls(camera);
controls.addEventListener(‘change’, renderer);
controls.panSpeed = 0.1;
controls.rotateSpeed = 0.1;
controls.update();
let directionalLight = new THREE.DirectionalLight(0xffccaa,3);
directionalLight.position.set(0,0,-1);
scene.add(directionalLight);
renderer = new THREE.WebGLRenderer({antialias:true});
renderer.setSize(window.innerWidth,window.innerHeight);
document.body.appendChild(renderer.domElement);
let circleGeo = new THREE.CircleGeometry(220,50);
let circleMat = new THREE.MeshBasicMaterial({color: 0xffccaa});
let circle = new THREE.Mesh(circleGeo, circleMat);
circle.position.set(0 ,100 ,-500);
circle.scale.setX(1.2);
scene.add(circle);
let areaImage = new Image();
areaImage.src = POSTPROCESSING.SMAAEffect.areaImageDataURL;
let searchImage = new Image();
searchImage.src = POSTPROCESSING.SMAAEffect.searchImageDataURL;
let smaaEffect = new POSTPROCESSING.SMAAEffect(searchImage,areaImage,1);
let godraysEffect = new POSTPROCESSING.GodRaysEffect(camera, circle, {
resolutionScale: 1,
density: 0.8,
decay: 0.95,
weight: 0.9,
samples: 100
});
let renderPass = new POSTPROCESSING.RenderPass(scene, camera);
let effectPass = new POSTPROCESSING.EffectPass(camera,godraysEffect);
effectPass.renderToScreen = true;
composer = new POSTPROCESSING.EffectComposer(renderer);
composer.addPass(renderPass);
composer.addPass(effectPass);
let loader = new THREE.GLTFLoader();
loader.load(‘scene.gltf’, function(gltf){
let bat = gltf.scene.children[0];
bat.scale.set(100,100,100);
scene.add(gltf.scene);
animate();
});
}
function animate() {
composer.render(0.1);
requestAnimationFrame(animate);
}
init();
</script>
</body>
</html>

CSS

body {
width: 100vw;
height: 100vh;
margin: 0;
background: black;
overflow: hidden;
}

喜欢我们的订阅我们的WebGLStudy.COM保持联系,如果你喜欢看更多。下次见!

 

WEBGL学习网(WebGLStudy.COM)专注提供WebGL 、ThreeJS、BabylonJS等WEB3D开发案例源码下载。
声明信息:
1. 本站部分资源来源于用户上传和网络,如有侵权请邮件联系站长:1218436398@qq.com!我们将尽快处理。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源打赏售价用于赞助本站提供的服务支出(包括不限服务器、网络带宽等费用支出)!
7.欢迎加QQ群学习交流:549297468 ,或者搜索微信公众号:WebGL学习网
WEBGL学习网 » Logo with GodRays Effect | 射线光晕特效 | Three.js后期特效处理教程

发表评论

提供优质的WebGL、ThreeJS源码

立即查看 了解详情