├── .gitignore ├── FBOPlugin ├── FBOPlugin.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata └── FBOPlugin │ ├── FBOPlugin-Prefix.pch │ ├── FBOPlugin.h │ └── FBOPlugin.mm ├── LICENSE.md ├── README.md ├── Unity3Demo ├── Assets │ ├── Materials.meta │ ├── Materials │ │ ├── FBO Material Transparent.mat │ │ ├── FBO Material Transparent.mat.meta │ │ ├── FBO Material.mat │ │ └── FBO Material.mat.meta │ ├── Models.meta │ ├── Models │ │ ├── Robot Kyle.meta │ │ └── Robot Kyle │ │ │ ├── Materials.meta │ │ │ ├── Materials │ │ │ ├── Robot_Color.mat │ │ │ └── Robot_Color.mat.meta │ │ │ ├── Model.meta │ │ │ ├── Model │ │ │ ├── Robot Kyle.fbx │ │ │ └── Robot Kyle.fbx.meta │ │ │ ├── Textures.meta │ │ │ └── Textures │ │ │ ├── Robot_Color.tga │ │ │ ├── Robot_Color.tga.meta │ │ │ ├── Robot_Normal.tga │ │ │ └── Robot_Normal.tga.meta │ ├── Plugins.meta │ ├── Plugins │ │ ├── iOS.meta │ │ └── iOS │ │ │ ├── FBOPlugin.h │ │ │ ├── FBOPlugin.h.meta │ │ │ ├── FBOPlugin.mm │ │ │ └── FBOPlugin.mm.meta │ ├── Scenes.meta │ ├── Scenes │ │ ├── Test Scene.unity │ │ └── Test Scene.unity.meta │ ├── Scripts.meta │ └── Scripts │ │ ├── AxisRotate.cs │ │ ├── AxisRotate.cs.meta │ │ ├── FBOPlugin.cs │ │ ├── FBOPlugin.cs.meta │ │ ├── FBOTest.cs │ │ └── FBOTest.cs.meta └── ProjectSettings │ ├── AudioManager.asset │ ├── DynamicsManager.asset │ ├── EditorBuildSettings.asset │ ├── EditorSettings.asset │ ├── InputManager.asset │ ├── NavMeshLayers.asset │ ├── NetworkManager.asset │ ├── ProjectSettings.asset │ ├── QualitySettings.asset │ ├── TagManager.asset │ └── TimeManager.asset └── Unity4Demo ├── Assets ├── Materials.meta ├── Materials │ ├── FBO Material Transparent.mat │ ├── FBO Material Transparent.mat.meta │ ├── FBO Material.mat │ └── FBO Material.mat.meta ├── Models.meta ├── Models │ ├── Robot Kyle.meta │ └── Robot Kyle │ │ ├── Materials.meta │ │ ├── Materials │ │ ├── Robot_Color.mat │ │ └── Robot_Color.mat.meta │ │ ├── Model.meta │ │ ├── Model │ │ ├── Robot Kyle.fbx │ │ └── Robot Kyle.fbx.meta │ │ ├── Textures.meta │ │ └── Textures │ │ ├── Robot_Color.tga │ │ ├── Robot_Color.tga.meta │ │ ├── Robot_Normal.tga │ │ └── Robot_Normal.tga.meta ├── Plugins.meta ├── Plugins │ ├── iOS.meta │ └── iOS │ │ ├── FBOPlugin.h │ │ ├── FBOPlugin.h.meta │ │ ├── FBOPlugin.mm │ │ └── FBOPlugin.mm.meta ├── Scenes.meta ├── Scenes │ ├── Test Scene.unity │ └── Test Scene.unity.meta ├── Scripts.meta └── Scripts │ ├── AxisRotate.cs │ ├── AxisRotate.cs.meta │ ├── FBOPlugin.cs │ ├── FBOPlugin.cs.meta │ ├── FBOTest.cs │ └── FBOTest.cs.meta └── ProjectSettings ├── AudioManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── NavMeshLayers.asset ├── NetworkManager.asset ├── ProjectSettings.asset ├── QualitySettings.asset ├── TagManager.asset └── TimeManager.asset /.gitignore: -------------------------------------------------------------------------------- 1 | FBOPlugin/FBOPlugin.xcodeproj/project.xcworkspace/xcuserdata 2 | FBOPlugin/FBOPlugin.xcodeproj/xcuserdata 3 | Unity4Demo/Assembly-CSharp.csproj 4 | Unity4Demo/Assembly-CSharp.pidb 5 | Unity4Demo/Assembly-CSharp-vs.csproj 6 | Unity4Demo/Temp 7 | Unity4Demo/Unity4Demo.userprefs 8 | Unity4Demo/UnityFBO-csharp.sln 9 | Unity4Demo/UnityFBO.sln 10 | Unity4Demo/UnityFBO.userprefs 11 | Unity4Demo/Unity4Demo-csharp.sln 12 | Unity4Demo/Unity4Demo.sln 13 | Unity4Demo/ios 14 | Unity3Demo/ios 15 | Unity3Demo/Library 16 | Unity3Demo/Temp 17 | Unity4Demo/Library 18 | -------------------------------------------------------------------------------- /FBOPlugin/FBOPlugin.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | C4F5772F17E34B7900CF67C2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4F5772E17E34B7900CF67C2 /* Foundation.framework */; }; 11 | C4F5773417E34B7900CF67C2 /* FBOPlugin.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C4F5773317E34B7900CF67C2 /* FBOPlugin.h */; }; 12 | C4F5773617E34B7900CF67C2 /* FBOPlugin.mm in Sources */ = {isa = PBXBuildFile; fileRef = C4F5773517E34B7900CF67C2 /* FBOPlugin.mm */; }; 13 | C4F5773D17E34D3400CF67C2 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4F5773C17E34D3400CF67C2 /* OpenGLES.framework */; }; 14 | /* End PBXBuildFile section */ 15 | 16 | /* Begin PBXCopyFilesBuildPhase section */ 17 | C4F5772917E34B7900CF67C2 /* CopyFiles */ = { 18 | isa = PBXCopyFilesBuildPhase; 19 | buildActionMask = 2147483647; 20 | dstPath = "include/${PRODUCT_NAME}"; 21 | dstSubfolderSpec = 16; 22 | files = ( 23 | C4F5773417E34B7900CF67C2 /* FBOPlugin.h in CopyFiles */, 24 | ); 25 | runOnlyForDeploymentPostprocessing = 0; 26 | }; 27 | /* End PBXCopyFilesBuildPhase section */ 28 | 29 | /* Begin PBXFileReference section */ 30 | C4F5772B17E34B7900CF67C2 /* libFBOPlugin.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libFBOPlugin.a; sourceTree = BUILT_PRODUCTS_DIR; }; 31 | C4F5772E17E34B7900CF67C2 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 32 | C4F5773217E34B7900CF67C2 /* FBOPlugin-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FBOPlugin-Prefix.pch"; sourceTree = ""; }; 33 | C4F5773317E34B7900CF67C2 /* FBOPlugin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBOPlugin.h; sourceTree = ""; }; 34 | C4F5773517E34B7900CF67C2 /* FBOPlugin.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FBOPlugin.mm; sourceTree = ""; }; 35 | C4F5773C17E34D3400CF67C2 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; 36 | /* End PBXFileReference section */ 37 | 38 | /* Begin PBXFrameworksBuildPhase section */ 39 | C4F5772817E34B7900CF67C2 /* Frameworks */ = { 40 | isa = PBXFrameworksBuildPhase; 41 | buildActionMask = 2147483647; 42 | files = ( 43 | C4F5773D17E34D3400CF67C2 /* OpenGLES.framework in Frameworks */, 44 | C4F5772F17E34B7900CF67C2 /* Foundation.framework in Frameworks */, 45 | ); 46 | runOnlyForDeploymentPostprocessing = 0; 47 | }; 48 | /* End PBXFrameworksBuildPhase section */ 49 | 50 | /* Begin PBXGroup section */ 51 | C4F5772217E34B7900CF67C2 = { 52 | isa = PBXGroup; 53 | children = ( 54 | C4F5773017E34B7900CF67C2 /* FBOPlugin */, 55 | C4F5772D17E34B7900CF67C2 /* Frameworks */, 56 | C4F5772C17E34B7900CF67C2 /* Products */, 57 | ); 58 | sourceTree = ""; 59 | }; 60 | C4F5772C17E34B7900CF67C2 /* Products */ = { 61 | isa = PBXGroup; 62 | children = ( 63 | C4F5772B17E34B7900CF67C2 /* libFBOPlugin.a */, 64 | ); 65 | name = Products; 66 | sourceTree = ""; 67 | }; 68 | C4F5772D17E34B7900CF67C2 /* Frameworks */ = { 69 | isa = PBXGroup; 70 | children = ( 71 | C4F5773C17E34D3400CF67C2 /* OpenGLES.framework */, 72 | C4F5772E17E34B7900CF67C2 /* Foundation.framework */, 73 | ); 74 | name = Frameworks; 75 | sourceTree = ""; 76 | }; 77 | C4F5773017E34B7900CF67C2 /* FBOPlugin */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | C4F5773317E34B7900CF67C2 /* FBOPlugin.h */, 81 | C4F5773517E34B7900CF67C2 /* FBOPlugin.mm */, 82 | C4F5773117E34B7900CF67C2 /* Supporting Files */, 83 | ); 84 | path = FBOPlugin; 85 | sourceTree = ""; 86 | }; 87 | C4F5773117E34B7900CF67C2 /* Supporting Files */ = { 88 | isa = PBXGroup; 89 | children = ( 90 | C4F5773217E34B7900CF67C2 /* FBOPlugin-Prefix.pch */, 91 | ); 92 | name = "Supporting Files"; 93 | sourceTree = ""; 94 | }; 95 | /* End PBXGroup section */ 96 | 97 | /* Begin PBXNativeTarget section */ 98 | C4F5772A17E34B7900CF67C2 /* FBOPlugin */ = { 99 | isa = PBXNativeTarget; 100 | buildConfigurationList = C4F5773917E34B7900CF67C2 /* Build configuration list for PBXNativeTarget "FBOPlugin" */; 101 | buildPhases = ( 102 | C4F5772717E34B7900CF67C2 /* Sources */, 103 | C4F5772817E34B7900CF67C2 /* Frameworks */, 104 | C4F5772917E34B7900CF67C2 /* CopyFiles */, 105 | C4F5773E17E357D800CF67C2 /* ShellScript */, 106 | ); 107 | buildRules = ( 108 | ); 109 | dependencies = ( 110 | ); 111 | name = FBOPlugin; 112 | productName = FBOPlugin; 113 | productReference = C4F5772B17E34B7900CF67C2 /* libFBOPlugin.a */; 114 | productType = "com.apple.product-type.library.static"; 115 | }; 116 | /* End PBXNativeTarget section */ 117 | 118 | /* Begin PBXProject section */ 119 | C4F5772317E34B7900CF67C2 /* Project object */ = { 120 | isa = PBXProject; 121 | attributes = { 122 | LastUpgradeCheck = 0460; 123 | ORGANIZATIONNAME = "Egomotion Limited"; 124 | }; 125 | buildConfigurationList = C4F5772617E34B7900CF67C2 /* Build configuration list for PBXProject "FBOPlugin" */; 126 | compatibilityVersion = "Xcode 3.2"; 127 | developmentRegion = English; 128 | hasScannedForEncodings = 0; 129 | knownRegions = ( 130 | en, 131 | ); 132 | mainGroup = C4F5772217E34B7900CF67C2; 133 | productRefGroup = C4F5772C17E34B7900CF67C2 /* Products */; 134 | projectDirPath = ""; 135 | projectRoot = ""; 136 | targets = ( 137 | C4F5772A17E34B7900CF67C2 /* FBOPlugin */, 138 | ); 139 | }; 140 | /* End PBXProject section */ 141 | 142 | /* Begin PBXShellScriptBuildPhase section */ 143 | C4F5773E17E357D800CF67C2 /* ShellScript */ = { 144 | isa = PBXShellScriptBuildPhase; 145 | buildActionMask = 2147483647; 146 | files = ( 147 | ); 148 | inputPaths = ( 149 | ); 150 | outputPaths = ( 151 | ); 152 | runOnlyForDeploymentPostprocessing = 0; 153 | shellPath = /bin/sh; 154 | shellScript = "cp $SRCROOT/FBOPlugin/FBOPlugin.{h,mm} $SRCROOT/../Unity4Demo/Assets/Plugins/iOS\n\ncp $SRCROOT/FBOPlugin/FBOPlugin.{h,mm} $SRCROOT/../Unity3Demo/Assets/Plugins/iOS"; 155 | }; 156 | /* End PBXShellScriptBuildPhase section */ 157 | 158 | /* Begin PBXSourcesBuildPhase section */ 159 | C4F5772717E34B7900CF67C2 /* Sources */ = { 160 | isa = PBXSourcesBuildPhase; 161 | buildActionMask = 2147483647; 162 | files = ( 163 | C4F5773617E34B7900CF67C2 /* FBOPlugin.mm in Sources */, 164 | ); 165 | runOnlyForDeploymentPostprocessing = 0; 166 | }; 167 | /* End PBXSourcesBuildPhase section */ 168 | 169 | /* Begin XCBuildConfiguration section */ 170 | C4F5773717E34B7900CF67C2 /* Debug */ = { 171 | isa = XCBuildConfiguration; 172 | buildSettings = { 173 | ALWAYS_SEARCH_USER_PATHS = NO; 174 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 175 | CLANG_CXX_LIBRARY = "libc++"; 176 | CLANG_ENABLE_OBJC_ARC = YES; 177 | CLANG_WARN_CONSTANT_CONVERSION = YES; 178 | CLANG_WARN_EMPTY_BODY = YES; 179 | CLANG_WARN_ENUM_CONVERSION = YES; 180 | CLANG_WARN_INT_CONVERSION = YES; 181 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 182 | COPY_PHASE_STRIP = NO; 183 | GCC_C_LANGUAGE_STANDARD = gnu99; 184 | GCC_DYNAMIC_NO_PIC = NO; 185 | GCC_OPTIMIZATION_LEVEL = 0; 186 | GCC_PREPROCESSOR_DEFINITIONS = ( 187 | "DEBUG=1", 188 | "$(inherited)", 189 | ); 190 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 191 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 192 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 193 | GCC_WARN_UNUSED_VARIABLE = YES; 194 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 195 | ONLY_ACTIVE_ARCH = YES; 196 | SDKROOT = iphoneos; 197 | }; 198 | name = Debug; 199 | }; 200 | C4F5773817E34B7900CF67C2 /* Release */ = { 201 | isa = XCBuildConfiguration; 202 | buildSettings = { 203 | ALWAYS_SEARCH_USER_PATHS = NO; 204 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 205 | CLANG_CXX_LIBRARY = "libc++"; 206 | CLANG_ENABLE_OBJC_ARC = YES; 207 | CLANG_WARN_CONSTANT_CONVERSION = YES; 208 | CLANG_WARN_EMPTY_BODY = YES; 209 | CLANG_WARN_ENUM_CONVERSION = YES; 210 | CLANG_WARN_INT_CONVERSION = YES; 211 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 212 | COPY_PHASE_STRIP = YES; 213 | GCC_C_LANGUAGE_STANDARD = gnu99; 214 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 215 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 216 | GCC_WARN_UNUSED_VARIABLE = YES; 217 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 218 | SDKROOT = iphoneos; 219 | VALIDATE_PRODUCT = YES; 220 | }; 221 | name = Release; 222 | }; 223 | C4F5773A17E34B7900CF67C2 /* Debug */ = { 224 | isa = XCBuildConfiguration; 225 | buildSettings = { 226 | DSTROOT = /tmp/FBOPlugin.dst; 227 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 228 | GCC_PREFIX_HEADER = "FBOPlugin/FBOPlugin-Prefix.pch"; 229 | OTHER_LDFLAGS = "-ObjC"; 230 | PRODUCT_NAME = "$(TARGET_NAME)"; 231 | SKIP_INSTALL = YES; 232 | }; 233 | name = Debug; 234 | }; 235 | C4F5773B17E34B7900CF67C2 /* Release */ = { 236 | isa = XCBuildConfiguration; 237 | buildSettings = { 238 | DSTROOT = /tmp/FBOPlugin.dst; 239 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 240 | GCC_PREFIX_HEADER = "FBOPlugin/FBOPlugin-Prefix.pch"; 241 | OTHER_LDFLAGS = "-ObjC"; 242 | PRODUCT_NAME = "$(TARGET_NAME)"; 243 | SKIP_INSTALL = YES; 244 | }; 245 | name = Release; 246 | }; 247 | /* End XCBuildConfiguration section */ 248 | 249 | /* Begin XCConfigurationList section */ 250 | C4F5772617E34B7900CF67C2 /* Build configuration list for PBXProject "FBOPlugin" */ = { 251 | isa = XCConfigurationList; 252 | buildConfigurations = ( 253 | C4F5773717E34B7900CF67C2 /* Debug */, 254 | C4F5773817E34B7900CF67C2 /* Release */, 255 | ); 256 | defaultConfigurationIsVisible = 0; 257 | defaultConfigurationName = Release; 258 | }; 259 | C4F5773917E34B7900CF67C2 /* Build configuration list for PBXNativeTarget "FBOPlugin" */ = { 260 | isa = XCConfigurationList; 261 | buildConfigurations = ( 262 | C4F5773A17E34B7900CF67C2 /* Debug */, 263 | C4F5773B17E34B7900CF67C2 /* Release */, 264 | ); 265 | defaultConfigurationIsVisible = 0; 266 | defaultConfigurationName = Release; 267 | }; 268 | /* End XCConfigurationList section */ 269 | }; 270 | rootObject = C4F5772317E34B7900CF67C2 /* Project object */; 271 | } 272 | -------------------------------------------------------------------------------- /FBOPlugin/FBOPlugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /FBOPlugin/FBOPlugin/FBOPlugin-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'FBOPlugin' target in the 'FBOPlugin' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #endif 8 | -------------------------------------------------------------------------------- /FBOPlugin/FBOPlugin/FBOPlugin.h: -------------------------------------------------------------------------------- 1 | // 2 | // FBOPlugin.h 3 | // FBOPlugin 4 | // 5 | // Created by Robert Castle on 13/09/2013. 6 | // Copyright (c) 2013 Egomotion Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /* 12 | * Interop functions. C# calls these. 13 | */ 14 | extern "C" 15 | { 16 | void InitializeTexture(int textureID); 17 | void UpdateTexture(float value); 18 | } 19 | 20 | /* 21 | * The main class that manages the FBO 22 | */ 23 | @interface FBOPlugin : NSObject 24 | 25 | + (id) shared; 26 | 27 | - (void) initializeTexture:(int)texture; 28 | - (void) updateTexture:(float)value; 29 | @end 30 | -------------------------------------------------------------------------------- /FBOPlugin/FBOPlugin/FBOPlugin.mm: -------------------------------------------------------------------------------- 1 | // 2 | // FBOPlugin.m 3 | // FBOPlugin 4 | // 5 | // Created by Robert Castle on 13/09/2013. 6 | // Copyright (c) 2013 Egomotion Limited. All rights reserved. 7 | // 8 | // This example shows how to make an OpenGL FBO, render content into it and 9 | // output it to a Unity Texture2D. 10 | // 11 | // There are a lot of comments and GL checks. You can strip them all, 12 | // but if you start tinkering it is very helpful to catch those GL errors as early 13 | // as possible to track them down. 14 | // 15 | 16 | #import "FBOPlugin.h" 17 | 18 | #import 19 | #import 20 | 21 | //Hard coded source texture sizes, also the FBO size. You can change this, and make it dynamic 22 | #define TEXTURE_WIDTH 8 23 | #define TEXTURE_HEIGHT 8 24 | 25 | 26 | #pragma mark - GL Debugging helpers 27 | 28 | #define ENABLE_GLES_DEBUG 1 29 | 30 | #if ENABLE_GLES_DEBUG 31 | void GLCheckError(const char* file, int line) 32 | { 33 | GLenum e = glGetError(); 34 | 35 | if( e ) 36 | { 37 | printf("OpenGLES error 0x%04X in %s:%i\n", e, file, line); 38 | } 39 | } 40 | 41 | #define GLESAssert() do { GLCheckError (__FILE__, __LINE__); } while(0) 42 | #define GLES_CHK(expr) do { {expr;} GLESAssert(); } while(0) 43 | #else 44 | #define GLESAssert() do { } while(0) 45 | #define GLES_CHK(expr) do { expr; } while(0) 46 | #endif 47 | 48 | #pragma mark - GL Attributes and Uniforms 49 | 50 | enum { 51 | ATTRIB_VERTEX, 52 | ATTRIB_TEXTUREPOSITON, 53 | NUM_ATTRIBUTES 54 | }; 55 | 56 | enum 57 | { 58 | UNIFORM_TEXTURE, 59 | NUM_UNIFORMS 60 | }; 61 | 62 | 63 | #pragma mark - Interop code 64 | 65 | void InitializeTexture(int textureID) 66 | { 67 | [[FBOPlugin shared] initializeTexture:textureID]; 68 | } 69 | 70 | void UpdateTexture(float value) 71 | { 72 | [[FBOPlugin shared] updateTexture:value]; 73 | } 74 | 75 | 76 | #pragma mark - The main singleton class 77 | 78 | @implementation FBOPlugin 79 | { 80 | GLuint _sourceTexture; // The source texture that is drawn into the FBO 81 | GLuint _unityTexture; // The texture ID from Unity 82 | GLuint _frameBuffer; // The framebuffer Object 83 | 84 | GLuint _program; // The shader program used to render our texture into the FBO 85 | GLint _uniforms[NUM_UNIFORMS]; // List of uniforms 86 | 87 | 88 | } 89 | 90 | /** 91 | * Create the singleton 92 | */ 93 | + (id) shared 94 | { 95 | static dispatch_once_t predicate; 96 | static FBOPlugin * instance = nil; 97 | dispatch_once(&predicate, ^{instance = [[self alloc] init];}); 98 | return instance; 99 | } 100 | 101 | /** 102 | * Call initializeTexture with a native texture ID to initialize the 103 | * FBO and attach the nuity texture to it as a render target 104 | */ 105 | - (void) initializeTexture:(int)texture 106 | { 107 | _unityTexture = texture; 108 | 109 | GLESAssert(); 110 | //Save the current state 111 | GLint previousFBO, previousRenderBuffer, previous_program; 112 | glGetIntegerv(GL_FRAMEBUFFER_BINDING, &previousFBO); 113 | glGetIntegerv(GL_RENDERBUFFER_BINDING, &previousRenderBuffer); 114 | glGetIntegerv(GL_CURRENT_PROGRAM, &previous_program); 115 | 116 | //create the FBO 117 | if ([self createFBO]) 118 | { 119 | //Render the source image into the FBO and update our Unity texture. 120 | [self updateTexture:0.0f]; 121 | } 122 | else 123 | { 124 | NSLog(@"FBO not created"); 125 | GLESAssert(); 126 | } 127 | 128 | //Restore the state 129 | glBindFramebuffer(GL_FRAMEBUFFER, previousFBO); 130 | glBindRenderbuffer(GL_RENDERBUFFER, previousRenderBuffer); 131 | glUseProgram(previous_program); 132 | } 133 | 134 | 135 | /** 136 | * updateTexture updates the source image and is associated texture 137 | * based on the float passed to it. 138 | * It then renders this to the FBO. 139 | * As the Unity texture is attached to the FBO as an output the rasterized 140 | * result from the FBO is written in to it. 141 | */ 142 | - (void) updateTexture:(float)value 143 | { 144 | GLESAssert(); 145 | 146 | //Save current state 147 | GLint previousFBO, previousRenderBuffer, previous_program; 148 | glGetIntegerv(GL_FRAMEBUFFER_BINDING, &previousFBO); 149 | glGetIntegerv(GL_RENDERBUFFER_BINDING, &previousRenderBuffer); 150 | glGetIntegerv(GL_CURRENT_PROGRAM, &previous_program); 151 | 152 | //Need to set up the FBO first 153 | if (!_frameBuffer) { 154 | NSLog(@"ERROR FBO not created"); 155 | return; 156 | } 157 | 158 | //Generate a new image and update source texture 159 | [self generateImage:value]; 160 | 161 | //Set up our FBO 162 | glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer); 163 | GLESAssert(); 164 | glViewport(0, 0, TEXTURE_WIDTH, TEXTURE_HEIGHT); 165 | GLESAssert(); 166 | glDisable(GL_BLEND); 167 | glDisable(GL_DEPTH_TEST); 168 | glDepthMask(GL_FALSE); 169 | glDisable(GL_CULL_FACE); 170 | glBindBuffer(GL_ARRAY_BUFFER, 0); 171 | glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 172 | glPolygonOffset(0.0f, 0.0f); 173 | glDisable(GL_POLYGON_OFFSET_FILL); 174 | GLESAssert(); 175 | 176 | //Load the shaders if we have not done so 177 | if (_program == 0) 178 | { 179 | if(![self loadShaders]) { 180 | NSLog(@"Failed to load shaders!"); 181 | } 182 | } 183 | 184 | //Set up the program 185 | GLES_CHK( glUseProgram(_program) ); 186 | GLES_CHK( glUniform1i(_uniforms[UNIFORM_TEXTURE], 0) ); 187 | 188 | //clear the scene 189 | GLES_CHK( glClearColor(0.0f, 0.0f, 0.0f, 1.0f) ); 190 | glClear(GL_COLOR_BUFFER_BIT); 191 | 192 | //Bind out source texture 193 | GLES_CHK( glActiveTexture(GL_TEXTURE0) ); 194 | GLES_CHK( glBindTexture(GL_TEXTURE_2D, _sourceTexture) ); 195 | 196 | //Our object to render 197 | static const GLfloat imageVertices[] = { 198 | -1.0f, -1.0f, 199 | 1.0f, -1.0f, 200 | -1.0f, 1.0f, 201 | 1.0f, 1.0f, 202 | }; 203 | 204 | //The object's texture coordinates 205 | static const GLfloat textureCoordinates[] = { 206 | 0.0f, 1.0f, 207 | 1.0f, 1.0f, 208 | 0.0f, 0.0f, 209 | 1.0f, 0.0f, 210 | }; 211 | 212 | // Update attribute values. 213 | GLES_CHK( glEnableVertexAttribArray(ATTRIB_VERTEX) ); 214 | GLES_CHK( glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, imageVertices) ); 215 | GLES_CHK( glEnableVertexAttribArray(ATTRIB_TEXTUREPOSITON) ); 216 | GLES_CHK( glVertexAttribPointer(ATTRIB_TEXTUREPOSITON, 2, GL_FLOAT, 0, 0, textureCoordinates) ); 217 | 218 | //Draw the quad 219 | GLES_CHK( glDrawArrays(GL_TRIANGLE_STRIP, 0, 4) ); 220 | 221 | //Reset everything 222 | GLES_CHK( glActiveTexture(GL_TEXTURE0) ); 223 | GLES_CHK( glBindTexture(GL_TEXTURE_2D, 0) ); 224 | GLES_CHK( glActiveTexture(GL_TEXTURE1) ); 225 | GLES_CHK( glBindTexture(GL_TEXTURE_2D, 0) ); 226 | GLES_CHK( glBindVertexArrayOES(0) ); 227 | GLES_CHK( glDisableVertexAttribArray(ATTRIB_VERTEX) ); 228 | GLES_CHK( glDisableVertexAttribArray(ATTRIB_TEXTUREPOSITON) ); 229 | 230 | //Restore ttate 231 | glBindFramebuffer(GL_FRAMEBUFFER, previousFBO); 232 | GLESAssert(); 233 | glBindRenderbuffer(GL_RENDERBUFFER, previousRenderBuffer); 234 | GLESAssert(); 235 | glUseProgram(previous_program); 236 | GLESAssert(); 237 | } 238 | 239 | /** 240 | * Create the Framebuffer Object. 241 | * If the FBO already exists, then the unity texture is reattached. 242 | * This allows you to change the texture target if needed. 243 | */ 244 | - (BOOL) createFBO 245 | { 246 | if (_unityTexture <= 0) { 247 | NSLog(@"Unity Texture not set"); 248 | return NO; 249 | } 250 | 251 | //Create a new framebuffer if needed 252 | if(!_frameBuffer) 253 | { 254 | glGenFramebuffers(1, &_frameBuffer); 255 | GLESAssert(); 256 | } 257 | 258 | //bind FBO 259 | glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer); 260 | GLESAssert(); 261 | 262 | //bind the output texture and attach it 263 | glBindTexture(GL_TEXTURE_2D, _unityTexture); 264 | GLESAssert(); 265 | glTexImage2D(GL_TEXTURE_2D, 266 | 0, 267 | GL_RGBA, 268 | TEXTURE_WIDTH, 269 | TEXTURE_HEIGHT, 270 | 0, 271 | GL_RGBA, 272 | GL_UNSIGNED_BYTE, 273 | 0); 274 | GLESAssert(); 275 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 276 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 277 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 278 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 279 | GLESAssert(); 280 | 281 | glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0); 282 | GLESAssert(); 283 | glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _unityTexture, 0); 284 | GLESAssert(); 285 | 286 | //Did it work? 287 | GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 288 | 289 | if(status != GL_FRAMEBUFFER_COMPLETE) 290 | { 291 | NSLog(@"ERROR: UNITY PLUGIN CANNOT MAKE VALID FBO ATTACHMENT FROM UNITY TEXTURE ID"); 292 | return NO; 293 | } 294 | 295 | GLESAssert(); 296 | 297 | return YES; 298 | } 299 | 300 | /** 301 | * Destroy the FBO. 302 | * We don't actually call this in this example, as we never need to. 303 | * But this is how to do it. 304 | */ 305 | - (void) teardownFBO 306 | { 307 | if (_frameBuffer != 0) { 308 | glDeleteFramebuffers(1, &_frameBuffer); 309 | _frameBuffer = 0; 310 | } 311 | } 312 | 313 | /** 314 | * This silly function creates an image based on the 0-1 float value passed to it. 315 | * It then uploads it to the GPU as a texture. 316 | * This texture will be later rendered to the FBO 317 | */ 318 | - (void) generateImage:(float)value 319 | { 320 | if (value < 0.0f) value = 0.0f; 321 | if (value > 1.0f) value = 1.0f; 322 | 323 | GLubyte image[TEXTURE_HEIGHT][TEXTURE_WIDTH][3]; 324 | 325 | for (int row = 0; row < TEXTURE_HEIGHT; row++) 326 | { 327 | for (int col = 0; col < TEXTURE_WIDTH; col++) 328 | { 329 | GLubyte r, g, b; 330 | //Top 331 | if (row < TEXTURE_HEIGHT/2) 332 | { 333 | //Left 334 | if (col < TEXTURE_WIDTH/2) { 335 | r = (GLubyte)(MAX(value, 0.1f)* 255.0f); 336 | g = b = 0; 337 | } 338 | //Right 339 | else { 340 | g = (GLubyte)(MAX((1.0f - value), 0.2f) * 255.0f); 341 | r = b = 0; 342 | } 343 | } 344 | //Bottom 345 | else 346 | { 347 | //Left 348 | if (col < TEXTURE_WIDTH/2) { 349 | b = (GLubyte)(0.5f * value * 255.0f) + 50; 350 | r = g = 0; 351 | } 352 | //Right 353 | else { 354 | r = g = b = (GLubyte)(value * 255.0f); 355 | } 356 | } 357 | 358 | //Set the pixels 359 | image[row][col][0] = r; 360 | image[row][col][1] = g; 361 | image[row][col][2] = b; 362 | } 363 | } 364 | 365 | //Create the texture if it does not exist yet 366 | if (_sourceTexture <= 0) 367 | { 368 | glGenTextures(1, &_sourceTexture); 369 | glBindTexture(GL_TEXTURE_2D, _sourceTexture); 370 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 371 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 372 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 373 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 374 | } 375 | else { 376 | // Otherwise just bind it 377 | glBindTexture(GL_TEXTURE_2D, _sourceTexture); 378 | } 379 | 380 | //Upload the image data 381 | glTexImage2D(GL_TEXTURE_2D, 382 | 0, 383 | GL_RGB, 384 | TEXTURE_WIDTH, 385 | TEXTURE_HEIGHT, 386 | 0, 387 | GL_RGB, 388 | GL_UNSIGNED_BYTE, 389 | image); 390 | } 391 | 392 | 393 | #pragma mark - OpenGL ES 2 shader compilation 394 | /* 395 | Everything below was just ripped from an Apple example project. 396 | This is boilerplate stuff. It can be done better and more flexibly, 397 | but it serves its purpose for this demo. 398 | 399 | The key thing to note here is that the shaders are stored as embedded strings. 400 | You could pass the strings in yourself or load up files from the Resources folder. 401 | */ 402 | 403 | /** 404 | * Load up the basic passthrough shaders 405 | */ 406 | - (BOOL)loadShaders 407 | { 408 | glUseProgram(0); 409 | 410 | //shaders as embedded strings as we are making a library 411 | const GLchar vShaderStr[] = 412 | "attribute vec4 position; \n" 413 | "attribute mediump vec4 textureCoordinate; \n" 414 | "varying mediump vec2 coordinate; \n" 415 | "void main() \n" 416 | "{ \n" 417 | " gl_Position = position; \n" 418 | " coordinate = textureCoordinate.xy; \n" 419 | "}"; 420 | 421 | const GLchar fShaderStr[] = 422 | "varying highp vec2 coordinate; \n" 423 | "uniform sampler2D texture; \n" 424 | "void main() \n" 425 | "{ \n" 426 | " gl_FragColor = texture2D(texture, coordinate); \n" 427 | "}"; 428 | 429 | GLuint vertShader, fragShader; 430 | 431 | // Create shader program. 432 | _program = glCreateProgram(); 433 | 434 | // Create and compile vertex shader. 435 | if (![self compileShader:&vertShader type:GL_VERTEX_SHADER src:vShaderStr]) { 436 | NSLog(@"Failed to compile vertex shader"); 437 | return NO; 438 | } 439 | 440 | // Create and compile fragment shader. 441 | if (![self compileShader:&fragShader type:GL_FRAGMENT_SHADER src:fShaderStr]) { 442 | NSLog(@"Failed to compile fragment shader"); 443 | return NO; 444 | } 445 | 446 | // Attach vertex shader to _program. 447 | glAttachShader(_program, vertShader); 448 | 449 | // Attach fragment shader to _program. 450 | glAttachShader(_program, fragShader); 451 | 452 | 453 | // Bind attribute locations. 454 | // This needs to be done prior to linking. 455 | glBindAttribLocation(_program, ATTRIB_VERTEX, "position"); 456 | glBindAttribLocation(_program, ATTRIB_TEXTUREPOSITON, "textureCoordinate"); 457 | 458 | // Link program. 459 | if (![self linkProgram:_program]) { 460 | NSLog(@"Failed to link _program: %d", _program); 461 | 462 | if (vertShader) { 463 | glDeleteShader(vertShader); 464 | vertShader = 0; 465 | } 466 | if (fragShader) { 467 | glDeleteShader(fragShader); 468 | fragShader = 0; 469 | } 470 | if (_program) { 471 | glDeleteProgram(_program); 472 | _program = 0; 473 | } 474 | 475 | return NO; 476 | } 477 | 478 | // Get uniform locations. 479 | _uniforms[UNIFORM_TEXTURE] = glGetUniformLocation(_program, "texture"); 480 | 481 | 482 | // Release vertex and fragment shaders. 483 | if (vertShader) { 484 | glDetachShader(_program, vertShader); 485 | glDeleteShader(vertShader); 486 | } 487 | if (fragShader) { 488 | glDetachShader(_program, fragShader); 489 | glDeleteShader(fragShader); 490 | } 491 | 492 | return YES; 493 | } 494 | 495 | /** 496 | * Compile a shader 497 | */ 498 | - (BOOL)compileShader:(GLuint *)shader type:(GLenum)type src:(const GLchar *)source 499 | { 500 | GLint status; 501 | if (!source) { 502 | NSLog(@"Failed to load shader"); 503 | return NO; 504 | } 505 | 506 | *shader = glCreateShader(type); 507 | glShaderSource(*shader, 1, &source, NULL); 508 | glCompileShader(*shader); 509 | 510 | #if defined(DEBUG) 511 | GLint logLength; 512 | glGetShaderiv(*shader, GL_INFO_LOG_LENGTH, &logLength); 513 | if (logLength > 0) { 514 | GLchar *log = (GLchar *)malloc(logLength); 515 | glGetShaderInfoLog(*shader, logLength, &logLength, log); 516 | NSLog(@"Shader compile log:\n%s", log); 517 | free(log); 518 | } 519 | #endif 520 | 521 | glGetShaderiv(*shader, GL_COMPILE_STATUS, &status); 522 | if (status == 0) { 523 | glDeleteShader(*shader); 524 | return NO; 525 | } 526 | 527 | return YES; 528 | } 529 | 530 | /** 531 | * Link the program 532 | */ 533 | - (BOOL)linkProgram:(GLuint)prog 534 | { 535 | GLint status; 536 | glLinkProgram(prog); 537 | 538 | #if defined(DEBUG) 539 | GLint logLength; 540 | glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &logLength); 541 | if (logLength > 0) { 542 | GLchar *log = (GLchar *)malloc(logLength); 543 | glGetProgramInfoLog(prog, logLength, &logLength, log); 544 | NSLog(@"Program link log:\n%s", log); 545 | free(log); 546 | } 547 | #endif 548 | 549 | glGetProgramiv(prog, GL_LINK_STATUS, &status); 550 | if (status == 0) { 551 | return NO; 552 | } 553 | 554 | return YES; 555 | } 556 | 557 | /** 558 | * Check that the program is valid. 559 | */ 560 | - (BOOL)validateProgram:(GLuint)prog 561 | { 562 | GLint logLength, status; 563 | 564 | glValidateProgram(prog); 565 | glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &logLength); 566 | if (logLength > 0) { 567 | GLchar *log = (GLchar *)malloc(logLength); 568 | glGetProgramInfoLog(prog, logLength, &logLength, log); 569 | NSLog(@"Program validate log:\n%s", log); 570 | free(log); 571 | } 572 | 573 | glGetProgramiv(prog, GL_VALIDATE_STATUS, &status); 574 | if (status == 0) { 575 | return NO; 576 | } 577 | 578 | return YES; 579 | } 580 | 581 | 582 | @end 583 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 Egomotion Limited 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | UnityFBO 2 | ======== 3 | 4 | This project demonstrates how to make a native OpenGL Framebuffer object on iOS and pipe the resulting texture output to a Unity texture. 5 | 6 | The code is heavily commented, and littered with GL checks, so if you run into GL errors, you should be able to track them down. 7 | 8 | The example shows a native OpenGL texture being created and rendered to an FBO. The output from the FBO is rendered to a Unity texture. The Unity texture is then used in two different materials on two different objects in a scene. 9 | 10 | Each frame an update is called that changes the image that goes into the FBO, causing the resulting Unity Texture to animate. 11 | 12 | 13 | FBOPlugin 14 | ========== 15 | 16 | This is the Xcode project containing the plugin code. 17 | When you build this a post build script will copy the required files to the Unity 3 and 4 project files 18 | 19 | 20 | Unity3Demo 21 | ========== 22 | 23 | The Unity 3 version of the demo. 24 | 25 | Unity4Demo 26 | ========== 27 | 28 | The Unity 4 version of the demo. 29 | 30 | 31 | Both Unity demos are the same except that 3 uses a plane and 4 a quad. -------------------------------------------------------------------------------- /Unity3Demo/Assets/Materials.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 40fa8f855dc8049cbac1707bfb557622 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Materials/FBO Material Transparent.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 3 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: FBO Material Transparent 10 | m_Shader: {fileID: 30, guid: 0000000000000000e000000000000000, type: 0} 11 | m_SavedProperties: 12 | serializedVersion: 2 13 | m_TexEnvs: 14 | data: 15 | first: 16 | name: _MainTex 17 | second: 18 | m_Texture: {fileID: 0} 19 | m_Scale: {x: 1, y: 1} 20 | m_Offset: {x: 0, y: 0} 21 | m_Floats: 22 | data: 23 | first: 24 | name: _Shininess 25 | second: .699999988 26 | m_Colors: 27 | data: 28 | first: 29 | name: _Color 30 | second: {r: 1, g: 1, b: 1, a: .56078434} 31 | data: 32 | first: 33 | name: _SpecColor 34 | second: {r: 1, g: 1, b: 1, a: 0} 35 | data: 36 | first: 37 | name: _Emission 38 | second: {r: 0, g: 0, b: 0, a: 0} 39 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Materials/FBO Material Transparent.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 933a5a0bd9d434312a2d6fcb8197561e 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Materials/FBO Material.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 3 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: FBO Material 10 | m_Shader: {fileID: 10703, guid: 0000000000000000f000000000000000, type: 0} 11 | m_SavedProperties: 12 | serializedVersion: 2 13 | m_TexEnvs: 14 | data: 15 | first: 16 | name: _MainTex 17 | second: 18 | m_Texture: {fileID: 0} 19 | m_Scale: {x: 1, y: 1} 20 | m_Offset: {x: 0, y: 0} 21 | m_Floats: 22 | data: 23 | first: 24 | name: _Shininess 25 | second: .699999988 26 | m_Colors: 27 | data: 28 | first: 29 | name: _Color 30 | second: {r: 1, g: 1, b: 1, a: .576470613} 31 | data: 32 | first: 33 | name: _SpecColor 34 | second: {r: 1, g: 1, b: 1, a: 0} 35 | data: 36 | first: 37 | name: _Emission 38 | second: {r: 0, g: 0, b: 0, a: 0} 39 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Materials/FBO Material.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 50c076647d5b94f43915b7ea354372fa 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Models.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 08a221512c50c4335ae5b885f1f08b64 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Models/Robot Kyle.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c1f5409d7a55c4a778d47479f679c64b 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Models/Robot Kyle/Materials.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e5fd508c3e37c48299886fc24fff49c1 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Models/Robot Kyle/Materials/Robot_Color.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 3 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: Robot_Color 10 | m_Shader: {fileID: 10704, guid: 0000000000000000f000000000000000, type: 0} 11 | m_SavedProperties: 12 | serializedVersion: 2 13 | m_TexEnvs: 14 | data: 15 | first: 16 | name: _MainTex 17 | second: 18 | m_Texture: {fileID: 2800000, guid: 0a0e8af2869fa45f78e25460db578482, type: 1} 19 | m_Scale: {x: 1, y: 1} 20 | m_Offset: {x: 0, y: 0} 21 | data: 22 | first: 23 | name: _BumpMap 24 | second: 25 | m_Texture: {fileID: 2800000, guid: 94c473c9137744d7eabd829f1150da8d, type: 1} 26 | m_Scale: {x: 1, y: 1} 27 | m_Offset: {x: 0, y: 0} 28 | m_Floats: 29 | data: 30 | first: 31 | name: _Shininess 32 | second: .078125 33 | m_Colors: 34 | data: 35 | first: 36 | name: _Color 37 | second: {r: 1, g: 1, b: 1, a: 1} 38 | data: 39 | first: 40 | name: _SpecColor 41 | second: {r: .5, g: .5, b: .5, a: 1} 42 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Models/Robot Kyle/Materials/Robot_Color.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0aa851515cd3747d6b3b3e461199a2ed 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Models/Robot Kyle/Model.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7fed4106219f345ba8957ddcac79815a 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Models/Robot Kyle/Model/Robot Kyle.fbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertcastle/UnityFBO/bd7297a2a77d0b25e47df1f94560dd98f6204e95/Unity3Demo/Assets/Models/Robot Kyle/Model/Robot Kyle.fbx -------------------------------------------------------------------------------- /Unity3Demo/Assets/Models/Robot Kyle/Model/Robot Kyle.fbx.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 320b1c2af77554f99a1658df4a6d3d5c 3 | ModelImporter: 4 | fileIDToRecycleName: 5 | 100000: Head 6 | 100002: Hip 7 | 100004: Left_Ankle_Joint_01 8 | 100006: Left_Forearm_Joint_01 9 | 100008: Left_Index_Finger_Joint_01a 10 | 100010: Left_Index_Finger_Joint_01b 11 | 100012: Left_Index_Finger_Joint_01c 12 | 100014: Left_Knee_Joint_01 13 | 100016: Left_Middle_Finger_Joint_01a 14 | 100018: Left_Middle_Finger_Joint_01b 15 | 100020: Left_Middle_Finger_Joint_01c 16 | 100022: Left_Pinky_Finger_Joint_01a 17 | 100024: Left_Pinky_Finger_Joint_01b 18 | 100026: Left_Pinky_Finger_Joint_01c 19 | 100028: Left_Ring_Finger_Joint_01a 20 | 100030: Left_Ring_Finger_Joint_01b 21 | 100032: Left_Ring_Finger_Joint_01c 22 | 100034: Left_Shoulder_Joint_01 23 | 100036: Left_Thigh_Joint_01 24 | 100038: Left_Thumb_Joint_01a 25 | 100040: Left_Thumb_Joint_01b 26 | 100042: Left_Toe_Joint_01 27 | 100044: Left_Upper_Arm_Joint_01 28 | 100046: Left_Wrist_Joint_01 29 | 100048: Neck 30 | 100050: Ribs 31 | 100052: Right_Ankle_Joint_01 32 | 100054: Right_Forearm_Joint_01 33 | 100056: Right_Index_Finger_Joint_01a 34 | 100058: Right_Index_Finger_Joint_01b 35 | 100060: Right_Index_Finger_Joint_01c 36 | 100062: Right_Knee_Joint_01 37 | 100064: Right_Middle_Finger_Joint_01a 38 | 100066: Right_Middle_Finger_Joint_01b 39 | 100068: Right_Middle_Finger_Joint_01c 40 | 100070: Right_Pinky_Finger_Joint_01a 41 | 100072: Right_Pinky_Finger_Joint_01b 42 | 100074: Right_Pinky_Finger_Joint_01c 43 | 100076: Right_Ring_Finger_Joint_01a 44 | 100078: Right_Ring_Finger_Joint_01b 45 | 100080: Right_Ring_Finger_Joint_01c 46 | 100082: Right_Shoulder_Joint_01 47 | 100084: Right_Thigh_Joint_01 48 | 100086: Right_Thumb_Joint_01a 49 | 100088: Right_Thumb_Joint_01b 50 | 100090: Right_Toe_Joint_01 51 | 100092: Right_Upper_Arm_Joint_01 52 | 100094: Right_Wrist_Joint_01 53 | 100096: //RootNode 54 | 100098: Robot2 55 | 100100: Root 56 | 400000: Head 57 | 400002: Hip 58 | 400004: Left_Ankle_Joint_01 59 | 400006: Left_Forearm_Joint_01 60 | 400008: Left_Index_Finger_Joint_01a 61 | 400010: Left_Index_Finger_Joint_01b 62 | 400012: Left_Index_Finger_Joint_01c 63 | 400014: Left_Knee_Joint_01 64 | 400016: Left_Middle_Finger_Joint_01a 65 | 400018: Left_Middle_Finger_Joint_01b 66 | 400020: Left_Middle_Finger_Joint_01c 67 | 400022: Left_Pinky_Finger_Joint_01a 68 | 400024: Left_Pinky_Finger_Joint_01b 69 | 400026: Left_Pinky_Finger_Joint_01c 70 | 400028: Left_Ring_Finger_Joint_01a 71 | 400030: Left_Ring_Finger_Joint_01b 72 | 400032: Left_Ring_Finger_Joint_01c 73 | 400034: Left_Shoulder_Joint_01 74 | 400036: Left_Thigh_Joint_01 75 | 400038: Left_Thumb_Joint_01a 76 | 400040: Left_Thumb_Joint_01b 77 | 400042: Left_Toe_Joint_01 78 | 400044: Left_Upper_Arm_Joint_01 79 | 400046: Left_Wrist_Joint_01 80 | 400048: Neck 81 | 400050: Ribs 82 | 400052: Right_Ankle_Joint_01 83 | 400054: Right_Forearm_Joint_01 84 | 400056: Right_Index_Finger_Joint_01a 85 | 400058: Right_Index_Finger_Joint_01b 86 | 400060: Right_Index_Finger_Joint_01c 87 | 400062: Right_Knee_Joint_01 88 | 400064: Right_Middle_Finger_Joint_01a 89 | 400066: Right_Middle_Finger_Joint_01b 90 | 400068: Right_Middle_Finger_Joint_01c 91 | 400070: Right_Pinky_Finger_Joint_01a 92 | 400072: Right_Pinky_Finger_Joint_01b 93 | 400074: Right_Pinky_Finger_Joint_01c 94 | 400076: Right_Ring_Finger_Joint_01a 95 | 400078: Right_Ring_Finger_Joint_01b 96 | 400080: Right_Ring_Finger_Joint_01c 97 | 400082: Right_Shoulder_Joint_01 98 | 400084: Right_Thigh_Joint_01 99 | 400086: Right_Thumb_Joint_01a 100 | 400088: Right_Thumb_Joint_01b 101 | 400090: Right_Toe_Joint_01 102 | 400092: Right_Upper_Arm_Joint_01 103 | 400094: Right_Wrist_Joint_01 104 | 400096: //RootNode 105 | 400098: Robot2 106 | 400100: Root 107 | 4300000: Robot2 108 | 11100000: //RootNode 109 | 13700000: Robot2 110 | serializedVersion: 10 111 | materials: 112 | importMaterials: 1 113 | materialName: 0 114 | materialSearch: 1 115 | animations: 116 | generateAnimations: 3 117 | bakeSimulation: 0 118 | splitAnimations: 1 119 | animationCompression: 1 120 | animationRotationError: .5 121 | animationPositionError: .5 122 | animationScaleError: .5 123 | animationWrapMode: 0 124 | clipAnimations: [] 125 | meshes: 126 | lODScreenPercentages: [] 127 | globalScale: .00999999978 128 | meshCompression: 0 129 | addColliders: 0 130 | swapUVChannels: 0 131 | generateSecondaryUV: 0 132 | useFileUnits: 1 133 | optimizeMesh: 0 134 | secondaryUVAngleDistortion: 8 135 | secondaryUVAreaDistortion: 15.000001 136 | secondaryUVHardAngle: 88 137 | secondaryUVPackMargin: 4 138 | tangentSpace: 139 | normalSmoothAngle: 60 140 | splitTangentsAcrossUV: 1 141 | normalImportMode: 0 142 | tangentImportMode: 1 143 | textMetaNamesToFileIDs: 144 | //RootNode: 145 | data: 146 | first: 1 147 | second: 06870100 148 | data: 149 | first: 4 150 | second: e61a0600 151 | data: 152 | first: 111 153 | second: 625fa900 154 | Head: 155 | data: 156 | first: 1 157 | second: 62870100 158 | data: 159 | first: 4 160 | second: 421b0600 161 | Hip: 162 | data: 163 | first: 1 164 | second: 18870100 165 | data: 166 | first: 4 167 | second: f81a0600 168 | Left_Ankle_Joint_01: 169 | data: 170 | first: 1 171 | second: 12870100 172 | data: 173 | first: 4 174 | second: f21a0600 175 | Left_Forearm_Joint_01: 176 | data: 177 | first: 1 178 | second: 5c870100 179 | data: 180 | first: 4 181 | second: 3c1b0600 182 | Left_Index_Finger_Joint_01a: 183 | data: 184 | first: 1 185 | second: 58870100 186 | data: 187 | first: 4 188 | second: 381b0600 189 | Left_Index_Finger_Joint_01b: 190 | data: 191 | first: 1 192 | second: 56870100 193 | data: 194 | first: 4 195 | second: 361b0600 196 | Left_Index_Finger_Joint_01c: 197 | data: 198 | first: 1 199 | second: 54870100 200 | data: 201 | first: 4 202 | second: 341b0600 203 | Left_Knee_Joint_01: 204 | data: 205 | first: 1 206 | second: 14870100 207 | data: 208 | first: 4 209 | second: f41a0600 210 | Left_Middle_Finger_Joint_01a: 211 | data: 212 | first: 1 213 | second: 52870100 214 | data: 215 | first: 4 216 | second: 321b0600 217 | Left_Middle_Finger_Joint_01b: 218 | data: 219 | first: 1 220 | second: 50870100 221 | data: 222 | first: 4 223 | second: 301b0600 224 | Left_Middle_Finger_Joint_01c: 225 | data: 226 | first: 1 227 | second: 4e870100 228 | data: 229 | first: 4 230 | second: 2e1b0600 231 | Left_Pinky_Finger_Joint_01a: 232 | data: 233 | first: 1 234 | second: 46870100 235 | data: 236 | first: 4 237 | second: 261b0600 238 | Left_Pinky_Finger_Joint_01b: 239 | data: 240 | first: 1 241 | second: 44870100 242 | data: 243 | first: 4 244 | second: 241b0600 245 | Left_Pinky_Finger_Joint_01c: 246 | data: 247 | first: 1 248 | second: 42870100 249 | data: 250 | first: 4 251 | second: 221b0600 252 | Left_Ring_Finger_Joint_01a: 253 | data: 254 | first: 1 255 | second: 4c870100 256 | data: 257 | first: 4 258 | second: 2c1b0600 259 | Left_Ring_Finger_Joint_01b: 260 | data: 261 | first: 1 262 | second: 4a870100 263 | data: 264 | first: 4 265 | second: 2a1b0600 266 | Left_Ring_Finger_Joint_01c: 267 | data: 268 | first: 1 269 | second: 48870100 270 | data: 271 | first: 4 272 | second: 281b0600 273 | Left_Shoulder_Joint_01: 274 | data: 275 | first: 1 276 | second: 60870100 277 | data: 278 | first: 4 279 | second: 401b0600 280 | Left_Thigh_Joint_01: 281 | data: 282 | first: 1 283 | second: 16870100 284 | data: 285 | first: 4 286 | second: f61a0600 287 | Left_Thumb_Joint_01a: 288 | data: 289 | first: 1 290 | second: 40870100 291 | data: 292 | first: 4 293 | second: 201b0600 294 | Left_Thumb_Joint_01b: 295 | data: 296 | first: 1 297 | second: 3e870100 298 | data: 299 | first: 4 300 | second: 1e1b0600 301 | Left_Toe_Joint_01: 302 | data: 303 | first: 1 304 | second: 10870100 305 | data: 306 | first: 4 307 | second: f01a0600 308 | Left_Upper_Arm_Joint_01: 309 | data: 310 | first: 1 311 | second: 5e870100 312 | data: 313 | first: 4 314 | second: 3e1b0600 315 | Left_Wrist_Joint_01: 316 | data: 317 | first: 1 318 | second: 5a870100 319 | data: 320 | first: 4 321 | second: 3a1b0600 322 | Neck: 323 | data: 324 | first: 1 325 | second: 64870100 326 | data: 327 | first: 4 328 | second: 441b0600 329 | Ribs: 330 | data: 331 | first: 1 332 | second: 66870100 333 | data: 334 | first: 4 335 | second: 461b0600 336 | Right_Ankle_Joint_01: 337 | data: 338 | first: 1 339 | second: 0a870100 340 | data: 341 | first: 4 342 | second: ea1a0600 343 | Right_Forearm_Joint_01: 344 | data: 345 | first: 1 346 | second: 38870100 347 | data: 348 | first: 4 349 | second: 181b0600 350 | Right_Index_Finger_Joint_01a: 351 | data: 352 | first: 1 353 | second: 34870100 354 | data: 355 | first: 4 356 | second: 141b0600 357 | Right_Index_Finger_Joint_01b: 358 | data: 359 | first: 1 360 | second: 32870100 361 | data: 362 | first: 4 363 | second: 121b0600 364 | Right_Index_Finger_Joint_01c: 365 | data: 366 | first: 1 367 | second: 30870100 368 | data: 369 | first: 4 370 | second: 101b0600 371 | Right_Knee_Joint_01: 372 | data: 373 | first: 1 374 | second: 0c870100 375 | data: 376 | first: 4 377 | second: ec1a0600 378 | Right_Middle_Finger_Joint_01a: 379 | data: 380 | first: 1 381 | second: 2e870100 382 | data: 383 | first: 4 384 | second: 0e1b0600 385 | Right_Middle_Finger_Joint_01b: 386 | data: 387 | first: 1 388 | second: 2c870100 389 | data: 390 | first: 4 391 | second: 0c1b0600 392 | Right_Middle_Finger_Joint_01c: 393 | data: 394 | first: 1 395 | second: 2a870100 396 | data: 397 | first: 4 398 | second: 0a1b0600 399 | Right_Pinky_Finger_Joint_01a: 400 | data: 401 | first: 1 402 | second: 22870100 403 | data: 404 | first: 4 405 | second: 021b0600 406 | Right_Pinky_Finger_Joint_01b: 407 | data: 408 | first: 1 409 | second: 20870100 410 | data: 411 | first: 4 412 | second: 001b0600 413 | Right_Pinky_Finger_Joint_01c: 414 | data: 415 | first: 1 416 | second: 1e870100 417 | data: 418 | first: 4 419 | second: fe1a0600 420 | Right_Ring_Finger_Joint_01a: 421 | data: 422 | first: 1 423 | second: 28870100 424 | data: 425 | first: 4 426 | second: 081b0600 427 | Right_Ring_Finger_Joint_01b: 428 | data: 429 | first: 1 430 | second: 26870100 431 | data: 432 | first: 4 433 | second: 061b0600 434 | Right_Ring_Finger_Joint_01c: 435 | data: 436 | first: 1 437 | second: 24870100 438 | data: 439 | first: 4 440 | second: 041b0600 441 | Right_Shoulder_Joint_01: 442 | data: 443 | first: 1 444 | second: 3c870100 445 | data: 446 | first: 4 447 | second: 1c1b0600 448 | Right_Thigh_Joint_01: 449 | data: 450 | first: 1 451 | second: 0e870100 452 | data: 453 | first: 4 454 | second: ee1a0600 455 | Right_Thumb_Joint_01a: 456 | data: 457 | first: 1 458 | second: 1c870100 459 | data: 460 | first: 4 461 | second: fc1a0600 462 | Right_Thumb_Joint_01b: 463 | data: 464 | first: 1 465 | second: 1a870100 466 | data: 467 | first: 4 468 | second: fa1a0600 469 | Right_Toe_Joint_01: 470 | data: 471 | first: 1 472 | second: 08870100 473 | data: 474 | first: 4 475 | second: e81a0600 476 | Right_Upper_Arm_Joint_01: 477 | data: 478 | first: 1 479 | second: 3a870100 480 | data: 481 | first: 4 482 | second: 1a1b0600 483 | Right_Wrist_Joint_01: 484 | data: 485 | first: 1 486 | second: 36870100 487 | data: 488 | first: 4 489 | second: 161b0600 490 | Robot2: 491 | data: 492 | first: 1 493 | second: 6a870100 494 | data: 495 | first: 4 496 | second: 4a1b0600 497 | data: 498 | first: 137 499 | second: a20bd100 500 | Root: 501 | data: 502 | first: 1 503 | second: 68870100 504 | data: 505 | first: 4 506 | second: 481b0600 507 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Models/Robot Kyle/Textures.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1ad884e3b6d9c4d85a91ca91c66a540a 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Models/Robot Kyle/Textures/Robot_Color.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertcastle/UnityFBO/bd7297a2a77d0b25e47df1f94560dd98f6204e95/Unity3Demo/Assets/Models/Robot Kyle/Textures/Robot_Color.tga -------------------------------------------------------------------------------- /Unity3Demo/Assets/Models/Robot Kyle/Textures/Robot_Color.tga.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0a0e8af2869fa45f78e25460db578482 3 | TextureImporter: 4 | serializedVersion: 2 5 | mipmaps: 6 | mipMapMode: 0 7 | enableMipMap: 1 8 | linearTexture: 0 9 | correctGamma: 0 10 | fadeOut: 0 11 | borderMipMap: 0 12 | mipMapFadeDistanceStart: 1 13 | mipMapFadeDistanceEnd: 3 14 | bumpmap: 15 | convertToNormalMap: 0 16 | externalNormalMap: 0 17 | heightScale: .25 18 | normalMapFilter: 0 19 | isReadable: 0 20 | grayScaleToAlpha: 0 21 | generateCubemap: 0 22 | textureFormat: -1 23 | maxTextureSize: 1024 24 | textureSettings: 25 | filterMode: -1 26 | aniso: -1 27 | mipBias: -1 28 | wrapMode: -1 29 | nPOTScale: 1 30 | lightmap: 0 31 | compressionQuality: 50 32 | textureType: -1 33 | buildTargetSettings: [] 34 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Models/Robot Kyle/Textures/Robot_Normal.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertcastle/UnityFBO/bd7297a2a77d0b25e47df1f94560dd98f6204e95/Unity3Demo/Assets/Models/Robot Kyle/Textures/Robot_Normal.tga -------------------------------------------------------------------------------- /Unity3Demo/Assets/Models/Robot Kyle/Textures/Robot_Normal.tga.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 94c473c9137744d7eabd829f1150da8d 3 | TextureImporter: 4 | serializedVersion: 2 5 | mipmaps: 6 | mipMapMode: 0 7 | enableMipMap: 1 8 | linearTexture: 1 9 | correctGamma: 0 10 | fadeOut: 0 11 | borderMipMap: 0 12 | mipMapFadeDistanceStart: 1 13 | mipMapFadeDistanceEnd: 3 14 | bumpmap: 15 | convertToNormalMap: 0 16 | externalNormalMap: 1 17 | heightScale: .25 18 | normalMapFilter: 0 19 | isReadable: 0 20 | grayScaleToAlpha: 0 21 | generateCubemap: 0 22 | textureFormat: -1 23 | maxTextureSize: 1024 24 | textureSettings: 25 | filterMode: -1 26 | aniso: -1 27 | mipBias: -1 28 | wrapMode: -1 29 | nPOTScale: 1 30 | lightmap: 0 31 | compressionQuality: 50 32 | textureType: 1 33 | buildTargetSettings: [] 34 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Plugins.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 131db469b6aee456082639426baf1cfc 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Plugins/iOS.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 197a427a3ed584279a1a7a46c4b1fe25 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Plugins/iOS/FBOPlugin.h: -------------------------------------------------------------------------------- 1 | // 2 | // FBOPlugin.h 3 | // FBOPlugin 4 | // 5 | // Created by Robert Castle on 13/09/2013. 6 | // Copyright (c) 2013 Egomotion Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /* 12 | * Interop functions. C# calls these. 13 | */ 14 | extern "C" 15 | { 16 | void InitializeTexture(int textureID); 17 | void UpdateTexture(float value); 18 | } 19 | 20 | /* 21 | * The main class that manages the FBO 22 | */ 23 | @interface FBOPlugin : NSObject 24 | 25 | + (id) shared; 26 | 27 | - (void) initializeTexture:(int)texture; 28 | - (void) updateTexture:(float)value; 29 | @end 30 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Plugins/iOS/FBOPlugin.h.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0c624e26d0a9147c6a0cb8c71ce01d97 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Plugins/iOS/FBOPlugin.mm: -------------------------------------------------------------------------------- 1 | // 2 | // FBOPlugin.m 3 | // FBOPlugin 4 | // 5 | // Created by Robert Castle on 13/09/2013. 6 | // Copyright (c) 2013 Egomotion Limited. All rights reserved. 7 | // 8 | // This example shows how to make an OpenGL FBO, render content into it and 9 | // output it to a Unity Texture2D. 10 | // 11 | // There are a lot of comments and GL checks. You can strip them all, 12 | // but if you start tinkering it is very helpful to catch those GL errors as early 13 | // as possible to track them down. 14 | // 15 | 16 | #import "FBOPlugin.h" 17 | 18 | #import 19 | #import 20 | 21 | //Hard coded source texture sizes, also the FBO size. You can change this, and make it dynamic 22 | #define TEXTURE_WIDTH 8 23 | #define TEXTURE_HEIGHT 8 24 | 25 | 26 | #pragma mark - GL Debugging helpers 27 | 28 | #define ENABLE_GLES_DEBUG 1 29 | 30 | #if ENABLE_GLES_DEBUG 31 | void GLCheckError(const char* file, int line) 32 | { 33 | GLenum e = glGetError(); 34 | 35 | if( e ) 36 | { 37 | printf("OpenGLES error 0x%04X in %s:%i\n", e, file, line); 38 | } 39 | } 40 | 41 | #define GLESAssert() do { GLCheckError (__FILE__, __LINE__); } while(0) 42 | #define GLES_CHK(expr) do { {expr;} GLESAssert(); } while(0) 43 | #else 44 | #define GLESAssert() do { } while(0) 45 | #define GLES_CHK(expr) do { expr; } while(0) 46 | #endif 47 | 48 | #pragma mark - GL Attributes and Uniforms 49 | 50 | enum { 51 | ATTRIB_VERTEX, 52 | ATTRIB_TEXTUREPOSITON, 53 | NUM_ATTRIBUTES 54 | }; 55 | 56 | enum 57 | { 58 | UNIFORM_TEXTURE, 59 | NUM_UNIFORMS 60 | }; 61 | 62 | 63 | #pragma mark - Interop code 64 | 65 | void InitializeTexture(int textureID) 66 | { 67 | [[FBOPlugin shared] initializeTexture:textureID]; 68 | } 69 | 70 | void UpdateTexture(float value) 71 | { 72 | [[FBOPlugin shared] updateTexture:value]; 73 | } 74 | 75 | 76 | #pragma mark - The main singleton class 77 | 78 | @implementation FBOPlugin 79 | { 80 | GLuint _sourceTexture; // The source texture that is drawn into the FBO 81 | GLuint _unityTexture; // The texture ID from Unity 82 | GLuint _frameBuffer; // The framebuffer Object 83 | 84 | GLuint _program; // The shader program used to render our texture into the FBO 85 | GLint _uniforms[NUM_UNIFORMS]; // List of uniforms 86 | 87 | 88 | } 89 | 90 | /** 91 | * Create the singleton 92 | */ 93 | + (id) shared 94 | { 95 | static dispatch_once_t predicate; 96 | static FBOPlugin * instance = nil; 97 | dispatch_once(&predicate, ^{instance = [[self alloc] init];}); 98 | return instance; 99 | } 100 | 101 | /** 102 | * Call initializeTexture with a native texture ID to initialize the 103 | * FBO and attach the nuity texture to it as a render target 104 | */ 105 | - (void) initializeTexture:(int)texture 106 | { 107 | _unityTexture = texture; 108 | 109 | GLESAssert(); 110 | //Save the current state 111 | GLint previousFBO, previousRenderBuffer, previous_program; 112 | glGetIntegerv(GL_FRAMEBUFFER_BINDING, &previousFBO); 113 | glGetIntegerv(GL_RENDERBUFFER_BINDING, &previousRenderBuffer); 114 | glGetIntegerv(GL_CURRENT_PROGRAM, &previous_program); 115 | 116 | //create the FBO 117 | if ([self createFBO]) 118 | { 119 | //Render the source image into the FBO and update our Unity texture. 120 | [self updateTexture:0.0f]; 121 | } 122 | else 123 | { 124 | NSLog(@"FBO not created"); 125 | GLESAssert(); 126 | } 127 | 128 | //Restore the state 129 | glBindFramebuffer(GL_FRAMEBUFFER, previousFBO); 130 | glBindRenderbuffer(GL_RENDERBUFFER, previousRenderBuffer); 131 | glUseProgram(previous_program); 132 | } 133 | 134 | 135 | /** 136 | * updateTexture updates the source image and is associated texture 137 | * based on the float passed to it. 138 | * It then renders this to the FBO. 139 | * As the Unity texture is attached to the FBO as an output the rasterized 140 | * result from the FBO is written in to it. 141 | */ 142 | - (void) updateTexture:(float)value 143 | { 144 | GLESAssert(); 145 | 146 | //Save current state 147 | GLint previousFBO, previousRenderBuffer, previous_program; 148 | glGetIntegerv(GL_FRAMEBUFFER_BINDING, &previousFBO); 149 | glGetIntegerv(GL_RENDERBUFFER_BINDING, &previousRenderBuffer); 150 | glGetIntegerv(GL_CURRENT_PROGRAM, &previous_program); 151 | 152 | //Need to set up the FBO first 153 | if (!_frameBuffer) { 154 | NSLog(@"ERROR FBO not created"); 155 | return; 156 | } 157 | 158 | //Generate a new image and update source texture 159 | [self generateImage:value]; 160 | 161 | //Set up our FBO 162 | glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer); 163 | GLESAssert(); 164 | glViewport(0, 0, TEXTURE_WIDTH, TEXTURE_HEIGHT); 165 | GLESAssert(); 166 | glDisable(GL_BLEND); 167 | glDisable(GL_DEPTH_TEST); 168 | glDepthMask(GL_FALSE); 169 | glDisable(GL_CULL_FACE); 170 | glBindBuffer(GL_ARRAY_BUFFER, 0); 171 | glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 172 | glPolygonOffset(0.0f, 0.0f); 173 | glDisable(GL_POLYGON_OFFSET_FILL); 174 | GLESAssert(); 175 | 176 | //Load the shaders if we have not done so 177 | if (_program == 0) 178 | { 179 | if(![self loadShaders]) { 180 | NSLog(@"Failed to load shaders!"); 181 | } 182 | } 183 | 184 | //Set up the program 185 | GLES_CHK( glUseProgram(_program) ); 186 | GLES_CHK( glUniform1i(_uniforms[UNIFORM_TEXTURE], 0) ); 187 | 188 | //clear the scene 189 | GLES_CHK( glClearColor(0.0f, 0.0f, 0.0f, 1.0f) ); 190 | glClear(GL_COLOR_BUFFER_BIT); 191 | 192 | //Bind out source texture 193 | GLES_CHK( glActiveTexture(GL_TEXTURE0) ); 194 | GLES_CHK( glBindTexture(GL_TEXTURE_2D, _sourceTexture) ); 195 | 196 | //Our object to render 197 | static const GLfloat imageVertices[] = { 198 | -1.0f, -1.0f, 199 | 1.0f, -1.0f, 200 | -1.0f, 1.0f, 201 | 1.0f, 1.0f, 202 | }; 203 | 204 | //The object's texture coordinates 205 | static const GLfloat textureCoordinates[] = { 206 | 0.0f, 1.0f, 207 | 1.0f, 1.0f, 208 | 0.0f, 0.0f, 209 | 1.0f, 0.0f, 210 | }; 211 | 212 | // Update attribute values. 213 | GLES_CHK( glEnableVertexAttribArray(ATTRIB_VERTEX) ); 214 | GLES_CHK( glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, imageVertices) ); 215 | GLES_CHK( glEnableVertexAttribArray(ATTRIB_TEXTUREPOSITON) ); 216 | GLES_CHK( glVertexAttribPointer(ATTRIB_TEXTUREPOSITON, 2, GL_FLOAT, 0, 0, textureCoordinates) ); 217 | 218 | //Draw the quad 219 | GLES_CHK( glDrawArrays(GL_TRIANGLE_STRIP, 0, 4) ); 220 | 221 | //Reset everything 222 | GLES_CHK( glActiveTexture(GL_TEXTURE0) ); 223 | GLES_CHK( glBindTexture(GL_TEXTURE_2D, 0) ); 224 | GLES_CHK( glActiveTexture(GL_TEXTURE1) ); 225 | GLES_CHK( glBindTexture(GL_TEXTURE_2D, 0) ); 226 | GLES_CHK( glBindVertexArrayOES(0) ); 227 | GLES_CHK( glDisableVertexAttribArray(ATTRIB_VERTEX) ); 228 | GLES_CHK( glDisableVertexAttribArray(ATTRIB_TEXTUREPOSITON) ); 229 | 230 | //Restore ttate 231 | glBindFramebuffer(GL_FRAMEBUFFER, previousFBO); 232 | GLESAssert(); 233 | glBindRenderbuffer(GL_RENDERBUFFER, previousRenderBuffer); 234 | GLESAssert(); 235 | glUseProgram(previous_program); 236 | GLESAssert(); 237 | } 238 | 239 | /** 240 | * Create the Framebuffer Object. 241 | * If the FBO already exists, then the unity texture is reattached. 242 | * This allows you to change the texture target if needed. 243 | */ 244 | - (BOOL) createFBO 245 | { 246 | if (_unityTexture <= 0) { 247 | NSLog(@"Unity Texture not set"); 248 | return NO; 249 | } 250 | 251 | //Create a new framebuffer if needed 252 | if(!_frameBuffer) 253 | { 254 | glGenFramebuffers(1, &_frameBuffer); 255 | GLESAssert(); 256 | } 257 | 258 | //bind FBO 259 | glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer); 260 | GLESAssert(); 261 | 262 | //bind the output texture and attach it 263 | glBindTexture(GL_TEXTURE_2D, _unityTexture); 264 | GLESAssert(); 265 | glTexImage2D(GL_TEXTURE_2D, 266 | 0, 267 | GL_RGBA, 268 | TEXTURE_WIDTH, 269 | TEXTURE_HEIGHT, 270 | 0, 271 | GL_RGBA, 272 | GL_UNSIGNED_BYTE, 273 | 0); 274 | GLESAssert(); 275 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 276 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 277 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 278 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 279 | GLESAssert(); 280 | 281 | glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0); 282 | GLESAssert(); 283 | glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _unityTexture, 0); 284 | GLESAssert(); 285 | 286 | //Did it work? 287 | GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 288 | 289 | if(status != GL_FRAMEBUFFER_COMPLETE) 290 | { 291 | NSLog(@"ERROR: UNITY PLUGIN CANNOT MAKE VALID FBO ATTACHMENT FROM UNITY TEXTURE ID"); 292 | return NO; 293 | } 294 | 295 | GLESAssert(); 296 | 297 | return YES; 298 | } 299 | 300 | /** 301 | * Destroy the FBO. 302 | * We don't actually call this in this example, as we never need to. 303 | * But this is how to do it. 304 | */ 305 | - (void) teardownFBO 306 | { 307 | if (_frameBuffer != 0) { 308 | glDeleteFramebuffers(1, &_frameBuffer); 309 | _frameBuffer = 0; 310 | } 311 | } 312 | 313 | /** 314 | * This silly function creates an image based on the 0-1 float value passed to it. 315 | * It then uploads it to the GPU as a texture. 316 | * This texture will be later rendered to the FBO 317 | */ 318 | - (void) generateImage:(float)value 319 | { 320 | if (value < 0.0f) value = 0.0f; 321 | if (value > 1.0f) value = 1.0f; 322 | 323 | GLubyte image[TEXTURE_HEIGHT][TEXTURE_WIDTH][3]; 324 | 325 | for (int row = 0; row < TEXTURE_HEIGHT; row++) 326 | { 327 | for (int col = 0; col < TEXTURE_WIDTH; col++) 328 | { 329 | GLubyte r, g, b; 330 | //Top 331 | if (row < TEXTURE_HEIGHT/2) 332 | { 333 | //Left 334 | if (col < TEXTURE_WIDTH/2) { 335 | r = (GLubyte)(MAX(value, 0.1f)* 255.0f); 336 | g = b = 0; 337 | } 338 | //Right 339 | else { 340 | g = (GLubyte)(MAX((1.0f - value), 0.2f) * 255.0f); 341 | r = b = 0; 342 | } 343 | } 344 | //Bottom 345 | else 346 | { 347 | //Left 348 | if (col < TEXTURE_WIDTH/2) { 349 | b = (GLubyte)(0.5f * value * 255.0f) + 50; 350 | r = g = 0; 351 | } 352 | //Right 353 | else { 354 | r = g = b = (GLubyte)(value * 255.0f); 355 | } 356 | } 357 | 358 | //Set the pixels 359 | image[row][col][0] = r; 360 | image[row][col][1] = g; 361 | image[row][col][2] = b; 362 | } 363 | } 364 | 365 | //Create the texture if it does not exist yet 366 | if (_sourceTexture <= 0) 367 | { 368 | glGenTextures(1, &_sourceTexture); 369 | glBindTexture(GL_TEXTURE_2D, _sourceTexture); 370 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 371 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 372 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 373 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 374 | } 375 | else { 376 | // Otherwise just bind it 377 | glBindTexture(GL_TEXTURE_2D, _sourceTexture); 378 | } 379 | 380 | //Upload the image data 381 | glTexImage2D(GL_TEXTURE_2D, 382 | 0, 383 | GL_RGB, 384 | TEXTURE_WIDTH, 385 | TEXTURE_HEIGHT, 386 | 0, 387 | GL_RGB, 388 | GL_UNSIGNED_BYTE, 389 | image); 390 | } 391 | 392 | 393 | #pragma mark - OpenGL ES 2 shader compilation 394 | /* 395 | Everything below was just ripped from an Apple example project. 396 | This is boilerplate stuff. It can be done better and more flexibly, 397 | but it serves its purpose for this demo. 398 | 399 | The key thing to note here is that the shaders are stored as embedded strings. 400 | You could pass the strings in yourself or load up files from the Resources folder. 401 | */ 402 | 403 | /** 404 | * Load up the basic passthrough shaders 405 | */ 406 | - (BOOL)loadShaders 407 | { 408 | glUseProgram(0); 409 | 410 | //shaders as embedded strings as we are making a library 411 | const GLchar vShaderStr[] = 412 | "attribute vec4 position; \n" 413 | "attribute mediump vec4 textureCoordinate; \n" 414 | "varying mediump vec2 coordinate; \n" 415 | "void main() \n" 416 | "{ \n" 417 | " gl_Position = position; \n" 418 | " coordinate = textureCoordinate.xy; \n" 419 | "}"; 420 | 421 | const GLchar fShaderStr[] = 422 | "varying highp vec2 coordinate; \n" 423 | "uniform sampler2D texture; \n" 424 | "void main() \n" 425 | "{ \n" 426 | " gl_FragColor = texture2D(texture, coordinate); \n" 427 | "}"; 428 | 429 | GLuint vertShader, fragShader; 430 | 431 | // Create shader program. 432 | _program = glCreateProgram(); 433 | 434 | // Create and compile vertex shader. 435 | if (![self compileShader:&vertShader type:GL_VERTEX_SHADER src:vShaderStr]) { 436 | NSLog(@"Failed to compile vertex shader"); 437 | return NO; 438 | } 439 | 440 | // Create and compile fragment shader. 441 | if (![self compileShader:&fragShader type:GL_FRAGMENT_SHADER src:fShaderStr]) { 442 | NSLog(@"Failed to compile fragment shader"); 443 | return NO; 444 | } 445 | 446 | // Attach vertex shader to _program. 447 | glAttachShader(_program, vertShader); 448 | 449 | // Attach fragment shader to _program. 450 | glAttachShader(_program, fragShader); 451 | 452 | 453 | // Bind attribute locations. 454 | // This needs to be done prior to linking. 455 | glBindAttribLocation(_program, ATTRIB_VERTEX, "position"); 456 | glBindAttribLocation(_program, ATTRIB_TEXTUREPOSITON, "textureCoordinate"); 457 | 458 | // Link program. 459 | if (![self linkProgram:_program]) { 460 | NSLog(@"Failed to link _program: %d", _program); 461 | 462 | if (vertShader) { 463 | glDeleteShader(vertShader); 464 | vertShader = 0; 465 | } 466 | if (fragShader) { 467 | glDeleteShader(fragShader); 468 | fragShader = 0; 469 | } 470 | if (_program) { 471 | glDeleteProgram(_program); 472 | _program = 0; 473 | } 474 | 475 | return NO; 476 | } 477 | 478 | // Get uniform locations. 479 | _uniforms[UNIFORM_TEXTURE] = glGetUniformLocation(_program, "texture"); 480 | 481 | 482 | // Release vertex and fragment shaders. 483 | if (vertShader) { 484 | glDetachShader(_program, vertShader); 485 | glDeleteShader(vertShader); 486 | } 487 | if (fragShader) { 488 | glDetachShader(_program, fragShader); 489 | glDeleteShader(fragShader); 490 | } 491 | 492 | return YES; 493 | } 494 | 495 | /** 496 | * Compile a shader 497 | */ 498 | - (BOOL)compileShader:(GLuint *)shader type:(GLenum)type src:(const GLchar *)source 499 | { 500 | GLint status; 501 | if (!source) { 502 | NSLog(@"Failed to load shader"); 503 | return NO; 504 | } 505 | 506 | *shader = glCreateShader(type); 507 | glShaderSource(*shader, 1, &source, NULL); 508 | glCompileShader(*shader); 509 | 510 | #if defined(DEBUG) 511 | GLint logLength; 512 | glGetShaderiv(*shader, GL_INFO_LOG_LENGTH, &logLength); 513 | if (logLength > 0) { 514 | GLchar *log = (GLchar *)malloc(logLength); 515 | glGetShaderInfoLog(*shader, logLength, &logLength, log); 516 | NSLog(@"Shader compile log:\n%s", log); 517 | free(log); 518 | } 519 | #endif 520 | 521 | glGetShaderiv(*shader, GL_COMPILE_STATUS, &status); 522 | if (status == 0) { 523 | glDeleteShader(*shader); 524 | return NO; 525 | } 526 | 527 | return YES; 528 | } 529 | 530 | /** 531 | * Link the program 532 | */ 533 | - (BOOL)linkProgram:(GLuint)prog 534 | { 535 | GLint status; 536 | glLinkProgram(prog); 537 | 538 | #if defined(DEBUG) 539 | GLint logLength; 540 | glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &logLength); 541 | if (logLength > 0) { 542 | GLchar *log = (GLchar *)malloc(logLength); 543 | glGetProgramInfoLog(prog, logLength, &logLength, log); 544 | NSLog(@"Program link log:\n%s", log); 545 | free(log); 546 | } 547 | #endif 548 | 549 | glGetProgramiv(prog, GL_LINK_STATUS, &status); 550 | if (status == 0) { 551 | return NO; 552 | } 553 | 554 | return YES; 555 | } 556 | 557 | /** 558 | * Check that the program is valid. 559 | */ 560 | - (BOOL)validateProgram:(GLuint)prog 561 | { 562 | GLint logLength, status; 563 | 564 | glValidateProgram(prog); 565 | glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &logLength); 566 | if (logLength > 0) { 567 | GLchar *log = (GLchar *)malloc(logLength); 568 | glGetProgramInfoLog(prog, logLength, &logLength, log); 569 | NSLog(@"Program validate log:\n%s", log); 570 | free(log); 571 | } 572 | 573 | glGetProgramiv(prog, GL_VALIDATE_STATUS, &status); 574 | if (status == 0) { 575 | return NO; 576 | } 577 | 578 | return YES; 579 | } 580 | 581 | 582 | @end 583 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Plugins/iOS/FBOPlugin.mm.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d4482ad9d79114f3c87946a495f8bcc5 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 54b8d3968fbcf4dcd910fbb4be11c8dd 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Scenes/Test Scene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6d4e05c4d65024283afc8441c3b51357 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 79c54ec5d2b914ff6b638b81a271191e 3 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Scripts/AxisRotate.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | 4 | /// 5 | /// Rotate an object around a specified a axis by degrees per second 6 | /// 7 | public class AxisRotate : MonoBehaviour 8 | { 9 | public Vector3 axis = Vector3.up; 10 | public float angle = 1.0f; 11 | 12 | // Update is called once per frame 13 | void Update () 14 | { 15 | transform.Rotate(axis, angle*Time.deltaTime); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Scripts/AxisRotate.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0705d7060623a4ce88f9ff9f92450c95 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Scripts/FBOPlugin.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | using System.Runtime.InteropServices; 4 | 5 | public static class FBOPlugin 6 | { 7 | //The texture that the OpenGL FBO will render to 8 | static Texture2D _texture; 9 | 10 | //Our interop functions. Only active on iOS builds 11 | #if UNITY_IOS && !UNITY_EDITOR 12 | [DllImport("__Internal")] 13 | private static extern void InitializeTexture(int textureID); 14 | 15 | [DllImport("__Internal")] 16 | private static extern void UpdateTexture(float value); 17 | #endif 18 | 19 | /// 20 | /// Initializes the texture, and Initializes the plugin, which sets up the FBO 21 | /// 22 | static void Initialize() 23 | { 24 | _texture = new Texture2D(1,1,TextureFormat.ARGB32, false); 25 | _texture.SetPixel(0,0, Color.black); 26 | 27 | #if UNITY_IOS && !UNITY_EDITOR 28 | InitializeTexture(_texture.GetNativeTextureID()); 29 | //Always call this after changing OpenGL values. Otherwise odd things happen 30 | GL.InvalidateState(); 31 | #endif 32 | } 33 | 34 | /// 35 | /// Other scripts call this to get the texture. 36 | /// 37 | /// 38 | /// The texture. 39 | /// 40 | public static Texture2D GetTexture() 41 | { 42 | if (_texture == null) { 43 | Initialize(); 44 | } 45 | 46 | return _texture; 47 | } 48 | 49 | /// 50 | /// Update the FBO content. Set a value between 0-1 to change the source texture 51 | /// 52 | /// 53 | /// A value between 0-1 54 | /// 55 | public static void Update(float value) 56 | { 57 | //Initialize the texture if needed 58 | if (_texture == null) { 59 | Initialize(); 60 | } 61 | 62 | value = Mathf.Clamp01(value); 63 | 64 | //Update the texture 65 | #if UNITY_IOS && !UNITY_EDITOR 66 | UpdateTexture(value); 67 | //Always call this after changing OpenGL values. Otherwise odd things happen 68 | GL.InvalidateState(); 69 | #endif 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Scripts/FBOPlugin.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b91cbb19c1b084238ac001c4c57a6794 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Scripts/FBOTest.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | 4 | /// 5 | /// FBO test script to show how to apply the FBO texture to materials 6 | /// 7 | public class FBOTest : MonoBehaviour 8 | { 9 | void Start() 10 | { 11 | //Set the material's texture to the FBO texture 12 | renderer.material.mainTexture = FBOPlugin.GetTexture(); 13 | } 14 | 15 | void Update() 16 | { 17 | //Send a varying value to the plugin to oscillate the Texture's colours 18 | float value = Mathf.Abs(Mathf.Sin(Time.time)); 19 | FBOPlugin.Update(value); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Unity3Demo/Assets/Scripts/FBOTest.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 62f6b52346bd34a1087362e284cf904a 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | -------------------------------------------------------------------------------- /Unity3Demo/ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertcastle/UnityFBO/bd7297a2a77d0b25e47df1f94560dd98f6204e95/Unity3Demo/ProjectSettings/AudioManager.asset -------------------------------------------------------------------------------- /Unity3Demo/ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertcastle/UnityFBO/bd7297a2a77d0b25e47df1f94560dd98f6204e95/Unity3Demo/ProjectSettings/DynamicsManager.asset -------------------------------------------------------------------------------- /Unity3Demo/ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: 8 | - enabled: 1 9 | path: Assets/Scenes/Test Scene.unity 10 | -------------------------------------------------------------------------------- /Unity3Demo/ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_ExternalVersionControlSupport: 1 8 | m_SerializationMode: 2 9 | m_WebSecurityEmulationEnabled: 0 10 | m_WebSecurityEmulationHostUrl: http://www.mydomain.com/mygame.unity3d 11 | -------------------------------------------------------------------------------- /Unity3Demo/ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertcastle/UnityFBO/bd7297a2a77d0b25e47df1f94560dd98f6204e95/Unity3Demo/ProjectSettings/InputManager.asset -------------------------------------------------------------------------------- /Unity3Demo/ProjectSettings/NavMeshLayers.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertcastle/UnityFBO/bd7297a2a77d0b25e47df1f94560dd98f6204e95/Unity3Demo/ProjectSettings/NavMeshLayers.asset -------------------------------------------------------------------------------- /Unity3Demo/ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertcastle/UnityFBO/bd7297a2a77d0b25e47df1f94560dd98f6204e95/Unity3Demo/ProjectSettings/NetworkManager.asset -------------------------------------------------------------------------------- /Unity3Demo/ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | AndroidProfiler: 0 8 | defaultScreenOrientation: 0 9 | targetDevice: 2 10 | targetPlatform: 2 11 | targetResolution: 0 12 | accelerometerFrequency: 60 13 | companyName: Egomotion Limited 14 | productName: UnityFBO 15 | AndroidLicensePublicKey: 16 | defaultScreenWidth: 1024 17 | defaultScreenHeight: 768 18 | defaultScreenWidthWeb: 960 19 | defaultScreenHeightWeb: 600 20 | m_RenderingPath: 1 21 | m_ActiveColorSpace: 0 22 | m_MTRendering: 1 23 | iosShowActivityIndicatorOnLoading: -1 24 | androidShowActivityIndicatorOnLoading: -1 25 | displayResolutionDialog: 1 26 | allowedAutorotateToPortrait: 1 27 | allowedAutorotateToPortraitUpsideDown: 1 28 | allowedAutorotateToLandscapeRight: 1 29 | allowedAutorotateToLandscapeLeft: 1 30 | useOSAutorotation: 1 31 | use32BitDisplayBuffer: 0 32 | use24BitDepthBuffer: 0 33 | defaultIsFullScreen: 0 34 | runInBackground: 0 35 | captureSingleScreen: 0 36 | Override IPod Music: 0 37 | usePlayerLog: 1 38 | useMacAppStoreValidation: 0 39 | xboxSkinOnGPU: 1 40 | xboxEnableAvatar: 0 41 | xboxEnableKinect: 0 42 | xboxEnableKinectAutoTracking: 0 43 | xboxEnableSpeech: 0 44 | wiiHio2Usage: -1 45 | wiiLoadingScreenRectPlacement: 0 46 | wiiLoadingScreenBackground: {r: 1, g: 1, b: 1, a: 1} 47 | wiiLoadingScreenPeriod: 1000 48 | wiiLoadingScreenFileName: 49 | wiiLoadingScreenRect: 50 | serializedVersion: 2 51 | x: 0 52 | y: 0 53 | width: 0 54 | height: 0 55 | m_SupportedAspectRatios: 56 | 4:3: 1 57 | 5:4: 1 58 | 16:10: 1 59 | 16:9: 1 60 | Others: 1 61 | debugUnloadMode: 0 62 | iPhoneBundleIdentifier: com.egomotionstudios.UnityFBO 63 | iPhoneBundleVersion: 1.0 64 | AndroidBundleVersionCode: 1 65 | AndroidMinSdkVersion: 6 66 | AndroidPreferredInstallLocation: 1 67 | aotOptions: 68 | apiCompatibilityLevel: 2 69 | iPhoneStrippingLevel: 0 70 | iPhoneScriptCallOptimization: 0 71 | ForceInternetPermission: 0 72 | ForceSDCardPermission: 0 73 | CreateWallpaper: 0 74 | StripUnusedMeshComponents: 0 75 | iPhoneSdkVersion: 988 76 | iPhoneTargetOSVersion: 20 77 | uIPrerenderedIcon: 0 78 | uIRequiresPersistentWiFi: 0 79 | uIStatusBarHidden: 1 80 | uIExitOnSuspend: 0 81 | uIStatusBarStyle: 0 82 | iPhoneSplashScreen: {fileID: 0} 83 | iPhoneHighResSplashScreen: {fileID: 0} 84 | iPhoneTallHighResSplashScreen: {fileID: 0} 85 | iPadPortraitSplashScreen: {fileID: 0} 86 | iPadHighResPortraitSplashScreen: {fileID: 0} 87 | iPadLandscapeSplashScreen: {fileID: 0} 88 | iPadHighResLandscapeSplashScreen: {fileID: 0} 89 | AndroidTargetDevice: 0 90 | AndroidTargetGraphics: 1 91 | AndroidSplashScreenScale: 0 92 | AndroidKeystoreName: 93 | AndroidKeyaliasName: 94 | resolutionDialogBanner: {fileID: 0} 95 | m_BuildTargetIcons: 96 | - m_BuildTarget: 97 | m_Icons: 98 | - m_Icon: {fileID: 0} 99 | m_Size: 128 100 | m_BuildTargetBatching: [] 101 | webPlayerTemplate: APPLICATION:Default 102 | m_TemplateCustomTags: {} 103 | wiiRegion: 1 104 | wiiGameCode: RABA 105 | wiiGameVersion: 106 | wiiCompanyCode: ZZ 107 | wiiSupportsNunchuk: 0 108 | wiiSupportsClassicController: 0 109 | wiiSupportsBalanceBoard: 0 110 | wiiSupportsMotionPlus: 0 111 | wiiControllerCount: 1 112 | wiiFloatingPointExceptions: 0 113 | wiiScreenCrashDumps: 1 114 | wiiMemoryLabelCount: 147 115 | wiiMemorySetup: 0000000000000000000000000000000000000000 116 | XboxTitleId: 117 | XboxImageXexPath: 118 | XboxSpaPath: 119 | XboxGenerateSpa: 0 120 | XboxDeployKinectResources: 0 121 | XboxSplashScreen: {fileID: 0} 122 | xboxSpeechDB: 0 123 | ps3TitleConfigPath: 124 | ps3DLCConfigPath: 125 | ps3ThumbnailPath: 126 | ps3BackgroundPath: 127 | ps3SoundPath: 128 | ps3TrophyCommId: 129 | ps3TrophyPackagePath: 130 | ps3ReservedMemorySizeMB: 16 131 | ps3BootCheckMaxSaveGameSizeKB: 128 132 | ps3TrophyCommSig: 133 | ps3SaveGameSlots: 1 134 | ps3EDATKeyFilePath: 135 | ps3TrialMode: 0 136 | flashStrippingLevel: 2 137 | firstStreamedLevelWithResources: 0 138 | unityRebuildLibraryVersion: 9 139 | unityForwardCompatibleVersion: 36 140 | unityStandardAssetsVersion: 0 141 | -------------------------------------------------------------------------------- /Unity3Demo/ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertcastle/UnityFBO/bd7297a2a77d0b25e47df1f94560dd98f6204e95/Unity3Demo/ProjectSettings/QualitySettings.asset -------------------------------------------------------------------------------- /Unity3Demo/ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertcastle/UnityFBO/bd7297a2a77d0b25e47df1f94560dd98f6204e95/Unity3Demo/ProjectSettings/TagManager.asset -------------------------------------------------------------------------------- /Unity3Demo/ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertcastle/UnityFBO/bd7297a2a77d0b25e47df1f94560dd98f6204e95/Unity3Demo/ProjectSettings/TimeManager.asset -------------------------------------------------------------------------------- /Unity4Demo/Assets/Materials.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bf466d71248b944af97a85babb04302e 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Materials/FBO Material Transparent.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 3 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: FBO Material Transparent 10 | m_Shader: {fileID: 34, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: [] 12 | m_SavedProperties: 13 | serializedVersion: 2 14 | m_TexEnvs: 15 | data: 16 | first: 17 | name: _MainTex 18 | second: 19 | m_Texture: {fileID: 0} 20 | m_Scale: {x: 1, y: 1} 21 | m_Offset: {x: 0, y: 0} 22 | m_Floats: 23 | data: 24 | first: 25 | name: _Shininess 26 | second: .699999988 27 | m_Colors: 28 | data: 29 | first: 30 | name: _Color 31 | second: {r: 1, g: 1, b: 1, a: .56078434} 32 | data: 33 | first: 34 | name: _SpecColor 35 | second: {r: 1, g: 1, b: 1, a: 0} 36 | data: 37 | first: 38 | name: _Emission 39 | second: {r: 0, g: 0, b: 0, a: 0} 40 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Materials/FBO Material Transparent.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 04a1af810f2434351b80a7549da4066f 3 | NativeFormatImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Materials/FBO Material.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 3 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: FBO Material 10 | m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: [] 12 | m_SavedProperties: 13 | serializedVersion: 2 14 | m_TexEnvs: 15 | data: 16 | first: 17 | name: _MainTex 18 | second: 19 | m_Texture: {fileID: 0} 20 | m_Scale: {x: 1, y: 1} 21 | m_Offset: {x: 0, y: 0} 22 | m_Floats: {} 23 | m_Colors: 24 | data: 25 | first: 26 | name: _Color 27 | second: {r: 1, g: 1, b: 1, a: 1} 28 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Materials/FBO Material.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ef556dc3ef3104632af9b80a1c7ec368 3 | NativeFormatImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Models.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a5eae7a84f62749efbf9d7fafa8e697d 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Models/Robot Kyle.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c1f5409d7a55c4a778d47479f679c64b 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Models/Robot Kyle/Materials.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e5fd508c3e37c48299886fc24fff49c1 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Models/Robot Kyle/Materials/Robot_Color.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 3 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: Robot_Color 10 | m_Shader: {fileID: 2, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: [] 12 | m_SavedProperties: 13 | serializedVersion: 2 14 | m_TexEnvs: 15 | data: 16 | first: 17 | name: _MainTex 18 | second: 19 | m_Texture: {fileID: 2800000, guid: 0a0e8af2869fa45f78e25460db578482, type: 3} 20 | m_Scale: {x: 1, y: 1} 21 | m_Offset: {x: 0, y: 0} 22 | data: 23 | first: 24 | name: _BumpMap 25 | second: 26 | m_Texture: {fileID: 2800000, guid: 94c473c9137744d7eabd829f1150da8d, type: 3} 27 | m_Scale: {x: 1, y: 1} 28 | m_Offset: {x: 0, y: 0} 29 | m_Floats: {} 30 | m_Colors: 31 | data: 32 | first: 33 | name: _Color 34 | second: {r: 1, g: 1, b: 1, a: 1} 35 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Models/Robot Kyle/Materials/Robot_Color.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0aa851515cd3747d6b3b3e461199a2ed 3 | NativeFormatImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Models/Robot Kyle/Model.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7fed4106219f345ba8957ddcac79815a 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Models/Robot Kyle/Model/Robot Kyle.fbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertcastle/UnityFBO/bd7297a2a77d0b25e47df1f94560dd98f6204e95/Unity4Demo/Assets/Models/Robot Kyle/Model/Robot Kyle.fbx -------------------------------------------------------------------------------- /Unity4Demo/Assets/Models/Robot Kyle/Model/Robot Kyle.fbx.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 320b1c2af77554f99a1658df4a6d3d5c 3 | ModelImporter: 4 | serializedVersion: 15 5 | fileIDToRecycleName: 6 | 100000: Head 7 | 100002: Hip 8 | 100004: Left_Ankle_Joint_01 9 | 100006: Left_Forearm_Joint_01 10 | 100008: Left_Index_Finger_Joint_01a 11 | 100010: Left_Index_Finger_Joint_01b 12 | 100012: Left_Index_Finger_Joint_01c 13 | 100014: Left_Knee_Joint_01 14 | 100016: Left_Middle_Finger_Joint_01a 15 | 100018: Left_Middle_Finger_Joint_01b 16 | 100020: Left_Middle_Finger_Joint_01c 17 | 100022: Left_Pinky_Finger_Joint_01a 18 | 100024: Left_Pinky_Finger_Joint_01b 19 | 100026: Left_Pinky_Finger_Joint_01c 20 | 100028: Left_Ring_Finger_Joint_01a 21 | 100030: Left_Ring_Finger_Joint_01b 22 | 100032: Left_Ring_Finger_Joint_01c 23 | 100034: Left_Shoulder_Joint_01 24 | 100036: Left_Thigh_Joint_01 25 | 100038: Left_Thumb_Joint_01a 26 | 100040: Left_Thumb_Joint_01b 27 | 100042: Left_Toe_Joint_01 28 | 100044: Left_Upper_Arm_Joint_01 29 | 100046: Left_Wrist_Joint_01 30 | 100048: Neck 31 | 100050: Ribs 32 | 100052: Right_Ankle_Joint_01 33 | 100054: Right_Forearm_Joint_01 34 | 100056: Right_Index_Finger_Joint_01a 35 | 100058: Right_Index_Finger_Joint_01b 36 | 100060: Right_Index_Finger_Joint_01c 37 | 100062: Right_Knee_Joint_01 38 | 100064: Right_Middle_Finger_Joint_01a 39 | 100066: Right_Middle_Finger_Joint_01b 40 | 100068: Right_Middle_Finger_Joint_01c 41 | 100070: Right_Pinky_Finger_Joint_01a 42 | 100072: Right_Pinky_Finger_Joint_01b 43 | 100074: Right_Pinky_Finger_Joint_01c 44 | 100076: Right_Ring_Finger_Joint_01a 45 | 100078: Right_Ring_Finger_Joint_01b 46 | 100080: Right_Ring_Finger_Joint_01c 47 | 100082: Right_Shoulder_Joint_01 48 | 100084: Right_Thigh_Joint_01 49 | 100086: Right_Thumb_Joint_01a 50 | 100088: Right_Thumb_Joint_01b 51 | 100090: Right_Toe_Joint_01 52 | 100092: Right_Upper_Arm_Joint_01 53 | 100094: Right_Wrist_Joint_01 54 | 100096: //RootNode 55 | 100098: Robot2 56 | 100100: Root 57 | 400000: Head 58 | 400002: Hip 59 | 400004: Left_Ankle_Joint_01 60 | 400006: Left_Forearm_Joint_01 61 | 400008: Left_Index_Finger_Joint_01a 62 | 400010: Left_Index_Finger_Joint_01b 63 | 400012: Left_Index_Finger_Joint_01c 64 | 400014: Left_Knee_Joint_01 65 | 400016: Left_Middle_Finger_Joint_01a 66 | 400018: Left_Middle_Finger_Joint_01b 67 | 400020: Left_Middle_Finger_Joint_01c 68 | 400022: Left_Pinky_Finger_Joint_01a 69 | 400024: Left_Pinky_Finger_Joint_01b 70 | 400026: Left_Pinky_Finger_Joint_01c 71 | 400028: Left_Ring_Finger_Joint_01a 72 | 400030: Left_Ring_Finger_Joint_01b 73 | 400032: Left_Ring_Finger_Joint_01c 74 | 400034: Left_Shoulder_Joint_01 75 | 400036: Left_Thigh_Joint_01 76 | 400038: Left_Thumb_Joint_01a 77 | 400040: Left_Thumb_Joint_01b 78 | 400042: Left_Toe_Joint_01 79 | 400044: Left_Upper_Arm_Joint_01 80 | 400046: Left_Wrist_Joint_01 81 | 400048: Neck 82 | 400050: Ribs 83 | 400052: Right_Ankle_Joint_01 84 | 400054: Right_Forearm_Joint_01 85 | 400056: Right_Index_Finger_Joint_01a 86 | 400058: Right_Index_Finger_Joint_01b 87 | 400060: Right_Index_Finger_Joint_01c 88 | 400062: Right_Knee_Joint_01 89 | 400064: Right_Middle_Finger_Joint_01a 90 | 400066: Right_Middle_Finger_Joint_01b 91 | 400068: Right_Middle_Finger_Joint_01c 92 | 400070: Right_Pinky_Finger_Joint_01a 93 | 400072: Right_Pinky_Finger_Joint_01b 94 | 400074: Right_Pinky_Finger_Joint_01c 95 | 400076: Right_Ring_Finger_Joint_01a 96 | 400078: Right_Ring_Finger_Joint_01b 97 | 400080: Right_Ring_Finger_Joint_01c 98 | 400082: Right_Shoulder_Joint_01 99 | 400084: Right_Thigh_Joint_01 100 | 400086: Right_Thumb_Joint_01a 101 | 400088: Right_Thumb_Joint_01b 102 | 400090: Right_Toe_Joint_01 103 | 400092: Right_Upper_Arm_Joint_01 104 | 400094: Right_Wrist_Joint_01 105 | 400096: //RootNode 106 | 400098: Robot2 107 | 400100: Root 108 | 4300000: Robot2 109 | 11100000: //RootNode 110 | 13700000: Robot2 111 | materials: 112 | importMaterials: 1 113 | materialName: 0 114 | materialSearch: 1 115 | animations: 116 | legacyGenerateAnimations: 4 117 | bakeSimulation: 0 118 | animationCompression: 1 119 | animationRotationError: .5 120 | animationPositionError: .5 121 | animationScaleError: .5 122 | animationWrapMode: 0 123 | clipAnimations: [] 124 | isReadable: 1 125 | meshes: 126 | lODScreenPercentages: [] 127 | globalScale: .00999999978 128 | meshCompression: 0 129 | addColliders: 0 130 | importBlendShapes: 1 131 | swapUVChannels: 0 132 | generateSecondaryUV: 0 133 | useFileUnits: 1 134 | optimizeMeshForGPU: 1 135 | weldVertices: 1 136 | secondaryUVAngleDistortion: 8 137 | secondaryUVAreaDistortion: 15.000001 138 | secondaryUVHardAngle: 88 139 | secondaryUVPackMargin: 4 140 | tangentSpace: 141 | normalSmoothAngle: 60 142 | splitTangentsAcrossUV: 1 143 | normalImportMode: 0 144 | tangentImportMode: 1 145 | importAnimation: 1 146 | copyAvatar: 0 147 | humanDescription: 148 | human: [] 149 | skeleton: [] 150 | handles: [] 151 | armTwist: .5 152 | foreArmTwist: .5 153 | upperLegTwist: .5 154 | legTwist: .5 155 | armStretch: .0500000007 156 | legStretch: .0500000007 157 | feetSpacing: 0 158 | rootMotionBoneName: 159 | lastHumanDescriptionAvatarSource: {instanceID: 0} 160 | additionalBone: 1 161 | animationType: 1 162 | userData: 163 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Models/Robot Kyle/Textures.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1ad884e3b6d9c4d85a91ca91c66a540a 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Models/Robot Kyle/Textures/Robot_Color.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertcastle/UnityFBO/bd7297a2a77d0b25e47df1f94560dd98f6204e95/Unity4Demo/Assets/Models/Robot Kyle/Textures/Robot_Color.tga -------------------------------------------------------------------------------- /Unity4Demo/Assets/Models/Robot Kyle/Textures/Robot_Color.tga.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0a0e8af2869fa45f78e25460db578482 3 | TextureImporter: 4 | serializedVersion: 2 5 | mipmaps: 6 | mipMapMode: 0 7 | enableMipMap: 1 8 | linearTexture: 0 9 | correctGamma: 0 10 | fadeOut: 0 11 | borderMipMap: 0 12 | mipMapFadeDistanceStart: 1 13 | mipMapFadeDistanceEnd: 3 14 | bumpmap: 15 | convertToNormalMap: 0 16 | externalNormalMap: 0 17 | heightScale: .25 18 | normalMapFilter: 0 19 | isReadable: 0 20 | grayScaleToAlpha: 0 21 | generateCubemap: 0 22 | seamlessCubemap: 0 23 | textureFormat: -1 24 | maxTextureSize: 1024 25 | textureSettings: 26 | filterMode: -1 27 | aniso: -1 28 | mipBias: -1 29 | wrapMode: -1 30 | nPOTScale: 1 31 | lightmap: 0 32 | compressionQuality: 50 33 | alphaIsTransparency: 0 34 | textureType: -1 35 | buildTargetSettings: [] 36 | userData: 37 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Models/Robot Kyle/Textures/Robot_Normal.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertcastle/UnityFBO/bd7297a2a77d0b25e47df1f94560dd98f6204e95/Unity4Demo/Assets/Models/Robot Kyle/Textures/Robot_Normal.tga -------------------------------------------------------------------------------- /Unity4Demo/Assets/Models/Robot Kyle/Textures/Robot_Normal.tga.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 94c473c9137744d7eabd829f1150da8d 3 | TextureImporter: 4 | serializedVersion: 2 5 | mipmaps: 6 | mipMapMode: 0 7 | enableMipMap: 1 8 | linearTexture: 1 9 | correctGamma: 0 10 | fadeOut: 0 11 | borderMipMap: 0 12 | mipMapFadeDistanceStart: 1 13 | mipMapFadeDistanceEnd: 3 14 | bumpmap: 15 | convertToNormalMap: 0 16 | externalNormalMap: 1 17 | heightScale: .25 18 | normalMapFilter: 0 19 | isReadable: 0 20 | grayScaleToAlpha: 0 21 | generateCubemap: 0 22 | seamlessCubemap: 0 23 | textureFormat: -1 24 | maxTextureSize: 1024 25 | textureSettings: 26 | filterMode: -1 27 | aniso: -1 28 | mipBias: -1 29 | wrapMode: -1 30 | nPOTScale: 1 31 | lightmap: 0 32 | compressionQuality: 50 33 | alphaIsTransparency: 0 34 | textureType: 1 35 | buildTargetSettings: [] 36 | userData: 37 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Plugins.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0a723384135914c5aa11cb4e8dd1b591 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Plugins/iOS.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 197a427a3ed584279a1a7a46c4b1fe25 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Plugins/iOS/FBOPlugin.h: -------------------------------------------------------------------------------- 1 | // 2 | // FBOPlugin.h 3 | // FBOPlugin 4 | // 5 | // Created by Robert Castle on 13/09/2013. 6 | // Copyright (c) 2013 Egomotion Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /* 12 | * Interop functions. C# calls these. 13 | */ 14 | extern "C" 15 | { 16 | void InitializeTexture(int textureID); 17 | void UpdateTexture(float value); 18 | } 19 | 20 | /* 21 | * The main class that manages the FBO 22 | */ 23 | @interface FBOPlugin : NSObject 24 | 25 | + (id) shared; 26 | 27 | - (void) initializeTexture:(int)texture; 28 | - (void) updateTexture:(float)value; 29 | @end 30 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Plugins/iOS/FBOPlugin.h.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0c624e26d0a9147c6a0cb8c71ce01d97 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Plugins/iOS/FBOPlugin.mm: -------------------------------------------------------------------------------- 1 | // 2 | // FBOPlugin.m 3 | // FBOPlugin 4 | // 5 | // Created by Robert Castle on 13/09/2013. 6 | // Copyright (c) 2013 Egomotion Limited. All rights reserved. 7 | // 8 | // This example shows how to make an OpenGL FBO, render content into it and 9 | // output it to a Unity Texture2D. 10 | // 11 | // There are a lot of comments and GL checks. You can strip them all, 12 | // but if you start tinkering it is very helpful to catch those GL errors as early 13 | // as possible to track them down. 14 | // 15 | 16 | #import "FBOPlugin.h" 17 | 18 | #import 19 | #import 20 | 21 | //Hard coded source texture sizes, also the FBO size. You can change this, and make it dynamic 22 | #define TEXTURE_WIDTH 8 23 | #define TEXTURE_HEIGHT 8 24 | 25 | 26 | #pragma mark - GL Debugging helpers 27 | 28 | #define ENABLE_GLES_DEBUG 1 29 | 30 | #if ENABLE_GLES_DEBUG 31 | void GLCheckError(const char* file, int line) 32 | { 33 | GLenum e = glGetError(); 34 | 35 | if( e ) 36 | { 37 | printf("OpenGLES error 0x%04X in %s:%i\n", e, file, line); 38 | } 39 | } 40 | 41 | #define GLESAssert() do { GLCheckError (__FILE__, __LINE__); } while(0) 42 | #define GLES_CHK(expr) do { {expr;} GLESAssert(); } while(0) 43 | #else 44 | #define GLESAssert() do { } while(0) 45 | #define GLES_CHK(expr) do { expr; } while(0) 46 | #endif 47 | 48 | #pragma mark - GL Attributes and Uniforms 49 | 50 | enum { 51 | ATTRIB_VERTEX, 52 | ATTRIB_TEXTUREPOSITON, 53 | NUM_ATTRIBUTES 54 | }; 55 | 56 | enum 57 | { 58 | UNIFORM_TEXTURE, 59 | NUM_UNIFORMS 60 | }; 61 | 62 | 63 | #pragma mark - Interop code 64 | 65 | void InitializeTexture(int textureID) 66 | { 67 | [[FBOPlugin shared] initializeTexture:textureID]; 68 | } 69 | 70 | void UpdateTexture(float value) 71 | { 72 | [[FBOPlugin shared] updateTexture:value]; 73 | } 74 | 75 | 76 | #pragma mark - The main singleton class 77 | 78 | @implementation FBOPlugin 79 | { 80 | GLuint _sourceTexture; // The source texture that is drawn into the FBO 81 | GLuint _unityTexture; // The texture ID from Unity 82 | GLuint _frameBuffer; // The framebuffer Object 83 | 84 | GLuint _program; // The shader program used to render our texture into the FBO 85 | GLint _uniforms[NUM_UNIFORMS]; // List of uniforms 86 | 87 | 88 | } 89 | 90 | /** 91 | * Create the singleton 92 | */ 93 | + (id) shared 94 | { 95 | static dispatch_once_t predicate; 96 | static FBOPlugin * instance = nil; 97 | dispatch_once(&predicate, ^{instance = [[self alloc] init];}); 98 | return instance; 99 | } 100 | 101 | /** 102 | * Call initializeTexture with a native texture ID to initialize the 103 | * FBO and attach the nuity texture to it as a render target 104 | */ 105 | - (void) initializeTexture:(int)texture 106 | { 107 | _unityTexture = texture; 108 | 109 | GLESAssert(); 110 | //Save the current state 111 | GLint previousFBO, previousRenderBuffer, previous_program; 112 | glGetIntegerv(GL_FRAMEBUFFER_BINDING, &previousFBO); 113 | glGetIntegerv(GL_RENDERBUFFER_BINDING, &previousRenderBuffer); 114 | glGetIntegerv(GL_CURRENT_PROGRAM, &previous_program); 115 | 116 | //create the FBO 117 | if ([self createFBO]) 118 | { 119 | //Render the source image into the FBO and update our Unity texture. 120 | [self updateTexture:0.0f]; 121 | } 122 | else 123 | { 124 | NSLog(@"FBO not created"); 125 | GLESAssert(); 126 | } 127 | 128 | //Restore the state 129 | glBindFramebuffer(GL_FRAMEBUFFER, previousFBO); 130 | glBindRenderbuffer(GL_RENDERBUFFER, previousRenderBuffer); 131 | glUseProgram(previous_program); 132 | } 133 | 134 | 135 | /** 136 | * updateTexture updates the source image and is associated texture 137 | * based on the float passed to it. 138 | * It then renders this to the FBO. 139 | * As the Unity texture is attached to the FBO as an output the rasterized 140 | * result from the FBO is written in to it. 141 | */ 142 | - (void) updateTexture:(float)value 143 | { 144 | GLESAssert(); 145 | 146 | //Save current state 147 | GLint previousFBO, previousRenderBuffer, previous_program; 148 | glGetIntegerv(GL_FRAMEBUFFER_BINDING, &previousFBO); 149 | glGetIntegerv(GL_RENDERBUFFER_BINDING, &previousRenderBuffer); 150 | glGetIntegerv(GL_CURRENT_PROGRAM, &previous_program); 151 | 152 | //Need to set up the FBO first 153 | if (!_frameBuffer) { 154 | NSLog(@"ERROR FBO not created"); 155 | return; 156 | } 157 | 158 | //Generate a new image and update source texture 159 | [self generateImage:value]; 160 | 161 | //Set up our FBO 162 | glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer); 163 | GLESAssert(); 164 | glViewport(0, 0, TEXTURE_WIDTH, TEXTURE_HEIGHT); 165 | GLESAssert(); 166 | glDisable(GL_BLEND); 167 | glDisable(GL_DEPTH_TEST); 168 | glDepthMask(GL_FALSE); 169 | glDisable(GL_CULL_FACE); 170 | glBindBuffer(GL_ARRAY_BUFFER, 0); 171 | glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 172 | glPolygonOffset(0.0f, 0.0f); 173 | glDisable(GL_POLYGON_OFFSET_FILL); 174 | GLESAssert(); 175 | 176 | //Load the shaders if we have not done so 177 | if (_program == 0) 178 | { 179 | if(![self loadShaders]) { 180 | NSLog(@"Failed to load shaders!"); 181 | } 182 | } 183 | 184 | //Set up the program 185 | GLES_CHK( glUseProgram(_program) ); 186 | GLES_CHK( glUniform1i(_uniforms[UNIFORM_TEXTURE], 0) ); 187 | 188 | //clear the scene 189 | GLES_CHK( glClearColor(0.0f, 0.0f, 0.0f, 1.0f) ); 190 | glClear(GL_COLOR_BUFFER_BIT); 191 | 192 | //Bind out source texture 193 | GLES_CHK( glActiveTexture(GL_TEXTURE0) ); 194 | GLES_CHK( glBindTexture(GL_TEXTURE_2D, _sourceTexture) ); 195 | 196 | //Our object to render 197 | static const GLfloat imageVertices[] = { 198 | -1.0f, -1.0f, 199 | 1.0f, -1.0f, 200 | -1.0f, 1.0f, 201 | 1.0f, 1.0f, 202 | }; 203 | 204 | //The object's texture coordinates 205 | static const GLfloat textureCoordinates[] = { 206 | 0.0f, 1.0f, 207 | 1.0f, 1.0f, 208 | 0.0f, 0.0f, 209 | 1.0f, 0.0f, 210 | }; 211 | 212 | // Update attribute values. 213 | GLES_CHK( glEnableVertexAttribArray(ATTRIB_VERTEX) ); 214 | GLES_CHK( glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, imageVertices) ); 215 | GLES_CHK( glEnableVertexAttribArray(ATTRIB_TEXTUREPOSITON) ); 216 | GLES_CHK( glVertexAttribPointer(ATTRIB_TEXTUREPOSITON, 2, GL_FLOAT, 0, 0, textureCoordinates) ); 217 | 218 | //Draw the quad 219 | GLES_CHK( glDrawArrays(GL_TRIANGLE_STRIP, 0, 4) ); 220 | 221 | //Reset everything 222 | GLES_CHK( glActiveTexture(GL_TEXTURE0) ); 223 | GLES_CHK( glBindTexture(GL_TEXTURE_2D, 0) ); 224 | GLES_CHK( glActiveTexture(GL_TEXTURE1) ); 225 | GLES_CHK( glBindTexture(GL_TEXTURE_2D, 0) ); 226 | GLES_CHK( glBindVertexArrayOES(0) ); 227 | GLES_CHK( glDisableVertexAttribArray(ATTRIB_VERTEX) ); 228 | GLES_CHK( glDisableVertexAttribArray(ATTRIB_TEXTUREPOSITON) ); 229 | 230 | //Restore ttate 231 | glBindFramebuffer(GL_FRAMEBUFFER, previousFBO); 232 | GLESAssert(); 233 | glBindRenderbuffer(GL_RENDERBUFFER, previousRenderBuffer); 234 | GLESAssert(); 235 | glUseProgram(previous_program); 236 | GLESAssert(); 237 | } 238 | 239 | /** 240 | * Create the Framebuffer Object. 241 | * If the FBO already exists, then the unity texture is reattached. 242 | * This allows you to change the texture target if needed. 243 | */ 244 | - (BOOL) createFBO 245 | { 246 | if (_unityTexture <= 0) { 247 | NSLog(@"Unity Texture not set"); 248 | return NO; 249 | } 250 | 251 | //Create a new framebuffer if needed 252 | if(!_frameBuffer) 253 | { 254 | glGenFramebuffers(1, &_frameBuffer); 255 | GLESAssert(); 256 | } 257 | 258 | //bind FBO 259 | glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer); 260 | GLESAssert(); 261 | 262 | //bind the output texture and attach it 263 | glBindTexture(GL_TEXTURE_2D, _unityTexture); 264 | GLESAssert(); 265 | glTexImage2D(GL_TEXTURE_2D, 266 | 0, 267 | GL_RGBA, 268 | TEXTURE_WIDTH, 269 | TEXTURE_HEIGHT, 270 | 0, 271 | GL_RGBA, 272 | GL_UNSIGNED_BYTE, 273 | 0); 274 | GLESAssert(); 275 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 276 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 277 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 278 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 279 | GLESAssert(); 280 | 281 | glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0); 282 | GLESAssert(); 283 | glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _unityTexture, 0); 284 | GLESAssert(); 285 | 286 | //Did it work? 287 | GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 288 | 289 | if(status != GL_FRAMEBUFFER_COMPLETE) 290 | { 291 | NSLog(@"ERROR: UNITY PLUGIN CANNOT MAKE VALID FBO ATTACHMENT FROM UNITY TEXTURE ID"); 292 | return NO; 293 | } 294 | 295 | GLESAssert(); 296 | 297 | return YES; 298 | } 299 | 300 | /** 301 | * Destroy the FBO. 302 | * We don't actually call this in this example, as we never need to. 303 | * But this is how to do it. 304 | */ 305 | - (void) teardownFBO 306 | { 307 | if (_frameBuffer != 0) { 308 | glDeleteFramebuffers(1, &_frameBuffer); 309 | _frameBuffer = 0; 310 | } 311 | } 312 | 313 | /** 314 | * This silly function creates an image based on the 0-1 float value passed to it. 315 | * It then uploads it to the GPU as a texture. 316 | * This texture will be later rendered to the FBO 317 | */ 318 | - (void) generateImage:(float)value 319 | { 320 | if (value < 0.0f) value = 0.0f; 321 | if (value > 1.0f) value = 1.0f; 322 | 323 | GLubyte image[TEXTURE_HEIGHT][TEXTURE_WIDTH][3]; 324 | 325 | for (int row = 0; row < TEXTURE_HEIGHT; row++) 326 | { 327 | for (int col = 0; col < TEXTURE_WIDTH; col++) 328 | { 329 | GLubyte r, g, b; 330 | //Top 331 | if (row < TEXTURE_HEIGHT/2) 332 | { 333 | //Left 334 | if (col < TEXTURE_WIDTH/2) { 335 | r = (GLubyte)(MAX(value, 0.1f)* 255.0f); 336 | g = b = 0; 337 | } 338 | //Right 339 | else { 340 | g = (GLubyte)(MAX((1.0f - value), 0.2f) * 255.0f); 341 | r = b = 0; 342 | } 343 | } 344 | //Bottom 345 | else 346 | { 347 | //Left 348 | if (col < TEXTURE_WIDTH/2) { 349 | b = (GLubyte)(0.5f * value * 255.0f) + 50; 350 | r = g = 0; 351 | } 352 | //Right 353 | else { 354 | r = g = b = (GLubyte)(value * 255.0f); 355 | } 356 | } 357 | 358 | //Set the pixels 359 | image[row][col][0] = r; 360 | image[row][col][1] = g; 361 | image[row][col][2] = b; 362 | } 363 | } 364 | 365 | //Create the texture if it does not exist yet 366 | if (_sourceTexture <= 0) 367 | { 368 | glGenTextures(1, &_sourceTexture); 369 | glBindTexture(GL_TEXTURE_2D, _sourceTexture); 370 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 371 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 372 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 373 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 374 | } 375 | else { 376 | // Otherwise just bind it 377 | glBindTexture(GL_TEXTURE_2D, _sourceTexture); 378 | } 379 | 380 | //Upload the image data 381 | glTexImage2D(GL_TEXTURE_2D, 382 | 0, 383 | GL_RGB, 384 | TEXTURE_WIDTH, 385 | TEXTURE_HEIGHT, 386 | 0, 387 | GL_RGB, 388 | GL_UNSIGNED_BYTE, 389 | image); 390 | } 391 | 392 | 393 | #pragma mark - OpenGL ES 2 shader compilation 394 | /* 395 | Everything below was just ripped from an Apple example project. 396 | This is boilerplate stuff. It can be done better and more flexibly, 397 | but it serves its purpose for this demo. 398 | 399 | The key thing to note here is that the shaders are stored as embedded strings. 400 | You could pass the strings in yourself or load up files from the Resources folder. 401 | */ 402 | 403 | /** 404 | * Load up the basic passthrough shaders 405 | */ 406 | - (BOOL)loadShaders 407 | { 408 | glUseProgram(0); 409 | 410 | //shaders as embedded strings as we are making a library 411 | const GLchar vShaderStr[] = 412 | "attribute vec4 position; \n" 413 | "attribute mediump vec4 textureCoordinate; \n" 414 | "varying mediump vec2 coordinate; \n" 415 | "void main() \n" 416 | "{ \n" 417 | " gl_Position = position; \n" 418 | " coordinate = textureCoordinate.xy; \n" 419 | "}"; 420 | 421 | const GLchar fShaderStr[] = 422 | "varying highp vec2 coordinate; \n" 423 | "uniform sampler2D texture; \n" 424 | "void main() \n" 425 | "{ \n" 426 | " gl_FragColor = texture2D(texture, coordinate); \n" 427 | "}"; 428 | 429 | GLuint vertShader, fragShader; 430 | 431 | // Create shader program. 432 | _program = glCreateProgram(); 433 | 434 | // Create and compile vertex shader. 435 | if (![self compileShader:&vertShader type:GL_VERTEX_SHADER src:vShaderStr]) { 436 | NSLog(@"Failed to compile vertex shader"); 437 | return NO; 438 | } 439 | 440 | // Create and compile fragment shader. 441 | if (![self compileShader:&fragShader type:GL_FRAGMENT_SHADER src:fShaderStr]) { 442 | NSLog(@"Failed to compile fragment shader"); 443 | return NO; 444 | } 445 | 446 | // Attach vertex shader to _program. 447 | glAttachShader(_program, vertShader); 448 | 449 | // Attach fragment shader to _program. 450 | glAttachShader(_program, fragShader); 451 | 452 | 453 | // Bind attribute locations. 454 | // This needs to be done prior to linking. 455 | glBindAttribLocation(_program, ATTRIB_VERTEX, "position"); 456 | glBindAttribLocation(_program, ATTRIB_TEXTUREPOSITON, "textureCoordinate"); 457 | 458 | // Link program. 459 | if (![self linkProgram:_program]) { 460 | NSLog(@"Failed to link _program: %d", _program); 461 | 462 | if (vertShader) { 463 | glDeleteShader(vertShader); 464 | vertShader = 0; 465 | } 466 | if (fragShader) { 467 | glDeleteShader(fragShader); 468 | fragShader = 0; 469 | } 470 | if (_program) { 471 | glDeleteProgram(_program); 472 | _program = 0; 473 | } 474 | 475 | return NO; 476 | } 477 | 478 | // Get uniform locations. 479 | _uniforms[UNIFORM_TEXTURE] = glGetUniformLocation(_program, "texture"); 480 | 481 | 482 | // Release vertex and fragment shaders. 483 | if (vertShader) { 484 | glDetachShader(_program, vertShader); 485 | glDeleteShader(vertShader); 486 | } 487 | if (fragShader) { 488 | glDetachShader(_program, fragShader); 489 | glDeleteShader(fragShader); 490 | } 491 | 492 | return YES; 493 | } 494 | 495 | /** 496 | * Compile a shader 497 | */ 498 | - (BOOL)compileShader:(GLuint *)shader type:(GLenum)type src:(const GLchar *)source 499 | { 500 | GLint status; 501 | if (!source) { 502 | NSLog(@"Failed to load shader"); 503 | return NO; 504 | } 505 | 506 | *shader = glCreateShader(type); 507 | glShaderSource(*shader, 1, &source, NULL); 508 | glCompileShader(*shader); 509 | 510 | #if defined(DEBUG) 511 | GLint logLength; 512 | glGetShaderiv(*shader, GL_INFO_LOG_LENGTH, &logLength); 513 | if (logLength > 0) { 514 | GLchar *log = (GLchar *)malloc(logLength); 515 | glGetShaderInfoLog(*shader, logLength, &logLength, log); 516 | NSLog(@"Shader compile log:\n%s", log); 517 | free(log); 518 | } 519 | #endif 520 | 521 | glGetShaderiv(*shader, GL_COMPILE_STATUS, &status); 522 | if (status == 0) { 523 | glDeleteShader(*shader); 524 | return NO; 525 | } 526 | 527 | return YES; 528 | } 529 | 530 | /** 531 | * Link the program 532 | */ 533 | - (BOOL)linkProgram:(GLuint)prog 534 | { 535 | GLint status; 536 | glLinkProgram(prog); 537 | 538 | #if defined(DEBUG) 539 | GLint logLength; 540 | glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &logLength); 541 | if (logLength > 0) { 542 | GLchar *log = (GLchar *)malloc(logLength); 543 | glGetProgramInfoLog(prog, logLength, &logLength, log); 544 | NSLog(@"Program link log:\n%s", log); 545 | free(log); 546 | } 547 | #endif 548 | 549 | glGetProgramiv(prog, GL_LINK_STATUS, &status); 550 | if (status == 0) { 551 | return NO; 552 | } 553 | 554 | return YES; 555 | } 556 | 557 | /** 558 | * Check that the program is valid. 559 | */ 560 | - (BOOL)validateProgram:(GLuint)prog 561 | { 562 | GLint logLength, status; 563 | 564 | glValidateProgram(prog); 565 | glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &logLength); 566 | if (logLength > 0) { 567 | GLchar *log = (GLchar *)malloc(logLength); 568 | glGetProgramInfoLog(prog, logLength, &logLength, log); 569 | NSLog(@"Program validate log:\n%s", log); 570 | free(log); 571 | } 572 | 573 | glGetProgramiv(prog, GL_VALIDATE_STATUS, &status); 574 | if (status == 0) { 575 | return NO; 576 | } 577 | 578 | return YES; 579 | } 580 | 581 | 582 | @end 583 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Plugins/iOS/FBOPlugin.mm.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d4482ad9d79114f3c87946a495f8bcc5 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b00d41b7899364efbae613a006bfc18d 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Scenes/Test Scene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | SceneSettings: 5 | m_ObjectHideFlags: 0 6 | m_PVSData: 7 | m_QueryMode: 1 8 | m_PVSObjectsArray: [] 9 | m_PVSPortalsArray: [] 10 | m_OcclusionBakeSettings: 11 | viewCellSize: 1 12 | bakeMode: 2 13 | memoryUsage: 10485760 14 | --- !u!104 &2 15 | RenderSettings: 16 | m_Fog: 0 17 | m_FogColor: {r: .5, g: .5, b: .5, a: 1} 18 | m_FogMode: 3 19 | m_FogDensity: .00999999978 20 | m_LinearFogStart: 0 21 | m_LinearFogEnd: 300 22 | m_AmbientLight: {r: .200000003, g: .200000003, b: .200000003, a: 1} 23 | m_SkyboxMaterial: {fileID: 0} 24 | m_HaloStrength: .5 25 | m_FlareStrength: 1 26 | m_HaloTexture: {fileID: 0} 27 | m_SpotCookie: {fileID: 0} 28 | m_ObjectHideFlags: 0 29 | --- !u!127 &3 30 | LevelGameManager: 31 | m_ObjectHideFlags: 0 32 | --- !u!157 &4 33 | LightmapSettings: 34 | m_ObjectHideFlags: 0 35 | m_LightProbes: {fileID: 0} 36 | m_Lightmaps: [] 37 | m_LightmapsMode: 1 38 | m_BakedColorSpace: 0 39 | m_UseDualLightmapsInForward: 0 40 | m_LightmapEditorSettings: 41 | m_Resolution: 50 42 | m_LastUsedResolution: 0 43 | m_TextureWidth: 1024 44 | m_TextureHeight: 1024 45 | m_BounceBoost: 1 46 | m_BounceIntensity: 1 47 | m_SkyLightColor: {r: .860000014, g: .930000007, b: 1, a: 1} 48 | m_SkyLightIntensity: 0 49 | m_Quality: 0 50 | m_Bounces: 1 51 | m_FinalGatherRays: 1000 52 | m_FinalGatherContrastThreshold: .0500000007 53 | m_FinalGatherGradientThreshold: 0 54 | m_FinalGatherInterpolationPoints: 15 55 | m_AOAmount: 0 56 | m_AOMaxDistance: .100000001 57 | m_AOContrast: 1 58 | m_LODSurfaceMappingDistance: 1 59 | m_Padding: 0 60 | m_TextureCompression: 0 61 | m_LockAtlas: 0 62 | --- !u!196 &5 63 | NavMeshSettings: 64 | m_ObjectHideFlags: 0 65 | m_BuildSettings: 66 | agentRadius: .5 67 | agentHeight: 2 68 | agentSlope: 45 69 | agentClimb: .400000006 70 | ledgeDropHeight: 0 71 | maxJumpAcrossDistance: 0 72 | accuratePlacement: 0 73 | minRegionArea: 2 74 | widthInaccuracy: 16.666666 75 | heightInaccuracy: 10 76 | m_NavMesh: {fileID: 0} 77 | --- !u!1 &99900257 78 | GameObject: 79 | m_ObjectHideFlags: 0 80 | m_PrefabParentObject: {fileID: 100070, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 81 | m_PrefabInternal: {fileID: 2125993667} 82 | serializedVersion: 4 83 | m_Component: 84 | - 4: {fileID: 99900258} 85 | m_Layer: 0 86 | m_Name: Right_Pinky_Finger_Joint_01a 87 | m_TagString: Untagged 88 | m_Icon: {fileID: 0} 89 | m_NavMeshLayer: 0 90 | m_StaticEditorFlags: 0 91 | m_IsActive: 1 92 | --- !u!4 &99900258 93 | Transform: 94 | m_ObjectHideFlags: 0 95 | m_PrefabParentObject: {fileID: 400070, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 96 | m_PrefabInternal: {fileID: 2125993667} 97 | m_GameObject: {fileID: 99900257} 98 | m_LocalRotation: {x: .0105385007, y: .00873932242, z: .00555421319, w: .999890864} 99 | m_LocalPosition: {x: .0724464282, y: -.0139078433, z: .0319320038} 100 | m_LocalScale: {x: 1, y: 1, z: 1} 101 | m_Children: 102 | - {fileID: 1803178468} 103 | m_Father: {fileID: 1117035321} 104 | --- !u!1 &165399019 105 | GameObject: 106 | m_ObjectHideFlags: 0 107 | m_PrefabParentObject: {fileID: 100000, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 108 | m_PrefabInternal: {fileID: 2125993667} 109 | serializedVersion: 4 110 | m_Component: 111 | - 4: {fileID: 165399020} 112 | m_Layer: 0 113 | m_Name: Head 114 | m_TagString: Untagged 115 | m_Icon: {fileID: 0} 116 | m_NavMeshLayer: 0 117 | m_StaticEditorFlags: 0 118 | m_IsActive: 1 119 | --- !u!4 &165399020 120 | Transform: 121 | m_ObjectHideFlags: 0 122 | m_PrefabParentObject: {fileID: 400000, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 123 | m_PrefabInternal: {fileID: 2125993667} 124 | m_GameObject: {fileID: 165399019} 125 | m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} 126 | m_LocalPosition: {x: -.0795931146, y: 0, z: -2.09621381e-17} 127 | m_LocalScale: {x: 1, y: 1, z: 1} 128 | m_Children: [] 129 | m_Father: {fileID: 2062829926} 130 | --- !u!1 &205519087 131 | GameObject: 132 | m_ObjectHideFlags: 0 133 | m_PrefabParentObject: {fileID: 100044, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 134 | m_PrefabInternal: {fileID: 2125993667} 135 | serializedVersion: 4 136 | m_Component: 137 | - 4: {fileID: 205519088} 138 | m_Layer: 0 139 | m_Name: Left_Upper_Arm_Joint_01 140 | m_TagString: Untagged 141 | m_Icon: {fileID: 0} 142 | m_NavMeshLayer: 0 143 | m_StaticEditorFlags: 0 144 | m_IsActive: 1 145 | --- !u!4 &205519088 146 | Transform: 147 | m_ObjectHideFlags: 0 148 | m_PrefabParentObject: {fileID: 400044, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 149 | m_PrefabInternal: {fileID: 2125993667} 150 | m_GameObject: {fileID: 205519087} 151 | m_LocalRotation: {x: .114033155, y: .00978105981, z: .439645886, w: .890849233} 152 | m_LocalPosition: {x: -.0635852665, y: 0, z: -3.10862448e-17} 153 | m_LocalScale: {x: 1, y: 1, z: 1} 154 | m_Children: 155 | - {fileID: 1382556684} 156 | m_Father: {fileID: 236388620} 157 | --- !u!1 &211949059 158 | GameObject: 159 | m_ObjectHideFlags: 0 160 | m_PrefabParentObject: {fileID: 100014, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 161 | m_PrefabInternal: {fileID: 2125993667} 162 | serializedVersion: 4 163 | m_Component: 164 | - 4: {fileID: 211949060} 165 | m_Layer: 0 166 | m_Name: Left_Knee_Joint_01 167 | m_TagString: Untagged 168 | m_Icon: {fileID: 0} 169 | m_NavMeshLayer: 0 170 | m_StaticEditorFlags: 0 171 | m_IsActive: 1 172 | --- !u!4 &211949060 173 | Transform: 174 | m_ObjectHideFlags: 0 175 | m_PrefabParentObject: {fileID: 400014, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 176 | m_PrefabInternal: {fileID: 2125993667} 177 | m_GameObject: {fileID: 211949059} 178 | m_LocalRotation: {x: 4.44010621e-16, y: 8.35449275e-18, z: .0188126452, w: .999823034} 179 | m_LocalPosition: {x: -.371733814, y: -.00199661148, z: .0730361715} 180 | m_LocalScale: {x: 1, y: 1, z: 1} 181 | m_Children: 182 | - {fileID: 1146601144} 183 | m_Father: {fileID: 1568418314} 184 | --- !u!1 &236388619 185 | GameObject: 186 | m_ObjectHideFlags: 0 187 | m_PrefabParentObject: {fileID: 100034, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 188 | m_PrefabInternal: {fileID: 2125993667} 189 | serializedVersion: 4 190 | m_Component: 191 | - 4: {fileID: 236388620} 192 | m_Layer: 0 193 | m_Name: Left_Shoulder_Joint_01 194 | m_TagString: Untagged 195 | m_Icon: {fileID: 0} 196 | m_NavMeshLayer: 0 197 | m_StaticEditorFlags: 0 198 | m_IsActive: 1 199 | --- !u!4 &236388620 200 | Transform: 201 | m_ObjectHideFlags: 0 202 | m_PrefabParentObject: {fileID: 400034, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 203 | m_PrefabInternal: {fileID: 2125993667} 204 | m_GameObject: {fileID: 236388619} 205 | m_LocalRotation: {x: -.410582274, y: .447834462, z: .536756337, w: .585456312} 206 | m_LocalPosition: {x: -.24796544, y: -.0189683326, z: .131307259} 207 | m_LocalScale: {x: 1, y: 1, z: 1} 208 | m_Children: 209 | - {fileID: 205519088} 210 | m_Father: {fileID: 1019296807} 211 | --- !u!1 &365597838 212 | GameObject: 213 | m_ObjectHideFlags: 0 214 | m_PrefabParentObject: {fileID: 100054, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 215 | m_PrefabInternal: {fileID: 2125993667} 216 | serializedVersion: 4 217 | m_Component: 218 | - 4: {fileID: 365597839} 219 | m_Layer: 0 220 | m_Name: Right_Forearm_Joint_01 221 | m_TagString: Untagged 222 | m_Icon: {fileID: 0} 223 | m_NavMeshLayer: 0 224 | m_StaticEditorFlags: 0 225 | m_IsActive: 1 226 | --- !u!4 &365597839 227 | Transform: 228 | m_ObjectHideFlags: 0 229 | m_PrefabParentObject: {fileID: 400054, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 230 | m_PrefabInternal: {fileID: 2125993667} 231 | m_GameObject: {fileID: 365597838} 232 | m_LocalRotation: {x: .776706517, y: .186860234, z: -.0256702267, w: .600958645} 233 | m_LocalPosition: {x: .240620226, y: .00514373928, z: -.012117967} 234 | m_LocalScale: {x: 1, y: 1, z: 1} 235 | m_Children: 236 | - {fileID: 1117035321} 237 | m_Father: {fileID: 1439321154} 238 | --- !u!1 &502264551 239 | GameObject: 240 | m_ObjectHideFlags: 0 241 | m_PrefabParentObject: {fileID: 0} 242 | m_PrefabInternal: {fileID: 0} 243 | serializedVersion: 4 244 | m_Component: 245 | - 4: {fileID: 502264556} 246 | - 20: {fileID: 502264555} 247 | - 92: {fileID: 502264554} 248 | - 124: {fileID: 502264553} 249 | - 81: {fileID: 502264552} 250 | m_Layer: 0 251 | m_Name: Main Camera 252 | m_TagString: MainCamera 253 | m_Icon: {fileID: 0} 254 | m_NavMeshLayer: 0 255 | m_StaticEditorFlags: 0 256 | m_IsActive: 1 257 | --- !u!81 &502264552 258 | AudioListener: 259 | m_ObjectHideFlags: 0 260 | m_PrefabParentObject: {fileID: 0} 261 | m_PrefabInternal: {fileID: 0} 262 | m_GameObject: {fileID: 502264551} 263 | m_Enabled: 1 264 | --- !u!124 &502264553 265 | Behaviour: 266 | m_ObjectHideFlags: 0 267 | m_PrefabParentObject: {fileID: 0} 268 | m_PrefabInternal: {fileID: 0} 269 | m_GameObject: {fileID: 502264551} 270 | m_Enabled: 1 271 | --- !u!92 &502264554 272 | Behaviour: 273 | m_ObjectHideFlags: 0 274 | m_PrefabParentObject: {fileID: 0} 275 | m_PrefabInternal: {fileID: 0} 276 | m_GameObject: {fileID: 502264551} 277 | m_Enabled: 1 278 | --- !u!20 &502264555 279 | Camera: 280 | m_ObjectHideFlags: 0 281 | m_PrefabParentObject: {fileID: 0} 282 | m_PrefabInternal: {fileID: 0} 283 | m_GameObject: {fileID: 502264551} 284 | m_Enabled: 1 285 | serializedVersion: 2 286 | m_ClearFlags: 1 287 | m_BackGroundColor: {r: .618512094, g: .675365269, b: .764705896, a: .0196078438} 288 | m_NormalizedViewPortRect: 289 | serializedVersion: 2 290 | x: 0 291 | y: 0 292 | width: 1 293 | height: 1 294 | near clip plane: .300000012 295 | far clip plane: 10 296 | field of view: 60 297 | orthographic: 0 298 | orthographic size: 100 299 | m_Depth: -1 300 | m_CullingMask: 301 | serializedVersion: 2 302 | m_Bits: 4294967295 303 | m_RenderingPath: -1 304 | m_TargetTexture: {fileID: 0} 305 | m_HDR: 0 306 | --- !u!4 &502264556 307 | Transform: 308 | m_ObjectHideFlags: 0 309 | m_PrefabParentObject: {fileID: 0} 310 | m_PrefabInternal: {fileID: 0} 311 | m_GameObject: {fileID: 502264551} 312 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 313 | m_LocalPosition: {x: 0, y: 0, z: -2.44512796} 314 | m_LocalScale: {x: 1, y: 1, z: 1} 315 | m_Children: [] 316 | m_Father: {fileID: 0} 317 | --- !u!1 &585469685 318 | GameObject: 319 | m_ObjectHideFlags: 0 320 | m_PrefabParentObject: {fileID: 100064, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 321 | m_PrefabInternal: {fileID: 2125993667} 322 | serializedVersion: 4 323 | m_Component: 324 | - 4: {fileID: 585469686} 325 | m_Layer: 0 326 | m_Name: Right_Middle_Finger_Joint_01a 327 | m_TagString: Untagged 328 | m_Icon: {fileID: 0} 329 | m_NavMeshLayer: 0 330 | m_StaticEditorFlags: 0 331 | m_IsActive: 1 332 | --- !u!4 &585469686 333 | Transform: 334 | m_ObjectHideFlags: 0 335 | m_PrefabParentObject: {fileID: 400064, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 336 | m_PrefabInternal: {fileID: 2125993667} 337 | m_GameObject: {fileID: 585469685} 338 | m_LocalRotation: {x: .0104966946, y: .00878949184, z: .000784678909, w: .999906003} 339 | m_LocalPosition: {x: .0714474693, y: -.0138888024, z: -.00634721341} 340 | m_LocalScale: {x: 1, y: 1, z: 1} 341 | m_Children: 342 | - {fileID: 1295898342} 343 | m_Father: {fileID: 1117035321} 344 | --- !u!1 &594541689 345 | GameObject: 346 | m_ObjectHideFlags: 0 347 | m_PrefabParentObject: {fileID: 0} 348 | m_PrefabInternal: {fileID: 0} 349 | serializedVersion: 4 350 | m_Component: 351 | - 4: {fileID: 594541693} 352 | - 33: {fileID: 594541692} 353 | - 23: {fileID: 594541690} 354 | - 114: {fileID: 594541691} 355 | - 114: {fileID: 594541694} 356 | m_Layer: 0 357 | m_Name: FBO Test Quad 358 | m_TagString: Untagged 359 | m_Icon: {fileID: 0} 360 | m_NavMeshLayer: 0 361 | m_StaticEditorFlags: 0 362 | m_IsActive: 1 363 | --- !u!23 &594541690 364 | Renderer: 365 | m_ObjectHideFlags: 0 366 | m_PrefabParentObject: {fileID: 0} 367 | m_PrefabInternal: {fileID: 0} 368 | m_GameObject: {fileID: 594541689} 369 | m_Enabled: 1 370 | m_CastShadows: 1 371 | m_ReceiveShadows: 0 372 | m_LightmapIndex: 255 373 | m_LightmapTilingOffset: {x: 1, y: 1, z: 0, w: 0} 374 | m_Materials: 375 | - {fileID: 2100000, guid: 04a1af810f2434351b80a7549da4066f, type: 2} 376 | m_SubsetIndices: 377 | m_StaticBatchRoot: {fileID: 0} 378 | m_UseLightProbes: 0 379 | m_LightProbeAnchor: {fileID: 0} 380 | m_ScaleInLightmap: 1 381 | --- !u!114 &594541691 382 | MonoBehaviour: 383 | m_ObjectHideFlags: 0 384 | m_PrefabParentObject: {fileID: 0} 385 | m_PrefabInternal: {fileID: 0} 386 | m_GameObject: {fileID: 594541689} 387 | m_Enabled: 1 388 | m_EditorHideFlags: 0 389 | m_Script: {fileID: 11500000, guid: 62f6b52346bd34a1087362e284cf904a, type: 3} 390 | m_Name: 391 | m_EditorClassIdentifier: 392 | --- !u!33 &594541692 393 | MeshFilter: 394 | m_ObjectHideFlags: 0 395 | m_PrefabParentObject: {fileID: 0} 396 | m_PrefabInternal: {fileID: 0} 397 | m_GameObject: {fileID: 594541689} 398 | m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} 399 | --- !u!4 &594541693 400 | Transform: 401 | m_ObjectHideFlags: 0 402 | m_PrefabParentObject: {fileID: 0} 403 | m_PrefabInternal: {fileID: 0} 404 | m_GameObject: {fileID: 594541689} 405 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 406 | m_LocalPosition: {x: 0, y: .68111372, z: .5} 407 | m_LocalScale: {x: 1, y: 1, z: 1} 408 | m_Children: [] 409 | m_Father: {fileID: 0} 410 | --- !u!114 &594541694 411 | MonoBehaviour: 412 | m_ObjectHideFlags: 0 413 | m_PrefabParentObject: {fileID: 0} 414 | m_PrefabInternal: {fileID: 0} 415 | m_GameObject: {fileID: 594541689} 416 | m_Enabled: 1 417 | m_EditorHideFlags: 0 418 | m_Script: {fileID: 11500000, guid: 0705d7060623a4ce88f9ff9f92450c95, type: 3} 419 | m_Name: 420 | m_EditorClassIdentifier: 421 | axis: {x: 0, y: 0, z: 1} 422 | angle: 20 423 | --- !u!1 &611956489 424 | GameObject: 425 | m_ObjectHideFlags: 0 426 | m_PrefabParentObject: {fileID: 100022, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 427 | m_PrefabInternal: {fileID: 2125993667} 428 | serializedVersion: 4 429 | m_Component: 430 | - 4: {fileID: 611956490} 431 | m_Layer: 0 432 | m_Name: Left_Pinky_Finger_Joint_01a 433 | m_TagString: Untagged 434 | m_Icon: {fileID: 0} 435 | m_NavMeshLayer: 0 436 | m_StaticEditorFlags: 0 437 | m_IsActive: 1 438 | --- !u!4 &611956490 439 | Transform: 440 | m_ObjectHideFlags: 0 441 | m_PrefabParentObject: {fileID: 400022, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 442 | m_PrefabInternal: {fileID: 2125993667} 443 | m_GameObject: {fileID: 611956489} 444 | m_LocalRotation: {x: .0103123998, y: -.00016005653, z: .0155180898, w: .999826372} 445 | m_LocalPosition: {x: -.0721200481, y: .0124753257, z: -.0332361907} 446 | m_LocalScale: {x: 1, y: 1, z: 1} 447 | m_Children: 448 | - {fileID: 725393578} 449 | m_Father: {fileID: 872082177} 450 | --- !u!1 &638469722 451 | GameObject: 452 | m_ObjectHideFlags: 0 453 | m_PrefabParentObject: {fileID: 100078, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 454 | m_PrefabInternal: {fileID: 2125993667} 455 | serializedVersion: 4 456 | m_Component: 457 | - 4: {fileID: 638469723} 458 | m_Layer: 0 459 | m_Name: Right_Ring_Finger_Joint_01b 460 | m_TagString: Untagged 461 | m_Icon: {fileID: 0} 462 | m_NavMeshLayer: 0 463 | m_StaticEditorFlags: 0 464 | m_IsActive: 1 465 | --- !u!4 &638469723 466 | Transform: 467 | m_ObjectHideFlags: 0 468 | m_PrefabParentObject: {fileID: 400078, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 469 | m_PrefabInternal: {fileID: 2125993667} 470 | m_GameObject: {fileID: 638469722} 471 | m_LocalRotation: {x: .000756177527, y: .000507914461, z: .0118389884, w: .999929547} 472 | m_LocalPosition: {x: .0383345708, y: -1.48944338e-07, z: 2.93836546e-08} 473 | m_LocalScale: {x: 1, y: 1, z: 1} 474 | m_Children: 475 | - {fileID: 1599465730} 476 | m_Father: {fileID: 1208646269} 477 | --- !u!1 &725393577 478 | GameObject: 479 | m_ObjectHideFlags: 0 480 | m_PrefabParentObject: {fileID: 100024, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 481 | m_PrefabInternal: {fileID: 2125993667} 482 | serializedVersion: 4 483 | m_Component: 484 | - 4: {fileID: 725393578} 485 | m_Layer: 0 486 | m_Name: Left_Pinky_Finger_Joint_01b 487 | m_TagString: Untagged 488 | m_Icon: {fileID: 0} 489 | m_NavMeshLayer: 0 490 | m_StaticEditorFlags: 0 491 | m_IsActive: 1 492 | --- !u!4 &725393578 493 | Transform: 494 | m_ObjectHideFlags: 0 495 | m_PrefabParentObject: {fileID: 400024, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 496 | m_PrefabInternal: {fileID: 2125993667} 497 | m_GameObject: {fileID: 725393577} 498 | m_LocalRotation: {x: .000973835588, y: .000640973856, z: .0148621332, w: .999888897} 499 | m_LocalPosition: {x: -.0305155125, y: -3.15025781e-17, z: 2.47200941e-18} 500 | m_LocalScale: {x: 1, y: 1, z: 1} 501 | m_Children: 502 | - {fileID: 1993445303} 503 | m_Father: {fileID: 611956490} 504 | --- !u!1 &759983338 505 | GameObject: 506 | m_ObjectHideFlags: 0 507 | m_PrefabParentObject: {fileID: 100012, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 508 | m_PrefabInternal: {fileID: 2125993667} 509 | serializedVersion: 4 510 | m_Component: 511 | - 4: {fileID: 759983339} 512 | m_Layer: 0 513 | m_Name: Left_Index_Finger_Joint_01c 514 | m_TagString: Untagged 515 | m_Icon: {fileID: 0} 516 | m_NavMeshLayer: 0 517 | m_StaticEditorFlags: 0 518 | m_IsActive: 1 519 | --- !u!4 &759983339 520 | Transform: 521 | m_ObjectHideFlags: 0 522 | m_PrefabParentObject: {fileID: 400012, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 523 | m_PrefabInternal: {fileID: 2125993667} 524 | m_GameObject: {fileID: 759983338} 525 | m_LocalRotation: {x: -.0110166054, y: -.000252159196, z: -.0228816289, w: .999677479} 526 | m_LocalPosition: {x: -.0229451396, y: -3.19098593e-16, z: 9.77516636e-18} 527 | m_LocalScale: {x: 1, y: 1, z: 1} 528 | m_Children: [] 529 | m_Father: {fileID: 1433989379} 530 | --- !u!1 &767182337 531 | GameObject: 532 | m_ObjectHideFlags: 0 533 | m_PrefabParentObject: {fileID: 100088, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 534 | m_PrefabInternal: {fileID: 2125993667} 535 | serializedVersion: 4 536 | m_Component: 537 | - 4: {fileID: 767182338} 538 | m_Layer: 0 539 | m_Name: Right_Thumb_Joint_01b 540 | m_TagString: Untagged 541 | m_Icon: {fileID: 0} 542 | m_NavMeshLayer: 0 543 | m_StaticEditorFlags: 0 544 | m_IsActive: 1 545 | --- !u!4 &767182338 546 | Transform: 547 | m_ObjectHideFlags: 0 548 | m_PrefabParentObject: {fileID: 400088, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 549 | m_PrefabInternal: {fileID: 2125993667} 550 | m_GameObject: {fileID: 767182337} 551 | m_LocalRotation: {x: .122744381, y: -.0850149319, z: .318449587, w: .93610692} 552 | m_LocalPosition: {x: .0287784021, y: .00164802861, z: .00240408769} 553 | m_LocalScale: {x: 1, y: 1, z: 1} 554 | m_Children: [] 555 | m_Father: {fileID: 1131776073} 556 | --- !u!1 &782449245 557 | GameObject: 558 | m_ObjectHideFlags: 0 559 | m_PrefabParentObject: {fileID: 100068, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 560 | m_PrefabInternal: {fileID: 2125993667} 561 | serializedVersion: 4 562 | m_Component: 563 | - 4: {fileID: 782449246} 564 | m_Layer: 0 565 | m_Name: Right_Middle_Finger_Joint_01c 566 | m_TagString: Untagged 567 | m_Icon: {fileID: 0} 568 | m_NavMeshLayer: 0 569 | m_StaticEditorFlags: 0 570 | m_IsActive: 1 571 | --- !u!4 &782449246 572 | Transform: 573 | m_ObjectHideFlags: 0 574 | m_PrefabParentObject: {fileID: 400068, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 575 | m_PrefabInternal: {fileID: 2125993667} 576 | m_GameObject: {fileID: 782449245} 577 | m_LocalRotation: {x: -.0109563544, y: -.00023076385, z: -.0210561678, w: .999718249} 578 | m_LocalPosition: {x: .0249327328, y: -3.78608348e-07, z: 6.71087363e-08} 579 | m_LocalScale: {x: 1, y: 1, z: 1} 580 | m_Children: [] 581 | m_Father: {fileID: 1295898342} 582 | --- !u!1 &808047112 583 | GameObject: 584 | m_ObjectHideFlags: 0 585 | m_PrefabParentObject: {fileID: 100018, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 586 | m_PrefabInternal: {fileID: 2125993667} 587 | serializedVersion: 4 588 | m_Component: 589 | - 4: {fileID: 808047113} 590 | m_Layer: 0 591 | m_Name: Left_Middle_Finger_Joint_01b 592 | m_TagString: Untagged 593 | m_Icon: {fileID: 0} 594 | m_NavMeshLayer: 0 595 | m_StaticEditorFlags: 0 596 | m_IsActive: 1 597 | --- !u!4 &808047113 598 | Transform: 599 | m_ObjectHideFlags: 0 600 | m_PrefabParentObject: {fileID: 400018, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 601 | m_PrefabInternal: {fileID: 2125993667} 602 | m_GameObject: {fileID: 808047112} 603 | m_LocalRotation: {x: .000649813446, y: .000440957752, z: .0103045162, w: .999946594} 604 | m_LocalPosition: {x: -.0440528281, y: 2.220446e-18, z: 1.31478208e-18} 605 | m_LocalScale: {x: 1, y: 1, z: 1} 606 | m_Children: 607 | - {fileID: 1157929965} 608 | m_Father: {fileID: 1906748153} 609 | --- !u!1 &834584286 610 | GameObject: 611 | m_ObjectHideFlags: 0 612 | m_PrefabParentObject: {fileID: 100052, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 613 | m_PrefabInternal: {fileID: 2125993667} 614 | serializedVersion: 4 615 | m_Component: 616 | - 4: {fileID: 834584287} 617 | m_Layer: 0 618 | m_Name: Right_Ankle_Joint_01 619 | m_TagString: Untagged 620 | m_Icon: {fileID: 0} 621 | m_NavMeshLayer: 0 622 | m_StaticEditorFlags: 0 623 | m_IsActive: 1 624 | --- !u!4 &834584287 625 | Transform: 626 | m_ObjectHideFlags: 0 627 | m_PrefabParentObject: {fileID: 400052, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 628 | m_PrefabInternal: {fileID: 2125993667} 629 | m_GameObject: {fileID: 834584286} 630 | m_LocalRotation: {x: 0, y: 0, z: -.494364947, w: .86925447} 631 | m_LocalPosition: {x: .434049755, y: 7.89986814e-08, z: -1.7763568e-17} 632 | m_LocalScale: {x: 1, y: 1, z: 1} 633 | m_Children: 634 | - {fileID: 1498624613} 635 | m_Father: {fileID: 1205273340} 636 | --- !u!1 &872082176 637 | GameObject: 638 | m_ObjectHideFlags: 0 639 | m_PrefabParentObject: {fileID: 100046, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 640 | m_PrefabInternal: {fileID: 2125993667} 641 | serializedVersion: 4 642 | m_Component: 643 | - 4: {fileID: 872082177} 644 | m_Layer: 0 645 | m_Name: Left_Wrist_Joint_01 646 | m_TagString: Untagged 647 | m_Icon: {fileID: 0} 648 | m_NavMeshLayer: 0 649 | m_StaticEditorFlags: 0 650 | m_IsActive: 1 651 | --- !u!4 &872082177 652 | Transform: 653 | m_ObjectHideFlags: 0 654 | m_PrefabParentObject: {fileID: 400046, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 655 | m_PrefabInternal: {fileID: 2125993667} 656 | m_GameObject: {fileID: 872082176} 657 | m_LocalRotation: {x: -.00341344066, y: .00664581871, z: .454181045, w: .890878141} 658 | m_LocalPosition: {x: -.176925823, y: -.248301715, z: .0419350788} 659 | m_LocalScale: {x: 1, y: 1, z: 1} 660 | m_Children: 661 | - {fileID: 1344554738} 662 | - {fileID: 1906748153} 663 | - {fileID: 611956490} 664 | - {fileID: 1673902867} 665 | - {fileID: 980135951} 666 | m_Father: {fileID: 1382556684} 667 | --- !u!1 &898016730 668 | GameObject: 669 | m_ObjectHideFlags: 0 670 | m_PrefabParentObject: {fileID: 0} 671 | m_PrefabInternal: {fileID: 0} 672 | serializedVersion: 4 673 | m_Component: 674 | - 4: {fileID: 898016734} 675 | - 33: {fileID: 898016733} 676 | - 23: {fileID: 898016731} 677 | - 114: {fileID: 898016735} 678 | - 114: {fileID: 898016732} 679 | m_Layer: 0 680 | m_Name: FBO Test Cube 681 | m_TagString: Untagged 682 | m_Icon: {fileID: 0} 683 | m_NavMeshLayer: 0 684 | m_StaticEditorFlags: 0 685 | m_IsActive: 1 686 | --- !u!23 &898016731 687 | Renderer: 688 | m_ObjectHideFlags: 0 689 | m_PrefabParentObject: {fileID: 0} 690 | m_PrefabInternal: {fileID: 0} 691 | m_GameObject: {fileID: 898016730} 692 | m_Enabled: 1 693 | m_CastShadows: 1 694 | m_ReceiveShadows: 1 695 | m_LightmapIndex: 255 696 | m_LightmapTilingOffset: {x: 1, y: 1, z: 0, w: 0} 697 | m_Materials: 698 | - {fileID: 2100000, guid: ef556dc3ef3104632af9b80a1c7ec368, type: 2} 699 | m_SubsetIndices: 700 | m_StaticBatchRoot: {fileID: 0} 701 | m_UseLightProbes: 0 702 | m_LightProbeAnchor: {fileID: 0} 703 | m_ScaleInLightmap: 1 704 | --- !u!114 &898016732 705 | MonoBehaviour: 706 | m_ObjectHideFlags: 0 707 | m_PrefabParentObject: {fileID: 0} 708 | m_PrefabInternal: {fileID: 0} 709 | m_GameObject: {fileID: 898016730} 710 | m_Enabled: 1 711 | m_EditorHideFlags: 0 712 | m_Script: {fileID: 11500000, guid: 0705d7060623a4ce88f9ff9f92450c95, type: 3} 713 | m_Name: 714 | m_EditorClassIdentifier: 715 | axis: {x: .300000012, y: .400000006, z: .100000001} 716 | angle: 50 717 | --- !u!33 &898016733 718 | MeshFilter: 719 | m_ObjectHideFlags: 0 720 | m_PrefabParentObject: {fileID: 0} 721 | m_PrefabInternal: {fileID: 0} 722 | m_GameObject: {fileID: 898016730} 723 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 724 | --- !u!4 &898016734 725 | Transform: 726 | m_ObjectHideFlags: 0 727 | m_PrefabParentObject: {fileID: 0} 728 | m_PrefabInternal: {fileID: 0} 729 | m_GameObject: {fileID: 898016730} 730 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 731 | m_LocalPosition: {x: 0, y: -.81888628, z: .5} 732 | m_LocalScale: {x: .5, y: .699999988, z: 1} 733 | m_Children: [] 734 | m_Father: {fileID: 0} 735 | --- !u!114 &898016735 736 | MonoBehaviour: 737 | m_ObjectHideFlags: 0 738 | m_PrefabParentObject: {fileID: 0} 739 | m_PrefabInternal: {fileID: 0} 740 | m_GameObject: {fileID: 898016730} 741 | m_Enabled: 1 742 | m_EditorHideFlags: 0 743 | m_Script: {fileID: 11500000, guid: 62f6b52346bd34a1087362e284cf904a, type: 3} 744 | m_Name: 745 | m_EditorClassIdentifier: 746 | --- !u!1 &980135950 747 | GameObject: 748 | m_ObjectHideFlags: 0 749 | m_PrefabParentObject: {fileID: 100038, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 750 | m_PrefabInternal: {fileID: 2125993667} 751 | serializedVersion: 4 752 | m_Component: 753 | - 4: {fileID: 980135951} 754 | m_Layer: 0 755 | m_Name: Left_Thumb_Joint_01a 756 | m_TagString: Untagged 757 | m_Icon: {fileID: 0} 758 | m_NavMeshLayer: 0 759 | m_StaticEditorFlags: 0 760 | m_IsActive: 1 761 | --- !u!4 &980135951 762 | Transform: 763 | m_ObjectHideFlags: 0 764 | m_PrefabParentObject: {fileID: 400038, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 765 | m_PrefabInternal: {fileID: 2125993667} 766 | m_GameObject: {fileID: 980135950} 767 | m_LocalRotation: {x: .420362532, y: .371804148, z: -.0835276917, w: .823456287} 768 | m_LocalPosition: {x: -.0468873158, y: -.00486531109, z: .0469883345} 769 | m_LocalScale: {x: 1, y: 1, z: 1} 770 | m_Children: 771 | - {fileID: 1936642655} 772 | m_Father: {fileID: 872082177} 773 | --- !u!1 &992113266 774 | GameObject: 775 | m_ObjectHideFlags: 0 776 | m_PrefabParentObject: {fileID: 100032, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 777 | m_PrefabInternal: {fileID: 2125993667} 778 | serializedVersion: 4 779 | m_Component: 780 | - 4: {fileID: 992113267} 781 | m_Layer: 0 782 | m_Name: Left_Ring_Finger_Joint_01c 783 | m_TagString: Untagged 784 | m_Icon: {fileID: 0} 785 | m_NavMeshLayer: 0 786 | m_StaticEditorFlags: 0 787 | m_IsActive: 1 788 | --- !u!4 &992113267 789 | Transform: 790 | m_ObjectHideFlags: 0 791 | m_PrefabParentObject: {fileID: 400032, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 792 | m_PrefabInternal: {fileID: 2125993667} 793 | m_GameObject: {fileID: 992113266} 794 | m_LocalRotation: {x: -.0110604241, y: -.000267697003, z: -.024194574, w: .999646068} 795 | m_LocalPosition: {x: -.021700656, y: -6.47745087e-17, z: 8.27463095e-18} 796 | m_LocalScale: {x: 1, y: 1, z: 1} 797 | m_Children: [] 798 | m_Father: {fileID: 1839769794} 799 | --- !u!1 &1019296806 800 | GameObject: 801 | m_ObjectHideFlags: 0 802 | m_PrefabParentObject: {fileID: 100050, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 803 | m_PrefabInternal: {fileID: 2125993667} 804 | serializedVersion: 4 805 | m_Component: 806 | - 4: {fileID: 1019296807} 807 | m_Layer: 0 808 | m_Name: Ribs 809 | m_TagString: Untagged 810 | m_Icon: {fileID: 0} 811 | m_NavMeshLayer: 0 812 | m_StaticEditorFlags: 0 813 | m_IsActive: 1 814 | --- !u!4 &1019296807 815 | Transform: 816 | m_ObjectHideFlags: 0 817 | m_PrefabParentObject: {fileID: 400050, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 818 | m_PrefabInternal: {fileID: 2125993667} 819 | m_GameObject: {fileID: 1019296806} 820 | m_LocalRotation: {x: 0, y: 0, z: -.00937534776, w: .999956071} 821 | m_LocalPosition: {x: -.0802452713, y: .000621672545, z: -9.82317013e-18} 822 | m_LocalScale: {x: 1, y: 1, z: 1} 823 | m_Children: 824 | - {fileID: 236388620} 825 | - {fileID: 2062829926} 826 | - {fileID: 1303736064} 827 | m_Father: {fileID: 1425386497} 828 | --- !u!1 &1086600944 829 | GameObject: 830 | m_ObjectHideFlags: 0 831 | m_PrefabParentObject: {fileID: 100098, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 832 | m_PrefabInternal: {fileID: 2125993667} 833 | serializedVersion: 4 834 | m_Component: 835 | - 4: {fileID: 1086600945} 836 | - 137: {fileID: 1086600946} 837 | m_Layer: 0 838 | m_Name: Robot2 839 | m_TagString: Untagged 840 | m_Icon: {fileID: 0} 841 | m_NavMeshLayer: 0 842 | m_StaticEditorFlags: 0 843 | m_IsActive: 1 844 | --- !u!4 &1086600945 845 | Transform: 846 | m_ObjectHideFlags: 0 847 | m_PrefabParentObject: {fileID: 400098, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 848 | m_PrefabInternal: {fileID: 2125993667} 849 | m_GameObject: {fileID: 1086600944} 850 | m_LocalRotation: {x: 0, y: -0, z: 0, w: 1} 851 | m_LocalPosition: {x: 0, y: 0, z: 0} 852 | m_LocalScale: {x: 1, y: 1, z: 1} 853 | m_Children: [] 854 | m_Father: {fileID: 1480049601} 855 | --- !u!137 &1086600946 856 | SkinnedMeshRenderer: 857 | m_ObjectHideFlags: 0 858 | m_PrefabParentObject: {fileID: 13700000, guid: 320b1c2af77554f99a1658df4a6d3d5c, 859 | type: 3} 860 | m_PrefabInternal: {fileID: 2125993667} 861 | m_GameObject: {fileID: 1086600944} 862 | m_Enabled: 1 863 | m_CastShadows: 1 864 | m_ReceiveShadows: 1 865 | m_LightmapIndex: 255 866 | m_LightmapTilingOffset: {x: 1, y: 1, z: 0, w: 0} 867 | m_Materials: 868 | - {fileID: 2100000, guid: 0aa851515cd3747d6b3b3e461199a2ed, type: 2} 869 | m_SubsetIndices: 870 | m_StaticBatchRoot: {fileID: 0} 871 | m_UseLightProbes: 0 872 | m_LightProbeAnchor: {fileID: 0} 873 | m_ScaleInLightmap: 1 874 | serializedVersion: 2 875 | m_Quality: 0 876 | m_UpdateWhenOffscreen: 0 877 | m_Mesh: {fileID: 4300000, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 878 | m_Bones: 879 | - {fileID: 1019296807} 880 | - {fileID: 2062829926} 881 | - {fileID: 165399020} 882 | - {fileID: 236388620} 883 | - {fileID: 205519088} 884 | - {fileID: 1382556684} 885 | - {fileID: 872082177} 886 | - {fileID: 1344554738} 887 | - {fileID: 1433989379} 888 | - {fileID: 759983339} 889 | - {fileID: 1906748153} 890 | - {fileID: 808047113} 891 | - {fileID: 1157929965} 892 | - {fileID: 1673902867} 893 | - {fileID: 1839769794} 894 | - {fileID: 992113267} 895 | - {fileID: 611956490} 896 | - {fileID: 725393578} 897 | - {fileID: 1993445303} 898 | - {fileID: 980135951} 899 | - {fileID: 1936642655} 900 | - {fileID: 1303736064} 901 | - {fileID: 1439321154} 902 | - {fileID: 365597839} 903 | - {fileID: 1117035321} 904 | - {fileID: 2018325952} 905 | - {fileID: 1258525505} 906 | - {fileID: 1252159642} 907 | - {fileID: 585469686} 908 | - {fileID: 1295898342} 909 | - {fileID: 782449246} 910 | - {fileID: 1208646269} 911 | - {fileID: 638469723} 912 | - {fileID: 1599465730} 913 | - {fileID: 99900258} 914 | - {fileID: 1803178468} 915 | - {fileID: 1667190205} 916 | - {fileID: 1131776073} 917 | - {fileID: 767182338} 918 | - {fileID: 1292731849} 919 | - {fileID: 1568418314} 920 | - {fileID: 211949060} 921 | - {fileID: 1146601144} 922 | - {fileID: 1888595815} 923 | - {fileID: 1690402498} 924 | - {fileID: 1205273340} 925 | - {fileID: 834584287} 926 | - {fileID: 1498624613} 927 | m_RootBone: {fileID: 1019296807} 928 | m_AABB: 929 | m_Center: {x: .270246029, y: -.0418999046, z: -5.96046448e-08} 930 | m_Extent: {x: .952544928, y: .231277213, z: .651417971} 931 | m_DirtyAABB: 0 932 | --- !u!1 &1117035320 933 | GameObject: 934 | m_ObjectHideFlags: 0 935 | m_PrefabParentObject: {fileID: 100094, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 936 | m_PrefabInternal: {fileID: 2125993667} 937 | serializedVersion: 4 938 | m_Component: 939 | - 4: {fileID: 1117035321} 940 | m_Layer: 0 941 | m_Name: Right_Wrist_Joint_01 942 | m_TagString: Untagged 943 | m_Icon: {fileID: 0} 944 | m_NavMeshLayer: 0 945 | m_StaticEditorFlags: 0 946 | m_IsActive: 1 947 | --- !u!4 &1117035321 948 | Transform: 949 | m_ObjectHideFlags: 0 950 | m_PrefabParentObject: {fileID: 400094, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 951 | m_PrefabInternal: {fileID: 2125993667} 952 | m_GameObject: {fileID: 1117035320} 953 | m_LocalRotation: {x: -.705957174, y: -.0156877022, z: .00680277729, w: .708048165} 954 | m_LocalPosition: {x: .305883735, y: -.0331729203, z: .00706654601} 955 | m_LocalScale: {x: 1, y: 1, z: 1} 956 | m_Children: 957 | - {fileID: 2018325952} 958 | - {fileID: 585469686} 959 | - {fileID: 99900258} 960 | - {fileID: 1208646269} 961 | - {fileID: 1131776073} 962 | m_Father: {fileID: 365597839} 963 | --- !u!1 &1131776072 964 | GameObject: 965 | m_ObjectHideFlags: 0 966 | m_PrefabParentObject: {fileID: 100086, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 967 | m_PrefabInternal: {fileID: 2125993667} 968 | serializedVersion: 4 969 | m_Component: 970 | - 4: {fileID: 1131776073} 971 | m_Layer: 0 972 | m_Name: Right_Thumb_Joint_01a 973 | m_TagString: Untagged 974 | m_Icon: {fileID: 0} 975 | m_NavMeshLayer: 0 976 | m_StaticEditorFlags: 0 977 | m_IsActive: 1 978 | --- !u!4 &1131776073 979 | Transform: 980 | m_ObjectHideFlags: 0 981 | m_PrefabParentObject: {fileID: 400086, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 982 | m_PrefabInternal: {fileID: 2125993667} 983 | m_GameObject: {fileID: 1131776072} 984 | m_LocalRotation: {x: .4233163, y: .375043303, z: -.0954007804, w: .819173098} 985 | m_LocalPosition: {x: .0461209379, y: .00395598775, z: -.0478250794} 986 | m_LocalScale: {x: 1, y: 1, z: 1} 987 | m_Children: 988 | - {fileID: 767182338} 989 | m_Father: {fileID: 1117035321} 990 | --- !u!1 &1146601143 991 | GameObject: 992 | m_ObjectHideFlags: 0 993 | m_PrefabParentObject: {fileID: 100004, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 994 | m_PrefabInternal: {fileID: 2125993667} 995 | serializedVersion: 4 996 | m_Component: 997 | - 4: {fileID: 1146601144} 998 | m_Layer: 0 999 | m_Name: Left_Ankle_Joint_01 1000 | m_TagString: Untagged 1001 | m_Icon: {fileID: 0} 1002 | m_NavMeshLayer: 0 1003 | m_StaticEditorFlags: 0 1004 | m_IsActive: 1 1005 | --- !u!4 &1146601144 1006 | Transform: 1007 | m_ObjectHideFlags: 0 1008 | m_PrefabParentObject: {fileID: 400004, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1009 | m_PrefabInternal: {fileID: 2125993667} 1010 | m_GameObject: {fileID: 1146601143} 1011 | m_LocalRotation: {x: .86925447, y: .494364947, z: 3.02711212e-17, w: 5.3226485e-17} 1012 | m_LocalPosition: {x: -.434050143, y: -8.42735248e-18, z: -8.746468e-18} 1013 | m_LocalScale: {x: 1, y: 1, z: 1} 1014 | m_Children: 1015 | - {fileID: 1888595815} 1016 | m_Father: {fileID: 211949060} 1017 | --- !u!1 &1157929964 1018 | GameObject: 1019 | m_ObjectHideFlags: 0 1020 | m_PrefabParentObject: {fileID: 100020, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1021 | m_PrefabInternal: {fileID: 2125993667} 1022 | serializedVersion: 4 1023 | m_Component: 1024 | - 4: {fileID: 1157929965} 1025 | m_Layer: 0 1026 | m_Name: Left_Middle_Finger_Joint_01c 1027 | m_TagString: Untagged 1028 | m_Icon: {fileID: 0} 1029 | m_NavMeshLayer: 0 1030 | m_StaticEditorFlags: 0 1031 | m_IsActive: 1 1032 | --- !u!4 &1157929965 1033 | Transform: 1034 | m_ObjectHideFlags: 0 1035 | m_PrefabParentObject: {fileID: 400020, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1036 | m_PrefabInternal: {fileID: 2125993667} 1037 | m_GameObject: {fileID: 1157929964} 1038 | m_LocalRotation: {x: -.0109563544, y: -.00023076385, z: -.0210561678, w: .999718249} 1039 | m_LocalPosition: {x: -.0249333773, y: 1.4801235e-16, z: -4.9960034e-18} 1040 | m_LocalScale: {x: 1, y: 1, z: 1} 1041 | m_Children: [] 1042 | m_Father: {fileID: 808047113} 1043 | --- !u!1 &1205273339 1044 | GameObject: 1045 | m_ObjectHideFlags: 0 1046 | m_PrefabParentObject: {fileID: 100062, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1047 | m_PrefabInternal: {fileID: 2125993667} 1048 | serializedVersion: 4 1049 | m_Component: 1050 | - 4: {fileID: 1205273340} 1051 | m_Layer: 0 1052 | m_Name: Right_Knee_Joint_01 1053 | m_TagString: Untagged 1054 | m_Icon: {fileID: 0} 1055 | m_NavMeshLayer: 0 1056 | m_StaticEditorFlags: 0 1057 | m_IsActive: 1 1058 | --- !u!4 &1205273340 1059 | Transform: 1060 | m_ObjectHideFlags: 0 1061 | m_PrefabParentObject: {fileID: 400062, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1062 | m_PrefabInternal: {fileID: 2125993667} 1063 | m_GameObject: {fileID: 1205273339} 1064 | m_LocalRotation: {x: 0, y: 0, z: -.0188126452, w: .999823034} 1065 | m_LocalPosition: {x: .371734113, y: -.00199670601, z: .073036395} 1066 | m_LocalScale: {x: 1, y: 1, z: 1} 1067 | m_Children: 1068 | - {fileID: 834584287} 1069 | m_Father: {fileID: 1690402498} 1070 | --- !u!1 &1208646268 1071 | GameObject: 1072 | m_ObjectHideFlags: 0 1073 | m_PrefabParentObject: {fileID: 100076, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1074 | m_PrefabInternal: {fileID: 2125993667} 1075 | serializedVersion: 4 1076 | m_Component: 1077 | - 4: {fileID: 1208646269} 1078 | m_Layer: 0 1079 | m_Name: Right_Ring_Finger_Joint_01a 1080 | m_TagString: Untagged 1081 | m_Icon: {fileID: 0} 1082 | m_NavMeshLayer: 0 1083 | m_StaticEditorFlags: 0 1084 | m_IsActive: 1 1085 | --- !u!4 &1208646269 1086 | Transform: 1087 | m_ObjectHideFlags: 0 1088 | m_PrefabParentObject: {fileID: 400076, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1089 | m_PrefabInternal: {fileID: 2125993667} 1090 | m_GameObject: {fileID: 1208646268} 1091 | m_LocalRotation: {x: .0105107799, y: .00877264235, z: .00238862471, w: .99990344} 1092 | m_LocalPosition: {x: .0722524822, y: -.0139042325, z: .0135582108} 1093 | m_LocalScale: {x: 1, y: 1, z: 1} 1094 | m_Children: 1095 | - {fileID: 638469723} 1096 | m_Father: {fileID: 1117035321} 1097 | --- !u!1 &1252159641 1098 | GameObject: 1099 | m_ObjectHideFlags: 0 1100 | m_PrefabParentObject: {fileID: 100060, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1101 | m_PrefabInternal: {fileID: 2125993667} 1102 | serializedVersion: 4 1103 | m_Component: 1104 | - 4: {fileID: 1252159642} 1105 | m_Layer: 0 1106 | m_Name: Right_Index_Finger_Joint_01c 1107 | m_TagString: Untagged 1108 | m_Icon: {fileID: 0} 1109 | m_NavMeshLayer: 0 1110 | m_StaticEditorFlags: 0 1111 | m_IsActive: 1 1112 | --- !u!4 &1252159642 1113 | Transform: 1114 | m_ObjectHideFlags: 0 1115 | m_PrefabParentObject: {fileID: 400060, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1116 | m_PrefabInternal: {fileID: 2125993667} 1117 | m_GameObject: {fileID: 1252159641} 1118 | m_LocalRotation: {x: -.0110166054, y: -.000252159196, z: -.0228816289, w: .999677479} 1119 | m_LocalPosition: {x: .0229448024, y: -7.9775738e-08, z: -7.1668687e-08} 1120 | m_LocalScale: {x: 1, y: 1, z: 1} 1121 | m_Children: [] 1122 | m_Father: {fileID: 1258525505} 1123 | --- !u!1 &1258525504 1124 | GameObject: 1125 | m_ObjectHideFlags: 0 1126 | m_PrefabParentObject: {fileID: 100058, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1127 | m_PrefabInternal: {fileID: 2125993667} 1128 | serializedVersion: 4 1129 | m_Component: 1130 | - 4: {fileID: 1258525505} 1131 | m_Layer: 0 1132 | m_Name: Right_Index_Finger_Joint_01b 1133 | m_TagString: Untagged 1134 | m_Icon: {fileID: 0} 1135 | m_NavMeshLayer: 0 1136 | m_StaticEditorFlags: 0 1137 | m_IsActive: 1 1138 | --- !u!4 &1258525505 1139 | Transform: 1140 | m_ObjectHideFlags: 0 1141 | m_PrefabParentObject: {fileID: 400058, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1142 | m_PrefabInternal: {fileID: 2125993667} 1143 | m_GameObject: {fileID: 1258525504} 1144 | m_LocalRotation: {x: .000711358734, y: .000479860872, z: .011196685, w: .999936938} 1145 | m_LocalPosition: {x: .0405342206, y: -9.35433206e-07, z: 2.2560922e-08} 1146 | m_LocalScale: {x: 1, y: 1, z: 1} 1147 | m_Children: 1148 | - {fileID: 1252159642} 1149 | m_Father: {fileID: 2018325952} 1150 | --- !u!1 &1292731848 1151 | GameObject: 1152 | m_ObjectHideFlags: 0 1153 | m_PrefabParentObject: {fileID: 100002, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1154 | m_PrefabInternal: {fileID: 2125993667} 1155 | serializedVersion: 4 1156 | m_Component: 1157 | - 4: {fileID: 1292731849} 1158 | m_Layer: 0 1159 | m_Name: Hip 1160 | m_TagString: Untagged 1161 | m_Icon: {fileID: 0} 1162 | m_NavMeshLayer: 0 1163 | m_StaticEditorFlags: 0 1164 | m_IsActive: 1 1165 | --- !u!4 &1292731849 1166 | Transform: 1167 | m_ObjectHideFlags: 0 1168 | m_PrefabParentObject: {fileID: 400002, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1169 | m_PrefabInternal: {fileID: 2125993667} 1170 | m_GameObject: {fileID: 1292731848} 1171 | m_LocalRotation: {x: .0377401859, y: .999287605, z: 5.51196334e-17, w: 1.63008619e-16} 1172 | m_LocalPosition: {x: .028992068, y: -.00259387214, z: 1.22991095e-17} 1173 | m_LocalScale: {x: 1, y: 1, z: 1} 1174 | m_Children: 1175 | - {fileID: 1568418314} 1176 | - {fileID: 1690402498} 1177 | m_Father: {fileID: 1425386497} 1178 | --- !u!1 &1295898341 1179 | GameObject: 1180 | m_ObjectHideFlags: 0 1181 | m_PrefabParentObject: {fileID: 100066, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1182 | m_PrefabInternal: {fileID: 2125993667} 1183 | serializedVersion: 4 1184 | m_Component: 1185 | - 4: {fileID: 1295898342} 1186 | m_Layer: 0 1187 | m_Name: Right_Middle_Finger_Joint_01b 1188 | m_TagString: Untagged 1189 | m_Icon: {fileID: 0} 1190 | m_NavMeshLayer: 0 1191 | m_StaticEditorFlags: 0 1192 | m_IsActive: 1 1193 | --- !u!4 &1295898342 1194 | Transform: 1195 | m_ObjectHideFlags: 0 1196 | m_PrefabParentObject: {fileID: 400066, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1197 | m_PrefabInternal: {fileID: 2125993667} 1198 | m_GameObject: {fileID: 1295898341} 1199 | m_LocalRotation: {x: .000649813446, y: .000440957752, z: .0103045162, w: .999946594} 1200 | m_LocalPosition: {x: .0440530181, y: 6.33701404e-07, z: -1.95757313e-08} 1201 | m_LocalScale: {x: 1, y: 1, z: 1} 1202 | m_Children: 1203 | - {fileID: 782449246} 1204 | m_Father: {fileID: 585469686} 1205 | --- !u!1 &1303736063 1206 | GameObject: 1207 | m_ObjectHideFlags: 0 1208 | m_PrefabParentObject: {fileID: 100082, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1209 | m_PrefabInternal: {fileID: 2125993667} 1210 | serializedVersion: 4 1211 | m_Component: 1212 | - 4: {fileID: 1303736064} 1213 | m_Layer: 0 1214 | m_Name: Right_Shoulder_Joint_01 1215 | m_TagString: Untagged 1216 | m_Icon: {fileID: 0} 1217 | m_NavMeshLayer: 0 1218 | m_StaticEditorFlags: 0 1219 | m_IsActive: 1 1220 | --- !u!4 &1303736064 1221 | Transform: 1222 | m_ObjectHideFlags: 0 1223 | m_PrefabParentObject: {fileID: 400082, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1224 | m_PrefabInternal: {fileID: 2125993667} 1225 | m_GameObject: {fileID: 1303736063} 1226 | m_LocalRotation: {x: .447834462, y: .410582274, z: -.585456312, w: .536756337} 1227 | m_LocalPosition: {x: -.247969925, y: -.0189679097, z: -.131306991} 1228 | m_LocalScale: {x: 1, y: 1, z: 1} 1229 | m_Children: 1230 | - {fileID: 1439321154} 1231 | m_Father: {fileID: 1019296807} 1232 | --- !u!1 &1344554737 1233 | GameObject: 1234 | m_ObjectHideFlags: 0 1235 | m_PrefabParentObject: {fileID: 100008, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1236 | m_PrefabInternal: {fileID: 2125993667} 1237 | serializedVersion: 4 1238 | m_Component: 1239 | - 4: {fileID: 1344554738} 1240 | m_Layer: 0 1241 | m_Name: Left_Index_Finger_Joint_01a 1242 | m_TagString: Untagged 1243 | m_Icon: {fileID: 0} 1244 | m_NavMeshLayer: 0 1245 | m_StaticEditorFlags: 0 1246 | m_IsActive: 1 1247 | --- !u!4 &1344554738 1248 | Transform: 1249 | m_ObjectHideFlags: 0 1250 | m_PrefabParentObject: {fileID: 400008, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1251 | m_PrefabInternal: {fileID: 2125993667} 1252 | m_GameObject: {fileID: 1344554737} 1253 | m_LocalRotation: {x: .0103129372, y: -.000120490411, z: .0116820037, w: .999878585} 1254 | m_LocalPosition: {x: -.0701322183, y: .0124753257, z: .0255052447} 1255 | m_LocalScale: {x: 1, y: 1, z: 1} 1256 | m_Children: 1257 | - {fileID: 1433989379} 1258 | m_Father: {fileID: 872082177} 1259 | --- !u!1 &1382556683 1260 | GameObject: 1261 | m_ObjectHideFlags: 0 1262 | m_PrefabParentObject: {fileID: 100006, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1263 | m_PrefabInternal: {fileID: 2125993667} 1264 | serializedVersion: 4 1265 | m_Component: 1266 | - 4: {fileID: 1382556684} 1267 | m_Layer: 0 1268 | m_Name: Left_Forearm_Joint_01 1269 | m_TagString: Untagged 1270 | m_Icon: {fileID: 0} 1271 | m_NavMeshLayer: 0 1272 | m_StaticEditorFlags: 0 1273 | m_IsActive: 1 1274 | --- !u!4 &1382556684 1275 | Transform: 1276 | m_ObjectHideFlags: 0 1277 | m_PrefabParentObject: {fileID: 400006, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1278 | m_PrefabInternal: {fileID: 2125993667} 1279 | m_GameObject: {fileID: 1382556683} 1280 | m_LocalRotation: {x: -.0549920201, y: .10791634, z: -.450852454, w: .88434273} 1281 | m_LocalPosition: {x: -.238371104, y: .0353246704, z: -.00126056455} 1282 | m_LocalScale: {x: 1, y: 1, z: 1} 1283 | m_Children: 1284 | - {fileID: 872082177} 1285 | m_Father: {fileID: 205519088} 1286 | --- !u!1 &1425386496 1287 | GameObject: 1288 | m_ObjectHideFlags: 0 1289 | m_PrefabParentObject: {fileID: 100100, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1290 | m_PrefabInternal: {fileID: 2125993667} 1291 | serializedVersion: 4 1292 | m_Component: 1293 | - 4: {fileID: 1425386497} 1294 | m_Layer: 0 1295 | m_Name: Root 1296 | m_TagString: Untagged 1297 | m_Icon: {fileID: 0} 1298 | m_NavMeshLayer: 0 1299 | m_StaticEditorFlags: 0 1300 | m_IsActive: 1 1301 | --- !u!4 &1425386497 1302 | Transform: 1303 | m_ObjectHideFlags: 0 1304 | m_PrefabParentObject: {fileID: 400100, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1305 | m_PrefabInternal: {fileID: 2125993667} 1306 | m_GameObject: {fileID: 1425386496} 1307 | m_LocalRotation: {x: .472944558, y: -.525664747, z: -.472944558, w: .525664747} 1308 | m_LocalPosition: {x: -2.18785635e-33, y: 1.06283081, z: .0351298526} 1309 | m_LocalScale: {x: 1, y: .999999881, z: 1} 1310 | m_Children: 1311 | - {fileID: 1292731849} 1312 | - {fileID: 1019296807} 1313 | m_Father: {fileID: 1480049601} 1314 | --- !u!1 &1433989378 1315 | GameObject: 1316 | m_ObjectHideFlags: 0 1317 | m_PrefabParentObject: {fileID: 100010, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1318 | m_PrefabInternal: {fileID: 2125993667} 1319 | serializedVersion: 4 1320 | m_Component: 1321 | - 4: {fileID: 1433989379} 1322 | m_Layer: 0 1323 | m_Name: Left_Index_Finger_Joint_01b 1324 | m_TagString: Untagged 1325 | m_Icon: {fileID: 0} 1326 | m_NavMeshLayer: 0 1327 | m_StaticEditorFlags: 0 1328 | m_IsActive: 1 1329 | --- !u!4 &1433989379 1330 | Transform: 1331 | m_ObjectHideFlags: 0 1332 | m_PrefabParentObject: {fileID: 400010, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1333 | m_PrefabInternal: {fileID: 2125993667} 1334 | m_GameObject: {fileID: 1433989378} 1335 | m_LocalRotation: {x: .000711358734, y: .000479860872, z: .011196685, w: .999936938} 1336 | m_LocalPosition: {x: -.0405339487, y: -2.33146828e-17, z: 9.92263839e-19} 1337 | m_LocalScale: {x: 1, y: 1, z: 1} 1338 | m_Children: 1339 | - {fileID: 759983339} 1340 | m_Father: {fileID: 1344554738} 1341 | --- !u!1 &1439321153 1342 | GameObject: 1343 | m_ObjectHideFlags: 0 1344 | m_PrefabParentObject: {fileID: 100092, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1345 | m_PrefabInternal: {fileID: 2125993667} 1346 | serializedVersion: 4 1347 | m_Component: 1348 | - 4: {fileID: 1439321154} 1349 | m_Layer: 0 1350 | m_Name: Right_Upper_Arm_Joint_01 1351 | m_TagString: Untagged 1352 | m_Icon: {fileID: 0} 1353 | m_NavMeshLayer: 0 1354 | m_StaticEditorFlags: 0 1355 | m_IsActive: 1 1356 | --- !u!4 &1439321154 1357 | Transform: 1358 | m_ObjectHideFlags: 0 1359 | m_PrefabParentObject: {fileID: 400092, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1360 | m_PrefabInternal: {fileID: 2125993667} 1361 | m_GameObject: {fileID: 1439321153} 1362 | m_LocalRotation: {x: -.0008169309, y: -.0578288883, z: .361656964, w: .930515647} 1363 | m_LocalPosition: {x: .0635855645, y: 2.84217088e-16, z: -3.92599446e-08} 1364 | m_LocalScale: {x: 1, y: 1, z: 1} 1365 | m_Children: 1366 | - {fileID: 365597839} 1367 | m_Father: {fileID: 1303736064} 1368 | --- !u!1 &1480049600 1369 | GameObject: 1370 | m_ObjectHideFlags: 0 1371 | m_PrefabParentObject: {fileID: 100096, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1372 | m_PrefabInternal: {fileID: 2125993667} 1373 | serializedVersion: 4 1374 | m_Component: 1375 | - 4: {fileID: 1480049601} 1376 | - 111: {fileID: 1480049602} 1377 | - 114: {fileID: 1480049603} 1378 | m_Layer: 0 1379 | m_Name: Robot Kyle 1380 | m_TagString: Untagged 1381 | m_Icon: {fileID: 0} 1382 | m_NavMeshLayer: 0 1383 | m_StaticEditorFlags: 0 1384 | m_IsActive: 1 1385 | --- !u!4 &1480049601 1386 | Transform: 1387 | m_ObjectHideFlags: 0 1388 | m_PrefabParentObject: {fileID: 400096, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1389 | m_PrefabInternal: {fileID: 2125993667} 1390 | m_GameObject: {fileID: 1480049600} 1391 | m_LocalRotation: {x: 0, y: .99619472, z: 0, w: -.087155886} 1392 | m_LocalPosition: {x: 0, y: -1.71387935, z: 2.48007917} 1393 | m_LocalScale: {x: 2, y: 2, z: 2} 1394 | m_Children: 1395 | - {fileID: 1086600945} 1396 | - {fileID: 1425386497} 1397 | m_Father: {fileID: 0} 1398 | --- !u!111 &1480049602 1399 | Animation: 1400 | m_ObjectHideFlags: 0 1401 | m_PrefabParentObject: {fileID: 11100000, guid: 320b1c2af77554f99a1658df4a6d3d5c, 1402 | type: 3} 1403 | m_PrefabInternal: {fileID: 2125993667} 1404 | m_GameObject: {fileID: 1480049600} 1405 | m_Enabled: 1 1406 | serializedVersion: 3 1407 | m_Animation: {fileID: 0} 1408 | m_Animations: [] 1409 | m_WrapMode: 0 1410 | m_PlayAutomatically: 1 1411 | m_AnimatePhysics: 0 1412 | m_CullingType: 1 1413 | m_UserAABB: 1414 | m_Center: {x: 0, y: 0, z: 0} 1415 | m_Extent: {x: 0, y: 0, z: 0} 1416 | --- !u!114 &1480049603 1417 | MonoBehaviour: 1418 | m_ObjectHideFlags: 0 1419 | m_PrefabParentObject: {fileID: 0} 1420 | m_PrefabInternal: {fileID: 0} 1421 | m_GameObject: {fileID: 1480049600} 1422 | m_Enabled: 1 1423 | m_EditorHideFlags: 0 1424 | m_Script: {fileID: 11500000, guid: 0705d7060623a4ce88f9ff9f92450c95, type: 3} 1425 | m_Name: 1426 | m_EditorClassIdentifier: 1427 | axis: {x: 0, y: 1, z: 0} 1428 | angle: 30 1429 | --- !u!1 &1498624612 1430 | GameObject: 1431 | m_ObjectHideFlags: 0 1432 | m_PrefabParentObject: {fileID: 100090, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1433 | m_PrefabInternal: {fileID: 2125993667} 1434 | serializedVersion: 4 1435 | m_Component: 1436 | - 4: {fileID: 1498624613} 1437 | m_Layer: 0 1438 | m_Name: Right_Toe_Joint_01 1439 | m_TagString: Untagged 1440 | m_Icon: {fileID: 0} 1441 | m_NavMeshLayer: 0 1442 | m_StaticEditorFlags: 0 1443 | m_IsActive: 1 1444 | --- !u!4 &1498624613 1445 | Transform: 1446 | m_ObjectHideFlags: 0 1447 | m_PrefabParentObject: {fileID: 400090, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1448 | m_PrefabInternal: {fileID: 2125993667} 1449 | m_GameObject: {fileID: 1498624612} 1450 | m_LocalRotation: {x: 1.22199291e-08, y: -4.14810586e-09, z: -.321439385, w: .94693017} 1451 | m_LocalPosition: {x: .13787201, y: 6.44108695e-08, z: -3.5527136e-17} 1452 | m_LocalScale: {x: 1, y: 1, z: 1} 1453 | m_Children: [] 1454 | m_Father: {fileID: 834584287} 1455 | --- !u!1 &1568418313 1456 | GameObject: 1457 | m_ObjectHideFlags: 0 1458 | m_PrefabParentObject: {fileID: 100036, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1459 | m_PrefabInternal: {fileID: 2125993667} 1460 | serializedVersion: 4 1461 | m_Component: 1462 | - 4: {fileID: 1568418314} 1463 | m_Layer: 0 1464 | m_Name: Left_Thigh_Joint_01 1465 | m_TagString: Untagged 1466 | m_Icon: {fileID: 0} 1467 | m_NavMeshLayer: 0 1468 | m_StaticEditorFlags: 0 1469 | m_IsActive: 1 1470 | --- !u!4 &1568418314 1471 | Transform: 1472 | m_ObjectHideFlags: 0 1473 | m_PrefabParentObject: {fileID: 400036, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1474 | m_PrefabInternal: {fileID: 2125993667} 1475 | m_GameObject: {fileID: 1568418313} 1476 | m_LocalRotation: {x: .995700479, y: .0926313698, z: 6.73769248e-17, w: 7.24238846e-16} 1477 | m_LocalPosition: {x: -.122133613, y: .0113319969, z: -.0689055547} 1478 | m_LocalScale: {x: 1, y: 1, z: 1} 1479 | m_Children: 1480 | - {fileID: 211949060} 1481 | m_Father: {fileID: 1292731849} 1482 | --- !u!1 &1599465729 1483 | GameObject: 1484 | m_ObjectHideFlags: 0 1485 | m_PrefabParentObject: {fileID: 100080, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1486 | m_PrefabInternal: {fileID: 2125993667} 1487 | serializedVersion: 4 1488 | m_Component: 1489 | - 4: {fileID: 1599465730} 1490 | m_Layer: 0 1491 | m_Name: Right_Ring_Finger_Joint_01c 1492 | m_TagString: Untagged 1493 | m_Icon: {fileID: 0} 1494 | m_NavMeshLayer: 0 1495 | m_StaticEditorFlags: 0 1496 | m_IsActive: 1 1497 | --- !u!4 &1599465730 1498 | Transform: 1499 | m_ObjectHideFlags: 0 1500 | m_PrefabParentObject: {fileID: 400080, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1501 | m_PrefabInternal: {fileID: 2125993667} 1502 | m_GameObject: {fileID: 1599465729} 1503 | m_LocalRotation: {x: -.0110604241, y: -.000267697003, z: -.024194574, w: .999646068} 1504 | m_LocalPosition: {x: .0217003096, y: 2.02178668e-07, z: -9.37706375e-08} 1505 | m_LocalScale: {x: 1, y: 1, z: 1} 1506 | m_Children: [] 1507 | m_Father: {fileID: 638469723} 1508 | --- !u!1 &1667190204 1509 | GameObject: 1510 | m_ObjectHideFlags: 0 1511 | m_PrefabParentObject: {fileID: 100074, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1512 | m_PrefabInternal: {fileID: 2125993667} 1513 | serializedVersion: 4 1514 | m_Component: 1515 | - 4: {fileID: 1667190205} 1516 | m_Layer: 0 1517 | m_Name: Right_Pinky_Finger_Joint_01c 1518 | m_TagString: Untagged 1519 | m_Icon: {fileID: 0} 1520 | m_NavMeshLayer: 0 1521 | m_StaticEditorFlags: 0 1522 | m_IsActive: 1 1523 | --- !u!4 &1667190205 1524 | Transform: 1525 | m_ObjectHideFlags: 0 1526 | m_PrefabParentObject: {fileID: 400074, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1527 | m_PrefabInternal: {fileID: 2125993667} 1528 | m_GameObject: {fileID: 1667190204} 1529 | m_LocalRotation: {x: -.0112725943, y: -.000342671672, z: -.0303826835, w: .999474704} 1530 | m_LocalPosition: {x: .0172829479, y: -1.95356151e-07, z: 1.46504391e-08} 1531 | m_LocalScale: {x: 1, y: 1, z: 1} 1532 | m_Children: [] 1533 | m_Father: {fileID: 1803178468} 1534 | --- !u!1 &1673902866 1535 | GameObject: 1536 | m_ObjectHideFlags: 0 1537 | m_PrefabParentObject: {fileID: 100028, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1538 | m_PrefabInternal: {fileID: 2125993667} 1539 | serializedVersion: 4 1540 | m_Component: 1541 | - 4: {fileID: 1673902867} 1542 | m_Layer: 0 1543 | m_Name: Left_Ring_Finger_Joint_01a 1544 | m_TagString: Untagged 1545 | m_Icon: {fileID: 0} 1546 | m_NavMeshLayer: 0 1547 | m_StaticEditorFlags: 0 1548 | m_IsActive: 1 1549 | --- !u!4 &1673902867 1550 | Transform: 1551 | m_ObjectHideFlags: 0 1552 | m_PrefabParentObject: {fileID: 400028, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1553 | m_PrefabInternal: {fileID: 2125993667} 1554 | m_GameObject: {fileID: 1673902866} 1555 | m_LocalRotation: {x: .0103128543, y: -.000127407635, z: .0123526547, w: .999870539} 1556 | m_LocalPosition: {x: -.0722572058, y: .0124753257, z: -.014861824} 1557 | m_LocalScale: {x: 1, y: 1, z: 1} 1558 | m_Children: 1559 | - {fileID: 1839769794} 1560 | m_Father: {fileID: 872082177} 1561 | --- !u!1 &1690402497 1562 | GameObject: 1563 | m_ObjectHideFlags: 0 1564 | m_PrefabParentObject: {fileID: 100084, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1565 | m_PrefabInternal: {fileID: 2125993667} 1566 | serializedVersion: 4 1567 | m_Component: 1568 | - 4: {fileID: 1690402498} 1569 | m_Layer: 0 1570 | m_Name: Right_Thigh_Joint_01 1571 | m_TagString: Untagged 1572 | m_Icon: {fileID: 0} 1573 | m_NavMeshLayer: 0 1574 | m_StaticEditorFlags: 0 1575 | m_IsActive: 1 1576 | --- !u!4 &1690402498 1577 | Transform: 1578 | m_ObjectHideFlags: 0 1579 | m_PrefabParentObject: {fileID: 400084, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1580 | m_PrefabInternal: {fileID: 2125993667} 1581 | m_GameObject: {fileID: 1690402497} 1582 | m_LocalRotation: {x: -0, y: 0, z: .995700479, w: -.0926313698} 1583 | m_LocalPosition: {x: -.122133501, y: .011331954, z: .0689055994} 1584 | m_LocalScale: {x: 1, y: 1, z: 1} 1585 | m_Children: 1586 | - {fileID: 1205273340} 1587 | m_Father: {fileID: 1292731849} 1588 | --- !u!1 &1803178467 1589 | GameObject: 1590 | m_ObjectHideFlags: 0 1591 | m_PrefabParentObject: {fileID: 100072, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1592 | m_PrefabInternal: {fileID: 2125993667} 1593 | serializedVersion: 4 1594 | m_Component: 1595 | - 4: {fileID: 1803178468} 1596 | m_Layer: 0 1597 | m_Name: Right_Pinky_Finger_Joint_01b 1598 | m_TagString: Untagged 1599 | m_Icon: {fileID: 0} 1600 | m_NavMeshLayer: 0 1601 | m_StaticEditorFlags: 0 1602 | m_IsActive: 1 1603 | --- !u!4 &1803178468 1604 | Transform: 1605 | m_ObjectHideFlags: 0 1606 | m_PrefabParentObject: {fileID: 400072, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1607 | m_PrefabInternal: {fileID: 2125993667} 1608 | m_GameObject: {fileID: 1803178467} 1609 | m_LocalRotation: {x: .000973835588, y: .000640973856, z: .0148621332, w: .999888897} 1610 | m_LocalPosition: {x: .0305161439, y: -4.78116e-08, z: 6.06602839e-08} 1611 | m_LocalScale: {x: 1, y: 1, z: 1} 1612 | m_Children: 1613 | - {fileID: 1667190205} 1614 | m_Father: {fileID: 99900258} 1615 | --- !u!1 &1839769793 1616 | GameObject: 1617 | m_ObjectHideFlags: 0 1618 | m_PrefabParentObject: {fileID: 100030, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1619 | m_PrefabInternal: {fileID: 2125993667} 1620 | serializedVersion: 4 1621 | m_Component: 1622 | - 4: {fileID: 1839769794} 1623 | m_Layer: 0 1624 | m_Name: Left_Ring_Finger_Joint_01b 1625 | m_TagString: Untagged 1626 | m_Icon: {fileID: 0} 1627 | m_NavMeshLayer: 0 1628 | m_StaticEditorFlags: 0 1629 | m_IsActive: 1 1630 | --- !u!4 &1839769794 1631 | Transform: 1632 | m_ObjectHideFlags: 0 1633 | m_PrefabParentObject: {fileID: 400030, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1634 | m_PrefabInternal: {fileID: 2125993667} 1635 | m_GameObject: {fileID: 1839769793} 1636 | m_LocalRotation: {x: .000756177527, y: .000507914461, z: .0118389884, w: .999929547} 1637 | m_LocalPosition: {x: -.0383335873, y: -2.4980017e-18, z: 4.41263923e-18} 1638 | m_LocalScale: {x: 1, y: 1, z: 1} 1639 | m_Children: 1640 | - {fileID: 992113267} 1641 | m_Father: {fileID: 1673902867} 1642 | --- !u!1 &1888595814 1643 | GameObject: 1644 | m_ObjectHideFlags: 0 1645 | m_PrefabParentObject: {fileID: 100042, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1646 | m_PrefabInternal: {fileID: 2125993667} 1647 | serializedVersion: 4 1648 | m_Component: 1649 | - 4: {fileID: 1888595815} 1650 | m_Layer: 0 1651 | m_Name: Left_Toe_Joint_01 1652 | m_TagString: Untagged 1653 | m_Icon: {fileID: 0} 1654 | m_NavMeshLayer: 0 1655 | m_StaticEditorFlags: 0 1656 | m_IsActive: 1 1657 | --- !u!4 &1888595815 1658 | Transform: 1659 | m_ObjectHideFlags: 0 1660 | m_PrefabParentObject: {fileID: 400042, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1661 | m_PrefabInternal: {fileID: 2125993667} 1662 | m_GameObject: {fileID: 1888595814} 1663 | m_LocalRotation: {x: -.227291971, y: -.669580758, z: -.227291971, w: .669580758} 1664 | m_LocalPosition: {x: -.137871921, y: -2.6645352e-17, z: 3.5527136e-17} 1665 | m_LocalScale: {x: 1, y: 1, z: 1} 1666 | m_Children: [] 1667 | m_Father: {fileID: 1146601144} 1668 | --- !u!1 &1906748152 1669 | GameObject: 1670 | m_ObjectHideFlags: 0 1671 | m_PrefabParentObject: {fileID: 100016, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1672 | m_PrefabInternal: {fileID: 2125993667} 1673 | serializedVersion: 4 1674 | m_Component: 1675 | - 4: {fileID: 1906748153} 1676 | m_Layer: 0 1677 | m_Name: Left_Middle_Finger_Joint_01a 1678 | m_TagString: Untagged 1679 | m_Icon: {fileID: 0} 1680 | m_NavMeshLayer: 0 1681 | m_StaticEditorFlags: 0 1682 | m_IsActive: 1 1683 | --- !u!4 &1906748153 1684 | Transform: 1685 | m_ObjectHideFlags: 0 1686 | m_PrefabParentObject: {fileID: 400016, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1687 | m_PrefabInternal: {fileID: 2125993667} 1688 | m_GameObject: {fileID: 1906748152} 1689 | m_LocalRotation: {x: .0103130462, y: -.000110864647, z: .0107487505, w: .999889076} 1690 | m_LocalPosition: {x: -.0718098655, y: .0124753257, z: .00505481893} 1691 | m_LocalScale: {x: 1, y: 1, z: 1} 1692 | m_Children: 1693 | - {fileID: 808047113} 1694 | m_Father: {fileID: 872082177} 1695 | --- !u!1 &1936642654 1696 | GameObject: 1697 | m_ObjectHideFlags: 0 1698 | m_PrefabParentObject: {fileID: 100040, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1699 | m_PrefabInternal: {fileID: 2125993667} 1700 | serializedVersion: 4 1701 | m_Component: 1702 | - 4: {fileID: 1936642655} 1703 | m_Layer: 0 1704 | m_Name: Left_Thumb_Joint_01b 1705 | m_TagString: Untagged 1706 | m_Icon: {fileID: 0} 1707 | m_NavMeshLayer: 0 1708 | m_StaticEditorFlags: 0 1709 | m_IsActive: 1 1710 | --- !u!4 &1936642655 1711 | Transform: 1712 | m_ObjectHideFlags: 0 1713 | m_PrefabParentObject: {fileID: 400040, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1714 | m_PrefabInternal: {fileID: 2125993667} 1715 | m_GameObject: {fileID: 1936642654} 1716 | m_LocalRotation: {x: -.420362532, y: -.371804148, z: .0835276917, w: .823456287} 1717 | m_LocalPosition: {x: -.0287782475, y: -.00164805842, z: -.00240386301} 1718 | m_LocalScale: {x: 1, y: 1, z: 1} 1719 | m_Children: [] 1720 | m_Father: {fileID: 980135951} 1721 | --- !u!1 &1993445302 1722 | GameObject: 1723 | m_ObjectHideFlags: 0 1724 | m_PrefabParentObject: {fileID: 100026, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1725 | m_PrefabInternal: {fileID: 2125993667} 1726 | serializedVersion: 4 1727 | m_Component: 1728 | - 4: {fileID: 1993445303} 1729 | m_Layer: 0 1730 | m_Name: Left_Pinky_Finger_Joint_01c 1731 | m_TagString: Untagged 1732 | m_Icon: {fileID: 0} 1733 | m_NavMeshLayer: 0 1734 | m_StaticEditorFlags: 0 1735 | m_IsActive: 1 1736 | --- !u!4 &1993445303 1737 | Transform: 1738 | m_ObjectHideFlags: 0 1739 | m_PrefabParentObject: {fileID: 400026, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1740 | m_PrefabInternal: {fileID: 2125993667} 1741 | m_GameObject: {fileID: 1993445302} 1742 | m_LocalRotation: {x: -.0112725943, y: -.000342671672, z: -.0303826835, w: .999474704} 1743 | m_LocalPosition: {x: -.0172837134, y: -3.86662229e-16, z: 1.52742391e-17} 1744 | m_LocalScale: {x: 1, y: 1, z: 1} 1745 | m_Children: [] 1746 | m_Father: {fileID: 725393578} 1747 | --- !u!1 &2005791763 1748 | GameObject: 1749 | m_ObjectHideFlags: 0 1750 | m_PrefabParentObject: {fileID: 0} 1751 | m_PrefabInternal: {fileID: 0} 1752 | serializedVersion: 4 1753 | m_Component: 1754 | - 4: {fileID: 2005791765} 1755 | - 108: {fileID: 2005791764} 1756 | m_Layer: 0 1757 | m_Name: Directional light 1758 | m_TagString: Untagged 1759 | m_Icon: {fileID: 0} 1760 | m_NavMeshLayer: 0 1761 | m_StaticEditorFlags: 0 1762 | m_IsActive: 1 1763 | --- !u!108 &2005791764 1764 | Light: 1765 | m_ObjectHideFlags: 0 1766 | m_PrefabParentObject: {fileID: 0} 1767 | m_PrefabInternal: {fileID: 0} 1768 | m_GameObject: {fileID: 2005791763} 1769 | m_Enabled: 1 1770 | serializedVersion: 3 1771 | m_Type: 1 1772 | m_Color: {r: 1, g: 1, b: 1, a: 1} 1773 | m_Intensity: .5 1774 | m_Range: 10 1775 | m_SpotAngle: 30 1776 | m_CookieSize: 10 1777 | m_Shadows: 1778 | m_Type: 0 1779 | m_Resolution: -1 1780 | m_Strength: 1 1781 | m_Bias: .0500000007 1782 | m_Softness: 4 1783 | m_SoftnessFade: 1 1784 | m_Cookie: {fileID: 0} 1785 | m_DrawHalo: 0 1786 | m_ActuallyLightmapped: 0 1787 | m_Flare: {fileID: 0} 1788 | m_RenderMode: 0 1789 | m_CullingMask: 1790 | serializedVersion: 2 1791 | m_Bits: 4294967295 1792 | m_Lightmapping: 1 1793 | m_ShadowSamples: 1 1794 | m_ShadowRadius: 0 1795 | m_ShadowAngle: 0 1796 | m_IndirectIntensity: 1 1797 | m_AreaSize: {x: 1, y: 1} 1798 | --- !u!4 &2005791765 1799 | Transform: 1800 | m_ObjectHideFlags: 0 1801 | m_PrefabParentObject: {fileID: 0} 1802 | m_PrefabInternal: {fileID: 0} 1803 | m_GameObject: {fileID: 2005791763} 1804 | m_LocalRotation: {x: .408217937, y: -.234569728, z: .109381676, w: .875426054} 1805 | m_LocalPosition: {x: .0590060353, y: -4.99999905, z: -.507140398} 1806 | m_LocalScale: {x: 1, y: 1, z: 1} 1807 | m_Children: [] 1808 | m_Father: {fileID: 0} 1809 | --- !u!1 &2018325951 1810 | GameObject: 1811 | m_ObjectHideFlags: 0 1812 | m_PrefabParentObject: {fileID: 100056, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1813 | m_PrefabInternal: {fileID: 2125993667} 1814 | serializedVersion: 4 1815 | m_Component: 1816 | - 4: {fileID: 2018325952} 1817 | m_Layer: 0 1818 | m_Name: Right_Index_Finger_Joint_01a 1819 | m_TagString: Untagged 1820 | m_Icon: {fileID: 0} 1821 | m_NavMeshLayer: 0 1822 | m_StaticEditorFlags: 0 1823 | m_IsActive: 1 1824 | --- !u!4 &2018325952 1825 | Transform: 1826 | m_ObjectHideFlags: 0 1827 | m_PrefabParentObject: {fileID: 400056, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1828 | m_PrefabInternal: {fileID: 2125993667} 1829 | m_GameObject: {fileID: 2018325951} 1830 | m_LocalRotation: {x: .010504893, y: .00877968967, z: .00171795371, w: .999904811} 1831 | m_LocalPosition: {x: .0694020092, y: -.0138474749, z: -.0267640352} 1832 | m_LocalScale: {x: 1, y: 1, z: 1} 1833 | m_Children: 1834 | - {fileID: 1258525505} 1835 | m_Father: {fileID: 1117035321} 1836 | --- !u!1 &2062829925 1837 | GameObject: 1838 | m_ObjectHideFlags: 0 1839 | m_PrefabParentObject: {fileID: 100048, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1840 | m_PrefabInternal: {fileID: 2125993667} 1841 | serializedVersion: 4 1842 | m_Component: 1843 | - 4: {fileID: 2062829926} 1844 | m_Layer: 0 1845 | m_Name: Neck 1846 | m_TagString: Untagged 1847 | m_Icon: {fileID: 0} 1848 | m_NavMeshLayer: 0 1849 | m_StaticEditorFlags: 0 1850 | m_IsActive: 1 1851 | --- !u!4 &2062829926 1852 | Transform: 1853 | m_ObjectHideFlags: 0 1854 | m_PrefabParentObject: {fileID: 400048, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1855 | m_PrefabInternal: {fileID: 2125993667} 1856 | m_GameObject: {fileID: 2062829925} 1857 | m_LocalRotation: {x: 0, y: 0, z: -.151223585, w: .988499582} 1858 | m_LocalPosition: {x: -.395399421, y: 1.28785867e-16, z: -8.90155064e-17} 1859 | m_LocalScale: {x: 1, y: 1, z: 1} 1860 | m_Children: 1861 | - {fileID: 165399020} 1862 | m_Father: {fileID: 1019296807} 1863 | --- !u!1001 &2125993667 1864 | Prefab: 1865 | m_ObjectHideFlags: 0 1866 | serializedVersion: 2 1867 | m_Modification: 1868 | m_TransformParent: {fileID: 0} 1869 | m_Modifications: 1870 | - target: {fileID: 400096, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1871 | propertyPath: m_LocalPosition.x 1872 | value: 0 1873 | objectReference: {fileID: 0} 1874 | - target: {fileID: 400096, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1875 | propertyPath: m_LocalPosition.y 1876 | value: -1.71387935 1877 | objectReference: {fileID: 0} 1878 | - target: {fileID: 400096, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1879 | propertyPath: m_LocalPosition.z 1880 | value: 2.48007917 1881 | objectReference: {fileID: 0} 1882 | - target: {fileID: 400096, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1883 | propertyPath: m_LocalRotation.x 1884 | value: 0 1885 | objectReference: {fileID: 0} 1886 | - target: {fileID: 400096, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1887 | propertyPath: m_LocalRotation.y 1888 | value: .99619472 1889 | objectReference: {fileID: 0} 1890 | - target: {fileID: 400096, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1891 | propertyPath: m_LocalRotation.z 1892 | value: 0 1893 | objectReference: {fileID: 0} 1894 | - target: {fileID: 400096, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1895 | propertyPath: m_LocalRotation.w 1896 | value: -.087155886 1897 | objectReference: {fileID: 0} 1898 | - target: {fileID: 400096, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1899 | propertyPath: m_LocalScale.x 1900 | value: 2 1901 | objectReference: {fileID: 0} 1902 | - target: {fileID: 400096, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1903 | propertyPath: m_LocalScale.y 1904 | value: 2 1905 | objectReference: {fileID: 0} 1906 | - target: {fileID: 400096, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1907 | propertyPath: m_LocalScale.z 1908 | value: 2 1909 | objectReference: {fileID: 0} 1910 | m_RemovedComponents: [] 1911 | m_ParentPrefab: {fileID: 100100000, guid: 320b1c2af77554f99a1658df4a6d3d5c, type: 3} 1912 | m_RootGameObject: {fileID: 1480049600} 1913 | m_IsPrefabParent: 0 1914 | m_IsExploded: 1 1915 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Scenes/Test Scene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6d4e05c4d65024283afc8441c3b51357 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: feeddd38bbc9b455fbeddc90e9344e06 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Scripts/AxisRotate.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | 4 | /// 5 | /// Rotate an object around a specified a axis by degrees per second 6 | /// 7 | public class AxisRotate : MonoBehaviour 8 | { 9 | public Vector3 axis = Vector3.up; 10 | public float angle = 1.0f; 11 | 12 | // Update is called once per frame 13 | void Update () 14 | { 15 | transform.Rotate(axis, angle*Time.deltaTime); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Scripts/AxisRotate.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0705d7060623a4ce88f9ff9f92450c95 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Scripts/FBOPlugin.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | using System.Runtime.InteropServices; 4 | 5 | public static class FBOPlugin 6 | { 7 | //The texture that the OpenGL FBO will render to 8 | static Texture2D _texture; 9 | 10 | //Our interop functions. Only active on iOS builds 11 | #if UNITY_IOS && !UNITY_EDITOR 12 | [DllImport("__Internal")] 13 | private static extern void InitializeTexture(int textureID); 14 | 15 | [DllImport("__Internal")] 16 | private static extern void UpdateTexture(float value); 17 | #endif 18 | 19 | /// 20 | /// Initializes the texture, and Initializes the plugin, which sets up the FBO 21 | /// 22 | static void Initialize() 23 | { 24 | _texture = new Texture2D(1,1,TextureFormat.ARGB32, false); 25 | _texture.SetPixel(0,0, Color.black); 26 | 27 | #if UNITY_IOS && !UNITY_EDITOR 28 | InitializeTexture(_texture.GetNativeTextureID()); 29 | //Always call this after changing OpenGL values. Otherwise odd things happen 30 | GL.InvalidateState(); 31 | #endif 32 | } 33 | 34 | /// 35 | /// Other scripts call this to get the texture. 36 | /// 37 | /// 38 | /// The texture. 39 | /// 40 | public static Texture2D GetTexture() 41 | { 42 | if (_texture == null) { 43 | Initialize(); 44 | } 45 | 46 | return _texture; 47 | } 48 | 49 | /// 50 | /// Update the FBO content. Set a value between 0-1 to change the source texture 51 | /// 52 | /// 53 | /// A value between 0-1 54 | /// 55 | public static void Update(float value) 56 | { 57 | //Initialize the texture if needed 58 | if (_texture == null) { 59 | Initialize(); 60 | } 61 | 62 | value = Mathf.Clamp01(value); 63 | 64 | //Update the texture 65 | #if UNITY_IOS && !UNITY_EDITOR 66 | UpdateTexture(value); 67 | //Always call this after changing OpenGL values. Otherwise odd things happen 68 | GL.InvalidateState(); 69 | #endif 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Scripts/FBOPlugin.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b91cbb19c1b084238ac001c4c57a6794 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Scripts/FBOTest.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | 4 | /// 5 | /// FBO test script to show how to apply the FBO texture to materials 6 | /// 7 | public class FBOTest : MonoBehaviour 8 | { 9 | void Start() 10 | { 11 | //Set the material's texture to the FBO texture 12 | renderer.material.mainTexture = FBOPlugin.GetTexture(); 13 | } 14 | 15 | void Update() 16 | { 17 | //Send a varying value to the plugin to oscillate the Texture's colours 18 | float value = Mathf.Abs(Mathf.Sin(Time.time)); 19 | FBOPlugin.Update(value); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Unity4Demo/Assets/Scripts/FBOTest.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 62f6b52346bd34a1087362e284cf904a 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Unity4Demo/ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | m_Volume: 1 7 | Rolloff Scale: 1 8 | m_SpeedOfSound: 347 9 | Doppler Factor: 1 10 | Default Speaker Mode: 2 11 | m_DSPBufferSize: 0 12 | m_DisableAudio: 0 13 | -------------------------------------------------------------------------------- /Unity4Demo/ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | m_Gravity: {x: 0, y: -9.81000042, z: 0} 7 | m_DefaultMaterial: {fileID: 0} 8 | m_BounceThreshold: 2 9 | m_SleepVelocity: .150000006 10 | m_SleepAngularVelocity: .140000001 11 | m_MaxAngularVelocity: 7 12 | m_MinPenetrationForPenalty: .00999999978 13 | m_SolverIterationCount: 6 14 | m_RaycastsHitTriggers: 1 15 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 16 | -------------------------------------------------------------------------------- /Unity4Demo/ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: 8 | - enabled: 1 9 | path: Assets/Scenes/Test Scene.unity 10 | -------------------------------------------------------------------------------- /Unity4Demo/ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_ExternalVersionControlSupport: Meta Files 8 | m_SerializationMode: 2 9 | m_WebSecurityEmulationEnabled: 0 10 | m_WebSecurityEmulationHostUrl: http://www.mydomain.com/mygame.unity3d 11 | -------------------------------------------------------------------------------- /Unity4Demo/ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | m_AlwaysIncludedShaders: 7 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 8 | -------------------------------------------------------------------------------- /Unity4Demo/ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | m_Axes: 7 | - serializedVersion: 3 8 | m_Name: Horizontal 9 | descriptiveName: 10 | descriptiveNegativeName: 11 | negativeButton: left 12 | positiveButton: right 13 | altNegativeButton: a 14 | altPositiveButton: d 15 | gravity: 3 16 | dead: .00100000005 17 | sensitivity: 3 18 | snap: 1 19 | invert: 0 20 | type: 0 21 | axis: 0 22 | joyNum: 0 23 | - serializedVersion: 3 24 | m_Name: Vertical 25 | descriptiveName: 26 | descriptiveNegativeName: 27 | negativeButton: down 28 | positiveButton: up 29 | altNegativeButton: s 30 | altPositiveButton: w 31 | gravity: 3 32 | dead: .00100000005 33 | sensitivity: 3 34 | snap: 1 35 | invert: 0 36 | type: 0 37 | axis: 0 38 | joyNum: 0 39 | - serializedVersion: 3 40 | m_Name: Fire1 41 | descriptiveName: 42 | descriptiveNegativeName: 43 | negativeButton: 44 | positiveButton: left ctrl 45 | altNegativeButton: 46 | altPositiveButton: mouse 0 47 | gravity: 1000 48 | dead: .00100000005 49 | sensitivity: 1000 50 | snap: 0 51 | invert: 0 52 | type: 0 53 | axis: 0 54 | joyNum: 0 55 | - serializedVersion: 3 56 | m_Name: Fire2 57 | descriptiveName: 58 | descriptiveNegativeName: 59 | negativeButton: 60 | positiveButton: left alt 61 | altNegativeButton: 62 | altPositiveButton: mouse 1 63 | gravity: 1000 64 | dead: .00100000005 65 | sensitivity: 1000 66 | snap: 0 67 | invert: 0 68 | type: 0 69 | axis: 0 70 | joyNum: 0 71 | - serializedVersion: 3 72 | m_Name: Fire3 73 | descriptiveName: 74 | descriptiveNegativeName: 75 | negativeButton: 76 | positiveButton: left cmd 77 | altNegativeButton: 78 | altPositiveButton: mouse 2 79 | gravity: 1000 80 | dead: .00100000005 81 | sensitivity: 1000 82 | snap: 0 83 | invert: 0 84 | type: 0 85 | axis: 0 86 | joyNum: 0 87 | - serializedVersion: 3 88 | m_Name: Jump 89 | descriptiveName: 90 | descriptiveNegativeName: 91 | negativeButton: 92 | positiveButton: space 93 | altNegativeButton: 94 | altPositiveButton: 95 | gravity: 1000 96 | dead: .00100000005 97 | sensitivity: 1000 98 | snap: 0 99 | invert: 0 100 | type: 0 101 | axis: 0 102 | joyNum: 0 103 | - serializedVersion: 3 104 | m_Name: Mouse X 105 | descriptiveName: 106 | descriptiveNegativeName: 107 | negativeButton: 108 | positiveButton: 109 | altNegativeButton: 110 | altPositiveButton: 111 | gravity: 0 112 | dead: 0 113 | sensitivity: .100000001 114 | snap: 0 115 | invert: 0 116 | type: 1 117 | axis: 0 118 | joyNum: 0 119 | - serializedVersion: 3 120 | m_Name: Mouse Y 121 | descriptiveName: 122 | descriptiveNegativeName: 123 | negativeButton: 124 | positiveButton: 125 | altNegativeButton: 126 | altPositiveButton: 127 | gravity: 0 128 | dead: 0 129 | sensitivity: .100000001 130 | snap: 0 131 | invert: 0 132 | type: 1 133 | axis: 1 134 | joyNum: 0 135 | - serializedVersion: 3 136 | m_Name: Mouse ScrollWheel 137 | descriptiveName: 138 | descriptiveNegativeName: 139 | negativeButton: 140 | positiveButton: 141 | altNegativeButton: 142 | altPositiveButton: 143 | gravity: 0 144 | dead: 0 145 | sensitivity: .100000001 146 | snap: 0 147 | invert: 0 148 | type: 1 149 | axis: 2 150 | joyNum: 0 151 | - serializedVersion: 3 152 | m_Name: Horizontal 153 | descriptiveName: 154 | descriptiveNegativeName: 155 | negativeButton: 156 | positiveButton: 157 | altNegativeButton: 158 | altPositiveButton: 159 | gravity: 0 160 | dead: .189999998 161 | sensitivity: 1 162 | snap: 0 163 | invert: 0 164 | type: 2 165 | axis: 0 166 | joyNum: 0 167 | - serializedVersion: 3 168 | m_Name: Vertical 169 | descriptiveName: 170 | descriptiveNegativeName: 171 | negativeButton: 172 | positiveButton: 173 | altNegativeButton: 174 | altPositiveButton: 175 | gravity: 0 176 | dead: .189999998 177 | sensitivity: 1 178 | snap: 0 179 | invert: 1 180 | type: 2 181 | axis: 1 182 | joyNum: 0 183 | - serializedVersion: 3 184 | m_Name: Fire1 185 | descriptiveName: 186 | descriptiveNegativeName: 187 | negativeButton: 188 | positiveButton: joystick button 0 189 | altNegativeButton: 190 | altPositiveButton: 191 | gravity: 1000 192 | dead: .00100000005 193 | sensitivity: 1000 194 | snap: 0 195 | invert: 0 196 | type: 0 197 | axis: 0 198 | joyNum: 0 199 | - serializedVersion: 3 200 | m_Name: Fire2 201 | descriptiveName: 202 | descriptiveNegativeName: 203 | negativeButton: 204 | positiveButton: joystick button 1 205 | altNegativeButton: 206 | altPositiveButton: 207 | gravity: 1000 208 | dead: .00100000005 209 | sensitivity: 1000 210 | snap: 0 211 | invert: 0 212 | type: 0 213 | axis: 0 214 | joyNum: 0 215 | - serializedVersion: 3 216 | m_Name: Fire3 217 | descriptiveName: 218 | descriptiveNegativeName: 219 | negativeButton: 220 | positiveButton: joystick button 2 221 | altNegativeButton: 222 | altPositiveButton: 223 | gravity: 1000 224 | dead: .00100000005 225 | sensitivity: 1000 226 | snap: 0 227 | invert: 0 228 | type: 0 229 | axis: 0 230 | joyNum: 0 231 | - serializedVersion: 3 232 | m_Name: Jump 233 | descriptiveName: 234 | descriptiveNegativeName: 235 | negativeButton: 236 | positiveButton: joystick button 3 237 | altNegativeButton: 238 | altPositiveButton: 239 | gravity: 1000 240 | dead: .00100000005 241 | sensitivity: 1000 242 | snap: 0 243 | invert: 0 244 | type: 0 245 | axis: 0 246 | joyNum: 0 247 | -------------------------------------------------------------------------------- /Unity4Demo/ProjectSettings/NavMeshLayers.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshLayers: 5 | m_ObjectHideFlags: 0 6 | Built-in Layer 0: 7 | name: Default 8 | cost: 1 9 | editType: 2 10 | Built-in Layer 1: 11 | name: Not Walkable 12 | cost: 1 13 | editType: 0 14 | Built-in Layer 2: 15 | name: Jump 16 | cost: 2 17 | editType: 2 18 | User Layer 0: 19 | name: 20 | cost: 1 21 | editType: 3 22 | User Layer 1: 23 | name: 24 | cost: 1 25 | editType: 3 26 | User Layer 2: 27 | name: 28 | cost: 1 29 | editType: 3 30 | User Layer 3: 31 | name: 32 | cost: 1 33 | editType: 3 34 | User Layer 4: 35 | name: 36 | cost: 1 37 | editType: 3 38 | User Layer 5: 39 | name: 40 | cost: 1 41 | editType: 3 42 | User Layer 6: 43 | name: 44 | cost: 1 45 | editType: 3 46 | User Layer 7: 47 | name: 48 | cost: 1 49 | editType: 3 50 | User Layer 8: 51 | name: 52 | cost: 1 53 | editType: 3 54 | User Layer 9: 55 | name: 56 | cost: 1 57 | editType: 3 58 | User Layer 10: 59 | name: 60 | cost: 1 61 | editType: 3 62 | User Layer 11: 63 | name: 64 | cost: 1 65 | editType: 3 66 | User Layer 12: 67 | name: 68 | cost: 1 69 | editType: 3 70 | User Layer 13: 71 | name: 72 | cost: 1 73 | editType: 3 74 | User Layer 14: 75 | name: 76 | cost: 1 77 | editType: 3 78 | User Layer 15: 79 | name: 80 | cost: 1 81 | editType: 3 82 | User Layer 16: 83 | name: 84 | cost: 1 85 | editType: 3 86 | User Layer 17: 87 | name: 88 | cost: 1 89 | editType: 3 90 | User Layer 18: 91 | name: 92 | cost: 1 93 | editType: 3 94 | User Layer 19: 95 | name: 96 | cost: 1 97 | editType: 3 98 | User Layer 20: 99 | name: 100 | cost: 1 101 | editType: 3 102 | User Layer 21: 103 | name: 104 | cost: 1 105 | editType: 3 106 | User Layer 22: 107 | name: 108 | cost: 1 109 | editType: 3 110 | User Layer 23: 111 | name: 112 | cost: 1 113 | editType: 3 114 | User Layer 24: 115 | name: 116 | cost: 1 117 | editType: 3 118 | User Layer 25: 119 | name: 120 | cost: 1 121 | editType: 3 122 | User Layer 26: 123 | name: 124 | cost: 1 125 | editType: 3 126 | User Layer 27: 127 | name: 128 | cost: 1 129 | editType: 3 130 | User Layer 28: 131 | name: 132 | cost: 1 133 | editType: 3 134 | -------------------------------------------------------------------------------- /Unity4Demo/ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!149 &1 4 | NetworkManager: 5 | m_ObjectHideFlags: 0 6 | m_DebugLevel: 0 7 | m_Sendrate: 15 8 | m_AssetToPrefab: {} 9 | -------------------------------------------------------------------------------- /Unity4Demo/ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | AndroidProfiler: 0 8 | defaultScreenOrientation: 0 9 | targetDevice: 2 10 | targetGlesGraphics: 1 11 | targetResolution: 0 12 | accelerometerFrequency: 60 13 | companyName: Egomotion Limited 14 | productName: UnityFBO 15 | defaultCursor: {fileID: 0} 16 | cursorHotspot: {x: 0, y: 0} 17 | defaultScreenWidth: 1024 18 | defaultScreenHeight: 768 19 | defaultScreenWidthWeb: 960 20 | defaultScreenHeightWeb: 600 21 | m_RenderingPath: 1 22 | m_ActiveColorSpace: 0 23 | m_MTRendering: 1 24 | m_UseDX11: 0 25 | iosShowActivityIndicatorOnLoading: -1 26 | androidShowActivityIndicatorOnLoading: -1 27 | displayResolutionDialog: 1 28 | allowedAutorotateToPortrait: 1 29 | allowedAutorotateToPortraitUpsideDown: 1 30 | allowedAutorotateToLandscapeRight: 1 31 | allowedAutorotateToLandscapeLeft: 1 32 | useOSAutorotation: 1 33 | use32BitDisplayBuffer: 1 34 | use24BitDepthBuffer: 0 35 | defaultIsFullScreen: 1 36 | defaultIsNativeResolution: 1 37 | runInBackground: 0 38 | captureSingleScreen: 0 39 | Override IPod Music: 0 40 | Prepare IOS For Recording: 0 41 | enableHWStatistics: 1 42 | usePlayerLog: 1 43 | stripPhysics: 0 44 | forceSingleInstance: 0 45 | resizableWindow: 0 46 | useMacAppStoreValidation: 0 47 | gpuSkinning: 1 48 | xboxEnableAvatar: 0 49 | xboxEnableKinect: 0 50 | xboxEnableKinectAutoTracking: 0 51 | xboxEnableFitness: 0 52 | macFullscreenMode: 2 53 | xboxSpeechDB: 0 54 | xboxEnableHeadOrientation: 0 55 | wiiHio2Usage: -1 56 | wiiLoadingScreenRectPlacement: 0 57 | wiiLoadingScreenBackground: {r: 1, g: 1, b: 1, a: 1} 58 | wiiLoadingScreenPeriod: 1000 59 | wiiLoadingScreenFileName: 60 | wiiLoadingScreenRect: 61 | serializedVersion: 2 62 | x: 0 63 | y: 0 64 | width: 0 65 | height: 0 66 | m_SupportedAspectRatios: 67 | 4:3: 1 68 | 5:4: 1 69 | 16:10: 1 70 | 16:9: 1 71 | Others: 1 72 | iPhoneBundleIdentifier: com.egomotionstudios.UnityFBO 73 | productGUID: 2106c8c17514f4e988b045fd4ac7f477 74 | iPhoneBundleVersion: 1.0 75 | AndroidBundleVersionCode: 1 76 | AndroidMinSdkVersion: 6 77 | AndroidPreferredInstallLocation: 1 78 | aotOptions: 79 | apiCompatibilityLevel: 2 80 | iPhoneStrippingLevel: 0 81 | iPhoneScriptCallOptimization: 0 82 | ForceInternetPermission: 0 83 | ForceSDCardPermission: 0 84 | CreateWallpaper: 0 85 | APKExpansionFiles: 0 86 | StripUnusedMeshComponents: 0 87 | iPhoneSdkVersion: 988 88 | iPhoneTargetOSVersion: 20 89 | uIPrerenderedIcon: 0 90 | uIRequiresPersistentWiFi: 0 91 | uIStatusBarHidden: 1 92 | uIExitOnSuspend: 0 93 | uIStatusBarStyle: 0 94 | iPhoneSplashScreen: {fileID: 0} 95 | iPhoneHighResSplashScreen: {fileID: 0} 96 | iPhoneTallHighResSplashScreen: {fileID: 0} 97 | iPadPortraitSplashScreen: {fileID: 0} 98 | iPadHighResPortraitSplashScreen: {fileID: 0} 99 | iPadLandscapeSplashScreen: {fileID: 0} 100 | iPadHighResLandscapeSplashScreen: {fileID: 0} 101 | AndroidTargetDevice: 0 102 | AndroidSplashScreenScale: 0 103 | AndroidKeystoreName: 104 | AndroidKeyaliasName: 105 | resolutionDialogBanner: {fileID: 0} 106 | m_BuildTargetIcons: 107 | - m_BuildTarget: 108 | m_Icons: 109 | - m_Icon: {fileID: 0} 110 | m_Size: 128 111 | m_BuildTargetBatching: [] 112 | webPlayerTemplate: APPLICATION:Default 113 | m_TemplateCustomTags: {} 114 | wiiRegion: 1 115 | wiiGameCode: RABA 116 | wiiGameVersion: 117 | wiiCompanyCode: ZZ 118 | wiiSupportsNunchuk: 0 119 | wiiSupportsClassicController: 0 120 | wiiSupportsBalanceBoard: 0 121 | wiiSupportsMotionPlus: 0 122 | wiiControllerCount: 1 123 | wiiFloatingPointExceptions: 0 124 | wiiScreenCrashDumps: 1 125 | XboxTitleId: 126 | XboxImageXexPath: 127 | XboxSpaPath: 128 | XboxGenerateSpa: 0 129 | XboxDeployKinectResources: 0 130 | XboxSplashScreen: {fileID: 0} 131 | xboxEnableSpeech: 0 132 | xboxAdditionalTitleMemorySize: 0 133 | xboxDeployKinectHeadOrientation: 0 134 | xboxDeployKinectHeadPosition: 0 135 | ps3TitleConfigPath: 136 | ps3DLCConfigPath: 137 | ps3ThumbnailPath: 138 | ps3BackgroundPath: 139 | ps3SoundPath: 140 | ps3TrophyCommId: 141 | ps3NpCommunicationPassphrase: 142 | ps3TrophyPackagePath: 143 | ps3BootCheckMaxSaveGameSizeKB: 128 144 | ps3TrophyCommSig: 145 | ps3SaveGameSlots: 1 146 | ps3TrialMode: 0 147 | flashStrippingLevel: 2 148 | scriptingDefineSymbols: {} 149 | metroPackageName: UnityFBO 150 | metroPackageLogo: 151 | metroPackageVersion: 152 | metroCertificatePath: 153 | metroCertificatePassword: 154 | metroCertificateSubject: 155 | metroCertificateIssuer: 156 | metroCertificateNotAfter: 0000000000000000 157 | metroApplicationDescription: UnityFBO 158 | metroTileLogo: 159 | metroTileWideLogo: 160 | metroTileSmallLogo: 161 | metroTileShortName: 162 | metroCommandLineArgsFile: 163 | metroTileShowName: 0 164 | metroTileForegroundText: 1 165 | metroTileBackgroundColor: {r: 0, g: 0, b: 0, a: 1} 166 | metroSplashScreenImage: 167 | metroSplashScreenBackgroundColor: {r: 0, g: 0, b: 0, a: 1} 168 | metroSplashScreenUseBackgroundColor: 0 169 | metroCapabilities: {} 170 | metroCompilationOverrides: 1 171 | blackberryDeviceAddress: 172 | blackberryDevicePassword: 173 | blackberryTokenPath: 174 | blackberryTokenExires: 175 | blackberryTokenAuthor: 176 | blackberryTokenAuthorId: 177 | blackberryAuthorId: 178 | blackberryCskPassword: 179 | blackberrySaveLogPath: 180 | blackberryAuthorIdOveride: 0 181 | blackberrySharedPermissions: 0 182 | blackberryCameraPermissions: 0 183 | blackberryGPSPermissions: 0 184 | blackberryDeviceIDPermissions: 0 185 | blackberryMicrophonePermissions: 0 186 | blackberryBuildId: 0 187 | blackberryLandscapeSplashScreen: {fileID: 0} 188 | blackberryPortraitSplashScreen: {fileID: 0} 189 | blackberrySquareSplashScreen: {fileID: 0} 190 | firstStreamedLevelWithResources: 0 191 | unityRebuildLibraryVersion: 9 192 | unityForwardCompatibleVersion: 38 193 | unityStandardAssetsVersion: 0 194 | -------------------------------------------------------------------------------- /Unity4Demo/ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 3 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Fastest 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | blendWeights: 1 18 | textureQuality: 1 19 | anisotropicTextures: 0 20 | antiAliasing: 0 21 | softParticles: 0 22 | softVegetation: 0 23 | vSyncCount: 0 24 | lodBias: .300000012 25 | maximumLODLevel: 0 26 | particleRaycastBudget: 4 27 | excludedTargetPlatforms: [] 28 | - serializedVersion: 2 29 | name: Fast 30 | pixelLightCount: 0 31 | shadows: 0 32 | shadowResolution: 0 33 | shadowProjection: 1 34 | shadowCascades: 1 35 | shadowDistance: 20 36 | blendWeights: 2 37 | textureQuality: 0 38 | anisotropicTextures: 0 39 | antiAliasing: 0 40 | softParticles: 0 41 | softVegetation: 0 42 | vSyncCount: 0 43 | lodBias: .400000006 44 | maximumLODLevel: 0 45 | particleRaycastBudget: 16 46 | excludedTargetPlatforms: [] 47 | - serializedVersion: 2 48 | name: Simple 49 | pixelLightCount: 1 50 | shadows: 1 51 | shadowResolution: 0 52 | shadowProjection: 1 53 | shadowCascades: 1 54 | shadowDistance: 20 55 | blendWeights: 2 56 | textureQuality: 0 57 | anisotropicTextures: 1 58 | antiAliasing: 0 59 | softParticles: 0 60 | softVegetation: 0 61 | vSyncCount: 0 62 | lodBias: .699999988 63 | maximumLODLevel: 0 64 | particleRaycastBudget: 64 65 | excludedTargetPlatforms: [] 66 | - serializedVersion: 2 67 | name: Good 68 | pixelLightCount: 2 69 | shadows: 2 70 | shadowResolution: 1 71 | shadowProjection: 1 72 | shadowCascades: 2 73 | shadowDistance: 40 74 | blendWeights: 2 75 | textureQuality: 0 76 | anisotropicTextures: 1 77 | antiAliasing: 0 78 | softParticles: 0 79 | softVegetation: 1 80 | vSyncCount: 1 81 | lodBias: 1 82 | maximumLODLevel: 0 83 | particleRaycastBudget: 256 84 | excludedTargetPlatforms: [] 85 | - serializedVersion: 2 86 | name: Beautiful 87 | pixelLightCount: 3 88 | shadows: 2 89 | shadowResolution: 2 90 | shadowProjection: 1 91 | shadowCascades: 2 92 | shadowDistance: 70 93 | blendWeights: 4 94 | textureQuality: 0 95 | anisotropicTextures: 2 96 | antiAliasing: 2 97 | softParticles: 1 98 | softVegetation: 1 99 | vSyncCount: 1 100 | lodBias: 1.5 101 | maximumLODLevel: 0 102 | particleRaycastBudget: 1024 103 | excludedTargetPlatforms: [] 104 | - serializedVersion: 2 105 | name: Fantastic 106 | pixelLightCount: 4 107 | shadows: 2 108 | shadowResolution: 2 109 | shadowProjection: 1 110 | shadowCascades: 4 111 | shadowDistance: 150 112 | blendWeights: 4 113 | textureQuality: 0 114 | anisotropicTextures: 2 115 | antiAliasing: 2 116 | softParticles: 1 117 | softVegetation: 1 118 | vSyncCount: 1 119 | lodBias: 2 120 | maximumLODLevel: 0 121 | particleRaycastBudget: 4096 122 | excludedTargetPlatforms: [] 123 | m_PerPlatformDefaultQuality: 124 | Android: 2 125 | BlackBerry: 2 126 | FlashPlayer: 3 127 | GLES Emulation: 3 128 | PS3: 3 129 | Standalone: 3 130 | WP8: 3 131 | Web: 3 132 | Wii: 3 133 | Windows Store Apps: 3 134 | XBOX360: 3 135 | iPhone: 2 136 | -------------------------------------------------------------------------------- /Unity4Demo/ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | tags: 6 | - 7 | Builtin Layer 0: Default 8 | Builtin Layer 1: TransparentFX 9 | Builtin Layer 2: Ignore Raycast 10 | Builtin Layer 3: 11 | Builtin Layer 4: Water 12 | Builtin Layer 5: 13 | Builtin Layer 6: 14 | Builtin Layer 7: 15 | User Layer 8: 16 | User Layer 9: 17 | User Layer 10: 18 | User Layer 11: 19 | User Layer 12: 20 | User Layer 13: 21 | User Layer 14: 22 | User Layer 15: 23 | User Layer 16: 24 | User Layer 17: 25 | User Layer 18: 26 | User Layer 19: 27 | User Layer 20: 28 | User Layer 21: 29 | User Layer 22: 30 | User Layer 23: 31 | User Layer 24: 32 | User Layer 25: 33 | User Layer 26: 34 | User Layer 27: 35 | User Layer 28: 36 | User Layer 29: 37 | User Layer 30: 38 | User Layer 31: 39 | -------------------------------------------------------------------------------- /Unity4Demo/ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: .0199999996 7 | Maximum Allowed Timestep: .333333343 8 | m_TimeScale: 1 9 | --------------------------------------------------------------------------------