ソースを参照

Merge pull request #1635 from MackeyK24/master

Universal Shader Update
David Catuhe 8 年 前
コミット
542bec388f

ファイルの差分が大きいため隠しています
+ 1 - 1
Exporters/Unity 5/EditorToolkit/Assets/Babylon/Library/manager.bjs


+ 1 - 0
Exporters/Unity 5/EditorToolkit/Assets/Babylon/Shader/UnitySpecular.shader

@@ -38,6 +38,7 @@ Shader "BabylonJS/Materials/PBR Material (Specular)"
 
 		// Babylon Properties (Lighting & Blending)
 		[Enum(Disable,0,Additive,1,Combine,2,Subtract,3,Multiply,4,Maximized,5,OneOne,6)] _AlphaMode ("Alpha Blending Mode", int) = 2
+		[ToggleOff] _BackFaceCulling("Back Face Culling", Int) = 1
 		[ToggleOff] _DisableLighting("Disable Surface Lighting", Int) = 0
 		[ToggleOff] _UseEmissiveAsIllumination("Use Emissive Illumination", Int) = 0
 

+ 1 - 0
Exporters/Unity 5/EditorToolkit/Assets/Babylon/Shader/UnityStandard.shader

@@ -44,6 +44,7 @@ Shader "BabylonJS/Materials/PBR Material"
 
 		// Babylon Properties (Lighting & Blending)
 		[Enum(Disable,0,Additive,1,Combine,2,Subtract,3,Multiply,4,Maximized,5,OneOne,6)] _AlphaMode ("Alpha Blending Mode", int) = 2
+		[ToggleOff] _BackFaceCulling("Back Face Culling", Int) = 1
 		[ToggleOff] _DisableLighting("Disable Surface Lighting", Int) = 0
 		[ToggleOff] _UseEmissiveAsIllumination("Use Emissive Illumination", Int) = 0
 

+ 2 - 2
Exporters/Unity 5/EditorToolkit/Assets/Babylon/Source/BabylonPhysicsState.cs

@@ -7,8 +7,8 @@ namespace UnityEditor
     public sealed class BabylonPhysicsState : MonoBehaviour
     {
         public float mass = 0.0f;
-        public float friction = 0.2f;
-        public float restitution = 0.2f;
+        public float friction = 0.1f;
+        public float restitution = 0.25f;
         public BabylonPhysicsImposter imposter = BabylonPhysicsImposter.None;
     }
 }

+ 0 - 4
Exporters/Unity 5/EditorToolkit/Assets/Babylon/Source/ExportationOptions.cs

@@ -22,8 +22,6 @@ namespace Unity3D2Babylon
         public bool ExportPhysics { get; set; }
         public bool ExportShadows { get; set; }
         public bool WorkerCollisions { get; set; }
-        public SerializableVector3 Gravity { get; set; }
-        public SerializableVector3 CameraEllipsoid { get; set; }
         public int ShadowMapSize { get; set; }
         public float ShadowMapBias { get; set; }
         public float ShadowBlurScale { get; set; }
@@ -66,8 +64,6 @@ namespace Unity3D2Babylon
             ExportPhysics = true;
             ExportShadows = false;
             WorkerCollisions = false;
-            Gravity = new Vector3(0, -0.9f, 0);
-            CameraEllipsoid = new Vector3(0.5f, 0.85f, 0.5f);
             ShadowMapSize = 1024;
             ShadowMapBias = 0.0001f;
             ShadowBlurScale = 0;

+ 2 - 0
Exporters/Unity 5/EditorToolkit/Assets/Babylon/Source/ExporterMetadata.cs

