• Login
sketchucation logo sketchucation
  • Login
πŸ”Œ Quick Selection | Try Didier Bur's reworked classic extension that supercharges selections in SketchUp Download

[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 29 Nov 2009, 19:55

    But I would have to export geometry for that one external routine.
    Is there other way?

    @thomthom said:

    What I meant was that the .raytest is probably written in C already.

    I've got that, I just wonder what makes it slow then and how to write a faster one.

    I guess I have to prepare myself for switching to C. Even for my simple use, which is lately sunlight exposure analysis, it's simply too slow, when run on part of the city centre model.

    Kuba

    ps. Many thanks for all the help so far.

    1 Reply Last reply Reply Quote 0
    • W Offline
      Wacov
      last edited by 30 Nov 2009, 21:49

      @thomthom said:

      The .raytest method is running in SU's C. Not calculated using Ruby. Ruby just calls the C method.

      Ok.

      I guess I don't know what I'm talking about, but doesn't SU's raytest method extract more information than you need for your plugin? Maybe that's why it's so (comparatively) slow.

      http://sketchup.google.com/3dwarehouse/cldetails?mid=3096a836877fb9af6cd8ad826e9017b8&prevstart=0

      1 Reply Last reply Reply Quote 0
      • T Offline
        thomthom
        last edited by 30 Nov 2009, 22:22

        Possibly. I guess it depends on what you need it for.

        Thomas Thomassen β€” SketchUp Monkey & Coding addict
        List of my plugins and link to the CookieWare fund

        1 Reply Last reply Reply Quote 0
        • Q Offline
          qpik
          last edited by 30 Nov 2009, 23:05

          @wacov said:

          I guess I don't know what I'm talking about, but doesn't SU's raytest method extract more information than you need for your plugin? Maybe that's why it's so (comparatively) slow.

          I thought exactly the same, as it returns "the first thing that the ray hits". I suppose it means "the closest thing". For my purpose it's enough to get first-on-the-list hit end exit.
          That might do the trick.

          1 Reply Last reply Reply Quote 0
          • Q Offline
            qpik
            last edited by 1 Dec 2009, 11:22

            I quickly wrote this, but it worked MUCH slower than original method.

            def raytest2 ray
             hit = false
             entities = self.entities
             entities.each { |face|
               if face.kind_of?(Sketchup;;Face) and face.classify_point(ray[0]) > 4
                plane = [face.vertices[0].position, face.normal]
                intersection = Geom.intersect_line_plane(ray, plane)
                if intersection and face.classify_point(intersection) < 8
                 hit = true
                 break
               end
              end
             }
             return hit
            end
            

            This could be optimized by passing pre-sorted face array (based on results from previous tests) instead of browsing entities array, but I doubt it would speed it up much.
            What do you think?

            1 Reply Last reply Reply Quote 0
            • T Offline
              thomthom
              last edited by 1 Dec 2009, 11:30

              @qpik said:

              plane = [face.vertices[0].position, face.normal]

              You can use face.plane instead

              @qpik said:

              This could be optimized by passing pre-sorted face array (based on results from previous tests) instead of browsing entities array, but I doubt it would speed it up much.
              What do you think?

              hmm... If you only iterate the entities collection once then it won't help to pre-process to filter out only faces. Infact, that would mean more iterations. But if you need to iterate the face multiple times, then you will save time on pre-filtering.

              @qpik said:

              I thought exactly the same, as it returns "the first thing that the ray hits". I suppose it means "the closest thing". For my purpose it's enough to get first-on-the-list hit end exit.

              Isn't that the same thing?

              @qpik said:

              I quickly wrote this, but it worked MUCH slower than original method.

              You're writing a ruby method to be faster than a C method - that C method must be doing a lot of extra processing in order to be able to out-perform it in Ruby.

              Thomas Thomassen β€” SketchUp Monkey & Coding addict
              List of my plugins and link to the CookieWare fund

              1 Reply Last reply Reply Quote 0
              • Q Offline
                qpik
                last edited by 16 Dec 2009, 23:47

                @thomthom said:

                You can use face.plane instead

                Somehow I didn't notice that one in the API πŸ˜„

                @thomthom said:

                hmm... If you only iterate the entities collection once then it won't help to pre-process to filter out only faces. Infact, that would mean more iterations. But if you need to iterate the face multiple times, then you will save time on pre-filtering.

                I meant to sort the collection before proceeding to the next testing point. The faces that got hit before might as well be the first to get hit by rays cast from adjacent point.

                @thomthom said:

                @qpik said:

                I thought exactly the same, as it returns "the first thing that the ray hits". I suppose it means "the closest thing". For my purpose it's enough to get first-on-the-list hit end exit.

                Isn't that the same thing?

                I suppose model.raytest doesn't break after first positive ray hit, but returns the closest one from an array of all.

                @thomthom said:

                @qpik said:

                I quickly wrote this, but it worked MUCH slower than original method.

                You're writing a ruby method to be faster than a C method - that C method must be doing a lot of extra processing in order to be able to out-perform it in Ruby.

                That is certainly true. That is why I managed to connect with a DLL using Win32api.call (BTW thanks to TBD for his SUDLL example).
                Now I'm on my way to moving everything to C. I hope this will finally give a speed boost.

                I'm looking into Ruby-OpenGL as well for another approach.
                Here is an example - http://forums.sketchucation.com/viewtopic.php?f=180&t=20893&p=209966#p209966

                1 Reply Last reply Reply Quote 0
                • T Offline
                  thomthom
                  last edited by 17 Dec 2009, 07:30

                  @qpik said:

                  I suppose model.raytest doesn't break after first positive ray hit, but returns the closest one from an array of all.

                  that would be very odd. if it did produce a full array before returning I think it should return the full array.

                  Thomas Thomassen β€” SketchUp Monkey & Coding addict
                  List of my plugins and link to the CookieWare fund

                  1 Reply Last reply Reply Quote 0
                  • Q Offline
                    qpik
                    last edited by 17 Dec 2009, 08:49

                    But then how would it find out the closest intersection?

                    ps. I write all this out of my head, I'm not familiar with 3d algorithms.

                    1 Reply Last reply Reply Quote 0
                    • T Offline
                      tomasz
                      last edited by 17 Dec 2009, 08:50

                      @qpik said:

                      I suppose model.raytest doesn't break after first positive ray hit, but returns the closest one from an array of all.

                      I think it does break after first positive hit. Make sure you check if the object is not hidden or on a hidden layer, otherwise your rays will stop too early when hidden layer present in a model.

                      Author of [Thea Render for SketchUp](http://www.thearender.com/sketchup)

                      1 Reply Last reply Reply Quote 0
                      • Q Offline
                        qpik
                        last edited by 17 Dec 2009, 09:36

                        Yeah, but how would the method know if the first hit is the closest?
                        It could be for example some distant face that got hit first, because it was first in the collection.

                        1 Reply Last reply Reply Quote 0
                        • T Offline
                          thomthom
                          last edited by 25 Feb 2010, 10:10

                          Did you ever find any improvements that could be made?

                          Thomas Thomassen β€” SketchUp Monkey & Coding addict
                          List of my plugins and link to the CookieWare fund

                          1 Reply Last reply Reply Quote 0
                          • Q Offline
                            qpik
                            last edited by 16 Mar 2010, 14:14

                            I planned writing new method in C and calling it via Win32api... but I never find time and enough determination to do it. I wish somebody else did it instead πŸ˜„, someone who knows C, unlike me.

                            1 Reply Last reply Reply Quote 0
                            • T Offline
                              thomthom
                              last edited by 16 Mar 2010, 14:37

                              I'm also an C ignorant... 😞

                              Thomas Thomassen β€” SketchUp Monkey & Coding addict
                              List of my plugins and link to the CookieWare fund

                              1 Reply Last reply Reply Quote 0
                              • K Offline
                                KiraNL
                                last edited by 10 Jul 2011, 17:59

                                Any chance this ever might come out which works for round shapes?
                                Love to use this as subtile shadows over the textures, sort of lighting baking.

                                1 Reply Last reply Reply Quote 0
                                • S Offline
                                  seikun
                                  last edited by 27 Feb 2012, 06:21

                                  how can i download the plug-in

                                  1 Reply Last reply Reply Quote 0
                                  • GaieusG Offline
                                    Gaieus
                                    last edited by 27 Feb 2012, 08:15

                                    It's attached to the first post of the topic. But it is not yet tested on SU version 9 - so it may not work for you (unless you made a typo when registering in which case, could you correct it, please?).
                                    πŸ˜‰

                                    Gai...

                                    1 Reply Last reply Reply Quote 0
                                    • T Offline
                                      tomasz
                                      last edited by 27 Feb 2012, 09:00

                                      Hi Kuba,

                                      Nice to see another Polish architect in action as a programmer. πŸ˜„
                                      I am getting more and more comfortable with C++, but I do not expect to be able to help you within next few months.
                                      I won't forget you effort and if I will find time, I will see whether I can help you with the raytest issue.

                                      Author of [Thea Render for SketchUp](http://www.thearender.com/sketchup)

                                      1 Reply Last reply Reply Quote 0
                                      • Dan RathbunD Offline
                                        Dan Rathbun
                                        last edited by 22 Dec 2012, 03:57

                                        This "plugin" (using the term liberally,) has been NOMINATED for QUARANTINE.

                                        see: [Candidate] Quarantine: Ambient Occlusion by qpik

                                        I'm not here much anymore.

                                        1 Reply Last reply Reply Quote 0
                                        • Dan RathbunD Offline
                                          Dan Rathbun
                                          last edited by 7 Jan 2013, 08:49

                                          NOTICE: Preliminary Overhaul of the SimpleRays plugin !

                                          Developers' forum: [Plugin] Qpik::SimpleRays OVERHAUL

                                          I did this overhaul so we can remove SimpleRays from the Quarantine List

                                          Jakub, where are you ?

                                          ❓

                                          I'm not here much anymore.

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

                                          Advertisement