https://github.com/easonzero/sail
a path tracer using WebGL for realtime performance
https://github.com/easonzero/sail
computer-graphics pathtracer webgl
Last synced: about 1 month ago
JSON representation
a path tracer using WebGL for realtime performance
- Host: GitHub
- URL: https://github.com/easonzero/sail
- Owner: Easonzero
- Created: 2017-03-30T15:35:38.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2019-04-07T07:43:38.000Z (about 6 years ago)
- Last Synced: 2025-03-24T10:56:26.502Z (about 2 months ago)
- Topics: computer-graphics, pathtracer, webgl
- Language: JavaScript
- Homepage: https://easonzero.github.io/Sail
- Size: 3.99 MB
- Stars: 41
- Watchers: 4
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Sail
[](https://github.com/996icu/996.ICU/blob/master/LICENSE)
[](https://996.icu/#/zh_CN)a path tracer using WebGL for realtime performance
*Sail*是一个基于Webgl技术实现的具有实时表现的路径追踪器
## 渲染结果展示
[Demo](https://easonzero.github.io/Sail/)
1. 康奈尔盒子

2. 金属、镜面、漫反射表面材质

## 特性
1. 使用基本视线路径追踪方法
2. 使用直接光照、间接光照混合渲染
3. 实时可交互
4. 支持棋盘、线性混合等过程纹理
5. 支持金属、镜面、玻璃、漫反射材质(采用Fresnel和微分布实现的bsdf)
6. 点光源,聚光灯,面积光源
7. 支持球体、立方体、矩形、锥面、二次曲面等几何形状
8. 支持盒式、sinc、高斯等滤波器## 运行
可以直接执行/ui/index.html,通过图形界面尝试渲染。也可以通过调用bin/sail.js,自己创建渲染脚本,以下是测试代码及注释
```js
let canvas = document.getElementById('canvas');let renderer = new Sail.Renderer(canvas);
let scene = new Sail.Scene();
//设置摄像机参数
let camera = new Sail.Camera([2.78,2.73,-6],[2.78,2.73,2.79]);//创建材质、纹理
let matte = new Sail.Matte(0.7);
let metal = new Sail.Metal(0,0.01,0.1);
let mirror = new Sail.Mirror(1.0);
let glass = new Sail.Glass(1,1,1.5);
let cornellbox = new Sail.CornellBox([0,0,0],[5.560,5.488,5.592]);//创建光源
scene.add(new Sail.Cube([2.13,5.487,2.27],[3.43,5.488,3.32],matte,Sail.Color.create([0,0,0]),[8,8,8]));
//创建盒子
scene.add(new Sail.Cube([0,0,-7],[5.560,5.488,5.592],matte,cornellbox));
//创建球体
scene.add(new Sail.Sphere([2,1.25,2.70],1.2,mirror,Sail.Color.create([1,1,1])));
//添加摄像机
scene.add(camera);
//创建控制器
let control = new Sail.Control(canvas,scene);
//提交场景数据
renderer.update(scene);
//渲染循环
function tick(){
requestAnimationFrame(tick);
renderer.render(scene);
}tick();
```想要修改源代码需要安装rollup。修改源代码后,在项目根目录下执行下面的代码编译项目
```shell
rollup -c
```