1/1

Go言語でRenderMan

RenderMan bindings for the Go Language. 
Go言語でRenderManをLinuxで設定するのは簡単にできましたが、Windowsにインストールするのは大変でした。Program Filesのスペースに悩まされました。結果としてはPixar RenderManProServerはC:\Program filesにインストールしないで、C:\Pixarにインストールしなおしました。
grasshopper.jpg
付属go_test.goを実行して得た画像。prman16.5でオクルージョンを出せました。prman17.0、prman18.0ではうまく出ません。

追記2013/10/26:
(prman17以降の仕様変更でocclusionは
Attribute "visibility" "int transmission" [1]
とすれば、きちんと表示されます。)


以下、まとめてみました。
■必要なもの
●Windows 32bitの場合
Go言語32bit版
gccコンパイラ MinGWを使いました。

●Windows64bit版
Go言語64bit版
gccコンパイラ TDM-GCC Compiler Suite for Windowsを使いました。
TDM64 bundleをインストールしました
http://tdm-gcc.tdragon.net/

●RenderMan bindings for the Go Language.
gormanはこちらです。
https://github.com/prideout/gorman

1. Download Zipからファイルgorman-master.zipを取得します


 C:\gormanに解凍します。

2. Go言語をC:\goにインストールします


Windows XpへのGo言語のインストールでは、GOPATHは、環境変数として記入する必要があります。バッチでset GOPATH= と設定しても、go envで確認すると反映されていません。

3. gccコンパイラをインストールします


  MinGWだと「C++ Compiler」「MSYS Basic System」「MinGW Developer Toolkit」のコンポーネントを選択してインストールします。
環境変数のPathに編集でパスの最後に以下を追記します。
;C:\MinGW

64bitの場合、TDM-GCC Compiler Suite for WindowsをC:\TDM-GCC-64にインストールします。

4. Pixar RenderManProServerをC:\Pixarにインストールします



5. C:\gormanフォルダにコマンドプロンプトを作ります


  コマンドプロンプトショートカットアイコンを右クリックしプロパティを開きます。
  リンク先の部分を以下のように書き換えます。
  %windir%\system32\cmd.exe /k "chcp 65001"

6. Go言語の確認


  エディタで以下をhello.goで保存します。保存先C:\gorman

package main

import "fmt"

func main() {
fmt.Printf("hello, world\n")
}


コマンドプロンプトから
>go build hello.go
>hello.exe
hello, world

>
と出ればGoは動いています。

7 gormanの設定


64bitではTDM-GCC Compiler Suite for Windowsを読み込むために、以下のようにバッチファイルを作成します。
ファイル名gobat.bat
保存先C:\gorman

set GOROOT=C:\go
set GOPATH=C:\gorman
set PATH=%GOROOT%\bin;C:\TDM-GCC-64\bin;%PATH%



32bitでは
ファイル名gobat.bat
保存先C:\gorman

set GOROOT=C:\go
set GOPATH=C:\gorman
set PATH=%GOROOT%\bin;%PATH%



バッチファイルができたらコマンドプロンプトで
>gobat.bat
続いて環境を確認します。
>go env
set GOARCH=amd64
set GOBIN=
set GOCHAR=6
set GOEXE=.exe
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\gorman
set GORACE=
set GOROOT=C:\go
set GOTOOLDIR=C:\go\pkg\tool\windows_amd64
set TERM=dumb
set CC=gcc
set GOGCCFLAGS=-g -O2 -m64 -mthreads
set CGO_ENABLED=1

GOPATH=C:\gormanが表記されていないと、この後のパッケージrmanがインストールできません。Windows Xpでは、GOPATHを環境変数として記入する必要があります。

8. rmanパッケージのインストール


C:\gormanのコマンドプロンプトから
>go install ./src/rman
たぶんエラーが出ます。
Pixar RenderManProServerのパスが正確でないためです。
C:\gorman\src\rmanフォルダのrman.goを編集します。
エディタで開き、最初の3行目から6行目部分のパスを以下のような相対パスで記述してください。適宜prmanのバージョンは変えてください。

package rman

// #cgo CFLAGS: -I../../../Pixar/RenderManProServer-18.0/include
// #cgo LDFLAGS: -L../../../Pixar/RenderManProServer-18.0/lib -lprman -Wl,-rpath ../../../Pixar/RenderManProServer-18.0/lib
// #include
// #include "ri.h"



再度C:\gormanのコマンドプロンプトから
>go install ./src/rman
しばらくして・・・何もなかったらOK!!
pkgフォルダができていたら完成です。

9. テストをしてみる


テストの前にPixar RenderManProServerのlibフォルダから
libprman.dllをC:\gorman\src\rmanフォルダへコピーします。
C:\gormanのコマンドプロンプトを閉じていたら
>gobat.bat
続いてテストをします。
>go test ./src/rman
しばらくして、本記事の一番上にある画像が出てきたら成功です。
これはC:\gorman\src\rmanフォルダのrman_test.goを実行しています。
フォルダ内にdebug.ribが書き出されるので便利です。


10. サンプル球をビルドしてみる


続いてlibprman.dllをC:\gormanフォルダへコピーします。
>go build sphere.go
>sphere.exe
sphere.jpg
レンダリング画像。
その他、開発者Philip RideoutさんのL-Systemによる画像素晴らしいです。
Go And Renderman
https://github.com/prideout/gorman
Thank You.ありがとうございます。
  • -
  • -

Go言語でRenderMan その2

rman.goにLightSourceを追加する

func LightSource(name string, varargs ...interface{}) {
pName := C.CString(name)
defer C.free(unsafe.Pointer(pName))
names, values, ownership := unzipArgs(varargs...)
defer freeArgs(names, ownership)
nArgs := C.RtInt(len(varargs) / 2)
pNames, pVals := safeArgs(names, values)
C.RiLightSourceV(pName, nArgs, pNames, pVals)
}



Teapotをレンダリング

package main

import (
ri "rman"
)

func color(r, g, b float32) [3]float32 {
return [3]float32{r, g, b}
}

func point(x, y, z float32) [3]float32 {
return [3]float32{x, y, z}
}

func main() {
launch := "launch:prman? -t -ctrl $ctrlin $ctrlout -capture test2.rib"
ri.Begin(launch)
ri.Format(512, 480, 1)
ri.Display("test2", "framebuffer", "rgba")
ri.ShadingRate(4)
ri.Option("limits", "int threads", 4)
ri.PixelSamples(4, 4)
ri.Declare("color", "color")
ri.Imager("background","color",color(0.2,0.4,0.6))
ri.Projection("perspective", "fov", 45.)
ri.Translate(0, 0, 9)
ri.WorldBegin()
ri.Declare("from", "point")
ri.Declare("intensity", "float")
ri.LightSource("pointlight","intensity",300. ,"from", point(-10,10,-10))
ri.LightSource("pointlight","intensity",300. ,"from", point(10,10,-10))
ri.LightSource("pointlight","intensity",300. ,"from", point(-10,-10,-10))
ri.Translate(0, -1.2, 0)
ri.Rotate(-110,1,0,0)
ri.Color(0.9, 0, 0.1)
ri.Surface("plastic")
ri.Geometry("teapot")
ri.WorldEnd()
ri.End()
}


test2.jpg
  • -
  • -

1/1