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

预过滤环境光贴图制作教程:第一步 - HDR 转立方体贴图

在基于物理的渲染(PBR)中,环境光贴图是实现真实光照效果的核心组件之一。而将 HDR 全景图转换为立方体贴图,是制作预过滤环境光贴图的基础步骤。本教程将详细讲解如何实现这一转换过程。

什么是 HDR 转立方体贴图?

HDR(高动态范围)全景图通常以等矩形投影(Equirectangular Projection)的形式存在,看起来像一张横向拉伸的长方形图片。而立方体贴图则由 6 个正方形面组成,分别对应空间中的 ±X、±Y、±Z 六个方向,更适合实时渲染中计算光线反射。

转换的核心是将等矩形投影上的每个像素,正确映射到立方体贴图的 6 个面上,同时保持 HDR 数据的完整性。

准备工作

在开始前,请确保你已具备:

  • 基本的 Three.js 知识
  • 一张 HDR 全景图(.hdr 或.exr 格式)
  • 配置好的 Three.js 环境(包含渲染器、场景、相机)

实现步骤

步骤 1:创建立方体贴图渲染目标

首先,我们需要创建一个立方体贴图渲染目标(WebGLCubeRenderTarget),用于存储转换后的立方体贴图数据:

const cubeTarget = new THREE.WebGLCubeRenderTarget(size, {format: THREE.RGBAFormat,  // 使用RGBA格式type: THREE.HalfFloatType,  // 半浮点数类型,平衡精度和性能generateMipmaps: true,      // 生成多级渐远纹理minFilter: THREE.LinearMipmapLinearFilter,  // 缩小过滤方式magFilter: THREE.LinearFilter,  // 放大过滤方式wrapS: THREE.ClampToEdgeWrapping,  // S轴纹理包裹方式wrapT: THREE.ClampToEdgeWrapping,  // T轴纹理包裹方式flipY: false  // 不翻转Y轴
});

参数说明:

  • size:立方体贴图每个面的尺寸(如 256、512)
  • HalfFloatType:保留 HDR 的高动态范围信息,避免精度损失
  • 过滤方式选择线性过滤,确保采样平滑

步骤 2:编写顶点着色器

顶点着色器的主要作用是传递 UV 坐标,并进行适当调整:

varying vec2 vUv0;
uniform vec4 uvMod;
void main() {gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);// 计算UV坐标,支持缩放和偏移vUv0 =  (position.xy * 0.5 + 0.5) * uvMod.xy + uvMod.zw;
}

  • vUv0: varying 变量,用于向片段着色器传递 UV 坐标
  • uvMod:用于调整 UV 的缩放和偏移,增加灵活性

步骤 3:编写片段着色器(核心逻辑)

片段着色

http://www.dtcms.com/a/304598.html

相关文章:

  • Android Compose 自定义组件完全指南
  • 对College数据进行多模型预测(R语言)
  • 《React与Vue构建TODO应用的深层逻辑》
  • 【lucene】SegmentCoreReaders
  • linux_前台,后台进程
  • LeetCode热题100——155. 最小栈
  • (LeetCode 面试经典 150 题) 150. 逆波兰表达式求值 (栈)
  • 电脑主机显示的python版本是3.8.6,但是我在控制面板没有找到,想删除不知道怎么操作怎么办
  • 《 java 随想录》| LeetCode链表高频考题
  • 【LeetCode】大厂面试算法真题回忆(111)--身高排序
  • 鱼皮项目简易版 RPC 框架开发(五)
  • 2.oracle保姆级安装教程
  • 逐渐走进Ai世界~
  • Django模型开发:模型字段、元数据与继承全方位讲解
  • Unity_SRP Batcher
  • 【WRF-Chem 实例1】namelist.input 详解- 模拟CO2
  • 基于AI代码疫苗技术的开源软件供应链安全治理
  • C# _列表(List<T>)_ 字典(Dictionary<TKey, TValue>)
  • 【dropdown组件填坑指南】—怎么实现下拉框的位置计算
  • 【机器学习深度学习】为什么需要分布式训练?
  • 从硬编码到自主智能体:营销AI的20年技术演进与未来展望
  • 前端开发为什么没有后端开发那么清除业务
  • sqLite 数据库 (2):
  • 摔倒识别误报率↓79%:陌讯动态时序融合算法实战解析
  • System V IPC机制:进程通信的统一设计
  • 单片机(STM32-WIFI模块)
  • 【JavaScript】手写 Object.prototype.toString()
  • Qt 移动应用常见问题与解决方案
  • React服务端渲染 Next 使用详解
  • 安卓模拟器 adb Frida hook 抓包