添加新 JS:自动修改画质 (#2896)

* Add JS AutoSwitchGraphicsSettings

* fix: 修复manifest.json版本号

* 修复若干问题
This commit is contained in:
OvOAuto
2026-02-20 12:59:00 +08:00
committed by GitHub
parent d035f22d49
commit c5c1475bea
6 changed files with 396 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
# 自动修改画质
## 重要提醒
为了保证您的良好体验,请务必在开始使用前阅读完本 README。
## 作用说明
本 JS 可以根据用户的预设自动修改图像设置,避免了繁琐的手动调整流程。在您使用 BetterGI 自动完成锄地等重复性任务前,可以运行本 JS调低画质以降低功耗同样地在锄地结束后也可以运行本 JS调回高画质保证游戏体验。您还可以根据自己的需求开发新的用法。
## 兼容性
由于缺少修改画质的选项,本 JS **不支持**云原神。
经过实测,本 JS 支持 1920 \* 1080、2560 \* 1440 分辨率。推测 3840 \* 2160 也可支持。
本 JS 基于 OCR 识别,故**仅支持**简体中文 UI。如果您平时使用的是其它语言可以发 Issue 说明。收到需求后,作者将酌情尝试通过在 JS 运行前后修改 UI 语言以解决此问题。
经过实测,本 JS 可以在大部分图像设置下正常运行。但由于作者仅在高性能 PC 上测试了本 JS其在老旧平台或移动设备上的运行效果是未知的。如果您遇到问题请发 Issue 说明您的运行平台和运行效果。
由于可能导致 BetterGI 崩溃,本 JS **不支持**调整游戏分辨率。您可使用 [Unity 启动参数](https://docs.unity3d.com/cn/2021.1/Manual/CommandLineArguments.html)指定原神的窗口宽高等。
## 使用方法
在配置组中添加本 JS 后,右键本 JS点击`修改JS脚本自定义配置`,即可在弹出的对话框中调整预设图像设置。
### 选项说明
预设设置的标签名称与选项名称皆与游戏内名称一致,如果您发现不同,请发 Issue。
每项设置的第一个选项都是`默认`,在您选中它后本 JS 会**不修改**此选项。
注意,即使您预设`图像质量`选项不是`默认``自定义`,本 JS 依然会根据您的预设修改其余选项。所以如果您设置了图像质量预设,又修改了其余选项为非预设的值,则在 JS 运行结束后`图像质量`将是`自定义`
感谢您耐心读完此 README请勾选自定义配置中的复选框。

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@@ -0,0 +1,90 @@
// 模板数组,用于对比用户设置
const settingsTemplate = [{"name":"check","type":"checkbox","label":"我已阅读 README.md","default":false},{"name":"图像质量","type":"select","label":"图像质量","options":["默认","极低","低","中","高","自定义"],"default":"默认"},{"name":"帧率","type":"select","label":"帧率","options":["默认","30","45","60"],"default":"默认"},{"name":"垂直同步","type":"select","label":"垂直同步","options":["默认","关闭","打开"],"default":"默认"},{"name":"渲染精度","type":"select","label":"渲染精度","options":["默认","0.6","0.8","0.9","1.0","1.1","1.2","1.3","1.4","1.5"],"default":"默认"},{"name":"阴影质量","type":"select","label":"阴影质量","options":["默认","极低","低","中","高"],"default":"默认"},{"name":"全局光照","type":"select","label":"全局光照","options":["默认","关闭","中","高","非常高"],"default":"默认"},{"name":"后期效果","type":"select","label":"后期效果","options":["默认","极低","低","中","高"],"default":"默认"},{"name":"特效质量","type":"select","label":"特效质量","options":["默认","极低","低","中","高"],"default":"默认"},{"name":"场景细节","type":"select","label":"场景细节","options":["默认","极低","低","中","高","极高"],"default":"默认"},{"name":"抗锯齿","type":"select","label":"抗锯齿","options":["默认","关闭","FSR 2","SMAA"],"default":"默认"},{"name":"体积雾","type":"select","label":"体积雾","options":["默认","关闭","打开"],"default":"默认"},{"name":"反射","type":"select","label":"反射","options":["默认","关闭","打开"],"default":"默认"},{"name":"动态模糊","type":"select","label":"动态模糊","options":["默认","关闭","低","高","非常高"],"default":"默认"},{"name":"Bloom","type":"select","label":"Bloom","options":["默认","关闭","打开"],"default":"默认"},{"name":"人群密度","type":"select","label":"人群密度","options":["默认","低","高"],"default":"默认"},{"name":"多人游戏队友特效","type":"select","label":"多人游戏队友特效","options":["默认","完全屏蔽","部分屏蔽","打开"],"default":"默认"},{"name":"次表面散射","type":"select","label":"次表面散射","options":["默认","关闭","中","高"],"default":"默认"},{"name":"各向异性采样","type":"select","label":"各向异性采样","options":["默认","1x","2x","4x","8x","16x"],"default":"默认"},{"name":"角色动态高精度","type":"select","label":"角色动态高精度","options":["默认","关闭","打开"],"default":"默认"}];
// 用户设置数组,用 Array.from() 获取字面值
const settingsArr = Array.from(settings);
// 载入设置图标和图像设置按钮
const settingsIconRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/gear.png"));
const graphicsTextRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/graphics.png"));
// 封装好的点击以上两个按钮操作
const findAndClick = async (object) => {
let res = captureGameRegion();
if (!res) {
log.error("截图失败");
return;
}
let found = res.Find(object);
if (!found) {
log.error("未能找到目标元素,请确认游戏界面状态");
return;
}
found.click();
found.click(); // 点两次是因为设置图标有的时候点一次无反应
res.Dispose();
};
// 封装好的寻找选项功能
const findOption = async (optionName) => {
let pic = captureGameRegion();
let ocrList = pic.findMulti(RecognitionObject.ocrThis);
pic.Dispose();
for(let i = 0;i < ocrList.count; i++)
if(ocrList[i].Text === optionName)
return ocrList[i];
};
const chooseOption = async (optionName, order) => {
if(order === 0)
return; // 默认选项,跳过
let res = await findOption(optionName);
let x = res.x, y = res.y;
click(x + 1000, y + 25); // 点击选项的下拉栏,依赖选项名称的相对位置
await sleep(20);
click(x + 1000, y + 25 + order * 50); // 点击具体选项
await sleep(150);
click(1000, 39);
click(1000, 39); // 双击空白处,关闭可能弹出的“部分图像设置需要重启游戏后生效”
};
(async function () {
if(settings.check === false) {
log.error("请先阅读 README.md");
return;
}
log.info("正在尝试回到主界面……");
await genshin.returnMainUi();
log.info("回到主界面成功,正在进入设置界面……");
await sleep(500);
keyPress("ESCAPE");
await sleep(1000);
await findAndClick(settingsIconRo);
log.info("进入设置界面成功,打开图像页");
await sleep(1000);
await findAndClick(graphicsTextRo);
await sleep(500);
log.info("开始修改图像设置,请{highlight}", "不要操作");
for(let i = 1; i < 8;++i)
for(let j = 0; j < Array.from(settingsTemplate[i].options).length;++j)
if(settingsArr[i].Value === Array.from(settingsTemplate[i].options)[j]) {
log.info("{name}选择{option}", settingsTemplate[i].name, settingsArr[i].Value);
await chooseOption(settingsTemplate[i].name, j);
}
moveMouseTo(1000, 500);
for(let i = 0;i < 50;++i)
verticalScroll(-1);
await sleep(500);
for(let i = 8;i < settingsTemplate.length;++i)
for(let j = 0; j < Array.from(settingsTemplate[i].options).length;++j)
if(settingsArr[i].Value === Array.from(settingsTemplate[i].options)[j]) {
log.info("{name}选择{option}", settingsTemplate[i].name, settingsArr[i].Value);
await chooseOption(settingsTemplate[i].name, j);
}
log.info("修改图像设置完成,正在尝试回到主界面……");
await genshin.returnMainUi();
log.info("回到主界面成功");
})();

View File

@@ -0,0 +1,24 @@
{
"manifest_version": 1,
"name": "自动修改画质",
"version": "1.0",
"bgi_version": "0.56.2",
"description": "自动调整画质,用于便捷切换锄地省电画质和游戏体验画质",
"authors": [
{
"name": "OvOAuto",
"link": "https://github.com/OvOAuto"
}
],
"settings_ui": "settings.json",
"main": "main.js",
"saved_files": [
"assets/*"
],
"library": [
".",
"src",
"./module"
]
}

View File

@@ -0,0 +1,247 @@
[
{
"name": "check",
"type": "checkbox",
"label": "我已阅读 README.md",
"default": false
},
{
"name": "图像质量",
"type": "select",
"label": "图像质量",
"options": [
"默认",
"极低",
"低",
"中",
"高",
"自定义"
],
"default": "默认"
},
{
"name": "帧率",
"type": "select",
"label": "帧率",
"options": [
"默认",
"30",
"45",
"60"
],
"default": "默认"
},
{
"name": "垂直同步",
"type": "select",
"label": "垂直同步",
"options": [
"默认",
"关闭",
"打开"
],
"default": "默认"
},
{
"name": "渲染精度",
"type": "select",
"label": "渲染精度",
"options": [
"默认",
"0.6",
"0.8",
"0.9",
"1.0",
"1.1",
"1.2",
"1.3",
"1.4",
"1.5"
],
"default": "默认"
},
{
"name": "阴影质量",
"type": "select",
"label": "阴影质量",
"options": [
"默认",
"极低",
"低",
"中",
"高"
],
"default": "默认"
},
{
"name": "全局光照",
"type": "select",
"label": "全局光照",
"options": [
"默认",
"关闭",
"中",
"高",
"非常高"
],
"default": "默认"
},
{
"name": "后期效果",
"type": "select",
"label": "后期效果",
"options": [
"默认",
"极低",
"低",
"中",
"高"
],
"default": "默认"
},
{
"name": "特效质量",
"type": "select",
"label": "特效质量",
"options": [
"默认",
"极低",
"低",
"中",
"高"
],
"default": "默认"
},
{
"name": "场景细节",
"type": "select",
"label": "场景细节",
"options": [
"默认",
"极低",
"低",
"中",
"高",
"极高"
],
"default": "默认"
},
{
"name": "抗锯齿",
"type": "select",
"label": "抗锯齿",
"options": [
"默认",
"关闭",
"FSR 2",
"SMAA"
],
"default": "默认"
},
{
"name": "体积雾",
"type": "select",
"label": "体积雾",
"options": [
"默认",
"关闭",
"打开"
],
"default": "默认"
},
{
"name": "反射",
"type": "select",
"label": "反射",
"options": [
"默认",
"关闭",
"打开"
],
"default": "默认"
},
{
"name": "动态模糊",
"type": "select",
"label": "动态模糊",
"options": [
"默认",
"关闭",
"低",
"高",
"非常高"
],
"default": "默认"
},
{
"name": "Bloom",
"type": "select",
"label": "Bloom",
"options": [
"默认",
"关闭",
"打开"
],
"default": "默认"
},
{
"name": "人群密度",
"type": "select",
"label": "人群密度",
"options": [
"默认",
"低",
"高"
],
"default": "默认"
},
{
"name": "多人游戏队友特效",
"type": "select",
"label": "多人游戏队友特效",
"options": [
"默认",
"完全屏蔽",
"部分屏蔽",
"打开"
],
"default": "默认"
},
{
"name": "次表面散射",
"type": "select",
"label": "次表面散射",
"options": [
"默认",
"关闭",
"中",
"高"
],
"default": "默认"
},
{
"name": "各向异性采样",
"type": "select",
"label": "各向异性采样",
"options": [
"默认",
"1x",
"2x",
"4x",
"8x",
"16x"
],
"default": "默认"
},
{
"name": "角色动态高精度",
"type": "select",
"label": "角色动态高精度",
"options": [
"默认",
"关闭",
"打开"
],
"default": "默认"
}
]