[REQ] Displacement ruby
-
Okay ruby masters this is probably science fiction, nevertheless I will ask the question.
Is it possible to create a physical mesh from lets say a bump image, similar to the way a Heightfield terrain is created?
As most folk know it's possible to do this using displacement tool in many apps, as displacement creates actual mesh and not just an illusion of it as bump mapping does. Could such a feature be created in ruby?
I include some images to help explain.
Simple shape
The above shape after 'Sub-smooth' with 3 iriterations.
Now using an image as reference to displacement then create this?
-
ha...millions... of faces
Why?
example, 1) for rhino: developers "hide" this behavior under rdk command(extractdisplmesh)/anyway scene will be so heavy/ it normally actions at rendering process
2) for cinema4d: realtime engine for showing displ/map in mograph displ.deformer//i think you want such like this
... -
I've thought about creating such a script. The main difficulty is getting the pixel (RGB) value from the texture at a given point. If anyone knows how do this, let me know.
-
Dale, Highfield-map generator?
maybe through ogl libs -
Ilay7k, for landscapes and terrains it would be an SU killer for sure, but for other purposes like if you remember Silvershadows method of doing a cobble stone sidewalk, this would be a snap.
It can also be used for product modeling where only one or two surfaces needs a physical relief.How about this use?
-
As mentioned above, cobblestones or such mesh could be achieved using a simple bump image and if you have a seamles image like below then a small or low poly mesh can be generated which can be made into a component and tiled to form a cobble road as below without killing the model.
-
Your examples are highly convincing solo. I'm all support for a displacement ruby. It seems you already have it however.. how did you create those models?
-
I used a third party app, Vue 6 xstream and used the displacement feature, then baked it to polygons and exported it as .3ds.
The workflow is a little tedious and was hoping that if we could apply a texture to a given surface then select the surface and have an option to 'turn to mesh' which would then through the miracle coding of someone like Whaat become a 3d mesh with an option to reduce the polys if neccesary (already a ruby)Just thoughts .... dreams.
Another example.
-
@unknownuser said:
getting the pixel (RGB) value from the texture at a given point. If anyone knows how do this, let me know.
some ideas:
-
convert texture to .raw and read it via ruby file commands (as I did it in 2004 Terolscript)
-
direct image parsing - too complicated (several formats, compression)
-
server based - image upload to server, converted to an Array and returned back to Ruby
-
-
solo, let me tell you, that your illustrations are impressive. it makes perfectly clear, what you want to achieve with that script and what the benefits are.
I would love to have such a ruby.
like you said:@solo said:
...but for other purposes like if you remember Silvershadows method of doing a cobble stone sidewalk, this would be a snap.
this would really help to push realism of SketchUp models much further (towards "Silvershadow-realism"... )
-
OMG, I would SO pay for this, so long as it is not server based.
-
It's a nice idea.
However, I think current Sketchup will have difficulties with the polycount.I rather see some advanced uv-mapping tools to get displacement maps on complexer surfaces so we can render displacement with the photoreal render engine of choice.
But I can understand a displacement2mesh plugin could be useful to people that want to see the displacement in their default Sketchup output.
-
What about Didier's heightfield generator script here:- http://www.crai.archi.fr/RubyLibraryDepot/Ruby/em_geo_page.htm
The documentation is here:- http://www.crai.archi.fr/RubyLibraryDepot/Ruby/Heightfield_gen.pdfI tried it because I wanted to generate a rippled water plane, but couldn't get it to work at all. As they say however, "your mileage may vary".
-
I didn't know there was a ruby script like that.Thank you for the link Bigstick.
I just tried using Didiers script (heightfield.rb), but it doesn't do anything at all in my case.
I converted a greyscaled displacement .jpg texture to a Ascii .pgm pixel image in Xnview (as suggested in the tutorial) and tried to load it through the ruby. Maybe I am doing something wrong, but I couldn't get it to generate geometry out of it.As the ruby was created in 2004, maybe it isn't adapted to sketchup 6?
-
Didier, thank you
i have such problem with loading pgm(in skp 5):
i attach imagesFormat; P2 (PGM) Width; 828 x Height; 177 Greyscale; 256 levels. Number of points; 16 Empty mesh initialized. Mesh altitude range; 100.0 Patch Length X; 0.0476058993229746 Patch Width Y; 0.223693629205114 Altitude Step Z; 0.392156862745098 Create group; Yes Destination layer; Layer0 Error; #<NoMethodError; undefined method `*' for nil;NilClass> (eval);196;in `hf_create_points' (eval);193;in `upto' (eval);193;in `hf_create_points' (eval);181;in `upto' (eval);181;in `hf_create_points' (eval);28;in `hf_gen' (eval);324 (eval);324;in `call'
anybodies know any kind console convertor bmp2ansipgm or raw?
add: i use total commander addition - image lister by ivory
-
Irfanview can do it, and it's a free app.
-
Hi,
@unknownuser said:
maybe it isn't adapted to sketchup 6?
it is not, you are right. But it could be (one line of code to change...)
I'm testing it right now. But it is sooooo sloooow !
This kind of feature requests a C++ prog IMHO. -
Hi Ilayk,
The error comes from that the options providers have changed from SU5 to SU6.
If you decrypted the script, go to line 110:
u = opt[3][2]
and change it to:
u = opt[0][2]That's all, it will work after that,
-
strange
it's same(can't normally get size of mesh...)Format; P2 (PGM) Width; 1680 x Height; 1509 Greyscale; 256 levels. Number of points; 16 Empty mesh initialized. Mesh altitude range; 100.0 Patch Length X; 23.4485281358547 Patch Width Y; 26.1074792706233 Altitude Step Z; 0.392156862745098 Create group; Yes Destination layer; Layer0 Error; #<NoMethodError; undefined method `*' for nil;NilClass> D;/Program Files/gsu6/Plugins/heightfield_gen.rb;196;in `hf_create_points' D;/Program Files/gsu6/Plugins/heightfield_gen.rb;193;in `upto' D;/Program Files/gsu6/Plugins/heightfield_gen.rb;193;in `hf_create_points' D;/Program Files/gsu6/Plugins/heightfield_gen.rb;181;in `upto' D;/Program Files/gsu6/Plugins/heightfield_gen.rb;181;in `hf_create_points' D;/Program Files/gsu6/Plugins/heightfield_gen.rb;28;in `hf_gen' D;/Program Files/gsu6/Plugins/heightfield_gen.rb;324 D;/Program Files/gsu6/Plugins/heightfield_gen.rb;324;in `call'
-
Ok I forgot this one, line 190:
def hf_create_points opt = Sketchup.active_model.options # u = opt[3][2] Version 5 u = opt[0][2] # Version 6 ...
Advertisement