Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
b0d7d49
Fix runtime resource loading fallback
Felix3322 Mar 25, 2026
6c6437a
Implement RT tuning pipeline and far-field flat material path
Felix3322 Mar 25, 2026
a6d04cc
Improve particle emission and far-field material handling
Felix3322 Mar 26, 2026
84f5260
Prepare packaged runtime and HDR render targets
Felix3322 Mar 26, 2026
3f7fd97
Rewrite quality presets and expose HDR controls
Felix3322 Mar 26, 2026
21c427e
Bump release version to 0.1.5-beta
Felix3322 Mar 26, 2026
490da9b
末地崩溃修复,流畅模式黑屏修复,帧生成基础(未完工)
Felix3322 Mar 26, 2026
c9baeb0
正式实现插帧测试版本
Felix3322 Mar 26, 2026
788adc9
feat(rt): bridge section light dirtiness from Java
Felix3322 Mar 26, 2026
a117c57
perf(texture): cache render-layer texture ids
Felix3322 Mar 26, 2026
adb6434
perf(entity): tier low-quality particle and block-entity updates
Felix3322 Mar 26, 2026
aea8c7f
fix(render): avoid replay buffer invalidation and cull invisible work
Felix3322 Mar 26, 2026
2f5993c
tune(quality): deeply rebalance preset parameter matrix
Felix3322 Mar 26, 2026
a3409d1
perf(far-field): keep visible distant chunks and cheapen shading
Felix3322 Mar 27, 2026
f978365
feat(dlss): expose FG controls and bundle NGX runtime
Felix3322 Mar 27, 2026
cb4d226
fix(render): skip shutdown presents and bump 0.1.6-beta
Felix3322 Mar 27, 2026
bedba48
fix(render): serialize shutdown against in-flight present
Felix3322 Mar 27, 2026
246db03
build(runtime): always package the freshly built core.dll
Felix3322 Mar 27, 2026
b488e28
feat(runtime): bundle streamline runtime and expose fork toggles
Felix3322 Mar 27, 2026
cbdcd03
fix(build): validate restored pipelines and tolerate synced core.dll
Felix3322 Mar 27, 2026
8f5ccd3
修复了代码审查发现的漏洞
Felix3322 Mar 27, 2026
057700a
fix(pipeline): revalidate DLSS preset state on load
Felix3322 Mar 27, 2026
b6acc73
feat(environment): add selectable water and cloud render modes
Felix3322 Mar 29, 2026
cba798d
feat(water): add native-like and sparkling surface response
Felix3322 Mar 29, 2026
3f35099
feat(clouds): add efficient and realistic volumetric modes
Felix3322 Mar 29, 2026
cbc3e2e
fix(packaging): include xess runtime and guard shutdown acquire
Felix3322 Mar 29, 2026
4f5a0ee
fix(deps): upgrade SnakeYAML to 2.6 to address CVE-2022-1471
Felix3322 Mar 31, 2026
8fca144
fix(chunks): prevent task rejection crash and improve executor shutdown
Felix3322 Mar 31, 2026
bc592ad
fix(resources): improve JAR handling and error reporting
Felix3322 Mar 31, 2026
653c6de
fix(mixins): improve MixinPlugin and add shader preload comment
Felix3322 Mar 31, 2026
6288dce
perf(thread): use ConcurrentHashMap in StorageVertexConsumerProvider
Felix3322 Mar 31, 2026
a807553
feat(texture): add texture registration cleanup mechanism
Felix3322 Mar 31, 2026
3b955eb
fix(native): update core.dll to latest build
Felix3322 Mar 31, 2026
b63da52
chore(gradle): reduce JVM memory to 512m and add UTF-8 encoding
Felix3322 Mar 31, 2026
89cefea
docs: update README and settings reference
Felix3322 Mar 31, 2026
5c6dcc3
i18n: update English and Chinese language files
Felix3322 Mar 31, 2026
2b831e5
refactor(gui): improve attribute widget and pipeline configuration
Felix3322 Mar 31, 2026
4f2c5f5
refactor(proxy): improve vulkan proxy and vertex handling
Felix3322 Mar 31, 2026
95e1e05
refactor(mixins): improve vulkan rendering integration mixins
Felix3322 Mar 31, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions README-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,12 +80,30 @@ git clone https://github.com/Minecraft-Radiance/MCVR.git

最后,用`./gradlew build`构建。

# 画面 / 图形设置怎么打开

Radiance 目前的游戏内设置入口在 Minecraft 的视频设置里:

1. 打开 **选项**
2. 打开 **视频设置**
3. 找到 **Pipeline** 分类
4. 点击 **Radiance Settings**

进入后就是 Radiance 的统一设置界面,可以调整画面、光照、云、水体、DLSS/HDR、材质和后处理。

