0% found this document useful (0 votes)
8 views3 pages

Unity Volume Object Creation Script

Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views3 pages

Unity Volume Object Creation Script

Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

using System;

using [Link];
using UnityEngine;

namespace UnityVolumeRendering
{
public class VolumeObjectFactory
{
public static VolumeRenderedObject CreateObject(VolumeDataset dataset)
{
GameObject outerObject = new GameObject("VolumeRenderedObject_" +
[Link]);
VolumeRenderedObject volObj =
[Link]<VolumeRenderedObject>();

GameObject meshContainer =
[Link]((GameObject)[Link]("VolumeContainer"));
[Link] = meshContainer;
MeshRenderer meshRenderer = [Link]<MeshRenderer>();

CreateObjectInternal(dataset, meshContainer, meshRenderer, volObj,


outerObject);

[Link]("_DataTex",
[Link]());

return volObj;
}
public static async Task<VolumeRenderedObject>
CreateObjectAsync(VolumeDataset dataset, IProgressHandler progressHandler = null)
{
GameObject outerObject = new GameObject("VolumeRenderedObject_" +
[Link]);
VolumeRenderedObject volObj =
[Link]<VolumeRenderedObject>();

GameObject meshContainer =
[Link]((GameObject)[Link]("VolumeContainer"));
[Link] = meshContainer;
MeshRenderer meshRenderer = [Link]<MeshRenderer>();

CreateObjectInternal(dataset,meshContainer,
meshRenderer,volObj,outerObject) ;

[Link]("_DataTex", await
[Link](progressHandler));

return volObj;
}

private static void CreateObjectInternal(VolumeDataset dataset, GameObject


meshContainer, MeshRenderer meshRenderer, VolumeRenderedObject volObj, GameObject
outerObject, IProgressHandler progressHandler = null)
{
[Link] = [Link];
[Link] = [Link];
[Link] = [Link];
[Link] = [Link];
[Link] = [Link](0.0f, 0.0f,
0.0f);

[Link] = new
Material([Link]);
[Link] = meshRenderer;
[Link] = dataset;

const int noiseDimX = 512;


const int noiseDimY = 512;
Texture2D noiseTexture =
[Link](noiseDimX, noiseDimY);

TransferFunction tf =
[Link]();
Texture2D tfTexture = [Link]();
[Link] = tf;

TransferFunction2D tf2D =
TransferFunctionDatabase.CreateTransferFunction2D();
volObj.transferFunction2D = tf2D;

[Link]("_GradientTex", null);
[Link]("_NoiseTex", noiseTexture);
[Link]("_TFTex", tfTexture);

[Link]("MODE_DVR");
[Link]("MODE_MIP");
[Link]("MODE_SURF");

[Link] = [Link];
[Link] = [Link];

// Normalise size (TODO: Add setting for diabling this?)


float maxScale = [Link]([Link].x, [Link].y,
[Link].z);
[Link] = [Link] / maxScale;
}

public static void SpawnCrossSectionPlane(VolumeRenderedObject volobj)


{
GameObject quad =
[Link]((GameObject)[Link]("CrossSectionPlane"));
[Link] = [Link](270.0f, 0.0f, 0.0f);
CrossSectionPlane csplane =
[Link]<CrossSectionPlane>();
[Link](volobj);
[Link] = [Link];

#if UNITY_EDITOR
[Link] = new [Link][] { quad };
#endif
}

public static void SpawnCutoutBox(VolumeRenderedObject volobj)


{
GameObject obj =
[Link]((GameObject)[Link]("CutoutBox"));
[Link] = [Link](270.0f, 0.0f, 0.0f);
CutoutBox cbox = [Link]<CutoutBox>();
[Link](volobj);
[Link] = [Link];

#if UNITY_EDITOR
[Link] = new [Link][] { obj };
#endif
}
public static void SpawnCutoutSphere(VolumeRenderedObject volobj)
{
GameObject obj =
[Link]((GameObject)[Link]("CutoutSphere"));
[Link] = [Link](270.0f, 0.0f, 0.0f);
CutoutSphere cSphere = [Link]<CutoutSphere>();
[Link](volobj);
[Link] = [Link];

#if UNITY_EDITOR
[Link] = new [Link][] { obj };
#endif
}
}
}

You might also like