SIGGRAPH 2013 Papers and Hotels

If you want to see the list of SIGGRAPH 2013 papers, see Kesen’s site (well, just a start – more coming as they leak out).

If you want to reserve a hotel spot, go here now. It’s free, no deposit or loss if you cancel in time, so I recommend doing so if there’s the slightest chance you’ll go.

(Oh, and if you’re more a GDC fan, happening this week, try watching Twitter, though people haven’t been tagging religiously.)

Dinner Bell, Dinner Bell, Ring!

OK, the obscure title can mean any of the following:

After a few months of writing lessons, I’m entirely in the mode of “how can I make a question or exercise out of this lesson?”

As of yesterday I think of the course as “outta beta”. There are some minor glitches we’ll fix in the weeks ahead, but now all the major stuff is in place. The thing that’s entirely great is that everything about the course is downloadable (thank you, Udacity). All the videos, for example, which is a big help to people with slow or censored YouTube connections. Here’s the rundown:

  • Videos are available in unit-sized chunks.
  • Code is all githubbed here, and there’s a zip download. Unzip and run the index and they’re all there (except solutions).
  • All my lesson scripts are here, and there’s other good stuff on the wiki page there. Tallied up, the first half of the course, in five PDFs, comes out to 367 letter-sized pages (admittedly a lot of figures, but that’s A Good Thing). Jeez, I’m writing a book. With code. And videos.
  • I put the demos (and exercises, but not solutions) up here. Click and you’re running a demo. This is just the github distribution uploaded to our site. I’ll make a guide to all the demos once the course is done; some of these are pretty handy for explaining things, once you know what you’re looking at.
  • All lesson instructor comments are here. Some lessons have additional information and links to resources. Rather than have to search through all the lessons for that link you saw somewhere, they’re all here.

Entirely unrelated, but here’s the cool three.js link for the day.

I heart procedural modeling, I don’t heart Apple’s driver bug that makes it so WebGL can’t use antialiasing.

MOOC Expelliarmus

I spent a few minutes last week skimming through my unread stack of “Communications of the ACM” (CACM) – they were piling up. I enjoy the lighter articles for the most part, especially those on copyright and patent issues. The more serious articles would probably do me good to read, but no time, no time.

One bit that caught my eye: “Will MOOCs Destroy Academia?” A MOOC is a massive open online course, e.g., I’m working on one (I think there were about 15,000 sign-ups for it as of last month). I’d summarize the article as: “college courses where the professor lectures to all are ineffectual and costs are soaring [his words, not mine], but MOOCs are popular only because they’re free, and a Cambridge don says universities are critical to civilization”. His concluding sentence was particularly surprising to me: “If I had my wish, I would wave a wand and make MOOCs disappear, but I am afraid that we have let the genie [out] of the bottle.” The word “out” is in the on-line HTML and PDF versions, but not in the original print magazine. I guess the internet is good for something, though clearly not education, by the author’s estimation.

The author, by the way, is the Editor-in-Chief of CACM; I sometimes disagree with his views, but usually appreciate that some thought has been put into his opinion pieces. This time the research appears to have been the book “What Are Universities For?” and the Bible. I was cheered to see some reasonable replies.

For a CACM article with much more chew and nuance, see “Reflections on Stanford’s MOOCs“. This article is worth your time if you’re interested in a survey of various combinations of education and the internet for teaching computer science.

Me, I’m happy to see it’s possible to teach (in any form) using three.js on top of WebGL – click a link and you’re taken to a demo, or code you can edit and run in the browser. Try it now, if you want: for three.js demos, go to the three.js page and click on any appealing thumbnail (caveats being “use Chrome” or “enable on Safari” – see this worthwhile page if you have problems). For code in the browser, try here or any of these. For WebGL demos, some of which are wonderful, see webgl.com. And there are great things out there beyond these, I’ll cover more here once I have the time. A few days back Steve Worley pointed out this amazing thing, a classic tile terrain renderer, all in a web page.

