zasflower1984 发表于 2019-12-28 13:00

关于一种更好的抗锯齿方案

这种方法也不会损耗多少性能,希望英伟达能采用这种方案啊

https://weibo.com/u/5497623214?refer_flag=1005055010_&is_all=1





lchunghan 发表于 2019-12-28 15:27

不是让游戏变的更卡 才能把显卡卖的更贵吗 ?

feifeix 发表于 2019-12-28 15:35

这个是推广新产品的点子,我有新技术,可以提升画面质量,降低显卡消耗,你更新不更新? 行,买就对了。

小成成丶 发表于 2019-12-28 15:51

这刚创建的小号是来钓鱼的吗/?都懒得回答你

zasflower1984 发表于 2019-12-28 16:41

本帖最后由 zasflower1984 于 2019-12-28 21:04 编辑

不,我的意思是这个是可以用驱动来搞定而不是换新一代显卡。

这个是个示意图。看树的边缘部分。反锯齿。

仅仅对边缘处理,理论上性能损失应该很低。















lchunghan 发表于 2019-12-28 18:33

本帖最后由 lchunghan 于 2019-12-28 18:36 编辑

zasflower1984 发表于 2019-12-28 16:41
不,我的意思是这个是可以用驱动来搞定而不是换新一代显卡。

这个是个示意图。看树的边缘部分。反锯齿。

阿尔法通道反锯齿, XP时代就提出过了。单问题是你要整合行业从TGA改成PNG。你有没有想过这种代价是什么?
要有 B,G,R,A 空间驱动才能做。问题是没有啊 !


286364969 发表于 2019-12-28 22:08

我在玩游戏时,注意不到这个,怎么办?

zasflower1984 发表于 2019-12-29 07:31

本帖最后由 zasflower1984 于 2019-12-29 07:59 编辑

lchunghan 发表于 2019-12-28 18:33
阿尔法通道反锯齿, XP时代就提出过了。单问题是你要整合行业从TGA改成PNG。你有没有想过这种代价是什么? ...
其实这个应该不一定要把tga改成png,Alpha只是一个两种颜色混合的计算方法。而这个alpha值是可以通过数学计算实时算出来的。

当然我也不会写显卡渲染驱动,不知道具体内部是什么情况,猜测。

假设是这样,比如对于光栅化三角形,首先,通过计算得出现在这个像素是处在三角形边缘的位置(有三角形的顶点坐标应该容易算出),通过数学算出它的Alpha值,然后把纹理的颜色和背景色用这个alpha值混合。混合完alpha值就可以扔了,临时用的。

应该是能实现的。当然我也不会写具体的程序。

我只是提出这个想法创意和理论上的思路。怎么实现估计英伟达AMD他们知道吧?

原理,思路和效果图有了。具体怎么实现呢,要看英伟达和AMD(这个我也不会)。

应该是个可行的方案。既然我用Photoshop随便画两下都可以做出来,显卡内部知道这么多数据计算能力又这么强应该能实现。


lchunghan 发表于 2019-12-29 13:50

本帖最后由 lchunghan 于 2019-12-29 14:00 编辑

zasflower1984 发表于 2019-12-29 07:31
其实这个应该不一定要把tga改成png,Alpha只是一个两种颜色混合的计算方法。而这个alpha值是可以通过数学 ...
问题是游戏开发商那边的素材你花钱帮忙转吗?Src*alpha+Dst*(1-alpha)需要用RGBA 四个分量来表示,这就牵扯到需要把素材统一在有RGBA规格上才有可能去做到。 你以为做老黄不想啊。

这就好比你用Photoshop可以做到,但是别人用sai2, Paint的。难道你花钱给其他所有人来一套Photoshop ?    在多嘴一句到现在还有人坚持用excel画图的你能叫他们换?(你现在会想Excel怎么画画?)

zasflower1984 发表于 2019-12-29 14:11

本帖最后由 zasflower1984 于 2019-12-29 14:22 编辑

lchunghan 发表于 2019-12-29 13:50
问题是游戏开发商那边的素材你花钱帮忙转吗?Src*alpha+Dst*(1-alpha)需要用RGBA 四个分量来表示,这就牵 ...
Photoshop 只是实现想法的一个工具而已。我的意思是显卡和3D图像渲染器知道更多的数据应该更能实现。

