com*_*ble 4 opengl gpu glsl hlsl antialiasing
我正在处理程序纹理,它看起来很好,除了很远之外,小的纹理像素分解为噪点和莫尔图案。
我已经着手寻找一种解决方案来平均和量化远处和近处的图案比例,以便近处是完整的细节,远处则四舍五入,以便远处山的一个像素仅代表在那里找到了一种颜色,而不是 10 或 20 种颜色。
通过四舍五入体积纹理基于使用 if 语句的 World_Position 很容易做到这一点,即:
if( camera-pixel_distance > 1200 meters ) {wpos = round(wpos/3)*3;}//---round far away pixels
return texturefucntion(wpos);
Run Code Online (Sandbox Code Playgroud)
四舍五入的结果是它们看起来像这样,除了很远的地方:
问题是我必须为各种距离设置大约 5 个 if 条件,并且我必须估计一个随机的好舍入值
我试图制作一个函数,将像素的距离切割成距离步长,并将 LOD 分隔符应用于 pixel_worldposition 值,使其在远处逐渐变圆,但我得到了无意义的结果,实际上 HLSL 完全翻转了。这是尝试:
float cmra= floor(_WorldSpaceCameraPos/500)*500; //round camera distance by steps of 500m
float dst= (1-distance(cmra,pos)/4500)*1000 ; //maximum faraway view is 4500 meters
pos= floor(pos/dst)*dst;//close pixels are rounded by 1000, far ones rounded by 20,30 etc
Run Code Online (Sandbox Code Playgroud)
它返回了我无法理解的无意义模式。
是否有用于平滑和舍入距离纹理伪影的良好记录算法?我可以使用屏幕像素分辨率,结合像素的距离,将每个像素四舍五入为一种保持稳定颜色的颜色吗?