This all couldn’t have been done at all two years ago – WebGL was officially released on March 3, 2011. This is great news for anyone teaching graphics, either online or in the classroom (or both).

Becoming a computer graphics programmer is something I consider as much an apprenticeship as a set of college courses. That’s how I felt as I began to be one at Cornell back in 1983-85. The Masters program in the Program of Computer Graphics was officially one 18 credit course each semester (and summer), along with “take a minor”. It was essentially “live and breathe graphics” for two-plus years. Teenagers in the demoscene have similar experiences, I expect.

I ran across a great quote from Confucius, which I’ll probably use at the end of the MOOC, “Every truth has four corners: as a teacher I give you one corner, and it is for you to find the other three.” This fits my view of computer graphics: you can be given a foundation in the subject, but it’s mostly up to you to learn by doing and pursuing knowledge (Confucius probably meant something entirely different). The fact that you can now do this on your own with a PC and enough self-motivation and online support I find wonderful (take the creator of three.js, for example).

Going to a college or university and learning from a good teacher and working with other students is fantastic stuff; I consider myself fortunate to have been able to do so. There are great professors and programs out there. Even humble basic courses (such as mine) are a boon, as they can expose and motivate some students to get involved and find their passion. However, the field of computer graphics (unlike, say, genetics, where you can’t currently buy a DNA sequencer for $25, but can buy a GPU for that) is quite accessible even if you can’t commit to being a full-time student.

So, back to doing my little bit to help destroy universities because, you know, that’s just the kind of guy I am. Honestly, I think MOOCs have their place, and my own vision of the future is one where professors can grab chapters, videos, githubbed code and so on to supplement their courses, and they can make their own creations available to others. They can say “take this MOOC over the summer and come back in the fall ready to go,” so that everyone has a baseline understanding.

Committing nowadays to a single textbook, for example, seems archaic. Few people have the time to write a whole book, so there are only so many to choose from and each has chapters a teacher will not use, either for time or for dislike of the author’s approach. However, plenty of people can write a short article explaining mipmaps or scaling matrices or other topics, and a few of them will be superb. Sites with educational content such as RedBlobGamesAlgoViz.org, and Online Python Tutor are signs of how things can be (BTW, I learned of those URLs from the useful CACM article). Mixing and matching among these resources allows engaging and powerful new tools for teachers and students.

Behold your doom, universities

Yup, Zup?

In other words, is Y up, or is Z up? It’s a loaded question. My little lesson (YouTube) from the course is here, in case you don’t know the issue. What’s more entertaining, and the point of this post, are the answers I got back from the people I asked. I’ve asked this question before in this blog.

Speaking of cameras, is there nothing that three.js cannot do? Check out this incredible piece of wonderfulness and have a webcam ready. Or go right to the demo, and then the other demo. It’s one of those “of course we should be able to do that” kinds of things, but to have it just one mouse click away (assuming you’re set up to run WebGL; if not, go here).

 

Launched!

As of today, March 11th 2013, the free online interactive 3D graphics course I’ve been working on has begun, at last. I’ve been laboring in earnest and more than full time on this class since October (thank you, Autodesk), and I’m just the most visible person on the project. There’s a raft of others at Udacity making things work and look great: web programmers, video editors, and particularly Gundega Dekena, the assistant instructor on the course. Many other people inside and out of Autodesk have been contributing time for interviews, for video clips, and  for reviewing material (special shout-out to Patrick Cozzi and Mauricio Vives for reading over everything). It’s way more total work creating a video course than writing a book, maybe equivalent to the effort of making a movie vs. writing a novel.

Some of the slick things Udacity has done is integrate video lessons, WebGL/three.js demos, and exercises and questions all in a continuous series. I’d point at an URL, but you do have to sign up for the course to see its structure. Also, wait a day or so: by tomorrow a bunch more links to resources should be in place, at least for Unit 1. Soon the course code will be githubbed, the videos all downloadable, etc. (update: this is now done.)

