撰写了文章 发布于 2019-02-23 13:36:22
Renderer Introduction
这篇文章是关于渲染器(Renderer)渲染方式的介绍
- Rasterizer(光栅器)
- Ray Tracing(光线追踪)
- Ray Marching (光线步进)
Rasterizer(光栅化)
大部分游戏都用这种方法,将3D顶点投影到摄像机的2D平面上,光栅器找到所有中心点在几何图形里面的像素,然后将这些像素填充颜色或者贴图。同样光栅器也可以画点和线。GPU对光栅器做了大量的优化,使得游戏能够实时运行。
Ray Tracing(光线追踪)
在每个像素上发送一条或多条光线(Ray),然后检查与场景中几何体的交互(intersection)。这个过程是递归地(recursively)进行地,不断地进行反射、折射。 计算交互(intersection)是十分消耗性能的,因为每个像素需要跟踪多条路径,并且进行多次检测。虽然很消耗性能,但是结果也更加真实。在电影也中经常花几个小时去渲染几秒的画面。
Ray Marching(光线步进)
这是一种很优雅地方式,我们也用他来生成实时地分形。它的开始部分和光线追踪很像,每个像素发射一条光线(Ray),但是先不做交互计算,而是一步步向前走,直到接触物体。但是这里有个问题,一步要多长才行呢?步伐太大,可能会越过物体,但是步伐太小,又十分耗性能。此时我们则需要一个魔法公式,这个公式可以告诉我们:在空间中某个点,我们离场景中物体的(最短)距离。这个就是DE(Distance Estimator),有了DE我们每次就可以在一个安全的范围内前进了,重复此过程,直到我们与物体的距离小于设定的阈值,我们就得到与物体的交点。 当然,这个(最短)距离小一点也是没有关系的,因为不会触碰到物体,只是步进的次数可能会多一点。
而且利用Ray Marching渲染软阴影、虚焦、漫反射、环境光遮蔽等比传统光线跟踪更为方便快捷。目前,Ray Marching的应用主要局限于volume field的渲染上:例如在医学图像处理中,将CT机上获得的若干断层照片渲染成三维模型;或是渲染云彩、火焰、烟雾等效果。
群山
Shadertoy上也有很多大佬用Ray marching 做分形。

分形
下一篇文章就讲一下如何实现Ray Marching吧。
[https://www.youtube.com/watch?v=svLzmFuSBhk&index=4&t=5s&list=LLRjYLrSSN0GyywYATrHxZsQ]