首页 > 其他分享 >ThreeJs-06详解灯光与阴影

ThreeJs-06详解灯光与阴影

时间:2024-12-10 23:31:53浏览次数:9  
标签:动画 ThreeJs 级联 06 灯光 阴影 详解 点光源 设置

一.gsap动画库

1.1 基本使用和原理

首先直接npm安装然后导入

比如让一个物体,x轴时间为5s

GIF

旋转同理

image-20241128214756914

动画的速度曲线,可以在官网的文档找到

image-20241128215002275

1.2 控制动画属性与方法

当然这里面也有一些方法,动画完成,动画开始等

image-20241128215200803

一些属性

image-20241128215321286

GIF

也可实现停止动画随时,给到一个变量

image-20241128215435858

双击暂停以及恢复

image-20241128215547134

二.灯光与阴影详解

添加环境光

这种光一般是用来增亮,他没有阴影效果

image-20241128215713865

GIF

平行光:类似于太阳

默认在这个位置朝着原点打光

image-20241128215940076

image-20241128220146024

image-20241128220120320

image-20241128220133926

也可以改变平行光的照射点

image-20241128220257997

image-20241128220312060

创建阴影四部曲

image-20241128220442295

image-20241128220504137

谁产生阴影

image-20241128220531950

image-20241128220543681

image-20241128220550572

注意:物体可以投射阴影,也可以接受阴影,不只是要在平面上接受

image-20241128220636819

2.1 直线光与阴影详细设置

移动球体z轴前后,出了一定范围会被剪切掉

image-20241128225842782

平行光是有范围的

image-20241128225911266

打印这个灯光,可以看到其范围

image-20241128230152414

far是后面,near是前面

image-20241128230143933

image-20241128230224691

现在就比刚才更远一点,到了10的边缘才被截取

image-20241128230246682

此时这个阴影是有锯齿感的

image-20241128230406432

默认是512

image-20241128230425752

image-20241128230437585

2.2 聚光灯

target就是聚光灯打向什么地方

image-20241202222227398

image-20241202222257316

设置好角度之后

image-20241202222452216

image-20241202222441442

如果想设置边缘的光慢慢衰减

image-20241202222603605

image-20241202222556576

衰减的快慢设置

GIF

2.3点光源

聚光灯是往一个地方发散,点光源是四面八方

image-20241202223924686

image-20241202223934578

点光源也可以设置距离和衰减情况

image-20241202224159648

image-20241202224151140

三.透明度纹理和阴影

加入给一个物体贴上一个透明度纹理,黑色就是全透明,白色就是不透明

image-20241202224758219

此时透明度有了,但是阴影还是正常的

image-20241202224839208

image-20241202224905647

加上alphatest即可,此时表示大于0.5就是透明,小于0.5就是不透明

image-20241202225016165

image-20241202225037314

此时新的问题贴上贴图后会有条纹的现象

这是由于灯光和阴影形成的一个问题

解决方法

设置灯光阴影的bias

image-20241202225211278

偏移量,让阴影便宜一点点

GIF

四.大场景动态级联阴影设置

添加一个相机辅助器把灯光加入进来

image-20241202225536814

可以看到物体在相机范围内有阴影超过就没有阴影

GIF

那如果实在一个很大的场景,比如把相机的阴影场景改的很大

image-20241202225741339

会发现阴影出现了锯齿状

image-20241202225813878

image-20241202225753220

那么此时的解决思路就是,分模块分远近来展示阴影

也就是级联阴影

类似于这样,近处的细节就比较细,远处稍微模糊点,因为距离远了也看不太清了

image-20241202230154511

导入

image-20241202230235699

需要的参数,这些都是可以直接复制threejs上面这一个图的官方例子

image-20241202230325297

然后创建级联阴影实例

maxfar表示阴影最大到多远,cascades多少个等级,mode是模式,parent当前级联阴影的父级,mapsize级联阴影的大小,lightdirection灯光的位置

image-20241202230427224

然后把所有需要设置阴影的材质都设置为级联阴影

image-20241202230644039

然后需要一直更新渲染

image-20241202231032394

此时灯管也不再需要投射阴影了交给级联来投射

image-20241202231311960

GIF

如果想设置灯光方向

image-20241202231438017

加上软阴影实现一个更柔滑的效果

