|
@@ -0,0 +1,60 @@
|
|
|
|
+
|
|
|
|
+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
|