# 设置文档

当前所有模块设置的中文参考文档见:

- [`docs/SETTINGS_REFERENCE.zh-CN.md`](docs/SETTINGS_REFERENCE.zh-CN.md)

# Todo列表

- [ ] 移植到更多版本和mod加载器(WIP,最高优先级)
- [x] XESS支持
- [ ] 帧生成
- [ ] HDR
- [ ] 实验性帧生成(NVIDIA + Windows + Vulkan,进行中)
- [x] HDR(实验性 scRGB 输出)
- [ ] 第一人称手的影子会显示在手持物品上

以及更多...

Expand Down
21 changes: 19 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,29 @@ Use `cmake` to build it and install it. Please refer to [this](https://github.co

Finally, build with `./gradlew build`.

# Opening the graphics/settings screen

Radiance's in-game settings are currently opened from Minecraft's video settings:

1. Open **Options**
2. Open **Video Settings**
3. Find the **Pipeline** category
4. Click **Radiance Settings**

This opens the unified Radiance settings screen for graphics, lighting, clouds, water, DLSS/HDR, materials, and post-processing.

# Settings Reference

A Chinese settings reference covering all current module options is available at:

- [`docs/SETTINGS_REFERENCE.zh-CN.md`](docs/SETTINGS_REFERENCE.zh-CN.md)

# TODO List

- [ ] port to more versions and mod loaders (WIP, first priority)
- [x] XESS support
- [ ] Frame Generation
- [ ] HDR
- [ ] Experimental Frame Generation (NVIDIA + Windows + Vulkan, WIP)
- [x] HDR (Experimental scRGB output)

And more...

Expand Down
171 changes: 169 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,91 @@ base {
archivesName = project.archives_base_name
}

def radianceRuntimeDirPath = providers.gradleProperty("radianceRuntimeDir")
.orElse(providers.environmentVariable("RADIANCE_RUNTIME_DIR"))
.orNull
def radianceRuntimeDir = radianceRuntimeDirPath ? file(radianceRuntimeDirPath) : null
def builtWindowsCoreDll = file("external/MCVR/build/src/core/Release/core.dll")
def radianceWindowsJarPath = providers.gradleProperty("radianceWindowsJar")
.orElse(providers.environmentVariable("RADIANCE_WINDOWS_JAR"))
.orNull
def radianceWindowsJar = radianceWindowsJarPath ? file(radianceWindowsJarPath) : null
def extractedRadianceWindowsRuntimeDir = layout.buildDirectory.dir("generated/radianceRuntime/windows")
def syncedBuiltWindowsRuntimeDir = layout.buildDirectory.dir("generated/radianceRuntime/localBuild")
def bundledXessRuntimeDir = file("external/MCVR/extern/xess/bin")
def radianceAllowIncompleteRuntimePackaging = providers
.gradleProperty("radianceAllowIncompleteRuntimePackaging")
.map { it.toBoolean() }
.orElse(false)
def radianceRequestedTasks = gradle.startParameter.taskNames.collect { it.toLowerCase() }
def radiancePackagingTaskRequested = radianceRequestedTasks.any { taskName ->
taskName == "build"
|| taskName == "assemble"
|| taskName.contains("jar")
|| taskName.contains("publish")
|| taskName.contains("remap")
}

def radianceWindowsJarExplicitlyConfigured =
gradle.startParameter.projectProperties.containsKey("radianceWindowsJar")
|| System.getenv("RADIANCE_WINDOWS_JAR") != null

tasks.register("extractRadianceWindowsRuntime") {
onlyIf {
radianceWindowsJar != null && radianceWindowsJar.exists()
}
if (radianceWindowsJar != null) {
inputs.file(radianceWindowsJar)
}
outputs.dir(extractedRadianceWindowsRuntimeDir)

doLast {
if (radianceWindowsJar == null || !radianceWindowsJar.exists()) {
throw new GradleException("Radiance Windows runtime jar not found: ${radianceWindowsJarPath}")
}

def outputDir = extractedRadianceWindowsRuntimeDir.get().asFile
delete(outputDir)
outputDir.mkdirs()

copy {
from(zipTree(radianceWindowsJar))
include "core.dll"
include "nvngx_*.dll"
include "libxess*.dll"
include "sl.*.dll"
include "NvLowLatencyVk.dll"
into outputDir
}

def extractedCoreDll = new File(outputDir, "core.dll")
if (!extractedCoreDll.exists()) {
throw new GradleException("core.dll was not found in ${radianceWindowsJar}")
}

logger.lifecycle("Extracted Radiance Windows runtime from ${radianceWindowsJar} -> ${outputDir}")
}
}

tasks.register("syncBuiltWindowsRuntime") {
onlyIf {
builtWindowsCoreDll.exists()
}
inputs.file(builtWindowsCoreDll)
outputs.dir(syncedBuiltWindowsRuntimeDir)

doLast {
def destinationDir = syncedBuiltWindowsRuntimeDir.get().asFile
delete(destinationDir)
destinationDir.mkdirs()
copy {
from(builtWindowsCoreDll)
into(destinationDir)
rename { "core.dll" }
}
}
}

compileJava {
options.compilerArgs += ['-h', "${projectDir}/src/main/native/include"]
outputs.upToDateWhen { false }
Expand Down Expand Up @@ -49,15 +134,97 @@ dependencies {
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"

// https://mvnrepository.com/artifact/org.yaml/snakeyaml
implementation "org.yaml:snakeyaml:2.5"
include "org.yaml:snakeyaml:2.5"
implementation "org.yaml:snakeyaml:2.6"
include "org.yaml:snakeyaml:2.6"
}

processResources {
inputs.property "version", project.version
inputs.property "minecraft_version", project.minecraft_version
inputs.property "loader_version", project.loader_version
filteringCharset "UTF-8"
duplicatesStrategy = DuplicatesStrategy.EXCLUDE

def runtimeDirectorySource = null
def supplementalWindowsRuntimeSource = null
def mainResourcesDir = file("src/main/resources")
if (radianceRuntimeDir != null) {
if (radianceRuntimeDir.exists()) {
runtimeDirectorySource = radianceRuntimeDir
if (!new File(radianceRuntimeDir, "core.dll").exists() && builtWindowsCoreDll.exists()) {
dependsOn(tasks.named("syncBuiltWindowsRuntime"))
supplementalWindowsRuntimeSource = syncedBuiltWindowsRuntimeDir
}
} else {
logger.warn("Configured radiance runtime directory does not exist: ${radianceRuntimeDir}")
}
} else if (radianceWindowsJar != null && radianceWindowsJar.exists()) {
dependsOn(tasks.named("extractRadianceWindowsRuntime"))
runtimeDirectorySource = extractedRadianceWindowsRuntimeDir
} else if (builtWindowsCoreDll.exists()) {
dependsOn(tasks.named("syncBuiltWindowsRuntime"))
supplementalWindowsRuntimeSource = syncedBuiltWindowsRuntimeDir
} else if (radianceWindowsJarExplicitlyConfigured && radianceWindowsJar != null
&& !radianceWindowsJar.exists()) {
logger.warn("Configured Radiance Windows jar does not exist: ${radianceWindowsJar}")
}

boolean packagedWindowsCoreAvailable =
new File(mainResourcesDir, "core.dll").exists() || builtWindowsCoreDll.exists()
boolean packagedLinuxCoreAvailable = new File(mainResourcesDir, "libcore.so").exists()

if (radianceRuntimeDir != null && radianceRuntimeDir.exists()) {
packagedWindowsCoreAvailable |= new File(radianceRuntimeDir, "core.dll").exists()
packagedLinuxCoreAvailable |= new File(radianceRuntimeDir, "libcore.so").exists()
} else if (radianceWindowsJar != null && radianceWindowsJar.exists()) {
packagedWindowsCoreAvailable = true
}

if (!packagedWindowsCoreAvailable || !packagedLinuxCoreAvailable) {
def missingRuntimeTargets = []
if (!packagedWindowsCoreAvailable) {
missingRuntimeTargets << "Windows (core.dll)"
}
if (!packagedLinuxCoreAvailable) {
missingRuntimeTargets << "Linux (libcore.so)"
}

def incompleteRuntimeMessage = (
"Radiance runtime packaging is incomplete: missing "
+ missingRuntimeTargets.join(", ")
+ ". Provide the missing runtime via src/main/resources or -PradianceRuntimeDir=..., "
+ "or pass -PradianceAllowIncompleteRuntimePackaging=true to package a platform-limited artifact intentionally."
)
if (radiancePackagingTaskRequested && !radianceAllowIncompleteRuntimePackaging.get()) {
throw new GradleException(incompleteRuntimeMessage)
}
logger.warn(incompleteRuntimeMessage)
}

if (runtimeDirectorySource != null) {
from(runtimeDirectorySource) {
include "core.dll"
include "libcore.so"
include "nvngx_*.dll"
include "libxess*.dll"
include "libxell.dll"
include "sl.*.dll"
include "NvLowLatencyVk.dll"
}
}

if (supplementalWindowsRuntimeSource != null) {
from(supplementalWindowsRuntimeSource) {
include "core.dll"
}
}

if (bundledXessRuntimeDir.exists()) {
from(bundledXessRuntimeDir) {
include "libxess*.dll"
include "libxell.dll"
}
}

filesMatching("fabric.mod.json") {
expand "version": project.version,
Expand Down
Loading