Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!lll-lcc!mordor!sri-spam!ames!ucbcad!ucbvax!ucsfcgl!pixar!ph From: ph@pixar.UUCP (Paul Heckbert) Newsgroups: comp.graphics Subject: Re: Amgia World Ray-tracing article... Message-ID: <703@pixar.UUCP> Date: Tue, 28-Apr-87 17:14:35 EDT Article-I.D.: pixar.703 Posted: Tue Apr 28 17:14:35 1987 Date-Received: Thu, 30-Apr-87 04:26:34 EDT References: <629@puff.WISC.EDU> <448@applix.UUCP> <2948@well.UUCP> <18604@ucbvax.BERKELEY.EDU> Distribution: comp Organization: Pixar -- Marin County, California Lines: 262 Keywords: stochastic news Summary: you're all wrong Wrongo. As I understand it, the story goes like this: The software that computed Andre and Wally B. was indeed written on a CRAY-1 XMP, but it used Sam Leffler and a big box of crayons. Through some fast talking and just plain being nice, they managed to borrow a HAL 9000 for 100 days. The poop is: much of the rendering of the Star Trek II Genesis Sequence was done by ray tracing. So now you know why I have a Pixar sweatshirt. ------------- PS: YOU TOO can generate controvertial comp.graphics articles with the following. Unpack, compile, and run "code pixar.code | fmt". # to unpack, cut here and run the following through sh # shell archive for pixar.code code.c # cat <pixar.code CODE INTRO\BODY\BODY\CONCLUSION\ % INTRO Wrongo. As I understand it, the story goes like this:\The software that computed MOVIE was indeed written on COMPUTER,\but it used RENDERER. I am pretty sure that MOVIE was computed with COMPUTER. Wrongo! I heard from SOURCE that MOVIE was made on COMPUTER. "MOVIE" was computed on COMPUTER\(I was there when they were computing). Wrongo. MOVIE was computed using RENDERER at PLACE. % BODY Through some fast talking and just plain being nice,\they managed to borrow COMPUTER for LONGTIME. The animation "MOVIE" was produced on COMPUTER,\and the time per frame was TIME. Some of the frames took TIME on that machine. If I remember correctly, the frames took about TIME. My guess is that MOVIE was computed on COMPUTER, just like MOVIE was. The poop is: much of the rendering of MOVIE was done by RENDERER. % CONCLUSION If it makes you feel any better,\I understand that MOVIE was computed on COMPUTER with rather respectable speed. My information comes from SOURCE. So now you know why I have a Pixar sweatshirt. % MOVIE the Star Trek II Genesis Sequence Andre and Wally B. the Stained Glass Man from Young Sherlock Holmes Luxo Jr. % COMPUTER a CRAY-1 XMP 10 Project Athena VAX 750's a VAX a VAX-11/780 (named 'dagobah' I believe) a CCI box Pixar Image Computers a room full of Amigas an IBM PC a Radio Shack Color Computer a HAL 9000 % RENDERER REYES (Renders Everything You Ever Saw) ray tracing the a-buffer algorithm Sam Leffler and a big box of crayons % SOURCE Tom Duff Jim Clark Computer Graphics World a friend whose cousin works at COMPANY Matthew P. Weiner comp.graphics % COMPANY Pixar Abel Image Research Digital Productions Alias % LONGTIME 100 days 6 months % TIME 1-2 hours many, many minutes 24 hours 30 seconds 100 days I don't know how long % PLACE Minneapolis MIT UC Berkeley Lucasfilm Pixar, I think % % EOF14363 cat <code.c /* * code.c - program to generate National Enquirer headlines and other randomness * * Mark Leather, PIXAR */ #include extern long time(); extern short ran_vec[]; struct gstruct { int items; char *item[128]; char data; } *group[64]; int groups; char line[2048]; int startdata[10000]; FILE *f1; rnd(i) int i; { return((rand()&0xffff) % i); } search(word) char word[]; { int i; for(i=0;iitem[0]))return(i); return(-1); } comps(word1,word2) char word1[],word2[]; { int i; for(i=0;(word1[i]==word2[i]&&word1[i]!=0&&word2[i]!=0);++i); if(word1[i]!=word2[i])return(0); return(1); } alpha(a) char a; { if((a>='a'&&a<='z')||(a>='A'&&a<='Z')||(a>='0'&&a<='9')||(a=='_'))return(1); return(0); } init(filename) char filename[]; { int i; char *pnt; f1=fopen(filename,"r"); if(f1==NULL){printf("Bad open\n");exit();} groups=0; group[groups] = (struct gstruct *)(&startdata[0]); group[groups]->items=0; group[groups]->item[0]= &(group[groups]->data); for(;;) { getline(f1,line); if(line[0]=='%') { group[groups+1]=(struct gstruct *)((int)(group[groups]->item[group[groups]->items]+1) & -2); ++groups; group[groups]->items=0; group[groups]->item[0]= &(group[groups]->data); getline(f1,line); if(line[0]=='%')return(1); } pnt=group[groups]->item[group[groups]->items]; for(i=0;(*(pnt++)=line[i++])!=0;); group[groups]->items += 1; group[groups]->item[group[groups]->items] = pnt; } } exec(word) char word[]; { char *ppnt; char word1[64]; int g; g=search(word); if(g == -1) { printf("%s",word); return(1); } ppnt=group[g]->item[1+rnd(group[g]->items - 1)]; for(;;) { getword(&ppnt,word1); if(word1[0]==0)return(1); exec(word1); } } getword(ppnt,word) char word[]; char **ppnt; { int i; word[0]=0; while((!alpha(**ppnt))&&(**ppnt!=0)) { if(**ppnt == '\\')printf("\n"); else if(**ppnt != '|')printf("%c",**ppnt); (*ppnt)++; } if(**ppnt==0)return(1); for(i=0;alpha(**ppnt);(*ppnt)++)word[i++]= **ppnt; word[i]=0; } getline(f1,line) char line[]; FILE *f1; { int i; for(i=0;(line[i]=getc(f1))!='\n';++i); line[i]=0; } argerr() { printf("Correct usage is code (-nn) protofile\n"); exit(); } main(argc,argv) int argc; char *argv[]; { int i,st,ncount; char filename[32]; ncount=1; if(argc==1) argerr(); if(argc>3) argerr(); if(argc==3) { ncount=0; if(argv[1][0]!='-') argerr(); for(i=1;argv[1][i]!=0;++i)ncount=ncount*10+argv[1][i]-'0'; for(i=0;argv[2][i]!=0;++i)filename[i]=argv[2][i]; } if(argc==2) for(i=0;argv[1][i]!=0;++i)filename[i]=argv[1][i]; st = time(0); srand(st); init(filename); for(i=0;i