Page MenuHome

Apparently incorrect behaviour with OSL displacement and trace() call
Closed, ArchivedPublicBUG

Description

System Information
Operating system: Windows-10-10.0.18362-SP0 64 Bits
Graphics card: GeForce GTX 980 Ti/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 445.87

Blender Version
Broken: version: 2.82 (sub 7), branch: master, commit date: 2020-03-12 05:06, hash: rB375c7dc4caf4
Worked: (optional)

Short description of error
I have an OSL shader which returns a displacement based on the result of a trace() call (it it hits something, displacement is this, if it doesn't, displacement is that), but it doesn't seem to work. Bug report is for 2.82, but I get same behaviour in 2.83 and my own build of 2.90.
Other weird thing -- in attached blend file, if you put a displacement of (0,0,1) in the "else" clause, the entire plane displaces upward, not just in the green part.
(and for the record, material displacement is set to "displacement only", renderer is Cycles/CPU with experimental feature set, and plane has a subd modifier set to simple/adaptive.)

Exact steps for others to reproduce the error
Open attached blend file, red rectangle should be displaced up z-axis.

Event Timeline

Germano Cavalcante (mano-wii) changed the task status from Needs Triage to Confirmed.Jun 2 2020, 2:32 PM
Germano Cavalcante (mano-wii) changed the subtype of this task from "Report" to "Bug".

In the file you did not connect any node to the displacement input.
But it is strange that even connecting the node I did not see the expected result.
It looks like a bug. I will confirm as a bug for now.

Here is the edited file to show the bug:

Ray-tracing is not supported in displacement shaders. The meshes and objects in the scene must exist be available to be able to do ray-tracing, but displacement is part of the construction of those. In principle it's possible to setup the entire scene without displacement, perform ray-tracing on that, and then set it up again, but I don't think that's something we should be doing.