Monday, June 13, 2005
Books
As I mentioned before, I've made an entry for Hamlet Linden's book expo. Starting Monday 6/13/05, at 1:00pm game time, players will be invited to come and check out the proposed readers and vote on the one with which they'd most like to read an in game book. (Which begs the question of why anyone would want to read a book in SL to begin with, but that's a query for another time.) The creator of the winning reader winner will be designated as the "official" in game publisher for Cory Doctorow's next book, due to be released on July 1.
There are a total of five entries in the expo. They're all on display at the NWN Book Expo at Plum (99,163) (SL location link). Honestly, I'm a little disappointed by the turnout (I'd expected more of the big name semi-FICs for a high profile project like this), but them's the breaks. I'm sure part of the problem was the awkward timing of the project. The upcoming v1.7 release will include the first part of the long awaiting text-prim (allowing HTML formatted text to be placed directly on a prim face). This will have a tremendous impact on the nature of in-game book readers, as well as just about every other project containing text data. This is unfortunate, but the timing of the release of Cory's next book required that the readers be completed before July 1.
Addendum 6/14/05, 11:51am:
The more I think about it, the less convinced I am that the text prim will be the be-all,end-all solution for book readers. The main problem I see is with the existing dataserver system. In order to read a notecard full of text, the script must call for each individual line of text, then wait for the dataserver to return with the answer (in the form of a dataserver event). Dataserver calls are generally slow (you're sifting through an enormous database each time you access it), and a bit unpredictable when called in bulk. When two dataserver calls are made in rapid succession, there is no guarantee that the first call will be answered before the second. It could easily be the reverse. This requires some clever programming to assure that the answers are properly arranged in the end. I just grabbed the first book I could lay my hands on (My Tiny Life by Julian Dibbell) and counted the lines on a typical page: 37. This means that, in order to reproduce a page of this book in game, the script would have to make 37 ponderous dataserver calls. Per page. Each time a page is turned.
As part of the NWN Book Expo project, Falk Bergman made an experimental reader using floating text. It worked pretty well, overall. But the required data server calls and formatting was unavoidably time consuming, and expensive in terms of sim resources. While I expect the use of HTML will remove some of the server load consumed in formatting the text, I've heard nothing stating whether there will be any accompanying changes in the way notecards full of text will be handled. I guess we'll find out soon enough.
Over the weekend, each of the entrants were contacted and told to create a booth highlighting their reader devices and their various features.
Djinn Fizz's reader appeared at the last minute. I wasn't able to see it in action, but apparently Djinn plans on reading the book out loud and recording it as a seven part audio program. (More information in the NWN article.) This program will be synchronized with the text in a slow-scrolling Quicktime movie. While this doesn't lend itself to personal copies (it requires designating the plot's media streams), it should prove to be an entertaining presentation. It's also going to be a hell of a lot of work to produce the actual audio program. If he wins, I look forward to seeing how Djinn makes it all work.
Addendum 6/14/05, 12:17pm:
I had a chance to try out Djinn's reader last night. He's made an audiovisual presentation out of one of Cory Doctorow's short stories. The whole assembly, audio and video, works great! And Djinn is an excellent narrator. You should definitely make the time to try it out at the expo.
Frans Charming's reader was also a relative latecomer. His offering is another large installation work. (It's described in more detail in the NWN article.) The whole device is a meters-wide modern art sculpture, centered around a white spherical chair (aptly described by Hamlet Linden as something out of "The Prisoner"). The user sits in the chair, and his camera is captured and adjusted to face a viewscreen showing the current page. Two smaller screens, showing the previous and next two pages, are placed to either side of the main viewer. Ultimately, these screens will behave like an assembly line, with the current page rolling off to one side, and the next sliding in to take its place. (Frans is still working out the bugs on this. The page-screens are currently static, although they do update with the previous and next pages on demand.) While this sculptural work doesn't lend itself to mass distribution (it's large and relatively prim-heavy), it works very well as an artistic installation. And it looks darn cool!
Incidentally, Frans's reader makes good use of texture caching (AKA preloading). You'll see this term thrown around quite a bit in this competition, as well as elsewhere. In case you were wondering, this simply means showing you the next image (say the next page) in advance. When the SL client sees a specific texture/image, it saves a copy on the user's local hard drive. Then, when the texture is called again, the client only needs to pull it up locally, instead of downloading it from the remote servers. The nifty thing is that the texture doesn't even need to be directly visible to the current camera view to be cached. The SL client will load all textures in the vicinity (even those that are hidden inside or behind other objects). In the case of Frans's reader, page textures are cached two ahead and two behind the current page. So, unless a user flicks through the pages very fast (too fast for the next pages to be preloaded), he'll never have to wait for the next page to appear.
Addendum, 6/14/05, 12:22pm:
Frans was smart enough to use lists instead of dataserver calls to read the book page UUIDs. Very useful for this application, as it made the resulting scripts a fair bit faster. Unfortunately, I don't think it solves the problem with dataserver calls and plaintext documents mentioned above.
FYI: all of the readers, save for Djinn's audio presentation, make use of a massive text document list of UUID codes for the textures used for the book pages. Falk Bergman created the JPEG format pages and uploaded them. Then he manually collected the UUIDs for each of the 165 pages, one at a time. This project would not have been possible without his work. Thanks, Falk!
This is Falk Bergman's booth. He made a nice little pavilion area, with benches and a fountain in the center. Falk is actually responsible for two readers (described in more detail with better pictures in this NWN article) in the expo. He actually had several more, in various stages of readiness, but restricted himself to one original design for the competition. Hopefully he'll incorporate his other designs into future projects. They were, frankly, awesome.
As described in the NWN article, the first reader is in the form of an oversized book. The user simply stands in front of it and touches the pages to flip to the next. This reader comes with a whole grocery list of handy features, including precaching, bookmarks, alternate controls (Page Up and Page Down keys), control lockout (to prevent others from messing with the book while you read)... He was adding features and refinements right up to the wire. Most are activated by voice commands. While somewhat on the large side (in order to make the text easy to read without undue camera jiggery-pokery) Falk's reader is designed for mass distribution.
The second reader is based around a design by Francis Chung. As I understand it, this one was a collaborative effort, with Falk doing modifications to an original script by Francis. The Chung/Bergman reader is modeled after a standard sized coffee table book. On touch, the book opens. Touch it again, and an animated page flip occurs while the page textures are updated. Kind of a neat effect.
And then there's my reader. You can see pictures of it in operation in this NWN article. Basically, the reader is embedded in a single book prim (sized to match the dimensions of the real world book). On touch, it projects a particle image of the book page. Pages are turned with the Page Up and Page Down keys (only one user at a time- others are locked out and encouraged to take their own copy). The book preloads one page ahead, by displaying it on one of the faces of the single prim reader. (If you look very close, you can see a tiny square hole through the center of the book. The next page is plastered on the inside of this hole.) This is usually adequate to minimize load times for the visible page, assuming the user reads at a normal pace and allows the next page image to fully load.
I decided to handle all of my additional functions by dialog menus instead of voice commands (although I may add alternate voice controls to future versions). This is mainly so that the user doesn't have to memorize a list of commands just to read a book. (That, and I knew that Falk was already using chat commands for his readers, and I wanted to be different.) Menu commands let the user mark pages, skip by chapter, see the CCL documentation (as a notecard), and close down the reader. The reader can also be closed by hitting "Release Keys" or simply by walking more than 6 meters away.
The Book Expo will run until June 20th. At that time, the votes will be tallied and a book reader device will be selected. Be sure and drop by to cast your vote!