Thursday, March 23, 2006

[PRMAN]RIBContext->ReadArchive

最後面要加一個RI_NULL當作輸入結尾

Tuesday, March 21, 2006

[PRMAN]RIBContext method整理


void GetRenderingPass(RenderingPass *p, RtBoolean *declarePhase) = 0;
RtBoolean GetMotionBlur() = 0;
int GetFrame() = 0;
void GetShutter(RtFloat *open, RtFloat *close) = 0;
const char * GetJobName() = 0;
const char * GetObjName() = 0;
void GetCamBasis( RtMatrix m, int inverse = 0 ) = 0;
void ReportError( RenderingError e, const char *fmt, ... ) = 0;
void GetMotionInfo( RtFloat *shutterAngle, RtFloat *fps,
RtBoolean *subframeMotion, RtBoolean *blurCamera=0L,
ShutterTiming *shutterTiming=0L,ShutterConfig *shutterConfig=0L) = 0;
const RIBContextResult *
ExecuteHostCmd( const char *cmd, std::string &errstr ) = 0;
const RIBContextResult *
ExecuteHostCmd( const char *cmd, char** errstr ) = 0;
RtBasis * GetBasis( BasisFunction ) = 0;
void SetDefaultFilterFunction( FilterFunction ) = 0;
RtFilterFunc GetFilterFunction( FilterFunction ) = 0;
RtFilterFunc GetFilterFunction( const char *nm ) = 0;
RtProcSubdivFunc GetProcSubdivFunc( ProceduralSubdivFunction ) = 0;
RtProcFreeFunc GetProcFreeFunc() = 0;
const char *GetOutputDir(OutDirCategory) = 0;

RtVoid Begin( RtToken name ) = 0;
RtVoid End() = 0;
RtContextHandle GetContext() = 0;
RtVoid Context( RtContextHandle ) = 0;

