2008년 5월 20일 화요일

eMdiffuse Slim Template

template shadingcomponent eMdiffuseSC {
label eMdiffuse
description {
editmasin edit Rudy Cortes wrap diffuse Model for slim
connect : masin77@gmail.com
Support AOV'color
Final Diffuse -> eMdiff
Color -> eMdiffColor
Diffuse Direct -> eMdiffDirect
Diffuse Direct Shadow -> eMdiffDirectShd
Shadow Red Ch -> eMdiffShd
NonDiffuse Blue Ch -> eMdiffShd
Environment Diffuse -> eMdiffEnv
Bent Normals -> eMnormal
}
parameter float Intensity {
description {
Intensity of diffuse component
}
range {0 1 .001}
default 1
detail varying
}
parameter color Color {
detail varying
default {1 1 1}
}
parameter float wrap {
label Wrap
description "Diffuse Wrap Angle"
range {0 2 .1}
default 1.2
detail varying
}
parameter float gam {
label Gamma
description "Diffuse Gamma"
range {1 2 .1}
default 1.5
detail varying
}
collection void envdiffuse {
label "Envrionment Value"
state close
parameter float envInt {
label "Intensity"
range {0 1 .1}
default 1
detail varying
}
parameter float envSaturation {
label "Saturation"
range {0 1 .1}
default 1
detail varying
}
}
parameter normal Normal {
detail mustvary "pixar,ShadingNormal"
}
collection shadingcomponent result {
access output
display hidden
parameter color col {
access output
}
}
RSLSource DynamicFunction {
proc primvars {} {
declare output varying color eMdiff 0;
declare output varying color eMdiffColor 0;
declare output varying color eMdiffShd 0;
declare output varying color eMdiffDirect 0;
declare output varying color eMdiffDirectShd 0;
declare output varying color eMdiffEnv 0;
declare output varying color eMnormal 0;
}
proc function {} {
output "void [getFunctionName]("
indent
output "float Kd;"
output "color coloration;"
output "float wrap;"
output "float gam;"
output "float envInt;"
output "float envSaturation;"
output "normal Ns;"
output "output color col;"
output ")"
exdent
output "{"
indent
output "extern point P;"
output "extern color eMdiff;"
output "extern color eMdiffColor;"
output "extern color eMdiffShd;"
output "extern color eMdiffDirect;"
output "extern color eMdiffDirectShd;"
output "extern color eMdiffEnv;"
output "extern color eMnormal;"
output ""
output "color eMdiffusenonShd = 0;"
output "color Cl_noshd, Cl_diff;"
output "float wrp = 1 - .5 * wrap;"
output "float wa = acos(wrp*2-1);"
output "vector dirsum = 0;"
output "dirsum = normalize(dirsum);"
output "vector bend = dirsum - Ns;"
output ""
output "//illumination from direct lights"
output "illuminance(\"-environment\", P, Ns, wa, \"lightcache\", \"reuse\")"
output "\{"
indent
output "float nondiff = 0;"
output "lightsource(\"__nondiffuse\", nondiff);"
output "if (nondiff < dotp =" .5" k =" (1-nondiff)" k =" (1-nondiff)" 0 ="=" cl_noshd =" Cl;" cl_diff =" Cl_noshd"> 0)"
output "\{"
indent
output "float nondiff = 0;"
output "color envCol = 0;"
output "illuminance(\"environment\", P, Ns, wa,\n"
indent
output "\"lightcache\", \"refresh\",\n"
output "\"send:light:__surfacearea\", -10,\n"
output "\"send:light:__coneangle\", wa,\n"
output "\"send:light:__coneaxis\", Ns,\n"
output "\"light:__nondiffuse\", nondiff)"
exdent
output "\{"
indent
output "if (nondiff < 1)"
indent
output "float envlum = .2125 * comp(Cl, 0) + .7154 * comp(Cl, 1) + .0721 * comp(Cl, 2);"
output "envCol = (1 - nondiff) * mix(color(envlum), Cl, envSaturation);"
output "eMdiffEnv += envCol;"
exdent
exdent
output "\}"
exdent
output "\}"

output ""
output "// Result"
output "eMdiffDirect *= Kd;"
output "eMdiffDirectShd *= Kd;"
output "eMdiffEnv *= Kd * envInt;"
output "eMdiffShd += (color(1,0,0) * eMdiffDirectShd + color(0,0,1) * (1 - eMdiffDirect));"
output ""
output "col = (eMdiffDirect - eMdiffDirectShd + eMdiffEnv) * coloration;"
output "eMdiff = col;"
output "eMdiffColor = coloration;"
output "eMnormal = ((color bend) + 1) / 2;"
exdent
output "}"
}
}
}

댓글 없음: