当前位置: 首页 > news >正文

一些学习three的小记录

这篇主要用来记录我学习3d渲染相关的疑问记录,后续会持续的更新,如果我的理解不对欢迎评论区更正。

目录

1.WebGLRenderer和WebGPURenderer的区别

1.1 WebGLRenderer

1.2 WebGPURenderer

二、scene.background和renderer.setClearColor有什么区别

三、renderer.setAnimationLoop和requestAnimationFrame的区别

四、renderer.toneMapping的属性区别和使用场景

1.WebGLRenderer和WebGPURenderer的区别

1.1 WebGLRenderer

文档地址:three.js docs

  • 基于WebGL,使用 WebGL API,广泛支持各种浏览器。
  • 成熟稳定,具有广泛的兼容性和社区支持。
  • 性能:虽然性能不错,但在处理复杂场景或高多边形数时可能会有瓶颈;使用纹理压缩、实例化等技术优化性能。
  • 着色器:使用 GLSL 着色器。
  • 适用于需要广泛兼容性的项目
const renderer = new THREE.WebGLRenderer();

1.2 WebGPURenderer

官方文档地址:WebGPU

  • 基于WebGPU,使用WebGPU API,更现代的图形API
  • 浏览器支持有限。
  • 着色器:使用 WGSL 或 SPIR-V 着色器语言,可能需要额外配置。
  • 性能:更高效的资源管理、更低的 CPU 开销。
  • 旨在提供更高的性能和更低的延迟,特别是复杂场景和计算(偏向用于性能要求高的场景中)。
const renderer = new THREE.WebGPURenderer();

二、scene.background和renderer.setClearColor有什么区别

共同点:都可以设置背景颜色。

不同点:

  • 作用范围:background只能影响特定的场景背景,setClearColor设置渲染器清除颜色,影响所有场景
  • 支持类型:background可以设置颜色、纹理;setClearColor只能设置颜色。

三、renderer.setAnimationLoop和requestAnimationFrame的区别

共同点:两个都用于创建动画循环。

不同点:

  • renderer.setAnimationLoop可以自动处理虚拟现实(VR)和增强现实(AR)渲染,简化了动画循环的管理,对于WebXR项目,必须使用此函数
  • requestAnimationFrame是原生js方法,需要手动调用渲染逻辑。

用法如下:

// setAnimationLoop的用法
renderer = new WebGPURenderer({ antialias: true });
renderer.setAnimationLoop(() => {renderer.render(scene, camera);}); // 如果是WebXR必须使用这个// requestAnimationFrame的用法
function animate() {requestAnimationFrame(animate);// 渲染逻辑renderer.render(scene, camera);
}
animate();

四、renderer.toneMapping的属性区别和使用场景

  • THREE.NoToneMapping
    • 描述:不进行色调映射
    • 使用场景:场景不需要任何色调调整
  • THREE.LinearToneMapping:
    • 描述:线性映射,不做特殊处理。
    • 使用场景:简单场景,通常用于调试。
  • THREE.ReinhardToneMapping:
    • 描述:逐渐压缩高亮部分,保持细节
    • 使用场景:游戏和实时渲染,需要平衡高亮和细节。
  • THREE.CineonToneMapping:
    • 描述:模拟胶片的色调映射
    • 使用场景:电影渲染,追求胶片效果。
  • THREE.ACESFilmicToneMapping:
    • 描述:高质量色调映射,模拟电影胶片的宽动态范围。
    • 使用场景:高动态范围(HDR)场景,追求真实感和高质量视觉效果。
  • THREE.AgXToneMapping:
    • 描述:过度暴露的区域提供了更好的颜色处理。尤其是明亮部偏于白色,更接近真实相机。
    • 使用场景:适用于需要表现真实光照效果的场景,比如摄影模拟、游戏中的环境光照效果,细致表现光线变化和阴影的应用场景,如建筑可视化。
  • THREE.NeutralToneMapping:
    • 描述:旨在提供一种中性(平衡)色调映射方式,保持图像的自然色彩和亮度。
    • 使用场景:这种方法提供了一种较为简单的转换方式,能够在不显著改变图像原始色彩的情况下,适当降低亮度。
  • THREE.CustomToneMapping:
    • 描述:允许开发者自定义色调映射的方法。

