sketchucation logo sketchucation
    • Login
    โ„น๏ธ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    [Info] Ambient Occlusion -> Simple Rays

    Scheduled Pinned Locked Moved Plugins
    66 Posts 22 Posters 75.5k Views 22 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Q Offline
      qpik
      last edited by

      Dave R
      Nice image. Thanks for posting
      I have to work on blurring and smoothing the shadows as well as on casting rays.

      I've re-uploaded occlusion.rb. (don't know if this is a good way of posting rewritten code)

      Now the plugin will ask you to save the file so you don't have to worry about it.

      Kuba

      1 Reply Last reply Reply Quote 0
      • D Offline
        Daniel S
        last edited by

        Kuba

        Saving the model before running the plugin works very well.
        I think that will be better to make faces simulating shadows instead of writing textures. The result will not be fantastic, but you can then change the color of shadows or change the opacity, or use a texture...
        Anyway I like a lot your plugin
        Thank you for sharing it with us!!!.

        Daniel S

        1 Reply Last reply Reply Quote 0
        • Dave RD Offline
          Dave R
          last edited by

          Thanks, Kuba.

          As to posting updates, yes, you should replace the file in your original post. You should also make a note of the version number and date of update in the title to make it easier for folks to tell there has been an update.

          Thanks for making the change.

          Etaoin Shrdlu

          %

          (THERE'S NO PLACE LIKE)

          G28 X0.0 Y0.0 Z0.0

          M30

          %

          1 Reply Last reply Reply Quote 0
          • Q Offline
            qpik
            last edited by

            Daniel S
            I thought about it first. Before I learned reading/writing BMP files.
            But my goal was to render soft shadows.
            I can only imagine creating hundreds of tiny faces to simulate smooth color transition.

            If you have better idea I could implement it.

            Kuba

            1 Reply Last reply Reply Quote 0
            • D Offline
              Daniel S
              last edited by

              For soft shadows your method is better, but with faces and a lot of offsets you can make a good transition.

              Here i attach a very quick example (with not very good result, but is to explain the idea).. it will have better results if you make more faces and with not big changes on the value of opacity between each face.

              Daniel S


              Internal Lights soft.skp

              1 Reply Last reply Reply Quote 0
              • PixeroP Offline
                Pixero
                last edited by

                Very interesting. ๐Ÿ‘

                Do you have a "max distance" when calculating occlusion?
                That would also help the speed a bit I think since it wouldnt need to continue calculating rays that doesnt hit anything within the given max distance.

                Also I think it would be great to have an option for it to discard materials or include/blend with the materials/textures in the scene.

                Great job so far!

                1 Reply Last reply Reply Quote 0
                • X Offline
                  xrok1
                  last edited by

                  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 ๐Ÿ˜

                  โ€œThere are three classes of people: those who see. Those who see when they are shown. Those who do not see.โ€

                  http://www.Twilightrender.com try it!

                  1 Reply Last reply Reply Quote 0
                  • Q Offline
                    qpik
                    last edited by

                    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

                    1 Reply Last reply Reply Quote 0
                    • alexschreyerA Offline
                      alexschreyer Extension Creator
                      last edited by

                      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.

                      Author of "Architectural Design with SketchUp":
                      http://sketchupfordesign.com/

                      1 Reply Last reply Reply Quote 0
                      • PixeroP Offline
                        Pixero
                        last edited by

                        @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.

                        1 Reply Last reply Reply Quote 0
                        • pep75P Offline
                          pep75
                          last edited by

                          ...even that it is still in a beta stage, I would really like to stress that the approach is brilliant!! Great work Qpik!!!

                          1 Reply Last reply Reply Quote 0
                          • Q Offline
                            qpik
                            last edited by

                            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?

                            1 Reply Last reply Reply Quote 0
                            • majidM Offline
                              majid
                              last edited by

                              just to thank you for such a plugin, it would be handy if progress.

                              My inspiring A, B, Sketches book: https://sketchucation.com/shop/books/intermediate/2612-alphabet-inspired-sketches--inspiring-drills-for-architects--3d-artists-and-designers-

                              1 Reply Last reply Reply Quote 0
                              • K Offline
                                kwistenbiebel
                                last edited by

                                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)

                                1 Reply Last reply Reply Quote 0
                                • Q Offline
                                  qpik
                                  last edited by

                                  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.

                                  blur.jpg
                                  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.

                                  1 Reply Last reply Reply Quote 0
                                  • tbdT Offline
                                    tbd
                                    last edited by

                                    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)

                                    SketchUp Ruby Consultant | Podium 1.x developer
                                    http://plugins.ro

                                    1 Reply Last reply Reply Quote 0
                                    • Q Offline
                                      qpik
                                      last edited by

                                      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.

                                      example.jpg
                                      Kuba

                                      1 Reply Last reply Reply Quote 0
                                      • tbdT Offline
                                        tbd
                                        last edited by

                                        @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.

                                        SketchUp Ruby Consultant | Podium 1.x developer
                                        http://plugins.ro

                                        1 Reply Last reply Reply Quote 0
                                        • Q Offline
                                          qpik
                                          last edited by

                                          @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

                                          1 Reply Last reply Reply Quote 0
                                          • tbdT Offline
                                            tbd
                                            last edited by

                                            @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 ๐Ÿ˜Ž

                                            SketchUp Ruby Consultant | Podium 1.x developer
                                            http://plugins.ro

                                            1 Reply Last reply Reply Quote 0
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 2 / 4
                                            • First post
                                              Last post
                                            Buy SketchPlus
                                            Buy SUbD
                                            Buy WrapR
                                            Buy eBook
                                            Buy Modelur
                                            Buy Vertex Tools
                                            Buy SketchCuisine
                                            Buy FormFonts

                                            Advertisement