Gregory Igehy

Dancing at hemisphere coordinate

Notes of Ray Trace SDK

Notes of Marshal in C#

Notes of Gyro in Unity

Notes of float texture format in Unity

Notes of Oculus Unity Integration

Notes of Galaxy S7 edge ( sm-g935fd )

  • Operating system
    • Original: Android 6.0 Marshmallow
    • Current: Android 7.1.1 Nougat (some countries)
  • Soc
  • CPU
    • Exynos: Octa-core (4x2.3 GHz Mongoose & 4x1.6 GHz Cortex-A53)
    • ( Snapdragon: Quad-core (2x2.15 GHz Kryo & 2x1.6 GHz Kryo) )
  • GPU
    • Exynos: Mali-T880 MP12, 650 MHz 265.2
    • ( Qualcomm Snapdragon : Adreno 530, 510~624 MHz, 07.4~498.5 GFLOPS )
  • Memory
    • 4 GB LPDDR4 RAM
  • Storage
    • 32 GB UFS 2.0
  • Battery
    • S7 Edge: 3,600 mAh
  • Display
    • S7 Edge: 5.5 in (140 mm) 210 ppcm (534 ppi), Quad HD Super AMOLED 2560×1440 pixel resolution

Notes of Agisoft Photscan

Notes of VR Player types in Unity

Stereo Display (non head-mounted) uses the directx api to submit left / right images for stereo monitors / tv displays. The advantage of using this over the automatic Nvidia 3d vision mode is that there are additional paramters that you can tweak in your game for optimal 3d depth. An additional parameter on the camera is functional https://docs.unity3d.com/ScriptReference/Camera-stereoConvergence.html to control the convergence plane since it won't be infinity. You can also change https://docs.unity3d.com/ScriptReference/Camera-stereoSeparation.html. You might want to tweak these for UIs etc.

As for Split Stereo Display (non head-mounted), this is actually our internal debug stereo renderer that we run all of our graphics tests against. It runs the whole stereoscopic rendering pipeline which would normally either output to the HMD SDKs or DX API or whatever, but instead we just render directly to the screen left / right stereo pairs. We didn't intentionally hide it, but I guess we didn't really document it either :) We'll make that happen.

Notes of Unity Pro Builder



日本語

Notes of ScreenCapture

ScreenToGif

Unity Screen recording

Notes of Gear VR in Unity

日本語

Notes of AR in Unity

Vuforia Manual

Unity + Vuforia

Vuforia 6.0, Unity 5.4
Vuforia 5, Unity 3D 5.x
Unity 5.3.5f1
古め
Mac, Vuforia 4.0
Mac
Unity 4.2
OLD : Qualcomm Vuforia
画像のリンク切れ
Tips

Unity + ARToolkit

Unity AR

Notes of humanoid animation in Unity

Notes of VR rendering

VR Renderer

Notes of Managed plugin for Unity

Notes of Unity and .NET

Marshaling Float array data between C++ and C# in Unity

From C++ to C# in Unity

//------------------------------------------------------------
// Unlicense 2.0 ( http://unlicense.org )
//------------------------------------------------------------

//------------------------------------------------------------
// C++ (DLL)
float* p_FloatData = nullptr;

extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API
AllocFloatArray( int array_length )
{
    p_FloatData = new float[ array_length ];
}


extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API
GetFloatPointer( float** pp_float )
{
    (* pp_float ) = p_FloatData;
}


extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API
FreeFloatArray()
{
    delete [] p_FloatData;
}

//------------------------------------------------------------
// C# 
using UnityEngine;
using UnityEngine.Assertions;

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public class TestPlugin : MonoBehaviour
{
    [DllImport ("MyPlugin")]
    protected static extern void AllocFloatArray( int array_length );

    [DllImport ("MyPlugin")]
    protected static extern void GetFloatPointer( ref IntPtr p_float );

    [DllImport ("MyPlugin")]
    protected static extern void FreeFloatArray();

    void Start()
    {
        int array_length = 10;
        
        AllocFloatArray( array_length );

        IntPtr p_src_float_data = IntPtr.Zero;
        GetFloatPointer( ref p_src_float_data );

        float[] dst_float_array = new float[ array_length ];
        Marshal.Copy( p_src_float_data, dst_float_array, 0, array_length );

        FreeFloatArray();

        for (int index = 0; index < array_length; index++ )
        {
            Debug.LogFormat( "float[{0}] = {1}", index, dst_float_array[ index ] );
        }        
    }
};

From C# to C++ in Unity

//------------------------------------------------------------
// Unlicense 2.0 ( http://unlicense.org )
//------------------------------------------------------------

//------------------------------------------------------------
// C++ (DLL)
extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API
SetFloatArray( float* float_array, int array_length )
{
    for ( int index = 0; index < array_length; ++index )
    {
       float value = float_array[ index ];
       printf( "float[%d] = %f\n", index, value );
    }
}

//------------------------------------------------------------
// C#
using UnityEngine;
using UnityEngine.Assertions;

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public class TestPlugin : MonoBehaviour
{
    [DllImport ("MyPlugin")]
    protected static extern void SetFloatArray( ref IntPtr p_float, int array_length );

    void Start()
    {
        int array_length = 10;

        float[] input_float_array = new float[ array_length ];
        for ( int index = 0; index < float_array.Length; ++index )
        {
           input_float_array[ index ] = (float)( index );
        }


        IntPtr p_float_array = Marshal.AllocHGlobal( array_length * sizeof( float ) );
        Marshal.Copy( float_array, 0, p_float_array, float_array_length );

        SetFloatArray( p_float_array, array_length );

        Marshal.FreeHGlobal( p_float_array );
     }
  }
//------------------------------------------------------------