@@ -245,6 +245,8 @@ namespace UnityEditor
     {
         public bool autoClear = true;
         public Color ambientColor = Color.clear;
+        public Vector3 defaultGravity = new Vector3(0, -0.9f, 0);
+        public Vector3 cameraEllipsoid = new Vector3(0.5f, 0.85f, 0.5f);
         public BabylonNavigationMesh navigationMesh = BabylonNavigationMesh.EnableNavigation;
         public bool particleSystems = true;
         public bool lensFlareSystems = true;

+ 10 - 20
Exporters/Unity 5/EditorToolkit/Assets/Babylon/Source/ExporterWindow.cs

@@ -478,35 +478,25 @@ namespace Unity3D2Babylon
             exportationOptions.DefaultImageFormat = (int)(BabylonImageFormat)EditorGUILayout.EnumPopup(" Prefered Texture Format", (BabylonImageFormat)exportationOptions.DefaultImageFormat, GUILayout.ExpandWidth(true));
             EditorGUILayout.Space();
 
-            showCollision = EditorGUILayout.Foldout(showCollision, "Scene Collision Options");
-            if (showCollision)
+            showShader = EditorGUILayout.Foldout(showShader, "Shader Program Options");
+            if (showShader)
             {
                 EditorGUILayout.Space();
-                exportationOptions.ExportCollisions = EditorGUILayout.Toggle("   Enable Collisions", exportationOptions.ExportCollisions);
-                EditorGUILayout.Space();
-                exportationOptions.WorkerCollisions = EditorGUILayout.Toggle("   Worker Collisions", exportationOptions.WorkerCollisions);
-                EditorGUILayout.Space();
-                EditorGUILayout.BeginHorizontal();
-                GUILayout.Label("   Camera Ellipsoid");
-                exportationOptions.CameraEllipsoid = EditorGUILayout.Vector3Field("", exportationOptions.CameraEllipsoid, GUILayout.ExpandWidth(false));
-                EditorGUILayout.EndHorizontal();
-                EditorGUILayout.Space();
-                EditorGUILayout.BeginHorizontal();
-                GUILayout.Label("   Default Scene Gravity");
-                exportationOptions.Gravity = EditorGUILayout.Vector3Field("", exportationOptions.Gravity, GUILayout.ExpandWidth(false));
-                EditorGUILayout.EndHorizontal();
+                exportationOptions.EmbeddedShaders = EditorGUILayout.Toggle("   Embed Shader Files", exportationOptions.EmbeddedShaders);
                 EditorGUILayout.Space();
-                exportationOptions.DefaultColliderDetail = (int)(BabylonColliderDetail)EditorGUILayout.EnumPopup("   Default Collider Detail", (BabylonColliderDetail)exportationOptions.DefaultColliderDetail, GUILayout.ExpandWidth(true));
+                exportationOptions.DefaultShaderFolder = EditorGUILayout.TextField("   Output Src Shader Path", exportationOptions.DefaultShaderFolder);
                 EditorGUILayout.Space();
             }
 
-            showShader = EditorGUILayout.Foldout(showShader, "Shader Program Options");
-            if (showShader)
+            showCollision = EditorGUILayout.Foldout(showCollision, "Collision Engine Options");
+            if (showCollision)
             {
                 EditorGUILayout.Space();
-                exportationOptions.EmbeddedShaders = EditorGUILayout.Toggle("   Embed Shader Files", exportationOptions.EmbeddedShaders);
+                exportationOptions.ExportCollisions = EditorGUILayout.Toggle("   Enable Collisions", exportationOptions.ExportCollisions);
                 EditorGUILayout.Space();
-                exportationOptions.DefaultShaderFolder = EditorGUILayout.TextField("   Output Src Shader Path", exportationOptions.DefaultShaderFolder);
+                exportationOptions.WorkerCollisions = EditorGUILayout.Toggle("   Use Worker Threads", exportationOptions.WorkerCollisions);
+                EditorGUILayout.Space();
+                exportationOptions.DefaultColliderDetail = (int)(BabylonColliderDetail)EditorGUILayout.EnumPopup("   Default Collider Detail", (BabylonColliderDetail)exportationOptions.DefaultColliderDetail, GUILayout.ExpandWidth(true));
                 EditorGUILayout.Space();
             }
 

+ 4 - 2
Exporters/Unity 5/EditorToolkit/Assets/Babylon/Source/SceneBuilder.Cameras.cs

@@ -67,8 +67,10 @@ namespace Unity3D2Babylon
             if (exportationOptions.ExportCollisions)
             {
                 babylonCamera.checkCollisions = true;
-                babylonCamera.applyGravity = (exportationOptions.Gravity.X == 0 && exportationOptions.Gravity.Y == 0 && exportationOptions.Gravity.Z == 0) ? false : true;
-                babylonCamera.ellipsoid = exportationOptions.CameraEllipsoid.ToFloat();
+                if (SceneController != null) {
+                    babylonCamera.applyGravity = (SceneController.sceneOptions.defaultGravity.y == 0 && SceneController.sceneOptions.defaultGravity.y == 0 && SceneController.sceneOptions.defaultGravity.z == 0) ? false : true;
+                    babylonCamera.ellipsoid = SceneController.sceneOptions.cameraEllipsoid.ToFloat();
+                }
             }
 
             // Lens Flares

+ 21 - 8
Exporters/Unity 5/EditorToolkit/Assets/Babylon/Source/SceneBuilder.Materials.cs

@@ -394,6 +394,11 @@ namespace Unity3D2Babylon
                     bMat.useEmissiveAsIllumination = (material.GetInt("_UseEmissiveAsIllumination") != 0);
                 }
 
