• 検索結果がありません。

Microsoft PowerPoint povray演習-2.pptx

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint povray演習-2.pptx"

Copied!
40
0
0

読み込み中.... (全文を見る)

全文

(1)

povray 演習 2回目

(2)
(3)

コンピュータグラフィックス処理の構成

モデリング

modeling

環境

空間

視点

光源(直射・間接)

被写体

形状

材質

時系列変化

動き

変形

レンダリング

rendering

空間配置

投影

クリッピング

光線計算

照射

反射

屈折・

散乱

など

画像

(4)

モデルの対象

実世界での光学系の再現に必要なもの

すべて

たとえば

...

(

「形状」だけではありません

)

環境

空間

視点・視野

視覚系(眼・カメラ)

光源・光線

経路(反射・屈折・散乱)

被写体

形状・構造

色・材質(光線反射特性)

形状規則・生成法則

拡大縮小・変形

時系列変化

動き・変化

など....

(5)
(6)

座標系

6

X

Y

X

Y

奥行方向に

Z

視点からスクリーン

(XY)を

見る、中央が原点

(7)

camera{

視点の位置

--- どこから見ているか

視線の方向

--- どの点の方向を見ているか。(0,0,0)ならば原点方向

画角

....など

}

light_source{ 光源

平行光線の場合、光源の方向

(x,y,z)

光源

(光線)の色

その他いろいろ。

}

object{ ... } --- 物体を定義

たとえばSphere --- 球を定義する。指定しなければ直径は1.0 半径は0.5(?)

スクリプトの最初に#include <shapes.inc>を入れれば、基本立体名が使える。

translate< x,y,z >, scale, rotate など、基本変換を入れられる。

色、質感なども定義可能

(8)

復習

右下のシーンを描いてみてください。

最後の行に

background{ color Gray } を追加すると見やすくなります。

先頭に#include "skies.inc", 最後にsky_sphere{ S_Cloud5 } とすると、背景が空に

なります。

余裕があったら、それぞれの形や色、大きさ、配置などを変更してみてください。

8

#include "shapes.inc" #include "colors.inc" #include "skies.inc" camera{ location <0,0,-20> look_at <0,0,0> angle 30 } light_source { <10,10,-20> color White } object { Sphere

pigment{ color Blue } finish{ specular 0.3 } scale 1

} object {

Sphere

pigment{ color Red } finish{ specular 0.3 } scale 0.7 translate <-2,0,0> } object { Sphere

pigment{ color Yellow } finish{ specular 0.3 } scale 0.7 translate <0, -2,0> } object { Sphere

pigment{ color Magenta } finish{ specular 0.3 } scale 0.7 translate <2,0,0> } object { Sphere

pigment{ color Green } finish{ specular 0.3 } scale 0.7

translate <0,2,0> }

(9)

困った時のマニュアル、オンライン解説書

POV-Rayのメニュー「Help」->「Help on POV-Ray」

ネットでは以下の

webがよさそうです。

横浜国立大学西村研究室

POV-Ray 3.5 クイックリファレンス(基本編)」

大分大学真鍋研究室

「POV-Ray 3.5 利用参考マニュアル」

(右手系の解説)

その他、いろいろ。google検索してみてください。

9

(10)

元気のある方、やってみてください。

#declareと#whileを使えば楽です。

10

#declare ROT=0; #while (ROT<360) object { Cone_X

pigment{ color Yellow } finish{ specular 0.3 } translate <-1.5,0,0> scale ROT/360 rotate < 0, 0, ROT > } #declare ROT=ROT+60; #end とすれば、以下になります。 scaleの行がなければ円錐は同じ大きさになります。

(11)

(講義でこんなことをやりました)

スケーリング

拡大・縮小

: scale <sx,sy,sz>

オブジェクト上の任意の点

p(x,y,z) を、

原点を中心として、

X,Y,Zそれぞれの方向にsx,sy,sz倍する処理

変換後の点p'(x',y',z') = p(sx・x, sy・y, sz・z)

つまり、sx,sy,szの値が同じであれば、そのまま拡大・縮小、異なれば変形する。

11

(12)

スケーリング

(拡大・縮小)(2D, 3D)

図形

(2D)、物体(3D)を構成するすべての点に対して同じ処理を行う

p(x,y,z)

p’(x’,y’,z’)

p(x,y)

p’(x’,y’)

x’=Sx・x

y’=Sy・y

x’=Sx・x

y’=Sy・y

