图形学
文章平均质量分 65
refineiks
这个作者很懒,什么都没留下…
展开
-
【WebGL】GPU计算法线和世界坐标系下精度问题的解决思路
WebGL在片元着色器中提供了用于计算偏导数的函数 dFdx 和 dFdy,它们用于计算某种类型的值相对于屏幕空间坐标的变化率。通俗来讲,对某个值求偏导,就是当屏幕坐标沿 x 轴前进 1 个像素或者沿 y 轴前进 1个像素时,该值的变化量。下面这张图可以很好地帮助理解(图片引用自基于上述基本定义,几何体上三角面片的法线计算就有了思路。对空间坐标分别求 dFdx 和 dFdy。假设屏幕坐标处的空间位置为 position(x, y),那么。原创 2024-05-20 20:53:14 · 1867 阅读 · 0 评论 -
【WebGL】修改阴影体形状,实现相交分析
在用阴影体贴地、贴对象时,大多数情况下我们都会认位阴影体是一个带有高度的闭合柱体,就像下图中红色轮廓线范围内的区域(轮廓线是为了描述阴影体的形状额外绘制出来的,实际渲染时阴影体不会显示),最终形成的贴对象效果类似下图中被混合了颜色的建筑表面。但其实阴影体的形状可以是任意的,我们可以将阴影体的形状修改为任意的几何体,比如下图中红色轮廓线范围内是一个自定义的阴影体,可以看到它的底面顶点高度并不一致,不是一个规则的柱体。原创 2024-04-30 21:48:56 · 1216 阅读 · 0 评论 -
[WebGL] 实例化绘制性能测试
实例化绘制( Instanced Drawing )是 OpenGL / WebGL 等图形 API 中常用的性能优化技术,它适用于同样的模型绘制次数非常多的场景,能够有效的降低显存占用和图形 API 接口调用的次数,达到性能提升的效果。上述实验可以看出模型复杂程度对实例化渲染的性能影响是很大的,那么网格的复杂程度和纹理的复杂程度哪一个占主导地位呢?保持三角网不变,将原始模型的纹理尺寸按比例缩小,从测试结果看到纹理尺寸对实例化的性能并没有影响。非实例化绘制直接卡死。:实例化绘制和非实例化绘制性能的对比。原创 2024-03-30 18:31:30 · 2353 阅读 · 0 评论 -
【Cesium】在着色器中计算片元的高程
但是逐片元去计算它们对应的椭球半径在着色器里不好实现,在CPU中计算相机位置处的椭球半径(下图中的 earthRadius )来近似地作为相机观察范围内所有片元对应的椭球半径从性能和实现难度上都是更优解。2、在着色器中做如下转换:深度值 -> 相机坐标 -> 世界坐标,最后用片元世界坐标的模 - 相机位置对应的地球半径即可,glsl 代码如表1所示。怎么在着色器中计算片元的高程呢?1、在CPU中计算相机所在位置对应的地球半径,作为 uniform 变量传入着色器中:相机世界坐标的模 - 相机的高程。原创 2024-01-30 21:19:05 · 3052 阅读 · 0 评论 -
PBR材质背光面太暗优化
是在兰伯特光照模型基础上做的改进,用于解决兰伯特模型中光线无法照射到的区域完全没有漫反射导致看起来全黑的问题。可以看到和兰伯特模型的区别在于对点积部分做了一个变化,使得光线能照到的地方点积在 [ 0.5, 1.0 ] 区间,光线照不到的地方点积在 [ 0, 0.5 ] 范围内,这样背光面也会有明暗变化。PBR材质中漫反射的计算也遵循兰伯特模型,因此也可以用半兰伯特模型来改进效果。由于背光面的法线方向和光源方向的点积为负数,因此光线无法照射到的区域最终漫反射始终为黑色,无法看到物体的表面细节。原创 2024-01-18 21:02:08 · 3296 阅读 · 0 评论 -
基于径向模糊的体积光在Cesium中的应用
当空间中包含足够稠密的光散射介质(例如气体分子和气溶胶)时,光源透过遮挡物的缝隙投射的光线打在空气中的尘埃上,产生散射进入到人眼中,这些光线看起来像是一道一道的光柱,被称为体积光。在图形渲染中,体积光对画面的质感能起到很大的提升作用。体积光的渲染主要有和3 种方式。BillBoard贴片是把带有光柱效果的图片叠放在原始场景之上,实现方式不够灵活,换另一个场景就得另一组图片;径向模糊用后处理方式实现,效果不错,性能开销较小;光线追踪效果最好,算法较为复杂,性能消耗相对也较大。原创 2023-12-14 19:55:00 · 7698 阅读 · 17 评论 -
三维gis中用纹理限定多边形地理区域
虽然说在CPU中通过几何算法可以判断某个点是否处于多边形区域内,但是并不适用于实时计算机图形渲染,因为空间是连续的,而点位是离散的,不可能把一个区域内的所有的地理坐标点都取完,然后依次在CPU中判断;上面的 “多边形区域纹理” 只是记录了多边形区域的形状,把它作为 uniform 变量输入到另一次 draw call 的着色器中,用于判断多边形区域和片元的包含关系。多边形角点的原始坐标为世界坐标系下的位置,为了把多边形绘制在一张纹理上并在后续用于判断包含关系。这都涉及到限定多边形区域的问题。原创 2023-11-28 19:00:01 · 1980 阅读 · 0 评论 -
水面倒影可视化渲染方法
水面材质非常重要的一个光学特性就是反射倒影,有了倒影的加持能使水面更加逼真的渲染出来。在片元着色阶段,把 [ -1, 1] 的屏幕坐标转换为 [ 0, 1 ] 的纹理坐标去反射纹理上取值,和原始水面材质的颜色做线性混合就可以看到倒影效果了。有了反射平面后,以反射平面为镜像平面确定反射相机的位置,反射相机的方位角(heading)、翻滚角(roll)保持不变,俯仰角(pitch)取反。修改反射相机的投影矩阵,以改变近裁剪面的位置,使得近裁剪面为水面,这样水面下方的物体就不会被拍摄到,也就不会出现在倒影中了。原创 2023-11-26 18:31:25 · 2761 阅读 · 0 评论 -
GPU单精度限制造成抖动现象的解决方案
使用OpenGL和Direct3D等图形API绘图时,图形处理单元 (GPU) 在内部以32位单精度浮点数进行运算。在规范中,单精度值通常有7位精确的有效数字,因此,当传入GPU的数值变得越来越大时,数值的表示就会越来越不准确。三维数字地球往往要在大尺度下渲染物体,如果数值精度处理不当,物体看起来会有抖动的现象。假如我们要确保至少有1厘米的精度,那么传给GPU的最大数值是131,071(允许大约1厘米增量的最大数值是- 1,即131,071 )。原创 2023-11-23 19:36:15 · 2778 阅读 · 0 评论