Recursive Ray Tracing

 

 

 

 
ÀÌ ¾Ë°í¸®ÁòÀº ½Ã¼±(eye ray)°ú °´Ã¼ÀÇ °¡Àå °¡±î¿î ±³Â÷ÁöÁ¡¿¡ ÀÖ´Â Çȼ¿ÀÇ »öÀ» °áÁ¤ÇÑ´Ù. ±×¸²ÀÚ¸¦ »êÁ¤Çϱâ À§ÇØ, ¿ì¸®´Â ±³Â÷Á¡¿¡¼­ºÎÅÍ °¢ ±¤¿øµé·Î ºÎ°¡ÀûÀÎ ±¤¼±À» ¹ß»çÇÑ´Ù. À̰ÍÀº À§ ±×¸²¿¡¼­ ´ÜÀÏ ±¤¿ø¿¡ ´ëÇØ º¸¿©Áö´Âµ¥, ÀÌ ±×¸²ÀÚ(shadow ray)µé Áß Çϳª°¡ ±× ¼±À» µû¶ó ¾î¶² °´Ã¼¿Í ±³Â÷ÇÏ¸é ±× °´Ã¼´Â ±× Á¡¿¡¼­ ±×¸²ÀÚ ³»¿¡ ÀÖ´Â °ÍÀ̰í À½¿µ ¾Ë°í¸®ÁòÀº ±×¸²ÀÚ¼±ÀÇ ±¤¿øÀÌ ¹ÌÄ¡´Â ¿µÇâÀ» ¹«½ÃÇÑ´Ù. 
whitted¿Í Kay¿¡ ÀÇÇØ °³¹ßµÈ Á¶¸í ¸ðµ¨Àº ±âº»ÀûÀ¸·Î ±¤¼±ÃßÀûÀ» À±Åà ¹Ý»ç¿Í ±¼Àý Åõ¸í¼ºÀ» Æ÷ÇÔÇϵµ·Ï È®ÀåÇß´Ù. ±×¸²ÀÚ¼± ¿Ü¿¡µµ WhittedÀÇ Àç±ÍÀû ±¤¼±ÃßÀû ¾Ë°í¸®ÁòÀº À§ ±×¸²¿¡¼­ º¸¿©Áø °Íó·³ ±³Â÷Á¡À¸·ÎºÎÅÍ Á¶°ÇÀûÀ¸·Î ¹Ý»ç¼±°ú ±¼Àý¼±À» ¸¸µé¾î³½´Ù. ±×¸²ÀÚ¼±, ¹Ý»ç¼±, ±×¸®°í ±¼Àý¼±Àº ´«À¸·ÎºÎÅÍ ³ª¿À´Â 1Â÷¼±(primary ray)°ú ±¸º°ÇÏ¿© Á¾Á¾ 2Â÷¼±(secondary ray)À̶ó ºÒ¸°´Ù. °´Ã¼°¡ Á¤¹Ý»çÀûÀÌ¸é ¹Ý»ç¼±Àº RÀÇ ¹æÇâÀ¸·Î Ç¥Çö ¹ý¼± ±Ùó¿¡¼­ ¹Ý»çµÈ´Ù. °´Ã¼°¡ Åõ¸íÇϰí ÃÑ ³»ºÎ¹Ý»ç°¡ ÀϾÁö ¾Ê´Â´Ù¸é ±¼Àý¼±Àº SnellÀÇ ¹ýÄ¢¿¡ ÀÇÇØ Á¤ÇØÁø °¢µµ¸¦ µû¶ó °´Ã¼ ¾ÈÀ¸·Î µé¾î°£´Ù. °¢°¢ÀÇ ¹Ý»ç¼±°ú ±¼Àý¼±Àº ±× ´ÙÀ½, ¾Æ·¡ ±×¸²¿¡¼­ ³ªÅ¸³­ °Íó·³ Àç±ÍÀûÀ¸·Î ±×¸²ÀÚ¼±, ¹Ý»ç¼±, ±×¸®°í ±¼Àý¼±À» ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù. µû¶ó¼­ ±¤¼±µéÀº ¾Æ·¡±×¸²ÀÇ ±×¸²ÀÚó·³ Æ®¸®¸¦ Çü¼ºÇÑ´Ù. WhittedÀÇ ¾Ë°í¸®Áò¿¡¼­ Æ®¸®ÀÇ °¡Áö´Â ¹Ý»çµÈ ±¤¼±°ú ±¼ÀýµÈ ±¤¼±ÀÌ °´Ã¼¿Í ±³Â÷ÇÏÁö ¾Ê°Å³ª ¾î¶² »ç¿ëÀÚ Á¤ÀÇµÈ ÃÖ´ë ±íÀÌ¿¡ µµ´ÞÇ߰ųª ¶Ç´Â ½Ã½ºÅÛ ¸Þ¸ð¸®°¡ ºÎÁ·ÇÒ ¶§ Á¾°áµÈ´Ù. Æ®¸®´Â »óÇâ½ÄÀ¸·Î °è»êµÇ°í °¢ ³ëµåÀÇ °­µµ´Â ÀÚ½Ä ³ëµåµéÀÇ °­µµ¿¡ °üÇÑ ÇÔ¼ö·Î¼­ »êÁ¤µÈ´Ù. 

 

