Hello,
I am working on a project which could take great advantage of specifying levelset surfaces in Field Shader, preferably with OSL.
I tested it by creating a Arnold Implicit Surface node and setting Field Shader parameter pointing to a shader network which is outputting value calculated like this: length(P_world) - 0.5, which should result in a sphere of radius 0.5 units.
I tried outputting value directly into volume input of Material Output node, or to Standard Volume node, but I did not get any results.
How can I correctly create Field Shader?
I also noticed those warnings in console:
00:00:00 711MB WARNING | [htoa::arnold::Implicit::Implicit] Field mode is not supported 00:00:00 711MB WARNING | [virtual void htoa::arnold::Implicit::build] Skipping invalid volume generation
Any ideas?
Thanks,
Juraj
I have this working for some year or so in 3ds max.
I can try look up the pseudo code on Monday, and forward.
You should be able to derive a small tool that calls the Arnold Implicit in Houdini based on the tool I got.
btw, Implicits are awesome, I have so much OSL code that supports this domain.
Love it.
implicite_surface_workflow_001.PNGimplicite_surface_workflow_002.PNGimplicite_surface_workflow_003.PNGimplicite_surface_workflow_004.PNG
Field mode is not implemented yet, however in custom mode you can build something:
First you have to make an arnold material builder, inside you create an OSL node, write your code outputing a float type value (density per example).
you plug the output directly inside the shader input of the arnold material builder.
you insert the path of your material in the material path of the implicit
in /out/ :
you create an arnold render node and a set_parameter atop of it and link them both
inside the set_parameter node you write the settings of you implicite surface:
assigment 1 = min = [-1,-1,-1]
assigment 2 = max = [1,1,1]
assigment 3 = threshold = 0.1
assigment 4 = field = 'the/path/of/your/osl/field/'