123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- Conversion notes:
- Frames were exported from Cinema4D using the pbrt exporter. (It's important
- to change the logging level in the export dialog to "Error", since
- otherwise many messages are generated and it seems that c4d has some sort
- of O(n^2) thing going on there, since exports slow to a crawl.
- Geometry fiels were then converted to use PLY meshes using "pbrt
- --toply". There are many repeated meshes (both shared across multiple
- frames but also identical meshes within a single frame. These were boiled
- down to unique messages using the following go program, which prints a
- script for "sed" to stdout.
- package main
- import (
- "crypto/sha256"
- "encoding/hex"
- "fmt"
- "io/ioutil"
- "os"
- )
- func main() {
- for _, fn := range os.Args[1:] {
- contents, err := ioutil.ReadFile(fn)
- if err != nil {
- fmt.Fprintf(os.Stderr, "%s: %v", fn, err)
- continue
- }
- sum := sha256.Sum256(contents)
- str := hex.EncodeToString(sum[:]) + ".ply"
- fmt.Printf("s/%s/%s/g\n", fn, str)
- err = os.Rename(fn, str)
- if err != nil {
- fmt.Fprintf(os.Stderr, "%s: %v", fn, err)
- }
- }
- }
- The pbrt geometry file that --toply emitted was then updated to use the
- hashed file names generated by the go program:
- % sed -f out.sed < ply-geometry.pbrt > g.pbrt
- Note that the sed script has thousands of lines and sed seems to be quite
- slow--it takes many minutes to run the sed script, even though the geometry
- file is only around 4.5MB.
- To add all of the light sources, use the lights.sed script:
- % sed -f lights.sed < g.pbrt > g-lights.pbrt
- Finally, rename g-lights.pbrt to something sensible and update the Include
- in the main pbrt file for the frame to use it. More generally, replace
- everything after the Film directive in the generated pbrt file up to the
- geometry Include with the text from one of the other frame files.
- Whew
|