Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
48ae7a6
Create FUNDING.yml
Minecraft-Radiance Feb 12, 2026
42fe395
update 0.1.4
Minecraft-Radiance Mar 21, 2026
c7ddb05
Fix typo
Minecraft-Radiance Mar 21, 2026
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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 15 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# These are supported funding model platforms

github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: radiance.mod
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -123,4 +123,5 @@ core.dll
core.lib
libnvidia-ngx-dlss*
include/
shaders/
shaders/
libxess*
39 changes: 26 additions & 13 deletions README-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,13 @@ Radiance是一个Minecraft Mod,旨在将原版的OpenGL渲染器完全替换

[演示视频 (B站)](https://www.bilibili.com/video/BV1NevXBCEPg/)

<img width="2560" height="1440" alt="" src="https://image.puxuan.cc/PicGo/2026-02-09_00.45.30.png" />
<img src="https://image.puxuan.cc/PicGo/corridor.png"/>

# (重要) 关于PBR材质包
# 关于PBR材质包

目前,Radiance需要一点小的文件结构修改,才能使用PBR材质包。这可能会在接下来的版本里面被简化掉。
从0.1.4开始,不需要任何预处理了,直接加载!

1. 解压材质包
2. 进入解压出来的材质包,将`assets/minecraft/textures/**/*_s.png`移动到`assets/minecraft/textures/specular/**/*_s.png`,以及`assets/minecraft/textures/**/*_n.png`移动到`assets/minecraft/textures/normal/**/*_n.png`。这背后的原因是Radiance会给specular和normal贴图单独创建内置的贴图纹理,这个移动让原版不自己加载这些贴图,从而省下巨量内存。
3. 将处理好的文件夹压缩。

一个样例`python`脚本可以用作这个处理过程的[参考](https://gist.github.com/Ljiong201108/e5a2fe8f8ac63f3cc70bf5557a948377)。
尽管有内置的发光贴图,依旧推荐使用一个PBR材质包来获得更好的体验。

# 安装指南

Expand Down Expand Up @@ -84,15 +80,30 @@ git clone https://github.com/Minecraft-Radiance/MCVR.git

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

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

- [ ] 移植到更多版本和mod加载器(WIP,最高优先级)
Radiance 目前的游戏内设置入口在 Minecraft 的视频设置里:

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

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

- [ ] 帧生成
# 设置文档

- [ ] XESS支持
当前所有模块设置的中文参考文档见:

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

# Todo列表

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

以及更多...

Expand All @@ -104,6 +115,8 @@ git clone https://github.com/Minecraft-Radiance/MCVR.git

这个项目也使用了FSR3。更多信息请访问[这个页面](https://gpuopen.com/fidelityfx-super-resolution-3/)。

这个项目也使用了XeSS SR。更多信息请访问[这个页面](https://www.intel.com/content/www/us/en/developer/articles/technical/xess-sr-developer-guide.html)。

特别感谢所有这个项目使用的开源库的制作者,包括[NRD](https://github.com/NVIDIA-RTX/NRD)、[GLFW](https://github.com/glfw/glfw)、[GLM](https://github.com/icaven/glm)、[STB Image](https://github.com/nothings/stb)和[VMA](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator)。
如果有应该致谢但是没有被提及的,请通知本项目作者。我们会把致谢添加在需要添加的位置。

Expand Down
38 changes: 25 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,13 @@ Due to the variety of C++ usage in the modern industrial rendering pipeline, a s

[Showcase Video (Youtube)](https://www.youtube.com/watch?v=jGIQffPM1Wg)

<img width="2560" height="1440" alt="" src="https://image.puxuan.cc/PicGo/2026-02-09_00.45.30.png" />
<img src="https://image.puxuan.cc/PicGo/corridor.png"/>

# (Important) PBR Texture Packs
# PBR Texture Packs

Currently, to enable PBR texture packs, small adaption is necessary to allow miltiplexing. This maybe simpilfied in further versions.
Starting from 0.1.4, no pre-processing is necessary. Load directly!

1. Unzip the texture pack
2. Go into the unziped folder, move `assets/minecraft/textures/**/*_s.png` to `assets/minecraft/textures/specular/**/*_s.png` and `assets/minecraft/textures/**/*_n.png` to `assets/minecraft/textures/normal/**/*_n.png`. The fact behind is that Radiance will create seperate texture atlases for specular and normal textures. This disables vanilla minecraft to read them (4x memory save).
3. Zip the folder

A sample `python` script can be found [here](https://gist.github.com/Ljiong201108/e5a2fe8f8ac63f3cc70bf5557a948377).
Although there are already internal emission textures, it is still recommended to use a PBR texture pack for better experience.

# Installation Guide

Expand Down Expand Up @@ -87,15 +83,29 @@ Use `cmake` to build it and install it. Please refer to [this](https://github.co

Finally, build with `./gradlew build`.

# TODO List
# Opening the graphics/settings screen

- [ ] port to more versions and mod loaders (WIP, first priority)
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.

- [ ] Frame Generation
# Settings Reference

- [ ] XESS support
A Chinese settings reference covering all current module options is available at:

- [ ] HDR
- [`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
- [ ] Experimental Frame Generation (NVIDIA + Windows + Vulkan, WIP)
- [x] HDR (Experimental scRGB output)

And more...

Expand All @@ -107,6 +117,8 @@ This project uses Nvidia's DLSS (Deep Learning Super Sampling) technology. Pleas

This project uses FSR3. Please refer to [this page](https://gpuopen.com/fidelityfx-super-resolution-3/) for more information.

This project uses XeSS SR. Please refer to [this page](https://www.intel.com/content/www/us/en/developer/articles/technical/xess-sr-developer-guide.html) for more information.

Special thanks to all contributors of open-source libraries used in this project, including [NRD](https://github.com/NVIDIA-RTX/NRD), [GLFW](https://github.com/glfw/glfw), [GLM](https://github.com/icaven/glm), [STB Image](https://github.com/nothings/stb) and [VMA](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator). If any are not credited and should be, please inform the author and credit will be applied where required.

# Disclaimer
Expand Down
173 changes: 170 additions & 3 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 All @@ -20,7 +105,7 @@ loom {
}

tasks.named("runClient", JavaExec) {
args "--width", "1920", "--height", "1080"
args "--width", "1920", "--height", "1080"
}

repositories {
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