z’=Sz・z

Sx,Sy,Sz : X,Y,Zそれぞれの軸方向へのスケーリング率

※ >1の時拡大、<1の時縮小

講義でこんなことを説明しました

(13)

図形・物体の平行移動

図形

(2D)、物体(3D)を構成するすべての点に対して同じ処理を行う

講義でこんなことを説明しました

(14)

回転移動

(2D)

p’(x’,y’)

p(x,y)

原点を中心として

反時計方向に角度θ回転移動

x’ = x cos θ - y sin θ

y’ = x sin θ + y cos θ

(15)

回転移動

(3D) Z軸を中心とした回転

p’(x’,y’,z’)

p(x,y,z)

Z軸

原点

を中心として

反時計方向に角度θ回転移動

x’ = x cos θ - y sin θ

y’ = x sin θ + y cos θ

z’ = z

(16)

回転移動

(3D)

同様にして、

X軸を中心に回転

Y軸を中心に回転

回転の正負

それぞれの軸の正方向から見て

反時計まわりが+

講義でこんなことを説明しました

(17)

これらを行列で表現

平行移動

(2D)

スケーリング(2D)

(18)

これらを行列で表現

回転移動

(2D)

(19)

複合変換

行列で表現する理由

複合変換の記述が容易

と、いうふうに、複数の変換を一つの行列にまとめることができる。

同様の変換をオブジェクトを構成する多くの点に対して行うので、非常に効率的。

(20)

3D変換を行列で表現

平行移動

(3D)

スケーリング(3D)

(21)

回転

(3D)

任意軸まわりの回転や、

平行移動・回転・スケー

リングを複合した変換は、

これらの変換組み合わ

せ、変換行列を決定して

から処理をおこなう。

それぞれ与える順が変

わると結果が異なるの

で、交換則は成り立たな

講義でこんなことを説明しました

(22)

以下を描いてみてください。

22

そろそろ

povrayに戻ります

#include "shapes.inc" #include "colors.inc" #include "skies.inc" camera{ location <0,5,-10> look_at <0,0,0> angle 60 } light_source { <10,10,-20> color White * 2 } object { Disk_Y

pigment{ color Red } finish{ specular 0.3 } scale <0.5, 2, 0.5>

translate <0, 0, 3> }

object {

Disk_Y

pigment{ color Yellow } finish{ specular 0.3 } scale <0.5, 2, 0.5> translate <0, 0, 3> rotate<0, 60, 0> } object { Disk_Y

pigment{ color Cyan } finish{ specular 0.3 } scale <0.5, 2, 0.5> translate <0, 0, 3> rotate<0, 120, 0> } object { Disk_Y

pigment{ color Magenta } finish{ specular 0.3 } scale <0.5, 2, 0.5> translate <0, 0, 3> rotate<0, 180, 0> } object { Disk_Y

pigment{ color Green } finish{ specular 0.3 } scale <0.5, 2, 0.5> translate <0, 0, 3> rotate<0, 240, 0> } object { Disk_Y

pigment{ color Blue } finish{ specular 0.3 } scale <0.5, 2, 0.5>

translate <0, 0, 3> rotate<0, 300, 0> }

(23)

たくさんになると大変なので、パラメータを使います。

何を何回くりかえすか

繰り返し中にどんなことをするか

変数の定義

#declare K=0; --- 変数Kを定義します。最初に0を代入しておきます

#while (K<5) --- 変数Kの値が5より小さい時に、以下を実行します

この部分に処理を書きます。変数Kの値を使って何かをやれば便利です。

このサンプルファイルでは、

object Sphereを定義し、

pigment Yellow にして

translate <K,1,0> ---- K,1,0に移動

#declare K=K+1; ---- 変数Kに1を加えます

#end --- 上の#whileからこの#endまでを繰り返します。

23

(24)

24

#include "colors.inc"

#include "shapes.inc"

camera{

location <5,10,-15>

look_at <0,0,0>

angle 35

}

light_source{ <-15, 20, -20> color White * 1.5 }

object{

Plane_XZ

pigment{ checker color Gray color White }

translate <0,0.5, 0>

}

#declare K=0;

#while (K<5)

object{

Sphere

scale 0.5

pigment { color Yellow }

finish { specular 0.3 }

translate <K, 1, 0>

}

#declare K=K+1;

#end