五、什么时候用纹理贴图的magFilter、minFilter属性

当有需要纹理在放大和缩小时的视觉效果可以用。

5.1 texture.magFilter

  • 定义:当一个纹素覆盖大于一个像素时,贴图将如何采样。
  • 常用属性值:
    • THREE.NearestFilter: 使用最近邻过滤,像素会变得很尖锐,可能会出现锯齿状。适合像素风格的图像
    • THREE.LinearFilter: 这是默认值。使用线性过滤,提供更平滑的放大效果,适合需要平滑过渡的图像。
  • 使用场景:
    • 在需要放大纹理并希望保持视觉质量时,可以选择 THREE.LinearFilter
    • 当需要保持像素化效果时(例如,在像素艺术或复古风格游戏中),可以选择 THREE.NearestFilter。

5.2 texture.minFilter

  • 定义:当一个纹素覆盖小于一个像素时,贴图将如何采样。
  • 常用属性值:
    • THREE.NearestFilter: 最近邻过滤,适合像素风格图像。
    • THREE.NearestMipMapNearestFilter: 使用最近邻过滤,并选择最接近的 MIP 贴图。
    • THREE.NearestMipMapLinearFilter: 使用最近邻过滤,并在 MIP 贴图中进行线性插值。
    • THREE.LinearFilter: 线性过滤。
    • THREE.LinearMipMapNearestFilter: 线性过滤并选择最接近的 MIP 贴图。
    • THREE.LinearMipMapLinearFilter: 线性过滤,并在 MIP 贴图中进行线性插值,通常提供最佳视觉效果。
  • 使用场景:
    • 对于需要保持清晰轮廓的纹理(如 UI 元素),可以选择 THREE.NearestFilter。
    • 当纹理需要缩小并且希望保持平滑效果时,使用 THREE.LinearFilter 或 THREE.LinearMipMapLinearFilter。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 顶刊算法 | 鹈鹕算法POA-Transformer-LSTM多变量回归预测
  • 学习笔记-Golang中的Context
  • (算法)大数的进制转换
  • 【Webpack--000】了解Webpack
  • linux + 宝塔 + django + websocket 部署
  • 【C++前后缀分解】1888. 使二进制字符串字符交替的最少反转次数|2005
  • Docker部署Joplin Server教程
  • 嵌入式开发—CAN通信协议详解与应用(中)
  • Java 线程超时时间:作用于核心线程还是最大线程?
  • libyuv之linux编译
  • 【揭秘Java】线程安全中的有序性之谜
  • 信通院发布首个《大模型媒体生产与处理》标准,阿里云智能媒体服务作为业界首家“卓越级”通过
  • 树莓派智能语音助手实现音乐播放
  • TSRPC+Cocos
  • 在react中 使用redux
  • “大数据应用场景”之隔壁老王(连载四)
  • 【刷算法】从上往下打印二叉树
  • 3.7、@ResponseBody 和 @RestController
  • Laravel 中的一个后期静态绑定
  • Linux下的乱码问题
  • node入门
  • Spark学习笔记之相关记录
  • SQLServer之创建显式事务
  • tweak 支持第三方库
  • ubuntu 下nginx安装 并支持https协议
  • vue数据传递--我有特殊的实现技巧
  • 闭包--闭包作用之保存(一)
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 记一次和乔布斯合作最难忘的经历
  • 力扣(LeetCode)357
  • 如何在 Tornado 中实现 Middleware
  • 十年未变!安全,谁之责?(下)
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 学习JavaScript数据结构与算法 — 树
  • 在Unity中实现一个简单的消息管理器
  • 中文输入法与React文本输入框的问题与解决方案
  • ​低代码平台的核心价值与优势
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • $.ajax()参数及用法
  • (C)一些题4
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (八)Flink Join 连接
  • (编译到47%失败)to be deleted
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (三分钟)速览传统边缘检测算子
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (四)事件系统
  • (四)图像的%2线性拉伸
  • (一)UDP基本编程步骤
  • ... 是什么 ?... 有什么用处?
  • .net 4.0发布后不能正常显示图片问题