野蛮渲染剔除
野蛮渲染剔除(后称此模组)是一个渲染方面的优化模组,它的作用与实体渲染机制优化(3058)和实体渲染机制优化(3629)相似,不同之处在于实现原理与优化效果,并且此模组可以剔除一些不可见的区块。适用于实体方块与实体模组较多的整合包中。因为使用了显卡实例化功能辅助运算,在不支持opengl 3.3版本的显卡设备上无法运行实体剔除功能。此模组占用了一部分的显卡运算来减轻cpu的剔除计算和区块编译计算开销,在显卡性能较好的设备使用理论上效果更好,显卡性能较差的设备不一定有较好表现,具体需要自行测试。
模组版本0.4版本开始使用着色器辅助计算遮挡,性能和剔除表现更好。0.4之前版本的性能表现较差。0.4版本后更换实体方块Mixin方式,不再与可视性能侦测(Observable)冲突。
功能表现
此模组被设计用来缓解整合包中,发展后期方块与实体过多降低渲染效率的问题。可以跳过被非透明方块、非半透明方块所遮挡的实体、实体方块与区块的渲染。
对于任何的实体、实体方块只要是视觉中不可见即判定为被遮挡,并取消本次渲染,以此达到提升帧数的目的。仅隔一面墙、被栅栏、半砖完全遮挡也会被判断为被遮挡,具有更高的及时性。
对于区块来讲,此模组可以额外剔除视野中不可见的区块,常见场景是:树林中、屋内、山体后的区块、底下区块。在区块的剔除表现上比OptiFine、Rubidium (Embeddium)更加激进。在模组较多、发展接近中期、后期的多建筑、多机械区域,此模组可以较好的提高最低帧数。
与Rubidium (Embeddium)或OptiFine使用可以起到1+1>2的作用。
发现的问题
因为此模组目前处于开发中期阶段,会存在一些问题,具体表现为:
模组设置
此模组拥有一个数据监控面板(上)与配置菜单(下)
前者通过默认X键呼出,后者通过默认R键呼出。
数据监控面板的部分项目说明:
FPS:帧数显示,由于监控面板还是额外渲染了一部分东西,也会带来额外开销,可能会略微降低帧数。
剔除实体:是否开启实体、实体方块剔除功能。
剔除区块:是否开启区块剔除功能。
深度采样率:场景内固体方块深度纹理的缩放值,设置为默认值5%,可以尝试调整至20%或50%。引入HZB剔除功能后较高的数值可以更快的剔除远处的区块,减少显卡开销。
实体剔除:当前场景下,剔除实体/实体总数量 的对比显示。
实体剔除耗时:每一帧下剔除实体所用时间。
方块实体剔除:当前场景下,剔除方块实体/方块实体总数量 的对比显示。
方块实体剔除耗时:每一帧下剔除方块实体所用时间。
实体剔除图更新耗时:每一帧下更新实体剔除图所耗时间,在10μs-500μs下为表现良好,超过1000μs会引起画面卡顿,需要修改更新推迟数值。
区块剔除:当前场景下,剔除区块/区块总数量 的对比显示。
区块剔除耗时:每一帧下剔除区块所用时间。
区块剔除图更新耗时:每一帧下更新区块剔除图所耗时间,在10μs-500μs下为表现良好,超过1000μs会引起画面卡顿,需要修改更新推迟数值。
配置菜单说明:
剔除实体:控制实体、实体方块的剔除开关。
剔除区块:控制区块的剔除开关。
剔除图更新推迟:推迟剔除图更新的帧数,默认为1,请根据区块、实体剔除图的耗时进行设置,增加推迟剔除帧数会降低区块剔除速度,影响视觉效果。当剔除图的耗时持续超过1000μs时可以尝试增加推迟数值,通常情况下只有开启光影或者使用其他增加显卡开销的模组才会导致剔除图的耗时增加,否则剔除图耗时在300μs以下是较为良好的表现。
深度采样率:深度采样率:滑块调节百分比,默认为5%,设置为默认值5%,可以尝试调整至20%或50%。引入HZB剔除功能后较高的数值可以更快的剔除远处的区块,减少显卡开销。
被剔除实体更新频率:滑块调节数值0-20,默认5%,控制实体动画的每秒更新次数,会减少部分AI模组或者高开销实体在”渲染世界“的计算开销,通常情况下不会影响数据计算,在服务器中游玩可以放心开启。
Check Texture:调试用,用于检查深度纹理和区块、实体剔除纹理。
Debug:仅在原版MC下可用,拥有关闭和开启两种状态,开启后会停止检测实体、方块、区块的可见性,同时将世界内方块转变为渲染不可见的实体、方块与区块,用于查看哪些实体、方块、区块被判断为不可见。
纹理图形说明(开发需要,仅使用的话无需查看,需要调试面板和Check Texture功能同时打开):
左侧为深度纹理(z-Buffer texture),从下到上依次减少50%分辨率,使用核心着色器渲染,降低采样时选取像素范围内最大z值。
右上角为实体剔除纹理,根据色块显示实体状态。蓝色为视锥之外;红色为视锥内,但是被遮挡;绿色为视锥内,且不被遮挡;白色为过近实体,持续保持渲染。使用核心着色器渲染,且为实例化渲染。
实体剔除纹理下方为区块剔除纹理,与实体剔除的色块说明相同,使用核心着色器渲染。
注意事项与使用说明
经过简单的测试与兼容处理,此模组可以兼容Rubidium (Embeddium)和OptiFine。
OptiFine、Rubidium (Embeddium)的区块剔除计算已经做的相当优秀了,此模组的区块剔除不负责提升日常使用的帧数表现,只负责缓解特定场景下的掉帧问题。如果使用中产生问题直接关闭即可。
0.4版本以下使用了与可视性能侦测(Observable)相同的Mixin方法,在启动时会产生冲突,无法同时使用。