Forum Replies Created
-
AuthorPosts
-
Verlet 在 Mass 处要移动点使得弹簧维持原长,虽然我这里实现起来好像变成了直挺挺的。。。
This post has received 1 vote down.??? 那些不都是显式欧拉法的改进,和阻尼没关系?
和阻尼有关系的在倒数第二节
std::vector 加元素得用 push_back 或者 emplace_back。。。
直接 resize 不好我和你在纠结一样的问题。。。
– 欧拉法的全局 dumping 我把上课讲得两种方法都实现了,但最终会变成有惯性的绳子摆来摆
去还是停不下来。 用 Verlet 的方法倒是能停
– Verlet 看 wiki 就比较清楚,实际上就是通过一阶泰勒推出了下一时间点的位置可以通过当前时间点位置和上一时间点位置进行计算
– 问题在于初始时怎么算上一时间点(还没走了),
https://wenku.baidu.com/view/48619b136edb6f1aff001f51.html
讲了两种方法,结果还是很奇怪直接掉下去了。。。
– 而且还照上述链接的方法计算的话我就不知道在 Spring 里要算啥了。。。约束的实现不
是在 mass 的 loop 里实现了?那你原来的 D 用的啥。。。
kr 就是 F;
过曝应该是个别现象,毕竟模型中的各项 G, D 等有着各种各样的实现方法
将 ks = F 进行尝试; 同时可以尝试进行 Gamma 校正
ks = F 试试
你看渲染时候CPU各个核使用率呗
https://zhuanlan.zhihu.com/p/81708753
D, G 形式很多的,可以随便选
我和你理解一样,depth 是另一个递归终止条件。。。
主要是我没用到 Depth 也让光源发光了,用的方法比较朴素
This post has received 1 vote down.MeshTriangle 里 BVH 只是在各自的 object 上构建了, scene 里那个是为了构建整个场景的 BVH(其实就是找根节点)
所以对最终的结果做个校正试试,我开始也是特别亮(用的 G 是变形的 Smith)
6. 对于 PBR 的结果如果感觉颜色过亮过暗,可以使用 Gamma 校正试试
framebuffer 改掉索引计算方式就不用上锁了,上锁太费资源
这么一说就差不多解决了。。。
我一直强调的是为了稍微复杂一点的材质,漫反射项不能丢,甭管这项是用 Lambert 还是复杂的 Oren Nayar
老师所讲的确是通用的公式,这个公式最开始不也是从 Cook-Torrance 来的吗。。。所以应该说 Cook-Torrance 是一种微表面模型,还有其它的种类
1. “我感觉microfacet和diffuse,specular是独立的”
这句话肯定是不对的,只能说是以前实现漫反射和镜面反射用的是Lambert,Phong 那一套近似的着色模型,现在用的着色模型比较高级,但目标还是实现漫反射和镜面反射
(而且像同一个 object 多种材质简单一点的确就是 Lambert 算漫反射,Cook–Torrance 算镜面反射折射)2. kd, ks 有另外的计算方式。只不过需要定义新的参数进行计算(Disney 那一套)
3. 只看代码 Sphere 求交好像没啥 BUG。。。
多谢回复
复杂一点就是为了能支持的材质多点。。。
请问能分享下你的场景数据和模型吗
f_r = kd * f_diffuse(Lambert) + ks * f_cook
然后算 f_cook 的时候根据是否是折射计算中间向量 h 的方法会有变化
而且我用 1 – kd 算的 ks(这里的 kd 实际上就是颜色) 可能会有些问题,看看大家的情况
最后我可能实现有问题发现用了折射之后大部分区域就白了。。。
实际上我编译的时候都忘了 Release 编译了。。。
感谢分享
我 C++11 就多线程没学。。。所以没敢自己打
我用的服务器 40 线程。。。分辨率 784×784 spp32 3分钟
其实我还见过 Cook–Torrance 的一种形式是这样:
\frac{DFG}{\pi * cos(dot(VN)) * cos(dot(NL))}不知道这里取一个 cos 是为了什么,将值限定在 [-1, 1] 内?大家知道的话可以告诉我
5.由于微表面模型都是镜面反射,所以调大材质粗糙度,理论上此时就是漫反射了。。。但我感觉这样的漫反射得 spp 较大时才比较亮。。。所以可以用 Cook–Torrance 算镜面反射和折射,用 Lambert 算漫反射
我也是希望大家能互相交流,闭门造车理解错自己都不会意识到。。。
微表面:
1. 老师课上讲得微表面模型叫 Cook–Torrance, 是目前最常用的微表面模型.
有下述两种形式
– \frac{DFG}{\pi * dot(VN) * dot(NL)}
– \frac{DFG}{4 * dot(VN) * dot(NL)}2. 上式中 F 为菲涅尔项,框架中有计算方法
3. F, G 各自有不同的形式, 可以随意组合
4. 时刻牢记微表面模型假设所有的微表面都是镜面反射
This post has received 1 vote up.学到了,谢谢助教
加大 spp 试试
实际上有个 trick,场景只有一个光源,所以只要判断打到最近的 object 是不是光源就行了,在该情景下就不用考虑精度问题了
-
AuthorPosts