3.js - 色调映射(renderer.toneMapping)

news2024/12/24 8:48:15

在这里插入图片描述


// @ts-nocheck

// 引入three.js
import * as THREE from 'three'

// 导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'

// 导入lil.gui
import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js'

// 导入tween
import * as TWEEN from 'three/examples/jsm/libs/tween.module.js'

// 导入hdr加载器(专门加载hdr的)
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js'

// 导入gltf加载器
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'

// ktx2格式加载器
import { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader.js'

// 导入dds格式加载器
import { DDSLoader } from 'three/examples/jsm/loaders/DDSLoader.js'

// 导入tga
import { TGALoader } from 'three/addons/loaders/TGALoader.js'

//#region
const scence = new THREE.Scene()

const camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000)
camera.position.set(2, 2, 5) // 设置相机位置
camera.lookAt(0, 0, 0)

const renderer = new THREE.WebGLRenderer({
  antialias: true // 开启抗锯齿
})
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)
//#endregion

//#region
// 添加世界坐标辅助器,红色-X轴; 绿色-Y轴; 蓝色-Z轴
const axesHelper = new THREE.AxesHelper(5)
scence.add(axesHelper)

const controls = new OrbitControls(camera, renderer.domElement)
// 设置带阻尼的惯性
// controls.enableDamping = true
// 设置阻尼系数
controls.dampingFactor = 0.05

// 每一帧根据控制器更新画面
function animate() {
  // 如果,需要控制器带有阻尼效果,或者自动旋转等效果,就需要加入`controls.update()`
  controls.update()
  // `requestAnimationFrame`:在屏幕渲染下一帧画面时,触发回调函数来执行画面的渲染
  requestAnimationFrame(animate)
  // 渲染
  renderer.render(scence, camera)
  // 更新tween
  TWEEN.update()
}
animate()
//#endregion

// --------------------------------------------------------------
// --------------------------------------------------------------

const textureLoader = new THREE.TextureLoader()
let texture = textureLoader.load('../public/assets/texture/brick/brick_diffuse.jpg')

let planeGeometry = new THREE.PlaneGeometry(1, 1)
let material = new THREE.MeshBasicMaterial({
  color: 0xffffff,
  map: texture,
  transparent: true
})
const plane = new THREE.Mesh(planeGeometry, material)
scence.add(plane)

// 纹理的色彩空间(srgb模式,纹理看起会更加真实);(默认是线性模式,看起来会比较白,不真实)
texture.colorSpace = THREE.SRGBColorSpace

texture.minFilter = THREE.LinearMipMapLinearFilter

// 从渲染器的功能(`capabilities`)中,获取支持的最大各向异性级别,不同的GPU可能支持不同的最大各向异性级别
let maxAnisotropy = renderer.capabilities.getMaxAnisotropy()
// 设置纹理的各向异性级别为4,意味着,纹理过滤将考虑最多4个不同的方向来减少失真。
// 注意:如果你设置的级别,高于GPU支持的最大级别,它可能会被自动降低到最大支持的级别。
texture.anisotropy = 4
console.log('纹理的各项异性级别maxAnisotropy= ', maxAnisotropy)

// ktx2 加载器
let ktx2Loader = new KTX2Loader()
/*
  设置transcoder的路径,Transcoder是一个JavaScript库,用于在浏览器中解码KTX2格式的纹理;
  这个库需要你单独引入,路径应指向你放置transcoder文件(如basis_transcoder.js)的目录;
  detectSupport(renderer):检测当前WebGL渲染器是否支持KTX2纹理;
*/
ktx2Loader.setTranscoderPath('../public/basis/').detectSupport(renderer)
let ktx2Texture = ktx2Loader.load('../public/assets/texture/opt/ktx2/Alex_Hart-Nature_Lab_Bones_2k_uastc-mip-triangle.ktx2', texture => {
  // texture.mapping = THREE.EquirectangularReflectionMapping
  texture.magFilter = THREE.LinearFilter
  texture.minFilter = THREE.LinearMipMapLinearFilter
  texture.anisotropy = 16
  /*
    texture.flipY:用于翻转纹理的Y轴,
    但是,在使用KTX2Loader时,纹理通常已经按正确的方式编码,因此不需要翻转。
    如果,你的纹理看起来是颠倒的,可能需要检查纹理文件本身。
  */
  // texture.flipY = true
  texture.needsUpdate = true

  scence.background = texture
  scence.environment = texture

  plane.material.map = texture
})



/*
  色调映射:是渲染过程中的一个重要步骤,
           用于将高动态范围(HDR)颜色值,映射到低动态范围(LDR)显示设备上,
           以模拟真实世界中的光照效果。
*/
// 设置色调映射
renderer.toneMapping = THREE.ACESFilmicToneMapping

