Reflective Shadow maps

本文探讨了全局光照技术中如何有效保存光照信息。介绍了从光源角度渲染场景并保存depth值、normal及光通量等信息的方法,并利用这些信息作为间接光源照亮场景。文中还讨论了shadowmap、deferred shading及优化技巧。

http://www.vis.uni-stuttgart.de/~dachsbcn/download/rsm.pdf

先上图:

内容是全局光照,不是shadow,名起的真纠结,囧!

上来先介绍两大全局光照方向----光线追踪和辐射度,都太费!

然后就是间接光照没必要特别准确,差不多就可以让玩家很high了,准不准谁也看不出来,该忽悠别犹豫。

这篇文章真正的意义我认为是带来了一个进一步的理解----如何去保存光照信息。

最开始的shadowmap,从光源角度来渲染场景,保存depth值,可以说保存了一个信息--那里可以被光照到的信息。

然后在camera视角render,查询shadow map得出那里有光那里没有进一步算出shadow。

这篇文章进一步引申这种保存lighting 信息的思想,从光源视角渲染场景,除了depth,还保存和光源相关的normal和光通量(diffuse color*light brightness),然后用这个map里得pixel当作间接光照的光源照亮场景。

这个才是保存光的信息真正正确的方式。

然后是一些细节的东西:

  • 没有考虑间接光照的occlusion
  • 在reflective shadow maps里面取信息的时候使用一定的pattern,降低solution来优化
  • deferred shading用了(deferred shading 真红)
  • 对于一些贡献不了indrect lighting的lighting source就不sample了,这个算是一种importance sampling

但是除了前面的真正意义外,那些细节已经不重要了,:)

### Java 中的非法反射访问错误(Illegal Reflective Access Error) 在使用较新版本的 Java(尤其是 JDK 9 及以上)运行某些旧版库或框架时,可能会遇到 **`WARNING: An illegal reflective access operation has occurred`** 的警告信息。该警告通常出现在应用程序试图通过反射访问 Java 内部 API 或非公共类成员的情况下。 #### 警告内容示例 ``` WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 to method java.lang.ClassLoader.defineClass(...) WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1 WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release ``` 此类警告表明当前使用的某个库(如 Spring、Flink、IntelliJ IDEA 插件等)正在尝试通过反射访问 JDK 内部的非公开 API,而这种行为在 JDK 9 后被限制[^1]。 #### 原因分析 从 JDK 9 开始,Java 引入了模块系统(JPMS),并增强了对内部 API 的访问控制。这意味着即使通过反射也无法绕过访问修饰符(如 `private` 或 `protected`)来访问类成员或构造器。如果代码或依赖库仍然使用反射访问这些受保护的内部 API,则会触发此警告,并可能在未来版本中直接抛出错误[^4]。 #### 解决方案 1. **升级依赖库** - 最根本的解决办法是升级到支持 JDK 9+ 的依赖版本。例如: - Spring Framework >= 5.1.x - Flink >= 1.13.x - IntelliJ IDEA >= 2020.x 2. **使用 JVM 参数临时允许非法反射访问** 在开发或测试环境中,可以通过添加 JVM 参数来放宽限制: ```bash --illegal-access=permit ``` 但请注意,这种方式仅适用于过渡期,因为从 JDK 17 开始,`--illegal-access` 参数已被移除[^5]。 3. **显式打开模块访问权限** 对于特定的类或包,可以使用 `--add-opens` 参数显式允许反射访问: ```bash --add-opens java.base/java.lang=ALL-UNNAMED ``` 4. **构建工具配置(Maven/Gradle)** 如果你在使用 Maven 或 Gradle 构建项目,可以在 `pom.xml` 或 `build.gradle` 文件中指定 JVM 启动参数,或者在 IDE 配置中设置 VM options。 #### 示例:在 IntelliJ IDEA 中配置 VM Options 在运行配置中添加如下选项: ```text --illegal-access=permit --add-opens java.base/java.lang=ALL-UNNAMED ``` #### 示例:Maven Surefire Plugin 配置 ```xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>--illegal-access=permit --add-opens java.base/java.lang=ALL-UNNAMED</argLine> </configuration> </plugin> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值