Rendering学習日記

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

jrManでsmoothstep

smoothstep.jpg

fg1.set(sv.s);
fg2.set(sv.t);
cg3.set(color1);
cg4.set(color2);

fg1.smoothstep(0.4f,0.6f,fg2);

sv.Cs.mix(cg3, cg4, fg1);

ct1.set(sv.Cs);
  • -
  • -

jrManでrepeating pattern

三角、三角、つくってみた。
SurfaceSankakutest.java
"Sankaku" is a triangle.
sankaku.jpg
勉強ですね。
以下、ソース
/*
SurfaceSankakutest.java
*/

import javax.vecmath.Color3f;

import org.jrman.grid.BooleanGrid;
import org.jrman.grid.FloatGrid;
import org.jrman.grid.Color3fGrid;
import org.jrman.grid.Vector3fGrid;
import org.jrman.parameters.Declaration;
import org.jrman.parameters.UniformScalarFloat;
import org.jrman.parameters.UniformScalarTuple3f;
import org.jrman.parameters.UniformScalarString;
import org.jrman.render.ShaderVariables;
import org.jrman.shaders.SurfaceShader;

public class SurfaceSankakutest extends SurfaceShader {

private static Vector3fGrid vg1 = new Vector3fGrid();

private static Vector3fGrid vg2 = new Vector3fGrid();

private static FloatGrid fg1 = new FloatGrid();

private static FloatGrid fg2 = new FloatGrid();

private static Color3fGrid cg1 = new Color3fGrid();

private static Color3fGrid cg2 = new Color3fGrid();

private static Color3fGrid cg3 = new Color3fGrid();

private static Color3fGrid ct1 = new Color3fGrid();

private static Color3f specularcolor = new Color3f();

private static Color3f color1 = new Color3f();

private static Color3f WHITE = new Color3f(1f, 1f, 1f);

private static BooleanGrid cond = new BooleanGrid();

protected void initDefaults() {
defaultParameters.addParameter(
new UniformScalarFloat(new Declaration("Ka", "uniform float"), 1f));
defaultParameters.addParameter(
new UniformScalarFloat(new Declaration("Kd", "uniform float"), .5f));
defaultParameters.addParameter(
new UniformScalarFloat(new Declaration("Ks", "uniform float"), .5f));
defaultParameters.addParameter(
new UniformScalarFloat(new Declaration("roughness", "uniform float"), .1f));
defaultParameters.addParameter(
new UniformScalarTuple3f(
new Declaration("specularcolor", "uniform color"),
1f,
1f,
1f));
defaultParameters.addParameter(
new UniformScalarTuple3f(
new Declaration("color1", "uniform color"),
0f,
1f,
0f));
defaultParameters.addParameter(
new UniformScalarFloat(new Declaration("repeatCount", "uniform float"), 5f));
}

public void shade(ShaderVariables sv) {
super.shade(sv);
UniformScalarFloat paramKa = (UniformScalarFloat) getParameter(sv, "Ka");
final float Ka = paramKa.getValue();
UniformScalarFloat paramKd = (UniformScalarFloat) getParameter(sv, "Kd");
final float Kd = paramKd.getValue();
UniformScalarFloat paramKs = (UniformScalarFloat) getParameter(sv, "Ks");
final float Ks = paramKs.getValue();
UniformScalarFloat paramRoughness = (UniformScalarFloat) getParameter(sv, "roughness");
final float roughness = paramRoughness.getValue();
UniformScalarTuple3f paramSpecularcolor =
(UniformScalarTuple3f) getParameter(sv, "specularcolor");
paramSpecularcolor.getValue(specularcolor);
UniformScalarTuple3f paramColor1 =
(UniformScalarTuple3f) getParameter(sv, "color1");
paramColor1.getValue(color1);
UniformScalarFloat paramRepeatCount = (UniformScalarFloat) getParameter(sv, "repeatCount");
final float repeatCount = paramRepeatCount.getValue();

vg1.normalize(sv.N);
vg1.faceforward(vg1, sv.I);
vg2.normalize(sv.I);
vg2.negate(vg2);

fg1.set(sv.s);
fg2.set(sv.t);
cg3.set(color1);

fg1.mul(fg1,repeatCount);
fg1.mod(fg1,1f);
fg2.mul(fg2,repeatCount);
fg2.mod(fg2,1f);

fg1.step(fg1,fg2);

sv.Cs.mix(sv.Cs, cg3, fg1);

ct1.set(sv.Cs);

sv.Oi.set(sv.Os);
ambient(sv, cg1);
cg3.set(Ka);
cg1.mul(cg1, cg3);
diffuse(sv, vg1, cg2);
cg3.set(Kd);
cg2.mul(cg2, cg3);
cg1.add(cg1, cg2);
specular(sv, vg1, vg2, roughness, cg2);
cg3.set(Ks);
cg2.mul(cg2, cg3);
cg3.set(specularcolor);
cg2.mul(cg2, cg3);
cg1.add(cg1, cg2);
cg1.mul(cg1, ct1);
sv.Ci.mul(sv.Os, cg1);
}

}
  • -
  • -

jrManでTIFF出力

できると思っていたら、
Display "bike3.png" "file" "rgba"
PNGだけ。

tifやjpgは、

jai_imageio-1_1-lib-windows-i586-jre.exe

をインストールした。

sekigahara renderで教えてもらったimageName.javaで確認。
import java.io.File;
import javax.imageio.ImageIO;

public class imageName{

public static void main(String[] args)
{
getName();
}

public static int getName() {
String[] writerNames = ImageIO.getWriterFormatNames();

for (int i = 0 ; i < writerNames.length ; i++) {
System.out.println(writerNames[i]);
}

return 0;
}
}


>javac imageName.java
>java imageName
raw
tif
jpeg
JFIF
WBMP
jpeg-lossless
jpeg-ls
PNM
JPG
wbmp
PNG
JPEG
jpeg 2000
tiff
BMP
JPEG2000
RAW
JPEG-LOSSLESS
jpeg2000
GIF
TIF
TIFF
bmp
jpg
pnm
jfif
png
JPEG 2000
gif
JPEG-LS

jrManでレンダリング時に
Display "bike.tif" "file" "rgba"
TIFF出力OKです。

jrManのframebufferで出したGUIでは、保存できないのが難点。
PNGだけ保存できる。
  • -
  • -
<< 27/50 >>