工具是次要的,Phtotoshop和渲染程序都是按照想法思路实现的一个方法而已。Photoshop只能一张一张图片手工处理,渲染程序可以处理所有的图像。况且,还有一点,渲染程序它是知道三角形顶点的精确坐标的。也就是,哪个像素是边缘,哪个不是,谁在前面,谁在后面,它是一清二楚的。

贴图根本就不需要Alpha啊,这个Alpha只是程序渲染的时候内部临时根据顶点三角形坐标位置算出来的。

其实我觉得老黄能做到。驱动怎么写,渲染怎么写,这是他们公司擅长的地方。

lchunghan 发表于 2019-12-29 14:22

zasflower1984 发表于 2019-12-29 14:11
Photoshop 只是实现想法的一个工具而已。我的意思是显卡和3D图像渲染器知道更多的数据应该更能实现。

工 ...

有奶子你才能规划 A罩F罩没奶子你谈啥! 你难道要老黄给每个开发游戏的都装奶子 !

zasflower1984 发表于 2019-12-29 14:23

本帖最后由 zasflower1984 于 2019-12-29 14:35 编辑

lchunghan 发表于 2019-12-29 14:22
有奶子你才能规划 A罩F罩没奶子你谈啥! 你难道要老黄给每个开发游戏的都装奶子 !

...
这个和游戏开发商有什么关系?这个是显卡驱动自己实现的。游戏开发商根本无需更改任何东西。

比如这个示范边缘抗锯齿,游戏开发商根本不需要更改任何现有的东西,改的是显卡驱动,不是游戏:


lchunghan 发表于 2019-12-29 14:35

zasflower1984 发表于 2019-12-29 14:23
这个和游戏开发商有什么关系?这个是显卡驱动自己实现的。游戏开发商根本无需更改任何东西。
...
你需要 RGBA 四个分量 才能实现计算啊 !   你需要数字 1 才能实现 1+1 在没有数字1的时候 你怎么做1+1呢 !

zasflower1984 发表于 2019-12-29 14:37

本帖最后由 zasflower1984 于 2019-12-29 15:04 编辑

lchunghan 发表于 2019-12-29 14:35
你需要 RGBA 四个分量 才能实现计算啊 !
都说了那个Alpha只是一个临时计算出来的,贴图是不需要Alpha的。只是混色临时需要算出Alpha。贴图根本无需带Alpha信息。Alpha是用三角形顶点坐标计算出来的。

Alpha只是一个临时存在的东西。计算边缘,计算Alpha,使用Alpha混色,Alpha丢弃。

显卡有三角形的顶点坐标,自然就能根据那个坐标计算出Alpha。现在的显卡性能,算这种Alpha数字,小菜一碟。



以现在显卡的性能,计算出这种反锯齿,真的性能绰绰有余。

效果很好,不是么?计算量又很小。这种抗锯齿方案如果显卡驱动自带,简直可以拯救所有的游戏抗锯齿。游戏开发商无需修改现有的东西,性能损失几乎忽略不计。FPS估计也就掉个一帧两帧。

直接更新驱动即可。

lchunghan 发表于 2019-12-29 15:03

zasflower1984 发表于 2019-12-29 14:37
都说了那个Alpha只是一个临时计算出来的,贴图是不需要Alpha的。只是混色临时需要算出Alpha。贴图根本无需 ...

哎呀怎么还不明白了 !现在的技术是 从光去计算颜色 !而不是从颜色去计算光。


比如 有一个灯照过去这样 照到了亮起没照到的暗。汇编位置就可以实现不同的色彩转变。   而你这套东西需要的是从颜色去反应光照,rgba成为计算的基础。然而rgba在现在以后未来都不会去用。


zasflower1984 发表于 2019-12-29 15:07

本帖最后由 zasflower1984 于 2019-12-29 15:14 编辑

lchunghan 发表于 2019-12-29 15:03
哎呀怎么还不明白了 !现在的技术是 从光去计算颜色 !而不是从颜色去计算光。