image-20241202231509943

image-20241202231517749

前面对于灯光阴影的设置也可以不要了

image-20241202231536114

标签:动画,ThreeJs,级联,06,灯光,阴影,详解,点光源,设置
From: https://www.cnblogs.com/heymar/p/18598353

相关文章

  • A306 基于Java+jsp+SQL的社交论坛 BBS 源码 文档
    社交论坛的设计与实现1.摘要2.开发目的和意义2.1系统开发目的2.2系统开发意义3.系统功能设计4.系统界面截图5.源码获取1.摘要摘要随着信息技术的快速发展,人与人之间交流方式越来越先进。在当今时代,QQ、留言板、博客、微信等已成为人们彼此沟通、交流信息的主要......
  • oracle 架构详解
    Oracle数据库是一个复杂且强大的关系型数据库管理系统(RDBMS),广泛应用于企业级应用中。了解Oracle的架构对于数据库管理员(DBA)、开发人员和架构师来说至关重要。以下是Oracle数据库架构的详细解析,涵盖了其主要组成部分、工作原理以及如何优化性能。Oracle数据库Oracle数......
  • Python网络爬虫技术详解与实践案例
    Python网络爬虫技术详解与实践案例在大数据时代,数据是驱动业务发展的重要资源。如何高效地获取数据,成为许多开发者关注的重要课题。Python网络爬虫作为一种自动化数据抓取工具,在数据采集领域扮演着重要角色。本文将详细介绍Python网络爬虫的基础知识、进阶技巧,并通过实际案......
  • Milvus向量数据库06-RAG检索增强
    Milvus向量数据库06-RAG检索增强文章目录Milvus向量数据库06-RAG检索增强1-学习目标2-参考网址3-执行过程记录1-到底什么是RAGRAG的基本流程:为什么RAG优于传统的基于检索的方法:示例流程:2-RAG和Elasticsearch对比3-RAG和向量数据库之间是什么关系4-RAG和大模型什么关......
  • XSS跨站脚本攻击详解
    一、XSS攻击简介跨站脚本攻击的英文全称是Cross-SiteScripting,为了与CSS有所区别,因此缩写为“XSS”由于同源策略的存在,攻击者或者恶意网站的JavaScript代码没有办法直接获取用户在其它网站的信息,但是如果攻击者有办法把恶意的JavaScript代码注入目标网站的页面中执行,他就可以......
  • (牛客网2024最新版)1100+大厂面试题附答案详解
    Java现在好找工作吗?目前还是挺好找的,楼主我是java开发将近10年了,做架构师也有两三年了,我发现只要是水平高的基本上能找到好工作,就算这两年形势这么差,也还是能找到好工作的,那么我就来说说java方面要达到一个什么样的水平才能找到好工作吧。java方面什么jdk源码就不......
  • 手把手教你用python一键抢12306火车票(附代码)
    源码直接在pycharm里面打开即可用github链接:w1a2b3c/123061:12306抢票脚本,学生票,为了买票纯手写gitee链接:eric/12306抢票脚本,学生票,为了买票纯手写哈喽,哈喽~,一年一度的抢火车票大战正式拉开序幕…然饿大多数人碰到的是这种情况:当你满心期待摩拳擦掌准备抢票的时候,你会发现......
  • 牛客小白月赛106
    牛客小白月赛106比赛链接:牛客小白月赛106//也就写写水题骗自己了A.最后DISCO直接秒,注意一下c可以等于0#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineinfINT32_MAX#definePIIpair<int,int>#defineendl'\n'inlinevoidsolve(){......
  • java抽象类详解
    在Java中,抽象类是一种不能被实例化的类,它通常被用作其他类的基类。抽象类可以包含抽象方法和具体方法,它们提供了一种方式来定义一个通用的模板,这个模板可以被其他子类实现和扩展。以下是关于Java抽象类的一些详细解释:1. 定义抽象类:在Java中,使用abstract关键字来定义一个抽......
  • java接口详解
    在Java中,接口(Interface)是一种引用类型,它定义了一组方法规范,这些方法必须由实现接口的类来具体实现。接口是Java实现抽象化的一种机制,它是一种完全抽象的类。以下是关于Java接口的详细解释:1. 定义接口:使用interface关键字定义一个接口。publicinterfaceMyInterface{ ......