three-gpu-pathtracer

three-gpu-pathtracer

WebGL 2驱动的高性能GPU路径追踪项目

three-gpu-pathtracer是一个基于WebGL 2的GPU路径追踪项目。它使用three-mesh-bvh加速渲染,支持GGX表面模型、材质信息、纹理、法线贴图等功能。该项目实现了物理基础渲染、景深、HDR图像等特性,可进行高质量的真实感渲染。项目还提供了多种演示和工具,包括动画渲染和环境光遮蔽材质。three-gpu-pathtracer为开发者提供了高效的GPU路径追踪解决方案。

WebGL路径追踪three.jsGPU渲染物理渲染Github开源项目

three-gpu-光线追踪器

npm版本 构建 github twitter 赞助者

使用three-mesh-bvh和WebGL 2的光线追踪项目,用于加速GPU上的高质量、基于物理的渲染。特性包括支持GGX表面模型、材质信息、纹理、法线贴图、发光、环境贴图、分块渲染等!

更多特性和功能正在开发中!

示例

设置

基础glTF设置示例

基础几何体示例

精美演示

基于物理的材质

乐高模型

室内场景

景深

HDR图像

特性

蒙皮几何体支持

变形目标支持

面光源支持

聚光灯支持

体积雾支持

测试场景

材质测试球

透射预设球

模型查看器保真度场景比较

物理材质数据库

工具

动画渲染

环境光遮蔽材质

本地运行示例

要在本地运行和修改示例,请确保已安装Node和NPM。在测试配置中检查支持的版本。

为了安装依赖项,你需要安装make和C++编译器。

在Debian或Ubuntu上,运行sudo apt install build-essential。在MacOS上应该可以直接使用。

  • 要安装依赖项,运行npm install
  • 要启动演示,运行npm start
  • 访问http://localhost:1234/<demo-name.html>

使用

基本渲染器

import * as THREE from 'three'; import { WebGLPathTracer } from 'three-gpu-pathtracer'; // 初始化场景、相机、控制器等 renderer = new THREE.WebGLRenderer(); renderer.toneMapping = THREE.ACESFilmicToneMapping; pathTracer = new WebGLPathTracer( renderer ); pathTracer.setScene( scene, camera ); animate(); function animate() { requestAnimationFrame( animate ); pathTracer.renderSample(); }

模糊环境贴图

使用预先模糊的环境贴图可以帮助提高帧收敛时间,但代价是失去锐利的环境反射。如果性能是个问题,可以禁用多重重要性采样并使用模糊的环境贴图。

import { BlurredEnvMapGenerator } from 'three-gpu-pathtracer'; // ... const envMap = await new RGBELoader().setDataType( THREE.FloatType ).loadAsync( envMapUrl ); const generator = new BlurredEnvMapGenerator( renderer ); const blurredEnvMap = generator.generate( envMap, 0.35 ); // 渲染!

导出

WebGLPathTracer

构造函数

constructor( renderer : WebGLRenderer )

.bounces

bounces = 10 : Number

要追踪的最大光线弹跳次数。

.filteredGlossyFactor

filteredGlossyFactor = 0 : Number

用于减轻光线击中漫反射表面然后击中镜面表面产生的亮点。设置较高的值可以减少萤火虫效应,但会移除一些镜面反射焦散。

.tiles

tiles = ( 3, 3 ) : Vector2

要渲染的x和y方向上的瓦片数量。可用于提高页面响应性,同时仍然渲染高分辨率目标。

.renderDelay

renderDelay = 100 : Number

光线追踪器重置后开始渲染样本的延迟毫秒数。

.fadeDuration

fadeDuration = 500 : Number

渲染到画布时,完全光线追踪的场景淡入所需的毫秒数。

.minSamples

minSamples = 5 : Number

在显示到画布之前要渲染的最小样本数。

.dynamicLowRes

dynamicLowRes = false : Boolean

是否在渲染全分辨率场景时额外渲染一个低分辨率版本。缩放比例由lowResScale定义。

.lowResScale

lowResScale = 0.1 : Number

渲染低分辨率通道的缩放比例。

.synchronizeRenderSize

synchronizeRenderSize = true : Boolean

是否在画布大小改变时自动更新光线追踪缓冲区的大小。

.renderScale

renderScale = 1 : Number

渲染光线追踪图像的缩放比例。仅当synchronizeRenderSize为true时相关。

.renderToCanvas

renderToCanvas = true : Boolean

当调用 renderSample 时,是否自动将路径追踪缓冲区渲染到画布上。