它不是光照啊,是边缘。

这么说吧:

获取原来的RGB数据。

获取三角形顶点坐标。

根据顶点坐标计算出Alpha。

根据Alpha混合贴图1的RGB和贴图2的RGB。

丢弃Alpha。

Alpha不依赖于RGB,依赖于三角形顶点坐标。

至于一个RGB混合另外一个RGB,再正常不过的操作。根本就无需RGBA,使用RGB,Alpha临时计算即可。显卡临时变量总有?不要告诉我显卡驱动程序连放个临时变量都没地方放。

lchunghan 发表于 2019-12-29 15:15

zasflower1984 发表于 2019-12-29 15:07
它不是光照啊,是边缘。

这么说吧:

还在RGB数据!游戏不用RGB数据 !
比如我要某个 颜色 现在格式是 FLOAT x, y, z    。   
X g_pd3dDevice->SetStreamSource( 0, g_pVB, sizeof(CUSTOMVERTEX) )
Y g_pd3dDevice->SetVertexShader( D3DFVF_CUSTOMVERTEX )
Z g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1 )
就这么短 结束了






zasflower1984 发表于 2019-12-29 15:18

本帖最后由 zasflower1984 于 2019-12-29 15:33 编辑

lchunghan 发表于 2019-12-29 15:15
还在RGB数据!游戏不用RGB数据 !
比如我要某个 颜色 现在格式是 FLOAT x, y, z    。   
X g_pd3dDevi ...
D3D调用的是显卡驱动程序,这个Alpha计算是在显卡驱动里面计算的,和外部无关。Alpha值并不出现在调用方,而是驱动里面。也就是你调用D3D,D3D再调显卡驱动程序,驱动程序里面的代码。

简单来说,无需对现有的游戏代码做任何更改。英伟达和AMD改进显卡驱动即可。D3D,游戏程序都是无需更改的。

显卡,游戏,D3D,调用D3D的游戏程序或者引擎,都不需要更改,唯一要改的就是显卡驱动。

lchunghan 发表于 2019-12-29 15:45

本帖最后由 lchunghan 于 2019-12-29 15:53 编辑

zasflower1984 发表于 2019-12-29 15:18
D3D调用的是显卡驱动程序,这个Alpha计算是在显卡驱动里面计算的,和外部无关。Alpha值并不出现在调用方, ...
OpenGL所提出的颜色混合抗锯齿,intel AMD都有尝试但都是CPU去计算。 道理很简单显卡做不到。



老黄不是没尝试过,先转为YUV在把YUV转为RGB,用显存空间存储RGB数据然后混合。最后你会发现你这游戏不要玩了。

zasflower1984 发表于 2019-12-29 15:54

本帖最后由 zasflower1984 于 2019-12-29 15:58 编辑

lchunghan 发表于 2019-12-29 15:45
OpenGL所提出的颜色混合抗锯齿,intel AMD都有尝试但都是CPU去计算。 道理很简单显卡做不到。
...
显卡可以的,你把这张图片放大对比就知道,计算简单的不能再简单。显卡干这种事情绰绰有余。计算量小的很。所以我才说这种抗锯齿只会掉帧掉一帧两帧。




lchunghan 发表于 2019-12-29 19:33

zasflower1984 发表于 2019-12-29 15:54
显卡可以的,你把这张图片放大对比就知道,计算简单的不能再简单。显卡干这种事情绰绰有余。计算量小的很 ...

但是你要知道一点 源颜色没有背景颜色也没有 ,我就问你怎么算。你这套东西想当然的认为RGB是标准,而且还要显卡去计算RGB。显卡工作就是生成一幅线框图像,然后进行填充并添加纹理和阴影。

流水过程
    中央处理器(CPU)发送指令和几何数据到位于显卡内的图形处理器(GPU)。
    顶点着色器执行几何变换和光照计算。
    若几何着色器位于图形处理器内,它便会修改一些几何信息。
    计算后的几何模型被三角化(分割为三角形)。
    三角形被映射为像素块。

你认为这计算简单,是的确简单但是要把处理图像全部转成RGB难。
页: [1]
查看完整版本: 关于一种更好的抗锯齿方案