RtVoid RIBBox(const RtString) = 0;
RtToken Declare(char *, char *) = 0;
RtVoid AttributeBegin() = 0;
RtVoid AttributeEnd() = 0;
RtVoid Color(RtColor) = 0;
RtVoid Opacity(RtColor) = 0;
RtVoid TextureCoordinates(RtFloat s1, RtFloat t1, RtFloat s2,
RtFloat t2, RtFloat s3, RtFloat t3,
RtFloat s4, RtFloat t4) = 0;
RtLightHandle LightSource(RtToken name, ...) = 0;
RtLightHandle LightSourceV(RtToken name, RtInt n,
RtToken tokens[], RtPointer parms[]) = 0;
RtLightHandle AreaLightSource(RtToken name, ...) = 0;
RtLightHandle AreaLightSourceV(RtToken name, RtInt n,
RtToken tokens[], RtPointer parms[]) = 0;
RtVoid Illuminate(RtLightHandle light, RtBoolean onoff) = 0;
RtVoid Surface(RtToken name, ...) = 0;
RtVoid SurfaceV(RtToken name, RtInt n, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid Atmosphere(RtToken name, ...) = 0;
RtVoid AtmosphereV(RtToken name, RtInt n, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid Interior(RtToken name, ...) = 0;
RtVoid InteriorV(RtToken name, RtInt n, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid Exterior(RtToken name, ...) = 0;
RtVoid ExteriorV(RtToken name, RtInt n, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid ShadingRate(RtFloat) = 0;
RtVoid ShadingInterpolation(RtToken type) = 0;
RtVoid Matte(RtBoolean onoff) = 0;
RtVoid Bound(RtBound bound) = 0;
RtVoid Detail(RtBound bound) = 0;
RtVoid DetailRange(RtFloat minvis, RtFloat lowtran, RtFloat uptran, RtFloat maxvis) = 0;
RtVoid RelativeDetail(RtFloat) = 0;
RtVoid GeometricApproximation(RtToken type, RtFloat value) = 0;
RtVoid Orientation(RtToken orientation) = 0;
RtVoid ReverseOrientation(void) = 0;
RtVoid Sides(RtInt sides) = 0;
RtVoid Identity(void) = 0;
RtVoid Transform(RtMatrix transform) = 0;
RtVoid ConcatTransform(RtMatrix transform) = 0;
RtVoid Perspective(RtFloat fov) = 0;
RtVoid Translate(RtFloat dx, RtFloat dy, RtFloat dz) = 0;
RtVoid Rotate(RtFloat angle, RtFloat dx, RtFloat dy, RtFloat dz) = 0;
RtVoid Scale(RtFloat sx, RtFloat sy, RtFloat sz) = 0;
RtVoid Skew(RtFloat angle, RtFloat dx1, RtFloat dy1, RtFloat dz1,
RtFloat dx2, RtFloat dy2, RtFloat dz2) = 0;
RtVoid Displacement(RtToken name, ...) = 0;
RtVoid DisplacementV(RtToken name, RtInt n, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid CoordinateSystem(RtToken space) = 0;
RtVoid ScopedCoordinateSystem(RtToken space) = 0;
RtVoid CoordSysTransform(RtToken space) = 0;
RtVoid TransformBegin(void) = 0;
RtVoid TransformEnd(void) = 0;
RtVoid Attribute(RtToken name, ...) = 0;
RtVoid AttributeV(RtToken name, RtInt n, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid Polygon(RtInt nverts, ...) = 0;
RtVoid PolygonV(RtInt nverts, RtInt n, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid GeneralPolygon(RtInt nloops, RtInt nverts[], ...) = 0;
RtVoid GeneralPolygonV(RtInt nloops, RtInt nverts[], RtInt n,
RtToken tokens[], RtPointer parms[]) = 0;
RtVoid PointsPolygons(RtInt npolys, RtInt nverts[], RtInt verts[], ...) = 0;
RtVoid PointsPolygonsV(RtInt npolys,RtInt nverts[], RtInt verts[], RtInt n,
RtToken tokens[], RtPointer parms[]) = 0;
RtVoid PointsGeneralPolygons(RtInt npolys, RtInt nloops[],
RtInt nverts[], RtInt verts[], ...) = 0;
RtVoid PointsGeneralPolygonsV(RtInt npolys, RtInt nloops[], RtInt nverts[],
RtInt verts[], RtInt n, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid Basis(RtBasis ubasis, RtInt ustep, RtBasis vbasis, RtInt vstep) = 0;
RtVoid Patch(RtToken type, ...) = 0;
RtVoid PatchV(RtToken type, RtInt n, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid PatchMesh(RtToken type, RtInt nu, RtToken uwrap, RtInt nv, RtToken vwrap, ...) = 0;
RtVoid PatchMeshV(RtToken type, RtInt nu, RtToken uwrap, RtInt nv, RtToken vwrap,
RtInt n, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid NuPatch(RtInt nu, RtInt uorder, RtFloat uknot[], RtFloat umin, RtFloat umax,
RtInt nv, RtInt vorder, RtFloat vknot[], RtFloat vmin, RtFloat vmax, ...) = 0;
RtVoid NuPatchV(RtInt nu, RtInt uorder, RtFloat uknot[], RtFloat umin, RtFloat umax,
RtInt nv, RtInt vorder, RtFloat vknot[],RtFloat vmin, RtFloat vmax, RtInt n,
RtToken tokens[], RtPointer parms[]) = 0;
RtVoid TrimCurve(RtInt nloops, RtInt ncurves[], RtInt order[], RtFloat knot[],
RtFloat min[], RtFloat max[], RtInt n[], RtFloat u[], RtFloat v[], RtFloat w[]) = 0;
RtVoid Sphere(RtFloat radius, RtFloat zmin, RtFloat zmax, RtFloat tmax, ...) = 0;
RtVoid SphereV(RtFloat radius, RtFloat zmin, RtFloat zmax, RtFloat tmax, RtInt n,
RtToken tokens[], RtPointer parms[]) = 0;
RtVoid Cone(RtFloat height, RtFloat radius, RtFloat tmax, ...) = 0;
RtVoid ConeV(RtFloat height, RtFloat radius,RtFloat tmax, RtInt n, RtToken tokens[],
RtPointer parms[]) = 0;
RtVoid Cylinder(RtFloat radius, RtFloat zmin, RtFloat zmax, RtFloat tmax, ...) = 0;
RtVoid CylinderV(RtFloat radius, RtFloat zmin, RtFloat zmax, RtFloat tmax, RtInt n,
RtToken tokens[], RtPointer parms[]) = 0;
RtVoid Hyperboloid(RtPoint point1, RtPoint point2, RtFloat tmax, ...) = 0;
RtVoid HyperboloidV(RtPoint point1, RtPoint point2, RtFloat tmax, RtInt n, RtToken
tokens[], RtPointer parms[]) = 0;
RtVoid Paraboloid(RtFloat rmax, RtFloat zmin, RtFloat zmax, RtFloat tmax, ...) = 0;
RtVoid ParaboloidV(RtFloat rmax, RtFloat zmin, RtFloat zmax, RtFloat tmax, RtInt n,
RtToken tokens[], RtPointer parms[]) = 0;
RtVoid Disk(RtFloat height, RtFloat radius, RtFloat tmax, ...) = 0;
RtVoid DiskV(RtFloat height, RtFloat radius, RtFloat tmax, RtInt n,
RtToken tokens[], RtPointer parms[]) = 0;
RtVoid Torus(RtFloat majrad, RtFloat minrad, RtFloat phimin, RtFloat phimax,
RtFloat tmax, ...) = 0;
RtVoid TorusV(RtFloat majrad, RtFloat minrad, RtFloat phimin, RtFloat phimax,
RtFloat tmax, RtInt n, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid Geometry(RtToken type, ...) = 0;
RtVoid GeometryV(RtToken type, RtInt n, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid SolidBegin(RtToken operation) = 0;
RtVoid SolidEnd(void) = 0;
RtVoid MotionBegin(RtInt n, ...) = 0;
RtVoid MotionBeginV(RtInt n, RtFloat times[]) = 0;
RtVoid MotionEnd(void) = 0;
RtVoid ArchiveRecord(RtToken type, char *format, ...) = 0;
RtVoid ReadArchive(RtToken name, RtVoid (*callback)(RtToken,char*,...), ...) = 0;
RtVoid ReadArchiveV(RtToken name, RtVoid (*callback)(RtToken,char*,...), RtInt n,
RtToken tokens[], RtPointer parms[]) = 0;
RtVoid Procedural(RtPointer data, RtBound bound,
RtVoid (*subdivfunc)(RtPointer, RtFloat), RtVoid (*freefunc)(RtPointer)) = 0;
RtVoid Curves(RtToken type, RtInt ncurves, RtInt nvertices[], RtToken wrap, ...) = 0;
RtVoid CurvesV(RtToken type, RtInt ncurves, RtInt nvertices[], RtToken wrap,
RtInt n, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid Points(RtInt nverts,...) = 0;
RtVoid PointsV(RtInt nverts, RtInt nargs, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid SubdivisionMesh(RtToken scheme, RtInt nf, RtInt nverts[], RtInt verts[],
RtInt nt, RtToken tags[], RtInt numargs[], RtInt intargs[], RtFloat floatargs[], ...) = 0;
RtVoid SubdivisionMeshV(RtToken scheme, RtInt nf, RtInt nverts[], RtInt verts[], RtInt nt,
RtToken tags[], RtInt numargs[], RtInt intargs[], RtFloat floatargs[], RtInt n,
RtToken tokens[], RtPointer parms[]) = 0;
RtVoid HierarchicalSubdivisionMesh(RtToken scheme, RtInt nf, RtInt nverts[],
RtInt verts[], RtInt ntags, RtToken tags[], RtInt numargs[], RtInt intargs[],
RtFloat floatargs[], RtToken stringargs[], ...) = 0;
RtVoid HierarchicalSubdivisionMeshV(RtToken scheme, RtInt nf, RtInt nverts[],
RtInt verts[], RtInt nt, RtToken tags[], RtInt numargs[], RtInt intargs[],
RtFloat floatargs[], RtToken stringargs[], RtInt n, RtToken tokens[],
RtPointer parms[]) = 0;
RtVoid Blobby(RtInt, RtInt, RtInt [], RtInt, RtFloat [], RtInt, RtToken [], ...) = 0;
RtVoid BlobbyV(RtInt, RtInt, RtInt [], RtInt, RtFloat [], RtInt, RtToken [],
RtInt, RtToken [], RtPointer []) = 0;
RtVoid ClippingPlane( RtFloat x, RtFloat y, RtFloat z, RtFloat nx, RtFloat ny, RtFloat nz) = 0;
RtVoid Resource(RtToken handle, RtToken type, ...) = 0;
RtVoid ResourceV(RtToken handle, RtToken type, RtInt n, RtToken tokens[], RtPointer parms[]) = 0;
RtVoid ResourceBegin() = 0;
RtVoid ResourceEnd() = 0;
RtVoid System(char *) = 0;
RtVoid IfBegin(char *) = 0;
RtVoid Else() = 0;
RtVoid ElseIf(char *) = 0;
RtVoid IfEnd() = 0;

[PRMAN]寫RibGen的注意事項

  • 當編譯成一個so檔,還要附上一個slim檔描述該so,檔頭為
    slim 1 appearance toslim {
    instance dso "particleGen" $SLIMMASTER {
    description {A RIB Generator that adds stubble to Maya nurbs.}
    subtype ribgen
    eval [slimDSOMacro ribgen]

  • Monday, March 20, 2006

    GenRIB

  • 檢查目前的render pass, 如果是 declare pass, return 0.然後依照不同的render path作不同的事
    RIBContext->GetRenderingPass(&p, &decl);
    // RIBContext::RenderingPass p;
    // RtBoolean decl;

  • RIBContext->ExecuteHostCmd(cmd, errorString) 來執行maya的mel command,以取得maya內的資訊

  • 將想要的資訊產生為rib (c->AttributeBegin(); ...; c->AttributeEnd();)
  • [PRMAN]Renderman notes

    get render path:
    RIBContext::RenderingPass pass;
    RtBoolean decl;
    context->GetRenderingPass(&pass, &decl);
    pass = {
    rpFinal,
    rpShadow,
    rpReflection,
    rpEnvironment,
    rpTraverseOnly
    }

    北國性騷擾

    最近想說要看點有藝術氣質,有提名的那種得獎片,
    所以就跟IC去看"北國性騷擾",
    這種非好萊屋的片子撥的地方實在不多,
    整個西門町就只有日新有在上映,
    雖然有以前去看魔戒實有著不好印像,
    但是也沒得選擇,就GO了。

    這次的廳在一樓,改變了我對日新的看法,
    就以位子的高低差和大小,算是不錯了。
    廢話就到此,開始切入電影了,
    在我看到第一個高潮,就是巴比脅迫女主角的時候,
    忽然 "翁"的一聲,螢幕整個黑掉啦!!
    人群開始騷動起來,不過工作人馬上跑了進來說台電跳電,
    那... 人家也是打工的,也不要太為難他,
    就等電來吧!

    過了一會,隔壁的情侶檔起身去上廁所,
    想說也好,趁著空檔去上個廁所,
    想不到剛要跨出門口,一道光束從我的身旁掠過,
    "~~~~"電來了,電影又開始了,
    回頭一看,巴比已經放過女主角。
    漏了一小段沒看到....。

    好不容易又融入電影情節的時候,
    哇糙,又黑了。
    不滿的情緒開始醞釀,
    不過IC大爺很乾脆的說,去上剛剛未完成的廁所吧!
    正當IC要起身的時候,"翁~~"電影又開始了,
    IC還是乖乖坐下了。

    正所謂無三不成禮,一定要再來一次的阿。
    不過這次我不會讓IC專美於前,
    正當我躍過了隔壁的情侶檔,
    面前忽然一道光芒,XD!電影又開始了。

    折騰了這麼多次最後電影也沒看成,
    不過日新有補我們一張票,還算可以接受,
    我想下次還是看好萊塢的片子吧。

    Monday, March 13, 2006

    捷運站不可以吃口香糖

    今天在台北車站看到看到一個女生跟一個穿制服的警察在講話,
    直覺就認為應該是問路的,可是走近一看,
    警察手裡拿著黃色的單子叫那位小姐填,
    這不禁激起我的好奇心,就走過去偷聽到底在幹麼,
    結果聽到一句:"等一下去後面的垃圾筒吐掉"。
    一切的謎底都解開了,原來是吃口香糖被抓包!
    以後不能抱持僥倖的心態在捷運站吃口香糖。

    至少在台北車站的時候不要嚼。
    (除了台北車站外應該都沒有警察吧!?)

    Wednesday, March 08, 2006

    轉mpeg1


    mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=vcd -vf scale=320:-2,harddup -srate 44100 -af lavcresample=44100 -lavcopts vcodec=mpeg1video:keyint=18:vrc_buf_size=327:vrc_minrate=1152:vbitrate=1152:vrc_maxrate=1152:acodec=mp2:abitrate=224 -ofps 30000/1001 -o movie_vcd.mpg input.mpg

    Thursday, March 02, 2006

    Gamma, bias and gain

    gamma:


    float gamma(float val, gam){
    return pow(val, 1 / gam);
    }

    bias:


    float bias (float x, val){
    return (val > 0) ? pow(x,log(val) / log(0.5)) : 0;
    }


    gain:


    float gain (float x, val ) {
    return 0.5 * ((x < 0.5) ? bias (2*x, 1-val): (2 - bias(2-2*x,1-val)));
    }


    Link: rendermanacademy