+                if (material.HasProperty("_BackFaceCulling"))
+                {
+                    bMat.backFaceCulling = (material.GetInt("_BackFaceCulling") != 0);
+                }
+
                 if (material.mainTexture && !materialNotSupported)
                 {
                     var mainTexture2D = material.mainTexture as Texture2D;
@@ -519,6 +524,11 @@ namespace Unity3D2Babylon
                 babylonPbrMaterial.useEmissiveAsIllumination = (material.GetInt("_UseEmissiveAsIllumination") != 0);
             }
 
+            if (material.HasProperty("_BackFaceCulling"))
+            {
+                babylonPbrMaterial.backFaceCulling = (material.GetInt("_BackFaceCulling") != 0);
+            }
+
             // Albedo
             if (material.HasProperty("_Color"))
             {
@@ -766,7 +776,7 @@ namespace Unity3D2Babylon
                     string[] attributes = babylonLine.Split(':');
                     if (attributes != null && attributes.Length > 1)
                     {
-                        string abuffer = attributes[1].Replace("[", "").Replace("]", "");
+                        string abuffer = attributes[1].Replace("[", "").Replace("]", "").Replace("\"", "");
                         if (!String.IsNullOrEmpty(abuffer))
                         {
                             abuffer = abuffer.Trim();
@@ -775,7 +785,7 @@ namespace Unity3D2Babylon
                             {
                                 foreach (string aoption in adata)
                                 {
-                                    string aoption_buffer = aoption.Trim().Replace("\"", "").Trim();
+                                    string aoption_buffer = aoption.Trim();
                                     if (!String.IsNullOrEmpty(aoption_buffer))
                                     {
                                         attributeList.Add(aoption_buffer);
@@ -790,7 +800,7 @@ namespace Unity3D2Babylon
                     string[] uniforms = babylonLine.Split(':');
                     if (uniforms != null && uniforms.Length > 1)
                     {
-                        string ubuffer = uniforms[1].Replace("[", "").Replace("]", "");
+                        string ubuffer = uniforms[1].Replace("[", "").Replace("]", "").Replace("\"", "");
                         if (!String.IsNullOrEmpty(ubuffer))
                         {
                             ubuffer = ubuffer.Trim();
@@ -799,7 +809,7 @@ namespace Unity3D2Babylon
                             {
                                 foreach (string uoption in udata)
                                 {
-                                    string uoption_buffer = uoption.Trim().Replace("\"", "").Trim();
+                                    string uoption_buffer = uoption.Trim();
                                     if (!String.IsNullOrEmpty(uoption_buffer))
                                     {
                                         uniformList.Add(uoption_buffer);
@@ -814,7 +824,7 @@ namespace Unity3D2Babylon
                     string[] samplers = babylonLine.Split(':');
                     if (samplers != null && samplers.Length > 1)
                     {
-                        string sbuffer = samplers[1].Replace("[", "").Replace("]", "");
+                        string sbuffer = samplers[1].Replace("[", "").Replace("]", "").Replace("\"", "");
                         if (!String.IsNullOrEmpty(sbuffer))
                         {
                             sbuffer = sbuffer.Trim();
@@ -823,7 +833,7 @@ namespace Unity3D2Babylon
                             {
                                 foreach (string soption in sdata)
                                 {
-                                    string soption_buffer = soption.Trim().Replace("\"", "").Trim();
+                                    string soption_buffer = soption.Trim();
                                     if (!String.IsNullOrEmpty(soption_buffer))
                                     {
                                         samplerList.Add(soption_buffer);
@@ -838,7 +848,7 @@ namespace Unity3D2Babylon
                     string[] defines = babylonLine.Split(':');
                     if (defines != null && defines.Length > 1)
                     {
-                        string dbuffer = defines[1].Replace("[", "").Replace("]", "");
+                        string dbuffer = defines[1].Replace("[", "").Replace("]", "").Replace("\"", "");
                         if (!String.IsNullOrEmpty(dbuffer))
                         {
                             dbuffer = dbuffer.Trim();
@@ -847,7 +857,7 @@ namespace Unity3D2Babylon
                             {
                                 foreach (string doption in ddata)
                                 {
-                                    string doption_buffer = doption.Trim().Replace("\"", "").Trim();
+                                    string doption_buffer = doption.Trim();
                                     if (!String.IsNullOrEmpty(doption_buffer))
                                     {
                                         defineList.Add(doption_buffer);
@@ -870,6 +880,9 @@ namespace Unity3D2Babylon
             if (material.HasProperty("_NeedsAlphaTesting")) {
                 needsAlphaTesting = (material.GetInt("_NeedsAlphaTesting") != 0);
             }
+            if (material.HasProperty("_BackFaceCulling")) {
+                babylonShaderMaterial.backFaceCulling = (material.GetInt("_BackFaceCulling") != 0);
+            }
             babylonShaderMaterial.options = new BabylonShaderOptions();
             babylonShaderMaterial.options.needAlphaBlending = needsAlphaBlending;
             babylonShaderMaterial.options.needAlphaTesting = needsAlphaTesting;

+ 14 - 10
Exporters/Unity 5/EditorToolkit/Assets/Babylon/Source/SceneBuilder.cs

@@ -653,15 +653,19 @@ namespace Unity3D2Babylon
                 // Collisions
                 if (exportationOptions.ExportCollisions)
                 {
-                    babylonScene.gravity = exportationOptions.Gravity.ToFloat();
                     babylonScene.workerCollisions = exportationOptions.WorkerCollisions;
+                    if (SceneController != null) {
+                        babylonScene.gravity = SceneController.sceneOptions.defaultGravity.ToFloat();
+                    }
                 }
 
                 // Babylon Physics
                 if (exportationOptions.ExportPhysics)
                 {
                     babylonScene.physicsEnabled = true;
-                    babylonScene.physicsGravity = exportationOptions.Gravity.ToFloat();
+                    if (SceneController != null) {
+                        babylonScene.physicsGravity = SceneController.sceneOptions.defaultGravity.ToFloat();
+                    }
                 }
 
                 // Scene Controller
@@ -1329,7 +1333,7 @@ namespace Unity3D2Babylon
                     string[] attributes = babylonLine.Split(':');
                     if (attributes != null && attributes.Length > 1)
                     {
-                        string abuffer = attributes[1].Replace("[", "").Replace("]", "");
+                        string abuffer = attributes[1].Replace("[", "").Replace("]", "").Replace("\"", "");
                         if (!String.IsNullOrEmpty(abuffer))
                         {
                             abuffer = abuffer.Trim();
@@ -1338,7 +1342,7 @@ namespace Unity3D2Babylon
                             {
                                 foreach (string aoption in adata)
                                 {
-                                    string aoption_buffer = aoption.Trim().Replace("\"", "").Trim();
+                                    string aoption_buffer = aoption.Trim();
                                     if (!String.IsNullOrEmpty(aoption_buffer))
                                     {
                                         attributeList.Add(aoption_buffer);
@@ -1353,7 +1357,7 @@ namespace Unity3D2Babylon
                     string[] uniforms = babylonLine.Split(':');
                     if (uniforms != null && uniforms.Length > 1)
                     {
-                        string ubuffer = uniforms[1].Replace("[", "").Replace("]", "");
+                        string ubuffer = uniforms[1].Replace("[", "").Replace("]", "").Replace("\"", "");
                         if (!String.IsNullOrEmpty(ubuffer))
                         {
                             ubuffer = ubuffer.Trim();
@@ -1362,7 +1366,7 @@ namespace Unity3D2Babylon
                             {
                                 foreach (string uoption in udata)
                                 {
-                                    string uoption_buffer = uoption.Trim().Replace("\"", "").Trim();
+                                    string uoption_buffer = uoption.Trim();
                                     if (!String.IsNullOrEmpty(uoption_buffer))
                                     {
                                         uniformList.Add(uoption_buffer);
@@ -1377,7 +1381,7 @@ namespace Unity3D2Babylon
                     string[] samplers = babylonLine.Split(':');
                     if (samplers != null && samplers.Length > 1)
                     {
-                        string sbuffer = samplers[1].Replace("[", "").Replace("]", "");
+                        string sbuffer = samplers[1].Replace("[", "").Replace("]", "").Replace("\"", "");
                         if (!String.IsNullOrEmpty(sbuffer))
                         {
                             sbuffer = sbuffer.Trim();
@@ -1386,7 +1390,7 @@ namespace Unity3D2Babylon
                             {
                                 foreach (string soption in sdata)
                                 {
-                                    string soption_buffer = soption.Trim().Replace("\"", "").Trim();
+                                    string soption_buffer = soption.Trim();
                                     if (!String.IsNullOrEmpty(soption_buffer))
                                     {
                                         samplerList.Add(soption_buffer);
@@ -1401,7 +1405,7 @@ namespace Unity3D2Babylon
                     string[] defines = babylonLine.Split(':');
                     if (defines != null && defines.Length > 1)
                     {
-                        string dbuffer = defines[1].Replace("[", "").Replace("]", "");
+                        string dbuffer = defines[1].Replace("[", "").Replace("]", "").Replace("\"", "");
                         if (!String.IsNullOrEmpty(dbuffer))
                         {
                             dbuffer = dbuffer.Trim();
@@ -1410,7 +1414,7 @@ namespace Unity3D2Babylon
                             {
                                 foreach (string doption in ddata)
                                 {
-                                    string doption_buffer = doption.Trim().Replace("\"", "").Trim();
+                                    string doption_buffer = doption.Trim();
                                     if (!String.IsNullOrEmpty(doption_buffer))
                                     {
                                         defineList.Add(doption_buffer);

+ 43 - 36
Exporters/Unity 5/EditorToolkit/Assets/Babylon/Templates/Shaders/amiga.template

@@ -3,16 +3,14 @@
 		_Color ("Color", Color) = (1,1,1,1)
 		_Brightness ("Intensity", Range(1.0, 10.0)) = 1.0
 		[NoScaleOffset] _MainTex ("Albedo (RGB)", 2D) = "white" {}
-		_ScaleX ("Scale Factor X", Range (0.0, 10.0)) = 1.0
-		_ScaleY ("Scale Factor Y", Range (0.0, 10.0)) = 1.0
-		_Metallic ("Metallic", Range(0,1)) = 0.0
-		_Glossiness ("Smoothness", Range(0,1)) = 0.5
+		[ToggleOff] _BackFaceCulling ("Back Face Culling", Int) = 1
 		[ToggleOff] _NeedsAlphaTesting ("Needs Alpha Testing", Int) = 0
 		[ToggleOff] _NeedsAlphaBlending ("Needs Alpha Blending", Int) = 0
 		[Enum(Disable,0,Additive,1,Combine,2,Subtract,3,Multiply,4,Maximized,5,OneOne,6)] _AlphaMode ("Alpha Blending Mode", int) = 2
 	}
 	SubShader {
 		Tags { "RenderType"="Opaque" }
+		LOD 100
 		Pass {
 			CGPROGRAM
 
@@ -21,10 +19,10 @@
 			//////////////////////////////////////////////////////////
 
 			#ifdef BABYLON
-			attributes: ["position", "normal", "uv"]
-			uniforms: ["worldViewProjection, _Color, _Brightness, _Glossiness, _Metallic, _ScaleX, _ScaleY"]
-			samplers: []
-			defines: []
+			attributes: "position, normal, uv"
+			uniforms: "worldViewProjection, _Color, _Brightness"
+			samplers: ""
+			defines: ""
 			#endif //BABYLON-END
 
 
@@ -51,15 +49,12 @@
 			varying vec2 vUV;
 			uniform vec4 _Color;
 			uniform float _Brightness;
-			uniform float _Glossiness;
-			uniform float _Metallic;
-			uniform float _ScaleX;
-			uniform float _ScaleY;
 			uniform sampler2D _MainTex;
 
 			void main(void)
 			{
-				gl_FragColor = texture2D(_MainTex, vec2(vUV.x * _ScaleX, vUV.y * _ScaleY)) * _Color * _Brightness;
+				// Texture Sample (Unlit)
+				gl_FragColor = texture2D(_MainTex, vUV) * _Color * _Brightness;
 			}
 			#endif //FRAGMENT-END 
 
@@ -68,32 +63,44 @@
 			// DEFAULT UNITY EDITOR SHADER PROGRAM SECTION (HLSL) //
 			////////////////////////////////////////////////////////
 
-			#pragma exclude_renderers d3d11 xbox360 gles
-			#pragma surface surf Standard fullforwardshadows
-			#pragma target 3.0
-			sampler2D _MainTex;
-			struct Input {
-				float2 uv_MainTex;
+			#pragma vertex vert
+			#pragma fragment frag
+			
+			#include "UnityCG.cginc"
+
+			struct appdata
+			{
+				float4 vertex : POSITION;
+				float2 uv : TEXCOORD0;
+			};
+
+			struct v2f
+			{
+				float2 uv : TEXCOORD0;
+				float4 vertex : SV_POSITION;
 			};
-			half _Brightness;
-			half _Glossiness;
-			half _Metallic;
-			half _ScaleX;
-			half _ScaleY;
-			fixed4 _Color;
-			void surf (Input IN, inout SurfaceOutputStandard o) {
-				// Albedo comes from a texture tinted by color
-				float2 vUV = IN.uv_MainTex;
-				fixed4 c = tex2D (_MainTex, float2(vUV.x * _ScaleX, vUV.y * _ScaleY)) * _Color * _Brightness;
-				o.Albedo = c.rgb;
-				// Metallic and smoothness come from slider variables
-				o.Metallic = _Metallic;
-				o.Smoothness = _Glossiness;
-				o.Alpha = c.a;
+
+			float4 _Color;
+			float _Brightness;
+			sampler2D _MainTex;
+			float4 _MainTex_ST;
+
+			v2f vert (appdata v)
+			{
+				v2f o;
+				o.vertex = UnityObjectToClipPos(v.vertex);
+				o.uv = TRANSFORM_TEX(v.uv, _MainTex);
+				return o;
+			}
+			
+			fixed4 frag (v2f i) : SV_Target
+			{
+				// Texture Sample (Unlit)
+				return tex2D(_MainTex, i.uv) * _Color * _Brightness;
 			}
 
 			ENDCG
 		}
 	}
-	FallBack "Diffuse"
-}
+	FallBack "Unlit/Texture"
+}

BIN
Exporters/Unity 5/EditorToolkit/Redist/Asset Store-5.x/BabylonJS/BabylonJS Editor Toolkit.unitypackage