By the way, this is only the first half of the course. I’m in the throes of writing the second half, which will come out May 1st. I’m learning the video creation process as I go, so I think the quality is increasing as the units progress. Gesturing at the screen and reading what I wrote at the same time gives me a new-found respect for weathermen.

Even if you already know about 3D graphics, you might want to check out the history of the teapot video, which Martin Newell kindly fact-checked. And if you don’t know who Martin Newell is, or only know that he created the teapot model, then you definitely should watch the video. Oh, and then try the WebGL/three.js demo here.

What’s nice is that all the course videos are hosted on YouTube, so it’s easy for anyone to link to any of the lessons (well, except where YouTube is blocked; Udacity has  alternate delivery methods). I hope that these videos and demos will be handy for other people explaining 3D graphics.

Introduction to Parallel Programming course available

I’ve been more than a bit busy working on the (newly renamed) Interactive 3D Graphics course for Udacity, so have been tardy pointing out that this cool course is out now: Introduction to Parallel Programming. Taught by John Owens, David Luebke, and others, it uses CUDA as its basis for teaching. I look forward to taking it myself! It’s a free online course with some serious content, graded exercises, and much else to recommend it – a lot of time & effort (& money) was put into making it, so I expect it will be worth my while.

Oh, and I should also mention another new course, HTML5 Game Development, from experts at Google. It’s more 2D graphics related, but again looks like quite a serious course with a lot of chew.

Wow, that worked?

The demo I made for the Interactive Rendering course actually runs on my phone (Samsung Galaxy S3). My course assistant found it runs on her HTC phone, too. Good luck hitting the up-arrow on my phone, like the documentation on the screen wants me to do… (I should fix that.) It runs only on Firefox, from what I can tell.

Update: works in Chrome Beta for Android.

Anyway, I’m impressed that my phone can do this at all. It does take a good long while to download and run, but still. 44 frames per second – not bad! Go three.js and WebGL. Oh, and here’s a little video.

click the picture below to go directly to the demo.

Interview with three.js Creator

Three.js is one of a number of free WebGL libraries. First released in April 2010, it has become pretty popular, and includes a huge number of demos. I wanted to know more about its origins, so interviewed its creator, Ricardo Cabello, aka mr.doob, who lives in Spain.

* What is your background: your education, your current job?

My education was a bit of a disaster. I went to primary school, in the later years there I was also going to an academy to learn to draw comics. Then I started studying electronics in secondary school and later moved to arts. It wasn’t really the right time for me to study so I quit before going to University.

During all these years I was fairly active on the Demoscene and that’s where it all comes from. However, back then I was not a programmer, I only created the graphics, and came up with ideas for demos and stuff.

Currently I’m a freelancer doing web development, mainly working for Google Data Arts Team.

* Why did you create three.js?

There were many reasons. I was always curious to know what I could do with my own 3d engine. I also thought it was a good challenge for me. I had been tinkering with one since my ActionScript days, learning the basics and slowly figuring out the right architecture.

However, the main motivation probably was the fact that, back in the Demoscene days, everyone were doing their own 3d engines that were only used for one or two demos. For the next demo they would create a new engine. I always found that a bit wasteful so I thought of doing one that others could reuse.

So now I’m trying to build the kind of engine and tools I wish I had back then.

* How did it get to be so popular?

I don’t know. Compared to the ones that were popping up at the time, while not the most performant, maybe it was the one with the friendliest API and the easiest to extend. Thanks to that, it now has tons of features and handy code sitting in the examples folder.

* Do you have a sense of how many users there are?

Not really…

* How many people contribute code?

There tends to be around 3 active people. There are many others that do small random contributions/fixes: 171 in total so far.

* Is three.js’s support and extension a part of your job, a hobby, or both?

I guess both 🙂

* Where’s three.js going? Do you have a plan, or does it depend on user contributions?

There is no clear plan. If anything, I just want the web to be more demoscene-ish. More realtime/interactive stuff and less videos.

