Friday, September 10th 2010, 6:07am UTC+2

You are not logged in.

  • Login
  • Register

TobyL

Intermediate

Posts: 189

Location: Hamburg

Occupation: Freelancer

21

Tuesday, February 16th 2010, 11:05am

EDIT: sorry, vielleicht n bisschen off-topic:


warum gibt es eigentlich nicht mehr renderer, die csg unterstuetzen?

gerade nurbs sind ja auch mathematisch eindeutig def. koerper, bei denen so ein csg renderer auftrumpfen kann (wie pr). z.b. kann brazil (splutterfish) gerade mal ne csg plane und sphere rendern. ganz zu schweigen von "Built in Displacements."

ist das eigentlich das gleiche wie "Direct Volume Hardsurface Rendering" (ala volume shader)?

This post has been edited 1 times, last edit by "TobyL" (Feb 16th 2010, 11:11am)

  • Go to the top of the page

Hirni

Super Moderator

Posts: 1,211

Location: Wien

Occupation: Dipl.-Phys. Dr. techn., Postdoctoral Researcher, Inst. of Computer Graphics, TU Wien

22

Tuesday, February 16th 2010, 11:56am


warum gibt es eigentlich nicht mehr renderer, die csg unterstuetzen?

gerade nurbs sind ja auch mathematisch eindeutig def. koerper, bei denen so ein csg renderer auftrumpfen kann (wie pr). z.b. kann brazil (splutterfish) gerade mal ne csg plane und sphere rendern. ganz zu schweigen von "Built in Displacements."

ist das eigentlich das gleiche wie "Direct Volume Hardsurface Rendering" (ala volume shader)?


Es gibt einige Production Renderer die CSG koennen, PRman, 3delight, povray, auch MR kann per shader CSG. Fuer raytracer ist das recht einfach, man muss nur den Operatoren-Baum abfahren.

Das Problem ist wenn man einen umfangreichen Renderer hat will man alle Features miteinander kombinieren, und das geht am besten wenn man alles auf simple Primitive runterbricht und nicht Spezialfaelle einbaut. CSG laesst sich auch vorberechnen. Im CAD Bereich ist CSG normalerweise immer vorhanden.

NURBS sind im allgemeinen nicht mit CSG vereinbar, fuer CSG braucht man Solid Geometry, und NURBS haben erstmal kein innen oder aussen.

Volume rendering ist etwas anderes als CSG, beim volume rendering kann man level sets oder isosurfaces zur Renderzeit abfragen die dann eine Oberflaeche bilden, es werden also kein boolschen Operationen durchgefuehrt.
Stop destroying our planet.
It is where I keep all my stuff.
  • Go to the top of the page

TobyL

Intermediate

Posts: 189

Location: Hamburg

Occupation: Freelancer

23

Tuesday, February 16th 2010, 12:33pm

ah, ok. :)

gedanke:
Ich meinte bei CSG & Nurbs nicht primaer die solid (& baum) eigenschaften der csg, sondern dass die ganzen koerper (csg) & flaechen (nurbs, iso usw.) eben mathematisch eindeutig definiert sind und deswegen die tesselierung (= langsamer, speicherlastig, unrund) umgangen werden kann.

das bedeutet, das "volume surface rendering" zumindest die nurbs & isosurfaces abdeckt? mich irritiert der name volume einwenig, weil ich das gleich mit cloud, voxel oder anderen volumetrischen rendertechniken assoziiere.

EDIT: leider ist der einzige produktionstaugliche "hardsurface" (sagt man das so?) renderer ja prman & 3delight, da man die anderen im grunde nur in cad software benutzt (3D World Studio, Vectorworks, SolidWorks ) und halt povray, oder?
  • Go to the top of the page

daishi

Intermediate

Posts: 397

Location: Offenburg

Occupation: Dipl. Ing. Autodidakt, Rônin

24

Tuesday, February 16th 2010, 2:20pm

hey daishi,

sieht echt gut aus mit den reflections, leider bin ich im shaderwriting noch nich so wirklich gut bewandert,
meinst du kannst mir so nen kleinen tip geben wie ich das entsprechend einbinde?
wär echt supi nett....

grüßle


Ich habe für das Beispiel einen volumeShader verwendet. Hier der Code:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
volume test_reflections(string ptcfile = "";
				string envMap = "";
				string envMapSpace = "";
				string refHitsides = "front/back/both";
				string multibounce = "";
				float refBias = 0.01;
				float refMaxSolidAngle= .05;
				float refClamp = 1.0;
				float refSortbleeding = 1.0;
				float refMaxdist = 200;
				float refFalloff = 3;
				float refFalloffmode = 1;
				float refConeangle = 90;
				float refSamples = 0;
				output varying color aov_refl = 0;
				)
{

normal Nn = normalize (N);
vector ptc_vector = reflect(I, Nn);

aov_refl = indirectdiffuse ( P, ptc_vector, refSamples, "pointbased", 1, "filename", ptcfile,
					"coneangle", radians(refConeangle),
					"hitsides", refHitsides,
					"bias", refBias,
					"maxsolidangle", refMaxSolidAngle,
					"clamp", refClamp,
					"sortbleeding", refSortbleeding,
					"maxdist", refMaxdist,
					"falloff", refFalloff,
					"falloffmode", refFalloffmode,
					"environmentmap", envMap,
					"environmentspace", envMapSpace);

if (multibounce != "") {
    bake3d(multibounce, "", P, Nn, "coordsystem", envMapSpace, "interpolate", 0, "_radiance", aov_refl);
}

Ci += aov_refl;

}


