我正在研究BRDF描述和实现技术,OSL是主要的语言之一。我很好奇如何使用OSL来实现一个新的BRDF,或者是否有可能做到这一点,而不影响它的源代码。
OSL文档给出了一组可供任何渲染者使用的材料。例如,搅拌器提供了一组扩展的实现材料,可以在OSL中使用(这些材料实际上已经作为循环中的节点使用)。我有兴趣创造新的材料(BRDF)。根据这条线的说法,OSL不应该像这样使用,相反,用户应该利用现有的材料闭包(BSDF)来创建新的材料。线程中的OP试图实现BRDF,但由于找不到获得所需特定向量的方法,所以无法继续执行。
最后,我的问题是:为了创建用于OSL的新材料(BRDF),是否需要先在C++中实现它们,然后重新编译OSL,最后才能使它们可用?我没能找到这个问题的确切答案。
发布于 2019-09-28 10:02:36
从OSL规范的介绍开始,
OSL的表面和体积着色器计算一个明确的符号描述,称为“闭合”,一个表面或体积散射光的方式,以单位的亮度。
在混合器中,具有绿色输出套接字的循环节点是“闭包”节点,它们提供BRDF/BSDF计算,在呈现中提供外观。循环提供可用的闭包类型,OSL无法实现新的闭包类型。
因此,您必须更改混合器代码以提供不同的闭包类型,但是OSL脚本可以在周期节点树中添加大量的自定义功能,而不必更改混合器代码。OSL脚本是使用LLVM的JIT编译器编译的,以在当前使用的CPU上运行。因此,OSL脚本会将新代码“注入”到呈现引擎中,它只是在如何更改最终结果方面受到限制。
请注意,OSL脚本不必提供闭包输出,它可以输出浮点数或颜色值,从而允许它在节点树中提供中间节点。
例如,OSL脚本,LGHexTiles.osl提供了一个完整的节点,可以自己使用作为材料。当MAscales.osl提供颜色和浮点输出时,只能在材料中形成一个节点。
和许多事情一样,OSL脚本也可能被滥用。这里你会发现关于旧的Amiga正在一个OSL脚本实现的信息。是的,一个简单的渲染引擎,用OSL编写。我敢肯定他还在继续发展射线追踪器。
https://stackoverflow.com/questions/58042659
复制相似问题