计算机图形学项目二:GPU光线追踪

1.背景

此项目RayTracing的实现是基于OGL和ComputeShader的,计算的方法参考自Shirley的光线追踪教程,本文着重介绍在Compute Shader中如何编写Ray Tracing的计算过程。

2.ComputeShader简介

  • 什么是Compute Shader?
    Compute Shader 是GLSL着色器的一种,和Vertex和Fragment不同的是,CS是只有一级的管线,通过buffer(texture buffer、image buffer、SSBO)或者shared变量可以与CPU进行数据通信

  • Compute Shader特有的参数
    计算着色器任务以组为单位,称为工作组Work Group,二级的单位称为本地工作组Local Workgroup,一级是Global Group; 例如location(local_size_x, local_size_y, local_size_z) 就是指的是本地工作组大小

  • Compute Shader的注意点
    1)选择正确的工作组大小 2)使用内存屏障MemoryBarrier,防止乱序;在不同的请求之间插入控制流和内存屏障 3)使用共享变量 4)计算着色器在运行时,进行其他的任务工作

3.光线追踪代码

总的来说,简单的光线追踪器包括以下的部分:1. 光线的定义 2.物体位置及材质的定义 3.相交检测 4.递归计算光线。下面就从这些方面具体来看Compute Shader代码:

3.1光线的定义

光线可以表达为p(t) = A + t*B, 其中A为出发的位置,B为方向,t可以理解为时间。这样可以在C语言中定义出Ray结构体:

// Ray Class
struct Ray { 
	vec3 A; // 起点 
	vec3 B; // 方向
};

3.2 物体位置及材质

这里以圆形为例,定义圆心和半径:材质的逻辑是:将

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值