WhittedÀÇ Á¶¸í ¹æÁ¤½ÄÀº ´ÙÀ½°ú °°´Ù 
  

¿©±â¼­ Ir ´Â ¹Ý»çµÈ ±¤¼±ÀÇ °­µµ, Ki´Â 0°ú 1»çÀÌÀÇ °ªÀ» °¡Áö´Â Àü´Þ°è¼ö, ±×¸®°í Ir ¿Í It ¿¡ ´ëÇÑ °ªÀº ¹Ý»çµÈ ±¤¼±°ú Àü´ÞµÇ´Â ±¤¼±ÀÌ ±³Â÷ÇÏ´Â °¡Àå °¡±î¿î Ç¥¸é¿¡¼­ À§ ½ÄÀ» Àç±ÍÀûÀ¸·Î Æò°¡ÇÔÀ¸·Î½á °áÁ¤µÈ´Ù. °¨¼è¸¦ °Å¸®·Î ³ªÅ¸³»±â À§ÇØ Whitted´Â °¢ ±¤¼±¿¡ ´ëÇØ °è»êµÈ I¸¦ ±¤¼±ÀÌ ¿òÁ÷¿©°£ °Å¸®ÀÇ ¿ªÀ¸·Î °öÇØÁÖ¾ú´Ù. Si¸¦ µ¨Å¸ ÇÔ¼ö·Î ´Ù·çÁö ¾Ê°í ±×¸²ÀÚ¼±¿¡ ÀÇÇØ ±³Â÷µÇ´Â °´Ã¼µé¿¡ °üÇÑ ¿¬¼ÓÇÔ¼ö·Î ¸¸µé¾î Åõ¸íÇÑ °´Ã¼°¡ ±×¸²ÀÚ¸¦ µå¸®¿ì´Â Á¡µé¿¡¼­ º¼ Åõ¸íÇÑ °´Ã¼º¸´Ù ºûÀ» ´ú °¡¸®µµ·Ï ÇÑ´Ù. 

 


Algorithm


 
select center of projection and window on view plane; 
for (each scan line inimage) { 
  for (each pixel in scan line) { 
     determine ray from center of projection through pixel; 
     pixel = RT_trace (ray, 1); 
 } 

/* intersect ray with objects and compute shade at intersection. */ 
/* Depth is current depth in ray tree */ 

RT_color RT_trace (RT_ray ray, int depth) 

  determine closest intersection of way an object; 
    if (object hit){ 
       compute normal at intersection; 
       return RT_shade (closest object hit, ray, intersection, 
       normal,depth); 
     } 
     else 
        return BACKGROUND_VALUE; 
 } 
