获得徽章 0
- day8
Accelerating Ray-Surface Intersection
原始:每根光线和每个三角形求交(太慢!)
加速:包围盒kdtree
Bounding Volumes 包围盒
- bound complex object with a simple volume
- 碰不到包围盒,就肯定碰不到里面的物体
We often use an Axis-Aligned Bounding Box (AABB)
- 三对面形成的交集 xmin, xmax, ymin, ymax, zmin, zmax
- 判断求交:光线与三对面的交点:三组(tmin,tmax) 如果有交集(即有同时在三对面内的时间),则与盒子有交
- 原理:The ray enters the box only when it enters all pairs of slabs The ray exits the box as long as it exits any pair of slabs
- If t enter < t exit , we know the ray stays a while in the box (so they must intersect!)
- 需要检查各个t是否为正
- tenter = max{tmin}, texit = min{tmax}
- ray and AABB intersect iff (t enter< t exit && t exit >= 0)
- 垂直时计算更简单:每个t只需要一个-和一个/
How to use AABB to accelerate ray tracing?
- Uniform grids 均一网格
- Spatial partitions 空间划分展开评论点赞 - day7 模型渲染方案记录
Uniform grids
有了AABB怎么加速光线,可以使用均匀网格划分的方法。
- 先找出场景的包围盒
- 将其划分成统一的网格
- 储存网格与物体表面相交的信息
假定光线与网格求交远比与物体求交快,当光线进入包围盒后,先求光线与网格的交点并判定这个网格内是否有物体表面,有的话再进行光线与物体表面的求交。
这里判断光线与哪些网格相交的算法类似于直线的光栅化。展开评论点赞 - day6
各向异性过滤 Anisotropic Filtering
Mipmap虽然十分巧妙但也不是完美的,其范围计算是近似的正方形区域,对于纹理映射到斜着的或者不规则的情况下,效果不是很好,所以有了各向异性过滤。
在mipmap中,我们考虑正方形近似计算,所以两个边是等比压缩,但在实际情况中,很多情况下是不会等比的,所以将这部分贴图也预计算进去,mipmap的部分其实就是下图的左上到右下的对角线。
所以理论上各向异性过滤增加了纹理内存三倍的大小。
各向异性过滤同mipmap一样,可以压缩多层,一般为16层,游戏中选择最大第几层其实在显存足够的情况下并无太大区别,因为纹理内存都近似增大三倍。
各向异性过滤因为可以在单方向上压缩,所以对于处理这种纹理映射到一个矩形区域的情况十分有优势,可以计算更精确的矩形范围,相反mipmap是正方形区域,误差更多。展开评论点赞 - day5 JS进阶继续 如何写好JS原则
- 各司其职:让HTML、css、JS职能分离
- 组件封装:好的UI组件具备正确性、扩展性、复用性。
- 过程抽象:应用函数式编程思想。评论点赞