Ich weiß nicht ob der "out-of-the-box" jetzt mit RfM laufen wird. Keine Ahnung. Ich tippe auf "wahrscheinlich nicht" ;)
Kann sein, das du aov durch Ci ersetzen musst (dann natürlich die letzte Zeile löschen) und die output varying color löschen...

Meine Kenntnisse von RfM sind recht oberflächlich. Ich hab nur einmal damit gearbeitet und das auch nicht soooo Renderman-lastig. Allerdings meine ich, das man über RiInjectionPoints unterschiedliche Shader der gesamten Szene zugänglich machen kann (Render Settings > Advanced > RiInjection Points > Pre Shape MEL) folgendes eingeben:

Source code

1
RiAtmosphere "path/to/the/volumeShader" "tpye variable_2" value "type variable_2" value (...);

"type variable" value wäre dann zum Beispiel: "string envMap" pfad/zur/envMap (die man nicht setzen muss!)

Was allerdings wichtig ist, das du dir zuvor über einen RenderRadiosity-Pass eine Pointcloud mit _radiosity rausholst und die dann dem Shader zur Verfügung stellst.


Wie gesagt, dass ist ein Weg den ich kenne - sehr wahrscheinlich gibt es noch einen besseren/komfortableren Weg. Einfach mal in die Doku schauen! Es geht im Grunde genommen nur darum, pointcloud mit _radiosity zu erstellen, und einen volumeShader auf alle Geometrie, innerhalb der Szene an zu wenden.
Im Grunde genommen, müsste man auch einfach aus dem volume auch ein surface-Shader machen können. Dazu einfach im Shader "volume" mit "surface" ersetzen, neu kompilieren und über den Hypershade ein Renderman-Code-Node erstellen, Shader laden und auf alle Geometrie anwenden..


Hoffe das hilft weiter. Vielleicht kann auch jemand das Ganze noch vereinfachen.. :D
  • Go to the top of the page

Hirni

Super Moderator

Posts: 1,211

Location: Wien

Occupation: Dipl.-Phys. Dr. techn., Postdoctoral Researcher, Inst. of Computer Graphics, TU Wien

25

Tuesday, February 16th 2010, 2:44pm

Ich meinte bei CSG & Nurbs nicht primaer die solid (& baum) eigenschaften der csg, sondern dass die ganzen koerper (csg) & flaechen (nurbs, iso usw.) eben mathematisch eindeutig definiert sind und deswegen die tesselierung (= langsamer, speicherlastig, unrund) umgangen werden kann.


Mathematisch eindeutig definiert sind alle geometrische Repreaesentationen. Das Problem liegt in der numerischen Stabilitaet und Effizienz von Higher-Order Oberflaechen wie es NURBS sind. Wenn Du z.B. einen ganzen Kopf hast der eine einzige NURBS Surface ist kann man das nicht effizient raytracen und rasterisieren ist auch nicht effizienter als zu tesselieren. Gehen tut das schon, z.B. ist der in-House raytracer von Blue Sky faehig Spline Sufraces direkt zu raytracen, aber dann muss man Bedingungen an die Splines stellen. Tesselierung entspricht einer stueckweisen Linearisierung einer Higher-order Surface was alles viel einfacher und effizienter macht. Z.B. will man einen world space Kd-tree zum ray tracen aufbauen, da braucht man dann alles als Triangles, man kann nicht eine NURBS direkt in einen Kd-tree einbauen und separat zu ray tracen waere um Faktoren ineffizienter. Aehnliches gilt fuer die Rasterisierung.

das bedeutet, das "volume surface rendering" zumindest die nurbs & isosurfaces abdeckt? mich irritiert der name volume einwenig, weil ich das gleich mit cloud, voxel oder anderen volumetrischen rendertechniken assoziiere.


NURBSs sind eine Higher-Order Repraesentation einer 2D Flaeche, das hat genauso wenig mit Volume Surfaces zu tun wie eine Polygon Repraesentation. Volume Surface Rendering kannst Du Dir so vorstellen dass Du eine Wolke hast und da wo die Wolke ueberall die gleiche Dichte hat wird ein festes Stueck Oberflaeche eingefuegt (Isosurfaces). Du kannst das z.B. in den Maya Fluids machen.
Stop destroying our planet.
It is where I keep all my stuff.
  • Go to the top of the page

TobyL

Intermediate

Posts: 189

Location: Hamburg

Occupation: Freelancer

26

Tuesday, February 16th 2010, 2:54pm

danke hirni!

hab heute wieder viel dazugelernt!
:)
gruesse!
Toby
  • Go to the top of the page

JanShao

Intermediate

27

Tuesday, February 16th 2010, 9:14pm

@daishi: Danke :) Werd is ruhe mal ausprobieren....nachdem ich meine blöden Prüfungen hintermich gebracht habe...
  • Go to the top of the page

daishi

Intermediate

Posts: 397

Location: Offenburg

Occupation: Dipl. Ing. Autodidakt, Rônin

28

Tuesday, February 16th 2010, 10:33pm

Ach ja.. was ich vergessen habe: für "coneangle" sollte man kleine Werte verwenden.. ca. 10-25.
  • Go to the top of the page