好像技术类的题目回答的人不多啊,图形学没学好的我先强答一下吧。
先说结论,是图形学重要历程碑,首先会集成到引擎编辑器部分影响预计算的速度,最终会使得这些欺骗眼睛的hack技巧都不再需要了,但这个改变是逐步推进的,要图形API,硬件和游戏引擎都支持才行。
其实Raytracing是一个简单又好用的算法,计算阴影,反射,折射这些都很自然。但为什么游戏这么多年一直在用rasterization呢,就是因为效率不够。显卡之前基本是只能处理三角形着色的,后来可以编程的部分越来越多,直到compute shader出现才对通用计算有了更好的支持,不过还是不太能处理分支复杂的情况,raytracing逻辑就比较复杂。而且游戏时间要求苛刻,电影什么的可以几个小时渲染一帧,但游戏不行,要达到60fps就要控制在每帧16毫秒左右。所以只能采取简单的办法,就是把场景多余的部分全剔除,然后逐个三角形计算颜色。
这样做的最大问题就是只能计算直接光照,而且很多情况下需要考虑全局的地方就不行了,包括很重要的阴影和反射,所以其实这些都是额外加的hack,是比较粗糙的近似,和真实光照有很大差别。
屏幕外的物体遮挡了光源怎么办,那就在光源位置先渲染一遍场景得到最小距离,然后再和屏幕上显示的距离比较,这样的话其实阴影是非黑既白的,又要做很多处理软化,还要解决走样之类的问题。
还有就是反射,现在是在反射位置弄个探测器渲染一遍场景,生成贴图,然后配合SSR(Screen Space Reflection),不用说就知道这是不考虑屏幕外的物体的,所以你在游戏里找个水面,移动视角让上面显示不全,水面反射就不是真实的了。
还有好多屏幕空间的技术其实都是后处理,比如SSAO(Screen Space Ambient Occlusion)。
那间接光照是怎么实现的,其实有两种,unity里的bake就是把场景的光照信息直接保存在一个贴图里面,但是场景如果是动态的就不行了,还有就是precomputed,用探测器计算光线传播信息。基本就是把一部分运行时的计算量提前做了。
那有了RTX之后预计算的部分就可以用它来做,可以在质量和速度之间取舍,显示到编辑器里,对场景设计来说是好事,用了新的硬件烘焙速度加快了,也能看到更真实的效果。
另外就是放到运行时,但在这个技术没普及之前肯定是不能放弃普通显卡用户的,微软的DXR给不支持硬件raytracing做了一个fallback实现,不过估计普通显卡运行速度会很慢。如果不考虑他们的话,其实现在Shadow Map,Light Map,Environment Map这些东西,还有SSAO之类的可以全部抛弃。
另外Raytracing还能在AI的可视性和环境探测,还有物理模拟和音频模拟中应用,这些流程都会有变化。现在的音效基本是只考虑距离不考虑遮挡的,Valve出了套API好像也没人用,对FPS之类的游戏肯定是考虑场景真实度更好的。
我估计不到一年Vulkan(NVIDIA已经提了扩展),还有各种主流游戏引擎都会支持,各大厂也一样。
推荐看下微软和NVIDIA的简介:
https://blogs.msdn.microsoft.com/directx/2018/03/19/announcing-microsoft-directx-raytracing/
https://devblogs.nvidia.com/introduction-nvidia-rtx-directx-ray-tracing/
黑狗布雷特 1年前
LinkAdrifting 1年前
weiyun [作者] 1年前
发布