Skip to content

Commit

Permalink
update graphics and opengl summary
Browse files Browse the repository at this point in the history
  • Loading branch information
ckf104 committed Dec 28, 2024
1 parent 0abd5b4 commit 303c6e2
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 3 deletions.
2 changes: 1 addition & 1 deletion _posts/Graphics/2024-03-16-Graphics Summary.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ TODO
* 第一个问题很好解决,我们在像素点采样时进行插值即可(本质上是利用插值方法将纹理进行放大)
* 第二个问题就比较麻烦了,仅仅是简单的插值是不行的。为什么?因为我们可以用微分的方法简单计算一个像素在纹理中占据面积,考虑 x 轴相邻的两个点的距离,再考虑这两个点映射到纹理图上的距离(类似也可以考虑 y 轴),就能大概知道这块区域中一个像素面积对应到纹理图上是多少面积。由于通常的插值仅考虑一个像素点映射到纹理图上时周边的四个纹素,但如果一个像素面积对应为纹理图上的许多面积,那实际上需要考虑周边许多的纹素
* mipmap 就是用来解决这个问题的,它预先对纹理图按每次长宽除 2 进行缩放,得到许多级的纹理图。在实际做查询时,首先根据这个点对应的像素面积与纹理图面积的比值,来选择合适的一级纹理图,再正常插值得到最终的纹素。此时虽然仅考虑了周边四个纹素,但由于缩放的缘故,对应到原图可能就是一大片的面积了
* 本质地讲,mipmap 实际上提供了一种范围查询的机制。在纹理图没有被缩放时,只能查询一个纹理面积对应的纹素。缩放后,我们可以查询 1x1, 2x2, 4x4 ... 这些大小的正方形范围对应的纹素(其它面积的正方形查询通过插值得到)。一些对 mipmp 的改进,例如 Anisotropic Filtering,则是提供了更多种的纹理图压缩,使得允许一般矩形的查询
* 本质地讲,mipmap 实际上提供了一种范围查询的机制。在纹理图没有被缩放时,只能查询一个纹理面积对应的纹素。缩放后,我们可以查询 1x1, 2x2, 4x4 ... 这些大小的正方形范围对应的纹素(其它面积的正方形查询通过插值得到)。一些对 mipmp 的改进,例如 Anisotropic Filtering,则是提供了更多种的纹理图压缩,使得允许一般矩形的查询(虽然我看 opengl spec 中的描述感觉 Anisotropic Filtering 的实现就是在 mipmap 上采样多次)。以及 Summed Area Table,生成一张新的纹理,这张纹理的每个纹素值是一个它与原点围成的矩形包含的所有纹素在原纹理中的值的和,这样实际上就允许通过四次采样查询任何一个边与坐标轴对齐的矩形了
## Ray Tracing
Expand Down
7 changes: 5 additions & 2 deletions _posts/Graphics/2024-05-29 OpenGL Summary.md
Original file line number Diff line number Diff line change
Expand Up @@ -296,8 +296,10 @@ ADJCENCY 后缀的 primitive 是为 geometry shader 提供额外的相邻 primit
Geometry Shader 中新生成的 primitive 的顶点属性是怎么弄的?看起来是要在 Geometry Shader 中接收 Vertex Shader 中的输出,然后 Geometry Shader 中自己输出新的 attribute,这个再由 Fragment Shader 接收(**重点就是 Fragment Shader 的 input 不再来自 Vertex Shader 了**)
TODO:https://www.khronos.org/opengl/wiki/Geometry_Shader,关注 Instanced GS 和 Transform Feedback
由于 geometry shader 位于 vertex shader 之后,如果把 projection 放在 vertex shader 里,geometry shader 就得处理非线性的数据了,可能造成一些
不便,所以如果使用 geometry shader 的话,通常会把 projection 放在 geometry shader 中进行处理
TODO:https://www.khronos.org/opengl/wiki/Geometry_Shader,关注 Instanced GS 和 Transform Feedback
## Resource View
**TODO:关注一下 glTextureView 函数,这和 ue 里面的 resource view 感觉差不多**
Expand All @@ -313,7 +315,7 @@ TODO:https://www.khronos.org/opengl/wiki/Geometry_Shader,关注 Instanced GS
### Multisample fragment operations
### Stencil test
注意 stencil test 在 depth test 前面
### Depth test
### Blending
Expand All @@ -339,4 +341,5 @@ TODO:目前最关心的一些关键点
* 整个看看 opengl programming guide,看看还有没有感兴趣的点
* **最后,games201**
* [RTX GPU Ray-Tracing](https://developer.nvidia.com/rtx/ray-tracing),以及集成在 Vulkan 和 DX 中的 API
* TBR 为什么能减少带宽消耗?以及 [猴子也能看懂的渲染管线](https://zhuanlan.zhihu.com/p/137780634) 中谈到 Tessellation Stage 可以用来做 Displacement Mapping,了解一下

0 comments on commit 303c6e2

Please sign in to comment.