(按要求回答评论)隔行扫描的问题是GPU在2×2集群中运行着色器,这意味着隔行扫描没有任何好处(一个好的软件实现可能只会根据需要执行尽可能多的实际像素,除非您要求偏导数) 。 在最好的情况下,隔行扫描以相同的速度运行,在最坏的情况下,由于隔行扫描需要额外的工作,它运行得更慢。 几年前,ShaderX4中有一篇文章推荐隔行渲染。 我在 6 块显卡(“两大”制造商的 3 代硬件)上进行了尝试,在每种情况下,它的运行速度都较慢(有时会稍微慢一些,有时不会达到 50%)。 您可以做的是以 1/2 垂直分辨率进行所有昂贵的渲染,这会将像素着色器工作(和纹理带宽)减少 1/2。 然后可以放大纹理(GL_NEAREST),并丢弃所有其他线。 模板测试可用于在执行像素着色器之前丢弃像素。 当然,硬件仍然以 2×2 组运行着色器,因此您在此过程中不会获得任何好处。 但如果这只是最后一步(写出单个提取的纹素的简单着色器)也没关系。 更昂贵的合成着色器(重要!)以一半的分辨率运行。 您可以在此处找到代码的详细说明:伪动态分支。 该演示通过使用模板丢弃那些不在光照范围内的像素来避免光照像素。 另一种不需要模板缓冲区的方法是使用“显式 Z 剔除”。 事实上,它甚至可能更容易、更快。 为此,请清除 Z 并禁用颜色写入 (
glColorMask
),并绘制一个全屏四边形卡通人物,其顶点有一些“接近”的 Z 坐标,并让着色器杀死每条奇数行中的片段(或者如果需要,可以使用已弃用的 alpha 测试),管他呢)。
gl_FragCoord.y
是一种非常简单的方法来知道要杀死哪一行,使用它周围的小纹理是另一种方法(如果您必须使用 GLSL 1.0)。 现在绘制另一个全屏四边形,其顶点具有“远”Z 值(当然coreldrawx4图形只切割不扫描是怎么回事表情包设计,还要进行深度测试)。 只需获取半分辨率纹理(GL_NEAREST 过滤)并将其写出来即可。 由于深度缓冲区的每隔一行都有一个“更接近”的值,因此它将丢弃这些像素。
glPolygonStipple
这比较如何? 多边形点画法已被弃用coreldrawx4图形只切割不扫描是怎么回事,因为硬件不直接支持点画法,驱动程序必须通过“秘密”重写着色器以包含附加逻辑或回退到软件来模拟它。
- 本文固定链接: https://wen.nuanque.com/coreldraw/22392.html
- 转载请注明: nuanquewen 于 吉祥物设计/卡通ip设计/卡通人物设计/卡通形象设计/表情包设计 发表
- 文章或作品为作者独立观点不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。本文之内容为用户主动投稿和用户分享产生,如发现内容涉嫌抄袭侵权,请联系在线客服举报,一经查实,本站将立刻删除。本站转载之内容为资源共享、学习交流之目的,请勿使用于商业用途。