Construct BVH with Unity Job System | 用Unity JobSystem构造BVH

BVH 是一种空间存储数据结构,便于空间查询。类似的空间查找方法还有BSP,Octree等等。 BVH的构造/查询比较快,空间冗余也比较少,在实时图形学领域用的比较广泛。比如NVidia的RTX技术,就是硬件固定管线实现了BVH便于RayTracing加速。 构造BVH或其它空间查询结构对于渲染剔除,物理计算,粒子/boid/swarm系统通信等等都是很重要的,ECSPhysics这个项目是实现了BVH的,不过抄完测了一下感觉这个BVH构造的不对啊。于是找到BVH有并行算法实现,非常适合用Unity JobSystem多线程构造。于是基本参考了Thinking Parallel, Part III: Tree Construction on the GPU这篇经典文章自己在Unity中实现。 构造BVH的基本流程:1. 构造Z-Order 2. 排序 3 构造子节点 ...
Read More

Real-Time Renderting 4rd Reading Notes Chap3-8 | RTR4阅读笔记 3-8章

基础的就不细说了,这里主要记一些重要的点 第三章 3.1 并行架构 GPU是高吞吐的,定义为数据处理的最大速率,也是低缓冲的,没有缓存和控制逻辑。采样贴图因为资源不在缓冲,可能很慢,要几百个时钟,这期间gpu会切换到处理另一个fragment,切换是很快的。以此处理了很多fragment,第一个贴图采样终于好了,gpu会回来执行第一个fragment。 这个架构中,通过切换fragment让gpu保持繁忙,把延迟隐藏了。还用了一种SIMD的设计,让多个线程(thread)锁步(lock-step)执行同一命令,好处是能耗和晶体管数量减少了。这多个线程成为一组,NV叫warp,AMD叫wavefronts。每组可能有8-64个线程,每个线程有一个SIMD赛道 比如我们有2000个线程,每个warp32线程,所以总共63个wraps。每个wrap锁步执行,执行到某个指令比如贴图采...
Read More

Splat with 256 Texture – Review on MegaSplat | 256套贴图混合地形-MegaSplat回顾

最近看到MegaSplat这个插件感觉很有意思,在这里做一介绍。作者Jason Booth是有二十多年经验的程序员,现在是Disruptor Beam工作室的客户端和图形架构师,最近unity官方博客还推了行尸走肉:行军作战移动端优化经验,便是这位大神所写 MegaSplat是一套地形的shader,支持很多的feature,另外有写的很好的顶点色绘制工具,shader编译代码,以及最重要的,用顶点混合256张贴图的方法。 雪的混合,代码在DoSnow函数中,基本思路是用height和ao来生成一个snowAmount,这个snowAmount来lerp颜色法线等等 比如还有岩浆,下图是unity截图,在DoLava函数中 比如还有小溪, 在DoPuddle里,会有泡沫和水波涟漪的计算,另外还会用法线重采样原有地形贴图造成折射效果 另外还有te...
Read More

Real-Time Rendering 4rd Chapter 14 Reading Note | RTR4第14章笔记-体积与半透明渲染

Real-Time Rendering出第四版了,新增了不少内容,这里做一些笔记,一章一章来。 有一些介质,比如水 雾等,分子比较稀疏,和光作用时效果不同于普通BRDF,会有散射(scattering)。另一些较致密的物质也有散射。其实普通的diffuse颜色也会有散射,只不过作用尺度很小,比如小于一像素。所有物质都会散射 14.1 散射理论 14.1.1 介质材质     吸收(Absorption),光子成为物体内能     向外散射(Out Scattering),光子没有按路径继续向前,而是被扩散向周边,取决于相函数     发光:物体内能太高会发光     向内散射(In Scattering):环境光被散射进入光线路径     定义了灭绝度(extinction),是吸收和向外散射之和。 所以颜色定义成散射与灭绝之比 散射少吸收多...
Read More