[Info] Ambient Occlusion -> Simple Rays
-
its cool thats its actually "baking" the AO onto the faces . now if it could overlay the baked AO onto the existing material instead of replacing it
-
Daniel S
I will think about your idea. I would have to trace lightmap for "isolines" of equal brightness.Pixero
But it would have to check for each ray this max_distance condition, am I right? Rays here don't bounce, they check only if they hit nothing/background.xrok1
I planned this as next stage of developement for it seems quite complicated to me. The simplest way would be to create faces offset by small distance from the original textured face (the same way Daniel S overlays shadow in his model). But then brightness would have to be translated to opacity, which requires PNG format which I'm not familiar with (yet). The other way would be to merge shadow texture with existing one aquired by something similar to 'Make unique texture'.Kuba
-
qpic, this is an excellent plugin. Keep working at it. I am looking forward to the finished version.
I like the idea of merging both the occlusion and the original textures. Maybe it is possible to do that on a pixel-by-pixel basis for each texture. I don't know about standard ruby methods for this, but it may be as trivial as subtracting brightness values.
-
@qpik said:
But it would have to check for each ray this max_distance condition, am I right? Rays here don't bounce, they check only if they hit nothing/background.
If it doesnt hit anything within the given max distance it presumes the surface isnt occluded and moves on. That way you also can control how much spread the occlusion should have. Meaning you could set a low value and just get occlusion in tight corners. Can be nice to have this also.
-
...even that it is still in a beta stage, I would really like to stress that the approach is brilliant!! Great work Qpik!!!
-
Pixero
So you mean to cut down on time by reducing single ray casting procedure, not number of them? That means that instead of using existing model.raytest method I would have to write my own. I'll think about it.
About ambient occlusion method. As i know it from Wikipedia it's based on casting rays from point evenly over a "hemisphere". I plan adding narrowing that angle, but combined with changing it's direction will produce different effect, it will give soft sunlight (fixed direction) or point light (point.vector_to source direction) shadows, where the size of the light source (softness of shadows) will be determined by that angle.Speeding up is crucial for this plugin. I haven't even tried it with complex geometry, because I expect it to run for ages. I don't wan't to add too much functionality before finding out weak points and rewriting it .
I need someone to point out those areas of code which slow it down the most. Maybe Ruby can't do it much faster.Kuba
ps. About values for Resolution and Rays - do you think those default 10,10 are optimal?
-
just to thank you for such a plugin, it would be handy if progress.
-
This plugin is a great idea.
I would use the AO to overlay it on Vray renders.
Unfortunately I can't render the screen size 'as is' in Vray so I can't perfectly overlay them.
(I can't figure out how to use thomthom's ruby that is made to render the exact viewport using vray 1.00.74) -
I have added Bitmap.blur method to smooth out textures. I helps to save on calculation time, since now fairly good result can be obtained setting Rays to 5.
Here is an image showing the difference. Both shaded using Precision 10, Rays 10, but right one uses blur 3 times.
Does anyone have an idea how to replace model.raytest method with faster counterpart? Maybe there is a way to access OpenGL from Ruby?Kuba
ps. Just a tip. I turn on 'Use sun for shading' and set both 'Dark' and 'Light' to 100 just to remove Sketchup shading.
-
Kuba: nice work !
some suggestions:
- store directory and don't ask the user on each AO run for a directory
- make it Mac compatible - use Ruby functions instead of rindex for \
- to speed up things you need to profile the code and see what part takes most of the time
- add some progress info - Sketchup.set_status_text with % will do
- there is no way to access OpenGL from Ruby (except hijacking it but that will slow down SU)
-
TBD
Thank you for your suggestions. When the file is saved the script shouldn't ask for directory any more.
My biggest concern is model.raytest, it takes up to 90% of calculation time.
Can you tell me if you see any chance of speeding this plugin up? Is there a way to replace model.raytest? Is Ruby just to slow?Another example showing different settings for different sizes of faces rendered separately.
Kuba -
@qpik said:
My biggest concern is model.raytest, it takes up to 90% of calculation time. Is there a way to replace model.raytest?
unfortunately no
the only way is to take the 3d data and do the ray testing yourself, but definitely not in Ruby as it is too slow. -
@unknownuser said:
unfortunately no
the only way is to take the 3d data and do the ray testing yourself, but definitely not in Ruby as it is too slow.That is to say that this plugin has very little usability. It's just to slow.
TBD: It's probably a trivial question, but how do I extract file name from path on both Windows and Mac?
Anyway. I found that there is a strange thing with SketchUp resizing textures. Sometimes it's smother and sometimes it produces 'waves'. For example it gives nice result while using P:10, R:10 or P:25, R:10, but not with P:20, R:10 or P:50, R:10. (where P stands for Precision and R for Rays in AO settings)
Kuba
-
@qpik said:
It's probably a trivial question, but how do I extract file name from path on both Windows and Mac?
File.basename(Sketchup.active_model.path)
and if you want just the name, without the .skp extension:
File.basename(Sketchup.active_model.path,".skp")
@qpik said:
That is to say that this plugin has very little usability. It's just too slow
if you add overlaying on textures (adding support for .jpg/.png textures is enough) then it can be a free alternative to LightUp
-
Hello, I'm french this is a google translation.
This plugin is very promising, it interests me greatly, it will have on it manages colors, textures and shades diffuse projections in the future. But bravo, I am waiting for new version. -
Thank you TBD. That saved me some time checking Ruby documentation I hope i fixed the bugs you pointed out in your first post. Let me know if it works on Mac.
Also thanks to all for motivating posts. I cannot resist though to see dead end for this plugin.
Has anyone tried it on a normal model which has more than 10 faces? How long does it take to render?I still consider porting it to C++ (which I would have to learn ) but it seems pointless, as it's much easier I think to add texture baking to Podium or Kerkythea (if it's not there yet).
Kuba
-
@qpik said:
Has anyone tried it on a normal model which has more than 10 faces? How long does it take to render?
tried on a selection of 47 faces (nothing complicated) - 8min 42sec on Quad Core 2.4ghz. a bit too slow
render in Podium of the complete model (106 faces) was 31 sec.@qpik said:
I still consider porting it to C++ (which I would have to learn ) but it seems pointless
as you said that 90% is wasted in raytest I see no point in porting to another language except if you want to implement raytesting based on 3D data.
-
How about doing the raytest in Javascript via Webdialog?
Would that be faster than Ruby?Kuba
-
Hello there.
Since I need to calculate sun exposure time in my current project I've added this functionality to the plugin. Here you can see an example. Yellow corresponds to 10h exposure, blue is no exposure.
It is based on peculiar polish building code (which requires an apartment to have at least 3 hours of direct sunlight on vernal equinox between 7am and 5pm) making this version useful in Poland. It can be easily adjusted though to fit any location and sun position.ps. My previous question is still actual - Would doing the raytest in Javascript via Webdialog be faster than Ruby?
-
@qpik said:
How about doing the raytest in Javascript via Webdialog?
Would that be faster than Ruby?To get this to happen at all in Ruby is heroic. I'm impressed.
Neither Ruby nor JavaScript is a compiled language. C++ may be an order of magnitude better.
Advertisement