#declare K=0; --- 変数Kを定義します。最初に0を代入しておきます #while (K<5) --- 変数Kの値が5より小さい時に、以下を実行します この部分に処理を書きます。変数Kの値を使って何かをやれば便利です。 このサンプルファイルでは、 object Sphereを定義し、 pigment Yellow にして translate <K,1,0> ---- K,1,0に移動 #declare K=K+1; ---- 変数Kに1を加えます #end --- 上の#whileからこの#endまでを繰り返します。

(25)

ちょっと練習

さきほどのシーンファイルの内容を変更して

(上下)にボールを5個並べる

奥行方向にボールを

5個並べる

円形に配置する。ボールの数はいくつでも。

円形に配置。色を順番に変えていく。

color rgb< ○, △, □> ---- 色を数字で与える関数

= Redの成分量(0~1)

= Greenの成分量(0~1)

= Blueの成分量(0~1)

これを使えば

Kという変数をもとに、RGBの値を決めることができます。

縦横に配置する。

25

(26)

26

#include "colors.inc" #include "shapes.inc" #include "stones.inc" camera{ location <5,10,-15> look_at <0,0,0> angle 40 }

light_source{ <-15, 20, -20> color White * 1.5 } object{

Plane_XZ

texture { checker texture{T_Stone9},texture{T_Stone8} } // pigment { checker color White color Gray }

translate <0,0.5, 0> } #declare L = -4; #while (L <= 4) #declare K = -4; #while (K <= 4) object{ Sphere scale 0.5 texture{ T_Stone18 }

// pigment{ color Yellow} finish { specular 0.3 } translate <K, 1, L> } #declare K=K+2; #end #declare L=L+2; #end

#declare, #while ~ #declare, #end のループを二重にすればOK です。ループのパラメータの起点と終点、増分をうまく与えれば処理 が楽です。 どうせ作るならば綺麗な方がいいので、石の質感をつけてみました。 あとで説明しますが、簡単に言うと、#include "stones.inc" を入れて から、pigment { ... } の代わりに texture{ テクスチャ名}とすれば OKです。

povray texture, povray stones.inc などでぐぐってみると、いろいろ な情報が見つかるかと思います。

左のスクリプトのうち、左端が // になっているところはコメント行とし て扱われますので、処理に関係ありません。対比のために残しました。

(27)
(28)

形状の演算

(CSG)

CSG

Constructive Solid Geometry

28

複数の集合=基本形状の

• 和 = union

• 差 = difference

• 積(共通部分) = intersection

を使って、形状を定義する。

(29)

union, difference, intersection

29

複数の集合

(基本形状)の

= union

= difference

(共通部分) = intersection

を使って、形状を定義する。

#include "colors.inc"

#include "shapes.inc"

camera{

location <0,0,-10>

look_at<0,0,0>

angle 30

}

light_source{ <-10, 10, -10>, color White }

light_source{ < 10, 10, -10>, color White }

light_source{ < 0, 2, -10>, color White }

union{

object{

Disk_Y

pigment{ color Red }

finish{ specular 0.3 }

}

object{

Cube

rotate <45,30,0 >

pigment{ color Gray }

finish{ specular 0.3 }

}

}

(30)

課題

一枚の画像の中に、以下の3つを並べて描いてみてください。

左から順に、

union, difference, intersectionです。

translate<-3,0,0>, translate<3,0,0>を使って両側にずらせてください。

画面に入りきらない場合、画角

(angle)をちょっと広げるか、視点を遠く(Zの値を2倍程度に)す

れば全体が入ります

(31)

31

#include "colors.inc" #include "shapes.inc" camera{ location <0,0,-20> look_at<0,0,0> angle 30 }

light_source{ <-10, 10, -10>, color White } light_source{ < 10, 10, -10>, color White } light_source{ < 0, 2, -10>, color White } union{

object{ Disk_Y

pigment{ color Red } finish{ specular 0.3 } }

object{ Cube

rotate <45,30,0 > pigment{ color Gray } finish{ specular 0.3 } } translate <-3,0,0> } difference{ object{ Disk_Y

pigment{ color Red } finish{ specular 0.3 } }

object{ Cube

rotate <45,30,0 > pigment{ color Gray } finish{ specular 0.3 } } } intersection{ object{ Disk_Y

pigment{ color Red } finish{ specular 0.3 } }

object{ Cube

rotate <45,30,0 > pigment{ color Gray } finish{ specular 0.3 } }

translate < 3,0,0> }

(32)
(33)

カップを作ってみてください。

33