.rasterizeScene

rasterizeScene = true : Boolean

在路径追踪缓冲区渲染时,是否自动使用three.js渲染器对场景进行光栅化。

.textureSize

textureSize = ( 1024, 1024 ) : Vector2

扩展或缩小所有纹理的尺寸,以便将所有场景纹理打包到单个纹理数组中。

.samples

readonly samples : Number

已渲染的采样数。

.target

readonly target : WebGLRenderTarget

路径追踪渲染目标。每次调用 renderSample 时可能会发生变化。

.setScene

setScene( scene : Scene, camera : Camera ) : void

设置要渲染的场景和相机。当相机对象改变、场景中的几何体改变或分配新材质时,必须再次调用。

尽管只更新变更的数据,但这仍然是一个相对昂贵的函数。尽可能优先使用其他"更新"函数。

.setSceneAsync

setSceneAsync( scene : Scene, camera : Camera, options = { onProgress = null : value => void, } : Object ) : void

setScene 的异步版本。需要先调用 setBVHWorker

.updateCamera

updateCamera() : void

更新相机参数。如果之前设置的相机上的任何参数发生变化,必须调用此函数。

.updateMaterials

updateMaterials() : void

更新材质属性。当已使用的任何材质的属性发生变化时,必须调用此函数。

注意,与WebGLPathTracer一起使用的材质支持以下附加属性:

// 是否将对象渲染为完全透明,以便稍后可以合成其他对象 matte = false : Boolean; // 对象是否应投射阴影 castShadow = true : Boolean;

.updateEnvironment

updateEnvironment() : void

更新场景环境和背景属性的光照。如果设置的场景对象上的任何相关场景设置发生变化,必须调用此函数。

.updateLights

updateLights() : void

更新路径追踪中使用的灯光。如果添加或删除了任何灯光,或属性发生变化,必须调用此函数。

.renderSample

renderSample() : void

渲染一个采样到路径追踪目标。如果 renderToCanvas 为true,则图像会渲染到画布上。

.reset

reset() : void

重新开始渲染。

.dispose

dispose() : void

释放路径追踪器资产。必须单独释放使用的任何材质或纹理。

PhysicalCamera

扩展自THREE.PerspectiveCamera

three.js透视相机的扩展,带有一些与景深相关的其他参数。这些参数不会影响相机行为,仅为方便与PhysicalCameraUniform和路径追踪器一起使用。

.focusDistance

focusDistance = 25 : Number

从相机出发,以米为单位的完全聚焦距离。

.fStop

fStop = 1.4 : Number

相机的光圈值。如果更改此值,则会隐式更新 bokehSize 字段。

.bokehSize

bokehSize : Number

根据光圈值和焦距(以毫米为单位)得出的散景大小。如果设置此值,则会隐式更新光圈值。

.apertureBlades

apertureBlades = 0 : Number

光圈的边数/叶片数。

.apertureRotation

apertureRotation = 0 : Number

光圈形状的旋转,以弧度为单位。

.anamorphicRatio

anamorphicRatio = 1 : Number

镜头的变形比例。较高的值会水平拉伸散景效果。

EquirectCamera

扩展自THREE.Camera

表示路径追踪器应渲染等矩形视图的类。不适用于three.js光栅渲染。

PhysicalSpotLight

扩展自THREE.SpotLight

.radius

radius = 0 : Number

聚光灯表面的半径。增加此值可为阴影添加柔和度。

.iesMap

iesMap = null : Texture

描述方向光强度的已加载IES纹理。可以使用 IESLoader 加载这些纹理。

可以从 [ieslibrary.com] 下载预制的IES配置文件。也可以使用 CNDL 生成自定义配置文件。

ShapedAreaLight

扩展自THREE.RectAreaLight

.isCircular

isCircular = false : Boolean

区域光是否应渲染为圆形或矩形。

IESLoader

扩展自Loader

用于加载和解析IES配置文件数据的加载器。加载和解析函数返回包含配置文件内容的 DataTexture

BlurredEnvMapGenerator

用于生成可与路径追踪器一起使用的PMREM模糊环境贴图的实用工具。

构造函数

constructor( renderer : WebGLRenderer )

.generate

generate( texture : Texture, blur : Number ) : DataTexture

接受要模糊的纹理和模糊程度。返回一个新的 DataTexture,即经过PMREM模糊的环境贴图,可以为重要性采样生成分布数据。

.dispose

dispose() : void

释放用于生成的临时文件和纹理。