/* Compute shade at point on object, tracing rays for shadows, reflection, refraction. */ 

RT-color RT_shade( 
 RT_object object,        /* Object intersected */ 
 RT_ray ray,             /* incident ray  */ 
 RT_point point,          /* Point of intersection to shade */ 
 RT_normal normal,      /* Normal at point */ 
 int depth)               /* Depth in ray tree  */ 

RT_color color;                  /* Color of ray  */ 
RT_ray rRay, tRay, sRay;       /* Reflected, refracted, and shadow rays */ 
RT_color rColor, tColor;        /* Reflected and refracted ray colors */ 

   color = ambient term; 
   for (each light) { 
      sRay = ray to light from point; 
      if (dot product of normal and direction to light is positive){ 
         compute how much light is blocked by 
         opaque and transparent surfaces, and use ti scale diffuse 
         and specular terms before adding them to color; 
      } 
      if (object is transparent) { 
         tRay = ray in refraction direction from point; 
         if (total internal reflection does not occur) { 
            tColor = RT_trace (tRay, depth+1); 
            scale tColor by transmission coefficient and add to color; 
         } 
      } 
   } 
 return color;          /* Return color of ray   */ 

 

RT_trace´Â ±¤¼±ÀÌ °´Ã¼¿Í ±³Â÷ÇÏ´Â °¡Àå °¡±î¿î ÁöÁ¡À» °áÁ¤ÇÏ°í ±× Á¡¿¡¼­ À½¿µÀ» °áÁ¤Çϵµ·Ï Çϰí RT_shade¸¦ È£ÃâÇÑ´Ù. ¿ì¼±, RT-shade´Â ±³Â÷ÀÇ ÁÖº¯»öÀ» °áÁ¤Çϰí, ±× ´ÙÀ½ °¢ ºûÀÌ »öÀ» ¸¸µå´Âµ¥ ÀÏÁ¶ÇÑ Á¤µµ¸¦ °áÁ¤Çϱâ À§ÇØ À½¿µÀÌÁö´Â Ç¥¸é ÂÊ¿¡¼­ °¢ ºûÀ¸·Î ±×¸²ÀÚ¼±À» ¸¸µç´Ù. ºÒÅõ¸íÇÑ °´Ã¼´Â ºûÀ» ¿ÏÀüÈ÷ °¡¸®´Â ¹Ý¸é Åõ¸íÇÑ °´Ã¼´Â ºûÀÇ ±â¿©µµ¸¦ ÃøÁ¤ÇÑ´Ù. ±¤¼± Æ®¸®¿¡¼­ ³Ê¹« ±íÀÌ µé¾î°¡ ÀÖÁö ¾Ê´Ù¸é ¹Ý»çÀûÀÎ °´Ã¼¿¡ ´ëÇÑ ¹Ý»ç¼±°ú Åõ¸íÇÑ °´Ã¼¿¡ ´ëÇÑ ±¼Àý¼±À» ´Ù·çµµ·Ï RT_trace´Â ÇöÀç Çȼ¿ÀÇ »öÀ» °áÁ¤Çϱ⿡ ÃæºÐÇÒ ¸¸Å­¸¸ °¢ ±¤¼±Æ®¸®¸¦ À¯ÁöÇÑ´Ù. Àüü À̹ÌÁö¿¡ ´ëÇÑ ±¤¼±Æ®¸®°¡ º¸Á¸µÉ ¼ö ÀÖ´Ù¸é ´ÜÁö Æ®¸®¸¦ ÀçÆò°¡ÇÔÀ¸·Î½á ºñ±³Àû »¡¸® Ç¥¸é Ư¼ºÀ» º¯°æÇÏ°í »õ·Î¿î À̹ÌÁö¸¦ ´Ù½Ã °è»êÇÒ ¼ö ÀÖ´Ù.

 

 

 

 

 

 

[ Back ] [ Top ][ Next ]