DataStream_p3s_c4b_t2s Fix_p3s_c4b_t2s(DataStream_p3s_c4b_t2s p3s_c4b_t2s, Vector3 bboxMin, Vector3 bboxMax) { for (int i = 0; i < p3s_c4b_t2s.p3s_c4b_t2sElem.Count; i++) { float multiplerX = Math.Abs(bboxMin.X - bboxMax.X) / 2f; float multiplerY = Math.Abs(bboxMin.Y - bboxMax.Y) / 2f; float multiplerZ = Math.Abs(bboxMin.Z - bboxMax.Z) / 2f; if (multiplerX < 1) { multiplerX = 1; } if (multiplerY < 1) { multiplerY = 1; } if (multiplerZ < 1) { multiplerZ = 1; } short shortPosX = Utils.EvilConverter.Convert(p3s_c4b_t2s.p3s_c4b_t2sElem[i].pos[0]); short shortPosY = Utils.EvilConverter.Convert(p3s_c4b_t2s.p3s_c4b_t2sElem[i].pos[1]); short shortPosZ = Utils.EvilConverter.Convert(p3s_c4b_t2s.p3s_c4b_t2sElem[i].pos[2]); short shortPosW = Utils.EvilConverter.Convert(p3s_c4b_t2s.p3s_c4b_t2sElem[i].pos[3]); p3s_c4b_t2s.p3s_c4b_t2sElem[i].pos[0] = HalfHelper.SingleToHalf(Utils.tPackB2F(shortPosX) * multiplerX + (bboxMax.X + bboxMin.X) / 2).value; p3s_c4b_t2s.p3s_c4b_t2sElem[i].pos[1] = HalfHelper.SingleToHalf(Utils.tPackB2F(shortPosY) * multiplerY + (bboxMax.Y + bboxMin.Y) / 2).value; p3s_c4b_t2s.p3s_c4b_t2sElem[i].pos[2] = HalfHelper.SingleToHalf(Utils.tPackB2F(shortPosZ) * multiplerZ + (bboxMax.Z + bboxMin.Z) / 2).value; p3s_c4b_t2s.p3s_c4b_t2sElem[i].pos[3] = HalfHelper.SingleToHalf(Utils.tPackB2F(shortPosW)).value; } return(p3s_c4b_t2s); }
private static void WriteHalf(byte[] output, int pos, byte value) { float single = value / 255.0f; ushort half = HalfHelper.SingleToHalf(single); output[pos + 0] = (byte)half; output[pos + 1] = (byte)(half >> 8); }
public Half ReadHalf() { byte[] f = new byte[4]; byte[] h = this.ReadBytes(2); f[2] = h[0]; f[3] = h[1]; return(HalfHelper.SingleToHalf(EndianBitConverter.Little.ToSingle(f, 0))); //return Half.ToHalf(this.ReadBytes(2), 0); }
public static UInt16 fixVert(ushort uInt16) { //float normFloat = toInt(uInt16) / 256f / 128; //var bytes = BitConverter.GetBytes(normFloat); //return SingleToHalf(BitConverter.ToInt32(bytes,0)); float normFloat = byte2hexIntFracToFloat3(uInt16); Half halfFloat; halfFloat = HalfHelper.SingleToHalf(normFloat); return(halfFloat.value); }
// From GX-Encino Waves private void Butterfly() { int log2Size = Mathf.RoundToInt(Mathf.Log(mapSize, 2)); var butterflyData = new Vector2[mapSize * log2Size]; int offset = 1, numIterations = mapSize >> 1; for (int rowIndex = 0; rowIndex < log2Size; rowIndex++) { int rowOffset = rowIndex * mapSize; // Weights { int start = 0, end = 2 * offset; for (int iteration = 0; iteration < numIterations; iteration++) { float bigK = 0.0f; for (int K = start; K < end; K += 2) { float phase = 2.0f * Mathf.PI * bigK * numIterations / mapSize; float cos = Mathf.Cos(phase); float sin = Mathf.Sin(phase); butterflyData[rowOffset + K / 2].x = cos; butterflyData[rowOffset + K / 2].y = -sin; butterflyData[rowOffset + K / 2 + offset].x = -cos; butterflyData[rowOffset + K / 2 + offset].y = sin; bigK += 1.0f; } start += 4 * offset; end = start + 2 * offset; } } numIterations >>= 1; offset <<= 1; } var butterflyBytes = new byte[butterflyData.Length * sizeof(ushort) * 2]; for (uint i = 0; i < butterflyData.Length; i++) { uint byteOffset = i * sizeof(ushort) * 2; HalfHelper.SingleToHalf(butterflyData[i].x, butterflyBytes, byteOffset); HalfHelper.SingleToHalf(butterflyData[i].y, butterflyBytes, byteOffset + sizeof(ushort)); } texButterfly = new Texture2D(mapSize, log2Size, TextureFormat.RGHalf, false); texButterfly.LoadRawTextureData(butterflyBytes); texButterfly.Apply(false, true); }
DataStream_p3s_c4b_t2s Fix_p3f_c4b_t2s(DataStream_p3f_c4b_t2s p3f_c4b_t2s) { DataStream_p3s_c4b_t2s p3s_c4b_t2s = new DataStream_p3s_c4b_t2s(); for (int i = 0; i < p3f_c4b_t2s.p3f_c4b_t2sElem.Count; i++) { DataStream_p3s_c4b_t2s_Elem elem = new DataStream_p3s_c4b_t2s_Elem(); elem.bgra = p3f_c4b_t2s.p3f_c4b_t2sElem[i].bgra; elem.uv = p3f_c4b_t2s.p3f_c4b_t2sElem[i].uv; elem.pos[0] = HalfHelper.SingleToHalf(p3f_c4b_t2s.p3f_c4b_t2sElem[i].pos[0]).value; elem.pos[1] = HalfHelper.SingleToHalf(p3f_c4b_t2s.p3f_c4b_t2sElem[i].pos[1]).value; elem.pos[2] = HalfHelper.SingleToHalf(p3f_c4b_t2s.p3f_c4b_t2sElem[i].pos[2]).value; elem.pos[3] = HalfHelper.SingleToHalf(1.0f).value; p3s_c4b_t2s.p3s_c4b_t2sElem.Add(elem); } return(p3s_c4b_t2s); }
public Voxel(float density = -1.0f) { _densityHalf = HalfHelper.SingleToHalf(density); }
void OnEnable() { shaderSpectrum = (ComputeShader)Resources.Load("EncinoSpectrum", typeof(ComputeShader)); kernelSpectrumInit = shaderSpectrum.FindKernel("EncinoSpectrumInit"); kernelSpectrumUpdate = shaderSpectrum.FindKernel("EncinoSpectrumUpdate"); shaderFFT = (ComputeShader)Resources.Load("EncinoFFT", typeof(ComputeShader)); materialCombine = (Material)Resources.Load("EncinoCombine", typeof(Material)); bufferFFTTemp = new RenderTexture(size, size, 0, RenderTextureFormat.RGFloat); bufferFFTTemp.enableRandomWrite = true; bufferFFTTemp.Create(); bufferSpectrumH0 = new RenderTexture(size, size, 0, RenderTextureFormat.ARGBFloat); bufferSpectrumH0.enableRandomWrite = true; bufferSpectrumH0.Create(); bufferSpectrumH = CreateSpectrumUAV(); bufferSpectrumDx = CreateSpectrumUAV(); bufferSpectrumDy = CreateSpectrumUAV(); bufferHFinal = CreateFinalTexture(); bufferDxFinal = CreateFinalTexture(); bufferDyFinal = CreateFinalTexture(); bufferDisplacement = CreateCombinedTexture(); bufferGradientFold = CreateCombinedTexture(); // Butterfly { int log2Size = Mathf.RoundToInt(Mathf.Log(size, 2)); var butterflyData = new Vector2[size * log2Size]; int offset = 1, numIterations = size >> 1; for (int rowIndex = 0; rowIndex < log2Size; rowIndex++) { int rowOffset = rowIndex * size; // Weights { int start = 0, end = 2 * offset; for (int iteration = 0; iteration < numIterations; iteration++) { float bigK = 0.0f; for (int K = start; K < end; K += 2) { float phase = 2.0f * Mathf.PI * bigK * numIterations / size; float cos = Mathf.Cos(phase); float sin = Mathf.Sin(phase); butterflyData[rowOffset + K / 2].x = cos; butterflyData[rowOffset + K / 2].y = -sin; butterflyData[rowOffset + K / 2 + offset].x = -cos; butterflyData[rowOffset + K / 2 + offset].y = sin; bigK += 1.0f; } start += 4 * offset; end = start + 2 * offset; } } numIterations >>= 1; offset <<= 1; } var butterflyBytes = new byte[butterflyData.Length * sizeof(ushort) * 2]; for (uint i = 0; i < butterflyData.Length; i++) { uint byteOffset = i * sizeof(ushort) * 2; HalfHelper.SingleToHalf(butterflyData[i].x, butterflyBytes, byteOffset); HalfHelper.SingleToHalf(butterflyData[i].y, butterflyBytes, byteOffset + sizeof(ushort)); } texButterfly = new Texture2D(size, log2Size, TextureFormat.RGHalf, false); texButterfly.LoadRawTextureData(butterflyBytes); texButterfly.Apply(false, true); } // Kernel offset { int baseLog2Size = Mathf.RoundToInt(Mathf.Log(256, 2)); int log2Size = Mathf.RoundToInt(Mathf.Log(size, 2)); kernelFFTX = (log2Size - baseLog2Size) * 2; kernelFFTY = kernelFFTX + 1; } // Mesh { mesh = new Mesh(); mesh.name = "EncinoMesh"; float spacing = 1.0f / meshSize; var offset = new Vector3(-0.5f, 0.0f, -0.5f); var vertices = new List <Vector3>(); var uvs = new List <Vector2>(); for (int y = 0; y <= meshSize; y++) { for (int x = 0; x <= meshSize; x++) { vertices.Add(offset + new Vector3(x * spacing, 0.0f, y * spacing)); uvs.Add(new Vector2((float)x / meshSize, (float)y / meshSize)); } for (int x = 0; x < meshSize; x++) { if (y < meshSize) { vertices.Add(offset + new Vector3((x + 0.5f) * spacing, 0.0f, (y + 0.5f) * spacing)); uvs.Add(new Vector2((float)(x + 0.5f) / meshSize, (float)(y + 0.5f) / meshSize)); } } } var triangles = new List <int>(); for (int y = 0; y < meshSize; y++) { for (int x = 0; x < meshSize; x++) { var i0 = y * (meshSize * 2 + 1) + x; var i1 = i0 + 1; var i2 = i0 + (meshSize * 2) + 1; var i3 = i2 + 1; var ic = i0 + meshSize + 1; triangles.Add(i1); triangles.Add(i0); triangles.Add(ic); triangles.Add(i1); triangles.Add(ic); triangles.Add(i3); triangles.Add(ic); triangles.Add(i2); triangles.Add(i3); triangles.Add(i0); triangles.Add(i2); triangles.Add(ic); } } mesh.vertices = vertices.ToArray(); mesh.uv = uvs.ToArray(); mesh.triangles = triangles.ToArray(); mesh.UploadMeshData(false); mesh.RecalculateNormals(); } }
/// <summary> /// Read UVVector2 from file as floats. /// </summary> /// <param name="reader"></param> public void ReadFromFile(BinaryReader reader) { X = HalfHelper.SingleToHalf(reader.ReadSingle()); Y = HalfHelper.SingleToHalf(reader.ReadSingle()); }