不能用rawimage
不能用传统tex2d
但Texture3d的方法,其实也很简单
虽然不知道tex3d有什么作用
创造方法
就不贴了,有人说一定要代码创建
我用了国外小哥的方法:
compute shader. Dispathc()
texSelf = new RenderTexture(256, 256, 0);
texSelf.enableRandomWrite = true; //2 开启随机写入
texSelf.dimension = UnityEngine.Rendering.TextureDimension.Tex3D;
texSelf.Create(); //3 创建RenderTexture
testMaterial.SetTexture("_MainTex", texSelf);
//int kernel = noiseComputeSelf.FindKernel("CSMain");
int kernel = 0;
//Update Tex
//compute 噪点,必须设置
noiseComputeSelf.SetInt("resolution", activeTextureResolution);
noiseComputeSelf.SetTexture(kernel, "Result", texSelf);
noiseComputeSelf.Dispatch(kernel, 256 / 8, 256 / 8, 1);
如何显示
参考如下shader
Shader "DX11/Sample 3D Texture" {
Properties {
_Volume ("Texture", 3D) = "" {}
}
SubShader {
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma exclude_renderers flash gles
#include "UnityCG.cginc"
struct vs_input {
float4 vertex : POSITION;
};
struct ps_input {
float4 pos : SV_POSITION;
float3 uv : TEXCOORD0;
};
ps_input vert (vs_input v)
{
ps_input o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
o.uv = v.vertex.xyz*0.5+0.5;
return o;
}
sampler3D _Volume;
float4 frag (ps_input i) : COLOR
{
return tex3D (_Volume, i.uv);
}
ENDCG
}
}
Fallback "VertexLit"
}
qi其他错误
在Scene View 放大缩小模型,会有这个错误