Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    TraceColorDirect

    SDK Help
    0
    8
    1.3k
    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.
    • H
      Helper
      last edited by

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 17/11/2002 at 02:39, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   8.012 
      Platform:   Windows  ;   
      Language(s) :   C.O.F.F.E.E  ;  C++  ;

      ---------
       
      I qwant to get the  correct color of a pixel including all reflections, refractions , transparence ,  and everything.
      if i do the following i just  get the  shaded material color   , but the reflections are not there and transparence is also not there , so it looks pretty dull 😕
      vps->vd->GetRay(screenxpos,screenypos,&myray);
      myray.pp[0]=myray.pp[1]=myray.pp[2]=SV(myray.p);// todo sort this loop out
      myray.vv[0]=myray.vv[1]=myray.vv[2]=SV(myray.v);
      VolumeData *cpy = VolumeData::Alloc();if (!cpy) return RAY_OK;
      vps->vd->CopyTo(cpy);  // copy vd settings to cpy
      Vector Col=cpy->TraceColorDirect(&myray, 100000,cpy->raydepth+1,cpy->raybits|RAY_REFLECTION, cpy->lhit, &p,&n,&hit);
      VolumeData::Free(cpy); 
       
      this produces a result  but without reflections ,ect.
      so id like to know how do i go about getting  the  complete pixel color !!!
      cheers
      Paul

      1 Reply Last reply Reply Quote 0
      • H
        Helper
        last edited by

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 17/11/2002 at 05:41, xxxxxxxx wrote:

        Did you set SHADER_RAYTRACING/CHANNEL_RAYTRACING to initialize the Raytracer?
        Like in COFFEE I guess it has to be used to work correctly. In COFFEE that would be SHADER_RAYTRACING in the GetInfo Method to use the Raytracer when using i.e. TraceGeometry.
        Should be the same in C++.
        Best
        Samir

        1 Reply Last reply Reply Quote 0
        • H
          Helper
          last edited by

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 17/11/2002 at 06:10, xxxxxxxx wrote:

          its not a shader.
          im calling tracecolordirect from with a videopost plugin.
          vps->vp==VP_INNER && vps->open
          so before render even begins.
          it works fine  , just that reflections and transparence are not calculated.
          just shaders seem to be evaluated.

          1 Reply Last reply Reply Quote 0
          • H
            Helper
            last edited by

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            On 17/11/2002 at 06:33, xxxxxxxx wrote:

            I know, but it belongs to the volume data (that is available since VP_RENDER) and when the TraceColor, TraceColorDirect and the TraceGeometry functions need the raytracer to be initialized with SHADER_RAYTRACING I guess this would be the case even in Videopost to use these Methods.
            --------------------
            it works fine  , just that reflections and transparence are not calculated.
            --------------------
            Yeah, That´s why the only thing I can think of why the TraceColorDirect will not return Reflection etc. Colors is that the raytracer doesn´t know that you need the RAYTRACING.
            But I hope Mikael (or David O.) can tell you more (and better) about it.
            Good Luck
            Best
            Samir

            1 Reply Last reply Reply Quote 0
            • H
              Helper
              last edited by

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              On 17/11/2002 at 09:25, xxxxxxxx wrote:

              Did you set VIDEOPOST_RAYTRACING in GetRenderInfo()?

              1 Reply Last reply Reply Quote 0
              • H
                Helper
                last edited by

                THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                On 17/11/2002 at 22:29, xxxxxxxx wrote:

                Did you set VIDEOPOST_RAYTRACING in GetRenderInfo()?
                yes .
                here is a little snippet, or bet ter still the entire vp plugin.
                as you can see its not trying to do anything strange. but it just doesnt include reflection , transparence and a whol lot of other stuff.
                its just giving the crude shaded color 😞
                #include "c4d.h"
                class InvertData : public VideoPostData
                {
                 public:
                  static NodeData *Alloc(void) { return gNew InvertData; }
                  virtual LONG Execute(PluginVideoPost *node, VideoPostStruct *vps);
                  virtual LONG GetRenderInfo(PluginVideoPost *node) { return VIDEOPOST_RAYTRACING; }
                };
                LONG InvertData::Execute(PluginVideoPost *node, VideoPostStruct *vps)
                {

                if (vps->vp==VP_INNER && vps->open && *vps->error==RAY_OK && !vps->thread->TestBreak())
                 {
                 
                  RayParameter *ray = vps->vd->GetRayParameter(); // only in VP_INNER & VP_RENDER
                  if (!ray)  return RAY_NOMEM;
                  LONG x1,y1,x2,y2,x,y,cnt,i;

                x1 = ray->left;  //   you could try  by just rendering  the entire screen area
                  y1 = ray->top;
                  x2 = ray->right;
                  y2 = ray->bottom;
                  cnt = x2-x1+1;
                 
                Ray myray,myray1;
                LONG px,py,l,ho,hit=0;
                Vector no,po,p1,n1;
                LVector p,n;
                UWORD R,G,B,A;

                LONG sum=0,skip=0;
                Real bmpw=globalmap->GetBw();
                Real bmph=globalmap->GetBh();
                Real c1=1.0/255.0;
                Real Xfac=1.0/rw;
                Real Yfac=1.0/rh;
                Real XBfac=1.0/bmpw;
                Real YBfac=1.0/bmph;
                // be sure that "globalmap" is a bitmap big enough for the screen
                // region_from and region_to define an area  to be rendered
                // rendering a specific area
                while ( Allow_Render)
                {
                for (py=region_from.y-ct;py<region_to.y-ct;py++)
                {
                for (px=region_from.x;px<region_to.x;px++)
                 {
                 vps->vd->GetRay(px,py,&myray);
                 myray.pp[0]=myray.pp[1]=myray.pp[2]=SV(myray.p);// todo sort this loop out
                 myray.vv[0]=myray.vv[1]=myray.vv[2]=SV(myray.v);
                 VolumeData *cpy = VolumeData::Alloc();if (!cpy) return RAY_OK;
                 vps->vd->CopyTo(cpy); // copy vd settings into cpy
                 Vector Col=cpy->TraceColorDirect(&myray, 100000,cpy->raydepth+1,cpy->raybits,cpy->lhit, &p,&n,&hit);

                if (hit) sum++;
                 VolumeData::Free(cpy); // free copied data
                 // no reflections 😞
                 globalmap->SetPixel(px,py,Clamp(0,255,Col.x*255.0),Clamp(0,255,Col.y*255),Clamp(0,255,Col.z*255));
                 
                 }
                }
                }
                 }
                 return RAY_OK; 
                }
                 
                #define ID_SECRETVIDEOPOST ########  // a number 🙂
                Bool RegisterVPsecret(void)
                {
                 String name="Active Renderer";
                 return RegisterVideoPostPlugin(ID_SECRETVIDEOPOST,name,0,InvertData::Alloc,"",0,0);
                }

                any ideas why tracecolordirect wont return a usefull color??
                 
                 
                cheers
                 
                Paul

                1 Reply Last reply Reply Quote 0
                • H
                  Helper
                  last edited by

                  THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                  On 23/11/2002 at 03:01, xxxxxxxx wrote:

                  hi Paul,
                  this is from David O'Reilly about the same problem !
                  --------------------------------------------------------------------------------------------
                  TraceColor is designed to return the sampled color for the given ray at
                  its intersection, it does not recursively trace other rays, you need to do
                  that yourself. Maybe you are thinking of GetSurfaceData() this traces
                  shadows, transparency and reflections for you for a given ray and point.
                  --------------------------------------------------------------------------------------------
                  best regards,
                  JAY

                  1 Reply Last reply Reply Quote 0
                  • H
                    Helper
                    last edited by

                    THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                    On 23/11/2002 at 04:01, xxxxxxxx wrote:

                    thats it !!!
                     
                    cheers jay 🙂

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post