GradientEquirectTexture

.exponent

exponent = 2 : Number

.topColor

topColor = 0xffffff : Color

.bottomColor

bottomColor = 0x000000 : Color

构造函数

constructor( resolution = 512 : Number )

.update

update() : void

MaterialBase

扩展自THREE.ShaderMaterial

便捷的基类,添加了额外的函数,并隐式地为着色器的所有uniforms添加对象定义。

.setDefine

setDefine( name : string, value = undefined : any ) : void

将给定名称的define设置为提供的值。如果值设置为null或undefined,则从材质的defines中删除它。如果define与之前的值不同,则将 Material.needsUpdate 设置为 true

FogVolumeMaterial

扩展自MeshStandardMaterial

用于在场景中渲染类似雾的体积的材质。渲染中使用 coloremissiveemissiveIntensity 字段。

注意 由于雾模拟场景中的许多粒子并导致许多额外的反弹,雾材质可能会显著影响渲染时间。

.density

体积的粒子密度。

DenoiseMaterial

扩展自MaterialBase

基于 BrutPitt/glslSmartDeNoise 的降噪材质,用于最终渲染到屏幕。包括色调映射和色彩空间转换。

Uniforms

{ // sigma - 标准差 // kSigma - sigma系数 // kSigma * sigma = 圆形核的半径 sigma = 5.0 : Number, kSigma = 1.0 : Number, // 边缘锐化阈值 threshold = 0.03 : Number,
<!--

## 兼容性检测器

通过检查结构精度是否可靠以及材质着色器是否可以编译,来检测当前设备是否可以运行路径追踪器。

### 构造函数

```js
constructor( renderer : WebGLRenderer, material : Material )

接受一个要使用的WebGLRenderer和要测试的材质。

.detect

detect() : { pass: Boolean, message: String }

如果路径追踪器可以运行,则返回 pass === true。如果无法运行,则返回一条指示原因的消息。

-->

注意事项

  • 该项目需要使用WebGL2。
  • 所有纹理必须使用相同的环绕和插值标志。
  • 仅在使用多重重要性采样(MIS)时支持聚光灯、平行光和点光源。
  • 仅支持MeshStandardMaterial和MeshPhysicalMaterial。
  • 不支持实例化几何体和交错缓冲区。
  • 支持发光材质,但不能利用多重重要性采样(MIS)。

截图

<p align="center"> <i>材质示例</i> </p>

<p align="center"> <i>"SD超时空要塞城市对峙场景"由<a href="https://sketchfab.com/3d-models/sd-macross-city-standoff-diorama-b154220f7e7441799d6be2f7ff9658c7">tipatat</a>制作</i> </p>

<p align="center"> <i>"室内场景"模型由<a href="https://sketchfab.com/3d-models/interior-scene-45ddbbc4c2dc4f8ca9ed99da9a78326a">Allay Design</a>制作</i> </p>

<p align="center"> <i>毅力号火星车、机智号直升机模型由<a href="https://mars.nasa.gov/resources/25042/mars-perseverance-rover-3d-model/">NASA / JPL-Caltech</a>制作</i> </p>

<p align="center"> <i>明胶怪方块模型由<a href="https://sketchfab.com/3d-models/gelatinous-cube-e08385238f4d4b59b012233a9fbdca21">glenatron</a>制作</i> </p>

<p align="center"> <i>乐高模型由<a href="https://omr.ldraw.org/">LDraw官方模型库</a>提供</i> </p>

<p align="center"> <i>章鱼泡茶模型由<a href="https://sketchfab.com/3d-models/cartoon-octopus-takes-a-tea-bath-107260cf0fd24202a67eb037a6c760a5 ">AzTiZ</a>制作</i> </p>

<p align="center"> <i>植物学家的研究模型由<a href="https://sketchfab.com/3d-models/the-botanists-study-8b7b5743b1c848ed8ea58f5518c44e7e">riikkakilpelainen</a>制作</i> </p>

<p align="center"> <i>日式桥园模型由<a href="https://sketchfab.com/3d-models/japanese-bridge-garden-d122e17593eb4012913cde927486d15a">kristenlee</a>制作</i> </p>

资源

一个周末学会光线追踪

PBR书籍

knightcrawler25/GLSL-PathTracer

DassaultSystemes-Technology/dspbr-pt

编辑推荐精选

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI助手AI工具AI写作工具AI辅助写作蛙蛙写作学术助手办公助手营销助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

聊天机器人AI助手热门AI工具AI对话
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多