8.17会议存档

master
wuyize 2022-08-17 13:06:33 +08:00
parent 469c0bf328
commit a0a72e1f19
3 changed files with 27 additions and 2 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -20,9 +20,25 @@
# 二级编码结构
首先分为图元和索引两大块,图元内坐标范围为-1到1一张图中可能有多个相同的图元这些图元只需在图元缓存中保存一次为了记录图元的位置和变换信息对图元建立一个索引结构同时为了方便求交使用BVH层次包围盒结构BVH每个结点包含bvhChildren每个结点的两个儿子x分量为左儿子y分量为右儿子和bound包围盒坐标QVector4D左下角x左下角y右上角x右上角yBVH的最后一个结点的左儿子为图元索引加上BVH数组长度右儿子特殊处理为图元zIndex和逆时针旋转角度。
首先分为图元和索引两大块,图元内坐标范围为-1到1一张图中可能有多个相同的图元这些图元只需在图元缓存中保存一次为了记录图元的位置和变换信息对图元建立一个索引结构同时为了方便求交使用BVH层次包围盒结构BVH每个结点包含bvhChildren每个结点的两个儿子x分量为左儿子y分量为右儿子和bound包围盒坐标QVector4D左下角x左下角y右上角x右上角yBVH的最后一个结点的左儿子为图元索引加上BVH数组长度右儿子特殊处理为图元zIndex和逆时针旋转角度。测试得到在重叠较少且不处理叶子结点内部的情况下得到当叶子结点数量达到30000时在我的笔记本NVIDIA GeForce GTX 1650 Ti上以1898x995分辨率渲染能维持32帧左右。
图元由轮廓包围的封闭图形和线条构成轮廓可以由直线、二阶贝塞尔曲线和三阶贝塞尔曲线组成支持任意数量轮廓围成的图形的渲染轮廓围成的图形中不能含有空腔对于一个复杂的含有许多轮廓的封闭图形而言应当将其分割成数个由三段轮廓线包围的广义三角形并对这些广义三角形以及不构成图形的线条建立BVH索引图元内BVH索引存储在外部BVH数组后。
图元由轮廓包围的封闭图形和线条构成封闭图形中允许有空洞轮廓可以由直线、二阶贝塞尔曲线和三阶贝塞尔曲线组成。实验遍历一个图形的所有轮廓线判断是否有交点进而根据交点数判断点是否在图形内部的方法得到当轮廓数量达到600时在我的笔记本上以1898x995分辨率渲染只能维持13帧考虑将图形分割并建立加速结构。
使用3种操作来绘制任意图元
1. 对一块矩形区域填充一次
2. 对一块矩形区域擦除一次
3. 一块矩形区域中包含一条曲线该曲线在矩形区域中每一个x和y都一一对应且曲线的端点落在矩形端点在矩形区域中对曲线一侧的区域填充一次
对于每个像素维护一个int变量填充时对其+1擦除时对其-1最终该变量的取值应为0或11即表示像素点在图形内部。
对于任意图形,均可使用一系列上述三种操作来绘制,生成这些操作的方法有待验证。
一开始我们考虑将图形做三角划分再对划出的三角形建立BVH树下面为按该方式制定的二级编码即缓存结构
![image-20220817102607509](2st_encode.assets/triangulation.png)
compute shader接收的6个buffer

View File

@ -1,4 +1,13 @@
# 总体方案
一级编码(文件)为一张彩绘的最简表示,支持图层嵌套、迭代函数系统等操作;
二级编码缓存数个SSBO为实时渲染时所需的数据只接收图元及其位置变换信息和加速结构
读取一级编码后,须将所有嵌套和迭代解开,得到一系列组成图案的最原始的部件即图元及其位置变换,并对图元和图元内部都建立加速结构,处理得到二级编码。
# ArchitectureColoredPainting 编码方案
```
└─1st_encode 第一层编码
│ byte.md 二进制字节码编码方案