- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图尽可能逼真地渲染一个场景,在这个场景中,点光源照射到一个物体上,并以与面部法线相同的角度(入射角 = 反射角)反弹,并照亮其他地方的场景。
现在,我知道 threejs 中的反射通常是根据我在网上找到的示例处理 CubeCamera
-material,但它并不完全适用于我的情况,因为我可能正在观察场景从一个我可能无法观察到物体在另一个物体的镜面表面上的反射的点。
考虑 this example prototype我正在研究:如果场景中从墙上突出的盒子有类似镜子的 Material (使用 CubeCamera
实现),我将看不到绿色立方体的反射在底面上,除非相机处于特定位置;然而,在现实生活中,如果一个被光源照亮的物体经过另一个物体附近,它会部分照亮它,就好像它本身就是一个光源(当然取决于物体的反射率指数)等等接收间接光照的物体从任何角度都应该是可见的。
因此我想到了在立方体中添加 PointLight
的想法,但这当然会对周围环境产生不良影响。
我将尝试用以下顺序说明我的目标:
1) 在这里,我以后称为阳台的远侧是正确的黑暗,而标有红色“x”的区域是立方体有 child 的结果 PointLight
向各个方向发光。
2) 在这里,阳台的远面仍然是黑暗的,底部的那个在立方体经过时接收到更多的光,这是可取的,但立方体后面的墙实际上应该是黑暗的(我没有添加阴影然而,我首先想要正确的照明),以及它下面的地面和灯柱。
3) 最后,当立方体通过阳台时,阳台的侧面和底面被照亮是完全错误的,因为我们现在都知道反射光线不会反弹它来自的方式。这同样适用于灯柱。
现在我意识到发生的所有错误都是由于立方体本身发光的事实,我希望你能帮助我确定一种方法来产生物理上准确的反射光线。
我想避免使用环境光或其他技巧来模拟现实生活场景,并尽可能坚持物理;我怀疑我想要实现的渲染计算量很大,更不用说在实时用例中制作动画了,但这不是问题,因为我只是想开发一个概念验证,而不是必须的东西执行速度快。
据我所知,我应该为接收间接照明的 Material 编写自定义顶点和片段着色器,对吧?不幸的是我不知道从哪里开始,谁能指出我正确的方向?干杯。
最佳答案
如果您不想使用体积渲染,那么您有 3 个选项(我知道)
光线追踪
你必须使用光线追踪渲染(back ray-trace)来实现这一点。如果编码正确,这还将涵盖阴影、透明 Material 、反射照明等等。除非您还想进行精确的大气散射,否则就是这种方式。
如果转换的光线碰到任何障碍物,那么它的颜色会改变(由于障碍物属性)并且新的光线被转换为反射光线。如果 Material 是透明的,那么也会转换折射光线......每次命中或折射都会影响光强度,因此当强度低于某个阈值或在某个递归层(限制每条射线的最大折射次数)时停止,以避免无限循环和你可以操纵性能/质量......
标准多边形渲染
使用这种方法(我想你现在正在使用它)你必须即兴发挥。反射和照明效果可以类似于阴影技术来完成。对于每个表面,您必须以反射方向渲染场景。同样可以用阴影来完成,但你只需渲染到光的方向或使用阴影贴图来代替。如果你有大量的反射面,那么这种方法也不是实现折射反射的方法,你必须递归渲染,使每个多边形多次渲染,这也是疯狂的。
立方体贴图
您可以为每个对象使用立方体贴图。它与项目符号 2 类似,但在生成立方体贴图而不是每帧时只发生一次疯狂……如果对象太多,那么这也不是方法。您可以仅对具有反射表面的对象使用立方体贴图,以使其易于管理。此外,如果对象在移动,那么您必须时不时地重新生成立方体贴图 ...
关于reflection - 如何用threejs实现逼真反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26724659/
一、反射 1.定义 Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法(即使是私有的);对于任意一个对象,都能够调用它的任意方法和属性,那么,我
有没有办法从 JavaScript 对象内部获取所有方法(私有(private)、特权或公共(public))?这是示例对象: var Test = function() { // private m
我有一个抽象类“A”,类“B”和“C”扩展了 A。我想在运行时根据某些变量创建这些实例。如下所示: public abstract class A { public abstract int
假设我们在内存中有很多对象。每个都有一个不同的ID。如何迭代内存以找到与某些 id 进行比较的特定对象?为了通过 getattr 获取并使用它? 最佳答案 您应该维护这些对象的集合,因为它们是在类属性
假设我有这个结构和一个方法: package main import ( "fmt" "reflect" ) type MyStruct struct { } func (a *MyS
C#反射简介 反射(Reflection)是C#语言中一种非常有用的机制,它可以在运行时动态获取对象的类型信息并且进行相应的操作。 反射是一种在.NET Framework中广
概述 反射(Reflection)机制是指在运行时动态地获取类的信息以及操作类的成员(字段、方法、构造函数等)的能力。通过反射,我们可以在编译时期未知具体类型的情况下,通过运行时的动态
先来看一段魔法吧 public class Test { private static void changeStrValue(String str, char[] value) {
结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套; go中的struct类型理解为类,可以定义方法,和函数定义有些许区别; struct类型是值类型
反射 1. 反射的定义 Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们
反射的定义 java的反射(reflection) 机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到嘛,那么,我们就可以
我有一个 Java POJO: public class Event { private String id; private String name; private Lon
我编写了以下函数来检查给定的单例类是否实现了特征。 /** Given a singleton class, returns singleton object if cls implements T.
我正在研究 Java 反射的基础知识并观察有关类方法的信息。我需要获得一个符合 getMethod() 函数描述的规范的方法。然而,当我这样做时,我得到了一个 NoSuchMethodExceptio
我正在通过以下代码检索 IEnumerable 属性列表: BindingFlags bindingFlag = BindingFlags.Instance | BindingFlags.Public
我需要检查属性是否在其伙伴类中定义了特定属性: [MetadataType(typeof(Metadata))] public sealed partial class Address { p
我正在尝试使用 Reflections(由 org.reflections 提供)来处理一些繁重的工作,因此我不需要在很长的时间内为每个类手动创建一个实例列表。但是,Reflections 并未按照我
scala 反射 API (2.10) 是否提供更简单的方法来搜索加载的类并将列表过滤到实现定义特征的特定类? IE; trait Widget { def turn(): Int } class
我想在运行时使用反射来查找具有给定注释的所有类,但是我不知道如何在 Scala 中这样做。然后我想获取注释的值并动态实例化每个映射到关联注释值的带注释类的实例。 这是我想要做的: package pr
这超出了我的头脑,有人可以更好地向我解释吗? http://mathworld.wolfram.com/Reflection.html 我正在制作一个 2d 突破格斗游戏,所以我需要球能够在它击中墙壁
我是一名优秀的程序员,十分优秀!