#include "colors.inc" #include "shapes.inc" #include "textures.inc" camera{ location< 0, 5, -10 > look_at<0,0,0> angle 30 }

light_source{ < -10, 10, -10> color White } difference{

object{ Disk_Y

pigment{ color White } }

object{ Disk_Y scale 0.9

translate< 0, 1.1, 0> pigment{ color White } }

}

解答例(できるだけ見ないで作ってください)

(34)

34

=

=

右に移動

translate< 1,0,0>

どんな構造をしているのか、何から何を引けばいいのか

など、頭の中だけでなく、紙の上に描いて、数値を書き込

んでみるとわかります。

上の部分に蓋が残らないように

内側のオブジェクトをちょっと持ち上げてから抜きます。

// --- カップの部分 ----difference{ object{ Disk_Y } object{ Disk_Y scale <0.9, 1, 0.9> translate <0,0.2, 0> }

pigment{ color White } } // --- 取っ手の部分 ----difference{ object{ Disk_Z scale <0.8, 0.8, 0.1> } object{ Disk_Z scale <0.7, 0.7, 0.2> } translate< 1,0,0> pigment{ color White } } #include "colors.inc" #include "shapes.inc" camera{ location <0,4, -10> look_at <0,0,0> angle 30 }

(35)

35

#include "colors.inc"

#include "shapes.inc"

camera{

location <0,4, -10>

look_at <0,0,0>

angle 30

}

light_source{ <-10, 10, -20> color White*2}

// --- カップの部分

----difference{

object{

Disk_Y

}

object{

Disk_Y

scale <0.9, 1, 0.9>

translate <0,0.2, 0>

}

pigment{ color White }

}

// --- 取っ手の部分

----difference{

object{

Disk_Z

scale <0.8, 0.8, 0.1>

}

object{

Disk_Z

scale <0.7, 0.7, 0.2>

}

translate< 1,0,0>

pigment{ color White }

}

(36)
(37)

課題

円柱

(Disk_YやDisk_Z)を使ってカップを作ってみてください。

できる人は取手を付けてみてください。

さらにできる人は中にコーヒーを入れてみてください。

二つの円柱を

differenceを使って組み合わせれば作れます。

引く側

(内側)の円柱は、外側より直径が小さく、かつ、長さが長くないと穴をあけられません。

37

もし湯気を描けたり、コーヒーがはねて飛び散るような

表現ができた人が居たら教えてください。

CGの研究にお誘いしたいです。

続いてこのカップに模様や質感を与えます。

(38)

ちょっと

tips

38

=

=

右に移動

=

?

上の部分に蓋が残らないように

内側のオブジェクトをちょっと持ち

上げてから抜きます。

(39)

39

#include "colors.inc" #include "shapes.inc" camera{ location <0,4, -10> look_at <0,0,0> angle 30 }

light_source{ <-10, 10, -20> color White*2}

// --- カップの部分 ----difference{ object{ Disk_Y } object{ Disk_Y scale <0.9, 1, 0.9> translate <0,0.2, 0> }

pigment{ color White } } // --- 取っ手の部分 ----difference{ object{ Disk_Z scale <0.8, 0.8, 0.1> } object{ Disk_Z scale <0.7, 0.7, 0.2> } translate< 1,0,0> pigment{ color White } }

// coffee ---object{

Disk_Y

scale <0.9, 0.7, 0.9> // --- 内側の円柱。ちょっと上下を小さく

pigment{color Brown filter 1.0} //---茶色 interior{ ior 1.33} // --- 屈折率 1.33

}

background{ color Gray }

(40)

参照

関連したドキュメント

   3  撤回制限説への転換   ㈢  氏の商号としての使用に関する合意の撤回可能性    1  破毀院商事部一九八五年三月一二日判決以前の状況

転送条件 を変更せ ず転送を

今回completionpneumonectomyを施行したが,再

LLVM から Haskell への変換は、各 LLVM 命令をそれと 同等な処理を行う Haskell のプログラムに変換することに より、実現される。

回転に対応したアプリを表示中に本機の向きを変えると、 が表 示されます。 をタップすると、縦画面/横画面に切り替わりま

ポンプの回転方向が逆である 回転部分が片当たりしている 回転部分に異物がかみ込んでいる

前回パンダ基地を訪れた時と変わらず、パンダの可愛らしい姿、ありのままの姿に癒されまし

そこで本研究ではまず、乗合バス市場の変遷や事業者の経営状況などを考察し、運転手不