* One problem with having users is that the API gets locked into place. Do you have any plans to change any APIs and deprecate older classes? For example, “CubeGeometry” is misnamed, since the method actually creates boxes, not just cubes.

That’s probably the biggest problem. The API is still not locked and we break backwards-compatibility from time to time. There is a wiki page that documents all the changes.

However, we try to add deprecated messages here and there for some releases and try to avoid breakage. In the case of CubeGeometry, we would rename it to BoxGeometry while still keeping a CubeGeometry class that would return a BoxGeometry when instantiated plus throwing a warning on the console.

I think the API is getting there, though. It’s starting to feel right. The only parts I’m not done with are loaders and materials.

* What sort of technical challenges have you encountered? Does all three.js code work on pretty much all browsers and platforms (ignoring Internet Explorer)?

There have been many challenges, starting with finding the best coding patterns to use in JavaScript to avoid garbage collection. We still struggle with that. Next is finding the most useful data structures for geometry and materials. Then how to pass all that to WebGL in a performant way. We still have a lot to do there. But luckily this is all under-the-hood stuff that most users won’t even notice.

As for compatibility, yes, we try to support as many platforms as possible.

* In the area of interactive rendering, what’s the biggest surprise to you over the past ten years? Is there any new capability or platform or social phenomenon that has stood out in your mind?

I guess the fact that I’ve been following the demoscene for years has rendered me insensitive about these things… I remember loving Google Body (now Zygote Body) because it showed how 3D could be actually useful as a presentation medium. You couldn’t grasp the data in the same way if the interface was 2D.

* What do you think is the biggest problem facing the field of interactive rendering at this point?

Lack of WebGL support on Safari for iOS and Chrome for Android. As soon as those browsers add support for it I can see this properly taking off.

* Which way is up, the +Y or +Z axis?

Y is up. If you’re consistent with the 2D graphics world (X right, Y up (well… down)) then the missing axis is Z which becomes depth.

New Year’s Teapot

I’ve been beavering away on my part of the Interactive Rendering course for Udacity and Autodesk. It’s a free MOOC – massive open online course – and I’ll talk more about what I learned from doing it when the course nears completion. For now, the main takeaway I have is “WebGL plus three.js is a pretty good combination for teaching graphics on the web.” The fact that WebGL is built into most browsers (sad slow head-shake to Microsoft Internet Explorer at this point) means you can point a student to an URL and they can immediately see and play with an interactive demo. Three.js is a scene graph library which simplifies for the student the mass of initialization and whatnot that WebGL requires, while also not hiding a lot of functionality from the programmer (like some scene graphs do). Bonus bit is that the Chrome browser has a JavaScript debugger built in (just hit F12 or ctrl-shift-I to toggle it on), so students can always look at the underlying code.

So, here’s my New Year’s thingy for you to try out:

The Teapot – nicer controller, not currently working on mobile

The Teapot – semi-mobile friendly, annoying trackball

[Mac/Safari users: follow these simple instructions to enable WebGL on your machine. Other users: if stuck, try this site.]

Nothing deep, as it’s meant for teaching about Gouraud vs. Phong shading: the mouse changes the view (left: trackball, right: pan, middle: zoom), there are a few keyboard controls to switch from vertex to pixel shading and change the tessellation, a GUI for messing with the model and scene, and a little FPS counter in the corner. If the mouse or GUI doesn’t work the first time, hit refresh (and if anyone knows a fix for this glitch, speak!). If you see the FPS counter consistently below 60 FPS for your machine, please let me know your hardware configuration. The heresies I commit in this program:

  • You can add a bottom to the teapot (SJ Baker’s excellent page considers this a major sin).
  • You can expand the lid 7.7% horizontally to give a solid seal between the teapot and the lid (this gap looks goofy to unbelievers).
  • You can scale the model up by 30% so it actually looks more like the real teapot (read the end of this section for one explanation of why the model was changed – short version: Blinn hack to adjust for non-square pixels).
Comments appreciated!