// 设置色调映射曝光度
/*
  `renderer.toneMappingExposure`设置为1,是一个相对中性的选择,
  意味着,曝光度被设置为一个默认值,这个值不会增加也不会减少场景的整体亮度,
  但是,这个默认值,可能并不总是最适合你的场景,
  因为,不同的场景,需要不同的曝光度,来达到最佳的视觉效果。

  有以下选择
    1、renderer.toneMappingExposure < 1,降低,场景的整体亮度
    2、renderer.toneMappingExposure = 1,增加,场景的整体亮度
*/
renderer.toneMappingExposure = 1

const gui = new GUI()
gui.add(renderer, 'toneMapping', {

  '无色调映射':直接输出HDR颜色值(如果支持)
  No: THREE.NoToneMapping,

  '线性色调映射':将HDR颜色值,线性地缩放到LDR范围
  Linear: THREE.LinearToneMapping,
 
 'Reinhard色调映射':一种流行的HDRLDR的映射方法,能够保持颜色和亮度的对比度;
			        可以更好地处理高亮度的区域,它根据整个图像的平均亮度来调整每个像素的亮度。
  Reinhard: THREE.ReinhardToneMapping,

  'Cineon色调映射':模仿电影胶片的效果
  Cineon: THREE.CineonToneMapping,

  'ACESFilmic色调映射':基于电影工业标准ACES的色调映射算法,旨在提供更自然的色彩和亮度过渡
  ACESFilmic: THREE.ACESFilmicToneMapping
  
})

