Rendering学習日記

日々、3DCGの世界は進歩しています。勉強して理解したことをまとめていきます。RenderMan互換レンダラーやグローバル・イルミネーション。いろんなことに好奇心を持って、面白くなる。目指せShader書き!!
ありがとうございます。

Lightflow質感設定 Standard材質その1

Lightflowの使い方として、微妙な質感を調整することができる。
基本となる反射色kcをそれぞれ、赤、緑、青の色に設定した。

sphere01.jpg

#! /usr/bin/env python 
#sphere01.py

from lightflowPM import *
from math import *

s = scene()

s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, 4.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )

s.lightOn( s.newLight( "ambient", [ "color", vector3( 0.2, 0.2, 0.2 ) ] ) ) #環境光を加える。

plastic = s.newMaterial( "standard",[ "kc", vector3( 1, 0, 0 ) ] ) #赤

plastic2 = s.newMaterial( "standard",[ "kc", vector3( 0, 1, 0 )] ) #緑

plastic3 = s.newMaterial( "standard",[ "kc", vector3( 0, 0, 1 )] ) #青

check_ground=s.newPattern("check",["color",vector3( 0.2, 0.4, 0.6 ),"scale",0.025])

ground=s.newMaterial( "standard",[ "kc", check_ground,"kc",vector3( 1.0, 1.0, 1.0 ),"ka",check_ground ] )

#ground=s.newMaterial( "standard",[ "kc", vector3( 1, 1, 1 ) ] ) #白


s.materialBegin( plastic )
s.addObject( s.newObject( "sphere", [ "radius",1.4] ) )
s.materialEnd()


s.materialBegin( plastic2 )
s.transformBegin( transform().translation( vector3(-4.0,0,0)))

s.addObject( s.newObject( "sphere", [ "radius",1.4] ) )

s.transformEnd()
s.materialEnd()


s.materialBegin( plastic3 )
s.transformBegin( transform().translation( vector3(4.0,0,0)))

s.addObject( s.newObject( "sphere", [ "radius",1.4] ) )

s.transformEnd()
s.materialEnd()


#地面groundをpatchで作成しています。高さ(z軸)を-1.4にしてぴったり球とあわせています。
s.materialBegin( ground )

s.addObject( s.newObject( "patch", [ "points",vector3( -50, -50, -1.4 ),vector3( -50, 50, -1.4 ),vector3( 50, -50, -1.4 ),vector3( 50, 50, -1.4 )] ) )

s.materialEnd()

saver = s.newImager( "tga-saver", [ "file", "sphere01.tga" ] )

s.imagerBegin( saver )

camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -6, 5 ), "aim", vector3( 0, 0, 0 ) ] )

s.imagerEnd()

s.render( camera, 512, 300 )
  • -
  • -

abnormal program termination

Lightflowを使ってみたいけど、インストールが難しくて、やめてしまうこともあると思います。
インストールについてまとめましたので、参考にしてください。
http://rman.sakura.ne.jp/sb/log/eid74.html

さて、インストールができて、
はじめてLightflowを動かそうとしたら、下記のようなエラーが出て、
あきらめてしまった人もいると思います。いくつかのサイトを検索してみると質問がありました。

Runtime Error!

Program: C:\Program files\python\python.exe

abnormal program termination

Error (LfFault):
LfNoiseInit()
unable to open "noise.dat"

原因は環境変数のPathを正確に書いていないことです。

たとえば、
path01.jpg
見たところ問題ないと思われますが、
C:\Lightflowと記入した後ろに半角の空白スペースがあって、上記のエラーが出ていたことがありました。カーソルを持っていって矢印キーを動かしてみると半角スペースがあったりしますから、要注意ですね。半角スペースを削除してOKし、再起動し、C:\Lightflow\PM\Examplesから、
コマンドプロンプトアイコンをダブルクリックして、

>"c:\program files\python\python" ball1.py

と打ち込んでLightflowのサンプルball1.pyがレンダリングできたら、大丈夫です。
たくさん、経験していくことで、原因が見えてきます。
  • -
  • -

Lightflowで球体移動アニメーションをつくる

以下のURLにある阿部先生のサイト
http://www.not-enough.org/abe/manual/renderman/animation.htmlを参考にしました。今はないRenderMan互換レンダラのBMRTでの方法ですが、以下のサンプルファイルはC言語です。コンパイルして実行するとRenderManのRIBファイルを出力します。ありがとうございます。
くわしくは、CAPIのアニメーションのRIB出力、3Delightでやっています。

-------------------------------------------
#include 

main()
{
int frame;
char filename[128];
RtColor color = {0.8, 0.0, 0.0};

RiBegin("anim_test.rib");
for(frame = 1; frame <= 10; frame++)
{
RiFrameBegin(frame);
sprintf(filename, "sphere%d.tif", frame);
RiDisplay(filename, RI_FILE, RI_RGBA, RI_NULL);
RiWorldBegin();
RiColor(color);
RiTranslate(frame*0.1 - 0.5, 0.0, 0.0);
RiSphere(1.0, -1.0, 1.0, 360.0, RI_NULL);
RiWorldEnd();
RiFrameEnd();
}
RiEnd();
}

-----------------------------------------

これをもとにLightflowで10枚の連番画像を出力できるようにしてみます。次のようにシーンを記述しました。
Pythonの繰り返しfor 〜in range(1,11):を使います。10回繰り返します。
この記述の後はすべて行がインデントして書くことが大切です。でないとPythonは動きません。
#! /usr/bin/env python

from lightflowPM import *

for f in range(1,11):
print "\nSimple Animation\nFrame %03d\n" % f
s = scene()

s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, 4.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )

plastic = s.newMaterial( "standard",[ "kc", vector3( 0.8, 0, 0 ) ] )

s.materialBegin( plastic )
s.transformBegin( transform().translation( vector3(f*0.1-0.5,0,0)))
s.addObject( s.newObject( "sphere", [ "radius", 1.0 ] ) )
s.transformEnd()
s.materialEnd()

saver = s.newImager( "tga-saver", [ "file", ("sphere%03d" % f) + ".tga" ] )
s.imagerBegin( saver )
camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -2, 0 ), "aim", vector3( 0, 0, 0 ) ] )
s.imagerEnd()

s.render( camera, 320, 240 )

sphere001.jpg
sphere005.jpg
sphere010.jpg
繰り返し処理を使って簡単なアニメーション10フレームを出力してみました。アイデア次第でいろんな使い方できそうですね。
  • -
  • -
<< 128/184 >>