编写光线跟踪器的文献和教程

时间:2008-12-12 07:46:00

标签: language-agnostic graphics raytracing

我有兴趣寻找关于编写光线跟踪器的书籍的建议,可以在网上看到的简单而清晰的光线跟踪实现,以及有关介绍光线跟踪的在线资源。

理想情况下,该方法将是渐进式和教学式的,并从基础知识开始解释编程技术和基础数学。

12 个答案:

答案 0 :(得分:27)

来自Kevin Suffern的“Ray Up from the Ground Up”开始使用。

Matt Pharr和Greg Humphreys的“基于物理的渲染”,当您对基础知识感到满意时,可以更加高级地采用它。

如果你真的进入它,Ray Tracing News档案是一个很好的阅读。此外,很多光线追踪爱好者都在ompf2.com forum挂出。

答案 1 :(得分:16)

好的,我自己没有找到任何完美的答案,从基础知识中逐步完成;我找到了许多简单的光线追踪器,并指出了大量的教科书和学术参考资料。

我没有尝试过这些光线追踪器,但它们看起来既有趣又简单。

http://www.barakcohen.co.il/2008/10/ray-tracing-simple-java-open-source.html

http://blogs.msdn.com/lukeh/archive/2007/04/03/a-ray-tracer-in-c-3-0.aspx

http://www.ffconsultancy.com/languages/ray_tracer/

来自ACM Cross Roads学生杂志

http://www.acm.org/crossroads/xrds3-4/raytracing.html

C ++中的这个至少是短的;简单性因速度而丢失

http://ompf.org/ray/sphereflake/

关于光线追踪某些方面的博士论文是here

关于DevMaster的一系列文章是here

OMPF论坛必须阅读一系列帖子here

听起来好像我需要的书"An Introduction to Ray Tracing" ;-),作者主页是here for more图形相关的编程。

Ray tracing from the ground还包括可下载的光线跟踪器源代码。

MiniLight是一个最小的全局照明渲染器。

SmallPT是一个全局照明渲染器,在99行C ++中, 使用variant在OpenCL中的CPU和GPU上使用单精度浮点数。

感谢指针的其他海报

答案 2 :(得分:5)

我上大学的advanced rendering class有我见过的最好的设计项目。通过项目帮助和讲义,您需要的只是在网站上。

基本思想是在光线跟踪器中制作非常微妙的错误非常容易,特别是当你进入折射之类的东西时。如果您只是在空间中随机创建一堆球体,则很难验证正确性或诊断错误。

因此,有一个解析器很容易合并到您自己的代码中,以及一堆诊断场景文件。第一个文件最容易上手(从原点开始,俯视一个轴,一个球体),如果你能正确渲染它们,你几乎可以保证有一个正常工作的光线跟踪器。

此外,parser uses the RIB format是Pixar的标准场景文件格式,几乎可以从任何建模者中导出。

它还探索了分布式光线跟踪和路径跟踪,它可以为您提供一些really nice images

答案 3 :(得分:3)

几年前,有人要求我做一个tiny ray-tracer的Delphi端口(不到200行C代码)。

ported it to Delphi,也许有一天我会重新转移到C#。

答案 4 :(得分:3)

我发现的最好的是: http://www.devmaster.net/articles/raytracing_series/part1.php 本教程确实倾向于移动一点,但它涵盖了光线跟踪方面的很多

答案 5 :(得分:2)

如上所述,您可能获得的最佳书籍是Matt Pharr基于物理的渲染(请访问www.pbrt.org)。详细解释了许多算法,包括光子映射等高级内容。此外,它包括一个完全工作的光线跟踪器,所以你可以看看它。它还涵盖了数学基础知识,所以如果你不想买很多书,我绝对建议你去看看这本书。

这比关于这个主题的经典书籍要好得多,因为它们往往只解释理论,而不是如何真正地实现它。对于基础知识,任何数学书都会这样做,或者您可以尝试“实时碰撞检测”,这也解释了许多交叉例程(在光线跟踪中您将需要它)。

如果你真的想从基础开始,你应该尝试“计算机图形学:原理和实践”,它已经过时了(现在有些部分真的是废话),但它很好地解释了基础知识。如果你想要一本更新的书,试试“计算机图形基础”,其中包含相同的内容,但不是那么详细(应该足以让你开始)。

最后但并非最不重要的是,wikipedia page on Raytracing实际上相当不错,应该给你一些起点。看一下外部链接部分。

答案 6 :(得分:2)

如果你正在寻找一本可以从无到有的好书到可以产生图像的工作代码,我开始使用Andrew Glassner的 An Introduction to Ray Tracing 。我现在无法访问亚马逊,但这里是relevant link

巧合的是,这实际上是将我引入面向对象设计的书籍和问题领域。男孩,那是不久前的......

从那里开始,我会建议转到Pete Shirley的书,因为Wikipedia bibliography似乎意味着。实际上,更好的建议是参加他的光线追踪课程。它对我有用!

答案 7 :(得分:2)

高度建议阅读https://www.scratchapixel.com/上的教程,他们花时间解释背后的物理和数学,同时提供优秀的代码示例!

我在实现自己用Java编写的光线跟踪器时使用了很多教程:https://github.com/bradforj287/brads-java-raytracer

答案 8 :(得分:1)

这个用户有一些关于光线跟踪的有趣教程,这些教程使用C#我相信:

http://www.codeproject.com/script/Articles/MemberArticles.aspx?amid=3589667

我确信会有一些更好的教程,但这可能会引起人们的兴趣。

答案 9 :(得分:0)

你看过povray了吗?恕我直言,这是理解光线追踪(http://www.povray.org/

的一个非常好的起点

答案 10 :(得分:0)

这是一个可用于理解和可视化光线跟踪的一般概念的工具:Raytracing Simulator

这是我为我教的图形课程建立的模拟器。它不是将3D场景渲染为2D图像,而是将2D场景渲染为一维图像,这样可以立即显示整个算法,让您实时修改场景参数。

答案 11 :(得分:0)

一个周末的光线追踪

是从初级到高级技术的三本书系列。这是一个光线追踪器(用 C 语言实现)教程,有很多图表和解释。

https://raytracing.github.io/