gui.add(renderer, 'toneMappingExposure', 0, 3, 0.1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1885038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stable DIffusion 线稿上色+风格迁移教程,建议收藏!

前言 Stable Diffusion 线稿上色与风格迁移教程。 欢迎来到Stable Diffusion的线稿上色与风格迁移教程&#xff01;在这个教程中&#xff0c;我们将引导你如何使用Stable Diffusion技术&#xff0c;将你的线稿作品进行上色&#xff0c;并迁移到不同的艺术风格。让我们开始吧&a…

双端队列广搜——AcWing 175. 电路维修

双端队列广搜 定义 双端队列广搜&#xff08;Breadth-First Search with a Deque&#xff09;是一种图或树的遍历算法变体&#xff0c;它利用了双端队列&#xff08;Deque&#xff0c;全称Double Ended Queue&#xff0c;允许在其两端进行插入和删除操作&#xff09;作为数据…

CentOS7源码安装nginx并编写服务脚本

华子目录 准备下载nginx源码包关闭防火墙关闭selinux安装依赖环境 解压编译安装测试编写服务脚本&#xff0c;通过systemctl实现服务启动与关闭测试 准备 下载nginx源码包 在源码安装前&#xff0c;我们得先下载nginx源码包https://nginx.org/download/这里我下载的是nginx-1…

PHP景区旅游多商户版微信小程序系统源码

解锁景区新玩法&#xff01;​ 引言&#xff1a;一站式旅行新体验 厌倦了传统景区的单调游览&#xff1f;想要一次旅行就能体验多种风情&#xff1f;那么&#xff0c;“景区旅游多商户版”绝对是你的不二之选&#xff01;这个创新模式将景区内多个商户资源整合&#xff0c;为…

Golang-context理解

golang-context笔记整理 golang为何设计context&#xff1f;代码上理解原理空context类cancelCtx类.withcancelctx方法 timerCtx类valueCtx类 golang为何设计context&#xff1f; 有并发特性的语言中&#xff0c;都会有一种说法&#xff1a;创建异步线程或者携程的时候&#x…

【Altium】如何处理PCB上所有焊盘被误盖油

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决焊盘被误盖油的操作 2、 问题场景 所有焊盘都可以设置为盖油或不盖油&#xff0c;由于焊盘需要用来焊接元器件&#xff0c;所以都不会设置盖油。由于误操作或者创建封装时设置错误&#xff0c;造成一定数量的焊盘…

【GD32】07 - UART串口通信

GD32F407中的UART 今天我用的型号是GD32F407&#xff0c;用其他型号的小伙伴在使用UART的时候注意一下自己手上板子的资源就行&#xff0c;我们使用固件库就算是不同型号其实也是没有什么太大差别的。 我们废话不多说&#xff0c;直接开始讲怎么使用UART。 首先我们先确定串…

【面试干货】Static关键字的用法详解

【面试干货】Static关键字的用法详解 1、Static修饰内部类2、Static修饰方法3、Static修饰变量4、Static修饰代码块5、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java编程语言中&#xff0c;static是一个关键字&#xff0c;它可…

猫头虎博主全栈前沿AI技术领域矩阵社群

猫头虎博主全栈前沿AI技术领域矩阵社群 &#x1f44b;大家好&#xff0c;我是猫头虎&#xff01;今天我要向大家介绍一个非常重要的社群矩阵——专为全栈前沿AI技术领域的朋友们打造的各种技术交流和资源互助的社群。这些社群不仅能帮助大家快速提升技术水平&#xff0c;还能拓…

深度学习笔记: 最详尽解释混淆矩阵 Confusion Matrix

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家&#xff01; 混淆矩阵 假设我们有包含临床测量数据的医疗数据&#xff0c;例如胸痛、良好的血液循环、动脉阻塞和体重…

LeetCode 子集

原题链接78. 子集 - 力扣&#xff08;LeetCode&#xff09; 这是一道暴力搜索问题参考大佬们的题解&#xff0c;对这类题目做出一下总结 1.确定递归参数变量 2.递归结束条件 3.做出选择&#xff0c;递归调用进入下一层 4.回溯&#xff0c;返回到递归前的状态 要完成前面这…

Golang内存分配

Go内存分配语雀笔记整理 Golang内存模型设计理念思考核心代码阅读mspanmcachemcentral中心缓存mheap分配过程 Golang内存模型设计理念思考 golang内存分配基于TCmalloc模型&#xff0c;它核心在于&#xff1a;空间换时间&#xff0c;一次缓存&#xff0c;多次复用&#xff1b;…

重大丨深中通道今通车!继港珠澳大桥后,三思再度点亮世界工程

6月30日下午3时&#xff0c;国家重大工程深中通道正式通车试运营&#xff0c;向世界再次展示中国智慧和基建实力。已承接过包括港珠澳大桥海底隧道在内2500多条隧道照明工程的上海三思电子工程有限公司&#xff0c;为这座超级工程提供了LED隧道照明、东西人工岛照明及显示、管理…

HAP官方力作:MEGA项目管理应用正式上线

开发背景 自2024年3月起&#xff0c;明道云推出了MEGA系列应用&#xff0c;基于MEGA Industrial的经营业务&#xff0c;逐步拓展至企业价值链的各个环节&#xff08;MEGA Industrial Co 是明道云预设的一家虚拟公司&#xff0c;主要面向工业制造行业客户&#xff0c;提供产线规…

node_modules/@umijs/runtime“ does not exist in container.

近日&#xff0c;在做pro ant react 项目时&#xff0c;遇到了如下这样的错误&#xff0c;开始通过vs code 的通义灵码折腾了一阵子&#xff0c;后面在csdn上一搜索&#xff0c;马上就找到答案了&#xff0c;特记录一下&#xff0c;后面再遇到这样的问题也就有迹可循了。 参考…

强对抗的 SquidLoader 针对中国企业发起攻击

研究人员近期发现了一种高对抗强度的 Loader&#xff0c;其通过钓鱼邮件附件传递给受害者。根据恶意软件所具备的引诱和规避行为&#xff0c;研究人员将其命名为 SquidLoader。SquidLoader 最早在 2024 年 4 月下旬被发现&#xff0c;但研究人员认为其至少已经活跃了一个月以上…

AE射频电源维修PE-II 10K中频电源维修

AE CESAR射频电源维修 PEII-10K镀膜电源&#xff1b;射频电源RF-5S&#xff1b;RFG3000&#xff1b;RFG3001等系列维修。 主要服务于太阳能光伏、PVD镀膜&#xff0c;半导体薄膜、离子注入、刻蚀&#xff0c;平板显示&#xff0c;光盘、光电子LED等制造工艺以及科研院校、技术研…

YOLO在目标检测与视频轨迹追踪中的应用

YOLO在目标检测与视频轨迹追踪中的应用 引言 在计算机视觉领域&#xff0c;目标检测与视频轨迹追踪是两个至关重要的研究方向。随着深度学习技术的飞速发展&#xff0c;尤其是卷积神经网络&#xff08;CNN&#xff09;的广泛应用&#xff0c;目标检测与视频轨迹追踪的性能得到…

2024年广东省食品安全管理员考试精选练习题库

76.已具有主体资格的企业申请食品流通可&#xff0c;该企业的&#xff08;&#xff09;为可申请人。 A.投资者 B.经营负责人 C.本身 答案&#xff1a;C 77.食用亚硝酸盐的销售只面向&#xff08;&#xff09;。 A.食品生产加工行业 B.餐饮业 C.食品流通单位 答案&…

Rakis: 免费基于 P2P 的去中心化的大模型

是一个开源的&#xff0c;完全在浏览器中运行的去中心化 AI 推理网络&#xff0c;用户无需服务器&#xff0c;打开即可通过点对点网络使用 Llama-3、Mistral、Gemma-2b 等最新开源模型。 你可以通过右上角的 Scale Worker &#xff0c;下载好模型后挂机就能作为节点加入到这个…