[import] Copy files from https://github.com/UltraCombos/Project_2018_Frozen/tree/master/Unity_2018_Frozen and copy UnityUtility files (git repo is removed). Upgraded to Unity 2017.4.16. This version is runnable (without kinect ditected particles)

master
chwan1 6 years ago
parent 1660900db2
commit d57822ca2d
  1. 3
      .gitignore
  2. 40
      Unity-19050-05-BallPool/.gitignore
  3. 10
      Unity-19050-05-BallPool/Assets/FluidSim3D.meta
  4. 532
      Unity-19050-05-BallPool/Assets/FluidSim3D/FireFluid.unity
  5. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/FireFluid.unity.meta
  6. 5
      Unity-19050-05-BallPool/Assets/FluidSim3D/Materials.meta
  7. 29
      Unity-19050-05-BallPool/Assets/FluidSim3D/Materials/FireRayCast.mat
  8. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/Materials/FireRayCast.mat.meta
  9. 27
      Unity-19050-05-BallPool/Assets/FluidSim3D/Materials/Plane.mat
  10. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/Materials/Plane.mat.meta
  11. 39
      Unity-19050-05-BallPool/Assets/FluidSim3D/Materials/SmokeRayCast.mat
  12. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/Materials/SmokeRayCast.mat.meta
  13. 5
      Unity-19050-05-BallPool/Assets/FluidSim3D/Prefabs.meta
  14. 123
      Unity-19050-05-BallPool/Assets/FluidSim3D/Prefabs/FireFluidSim.prefab
  15. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/Prefabs/FireFluidSim.prefab.meta
  16. 119
      Unity-19050-05-BallPool/Assets/FluidSim3D/Prefabs/SmokeFluidSim.prefab
  17. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/Prefabs/SmokeFluidSim.prefab.meta
  18. 5
      Unity-19050-05-BallPool/Assets/FluidSim3D/Scripts.meta
  19. 464
      Unity-19050-05-BallPool/Assets/FluidSim3D/Scripts/FireFluidSim.cs
  20. 8
      Unity-19050-05-BallPool/Assets/FluidSim3D/Scripts/FireFluidSim.cs.meta
  21. 436
      Unity-19050-05-BallPool/Assets/FluidSim3D/Scripts/SmokeFluidSim.cs
  22. 8
      Unity-19050-05-BallPool/Assets/FluidSim3D/Scripts/SmokeFluidSim.cs.meta
  23. 5
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders.meta
  24. 244
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ApplyAdvection.compute
  25. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ApplyAdvection.compute.meta
  26. 47
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ApplyBuoyancy.compute
  27. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ApplyBuoyancy.compute.meta
  28. 57
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ApplyImpulse.compute
  29. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ApplyImpulse.compute.meta
  30. 44
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ComputeConfinement.compute
  31. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ComputeConfinement.compute.meta
  32. 49
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ComputeDivergence.compute
  33. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ComputeDivergence.compute.meta
  34. 65
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ComputeJacobi.compute
  35. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ComputeJacobi.compute.meta
  36. 47
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ComputeObstacles.compute
  37. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ComputeObstacles.compute.meta
  38. 76
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ComputeProjection.compute
  39. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ComputeProjection.compute.meta
  40. 37
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ComputeVorticity.compute
  41. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/ComputeVorticity.compute.meta
  42. 193
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/FireRayCast.shader
  43. 5
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/FireRayCast.shader.meta
  44. 183
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/SmokeRayCast.shader
  45. 5
      Unity-19050-05-BallPool/Assets/FluidSim3D/Shaders/SmokeRayCast.shader.meta
  46. 399
      Unity-19050-05-BallPool/Assets/FluidSim3D/SmokeFluid.unity
  47. 4
      Unity-19050-05-BallPool/Assets/FluidSim3D/SmokeFluid.unity.meta
  48. 5
      Unity-19050-05-BallPool/Assets/FluidSim3D/Textures.meta
  49. BIN
      Unity-19050-05-BallPool/Assets/FluidSim3D/Textures/FireGradient.png
  50. 45
      Unity-19050-05-BallPool/Assets/FluidSim3D/Textures/FireGradient.png.meta
  51. 10
      Unity-19050-05-BallPool/Assets/FluidSimControl.meta
  52. 67
      Unity-19050-05-BallPool/Assets/FluidSimControl/FluidSimInputController.cs
  53. 13
      Unity-19050-05-BallPool/Assets/FluidSimControl/FluidSimInputController.cs.meta
  54. 21
      Unity-19050-05-BallPool/Assets/FluidSimControl/SmokeFluidSimUniforms.asset
  55. 10
      Unity-19050-05-BallPool/Assets/FluidSimControl/SmokeFluidSimUniforms.asset.meta
  56. 26
      Unity-19050-05-BallPool/Assets/FluidSimControl/SmokeFluidSimUniforms.cs
  57. 13
      Unity-19050-05-BallPool/Assets/FluidSimControl/SmokeFluidSimUniforms.cs.meta
  58. 10
      Unity-19050-05-BallPool/Assets/Frozen.meta
  59. 16
      Unity-19050-05-BallPool/Assets/Frozen/CosineGradient.asset
  60. 10
      Unity-19050-05-BallPool/Assets/Frozen/CosineGradient.asset.meta
  61. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset.meta
  62. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Anna_day-Standby.asset
  63. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Anna_day-Standby.asset.meta
  64. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Anna_day-Trigger.asset
  65. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Anna_day-Trigger.asset.meta
  66. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Anna_night-Standby.asset
  67. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Anna_night-Standby.asset.meta
  68. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Anna_night-Trigger.asset
  69. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Anna_night-Trigger.asset.meta
  70. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Standby 1.asset
  71. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Standby 1.asset.meta
  72. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Standby 2.asset
  73. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Standby 2.asset.meta
  74. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Standby 3.asset
  75. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Standby 3.asset.meta
  76. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Standby 4.asset
  77. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Standby 4.asset.meta
  78. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Standby.asset
  79. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Standby.asset.meta
  80. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Trigger 1.asset
  81. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Trigger 1.asset.meta
  82. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Trigger 2.asset
  83. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Trigger 2.asset.meta
  84. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Trigger 3.asset
  85. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Trigger 3.asset.meta
  86. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Trigger 4.asset
  87. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Trigger 4.asset.meta
  88. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Trigger.asset
  89. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Cloud-Trigger.asset.meta
  90. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Elsa-Standby.asset
  91. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Elsa-Standby.asset.meta
  92. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Elsa-Trigger.asset
  93. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Elsa-Trigger.asset.meta
  94. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Elsa_Effect_A-Standby 1.asset
  95. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Elsa_Effect_A-Standby 1.asset.meta
  96. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Elsa_Effect_A-Standby 2.asset
  97. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Elsa_Effect_A-Standby 2.asset.meta
  98. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Elsa_Effect_A-Standby.asset
  99. 10
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Elsa_Effect_A-Standby.asset.meta
  100. 15
      Unity-19050-05-BallPool/Assets/Frozen/DSAsset/Elsa_Effect_A-Trigger 1.asset
  101. Some files were not shown because too many files have changed in this diff Show More

3
.gitignore vendored

@ -1,3 +1,6 @@
/FrozenMaterial/
# ---> Unity
[Ll]ibrary/
[Tt]emp/

@ -0,0 +1,40 @@
# Created by https://www.gitignore.io/api/unity
### Unity ###
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/Assets/AssetStoreTools*
# Visual Studio 2015 cache directory
/.vs/
# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
# Unity3D generated meta files
*.pidb.meta
# Unity3D Generated File On Crash Reports
sysinfo.txt
# Builds
*.apk
*.unitypackage
# End of https://www.gitignore.io/api/unity

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 8bdf519f8f30b6c479411fed445191a4
folderAsset: yes
timeCreated: 1519695581
licenseType: Free
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,532 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 8
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 3
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
--- !u!157 &4
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
m_GIWorkflowMode: 1
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_TemporalCoherenceThreshold: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 9
m_Resolution: 1
m_BakeResolution: 50
m_TextureWidth: 1024
m_TextureHeight: 1024
m_AO: 1
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 0
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 1
m_BakeBackend: 0
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVRBounces: 2
m_PVRFiltering: 0
m_PVRFilteringMode: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousColorSigma: 1
m_PVRFilteringAtrousNormalSigma: 1
m_PVRFilteringAtrousPositionSigma: 1
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 0
--- !u!196 &5
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666666
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &410104090
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 100000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
m_PrefabInternal: {fileID: 1685451357}
serializedVersion: 5
m_Component:
- component: {fileID: 410104094}
- component: {fileID: 410104093}
- component: {fileID: 410104092}
- component: {fileID: 410104091}
m_Layer: 0
m_Name: FireFluidSim
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &410104091
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 11400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02,
type: 2}
m_PrefabInternal: {fileID: 1685451357}
m_GameObject: {fileID: 410104090}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 164869986c15313419bf6ec021c90430, type: 3}
m_Name:
m_EditorClassIdentifier:
m_denstyAdvectionType: 1
m_reactionAdvectionType: 1
m_width: 64
m_height: 128
m_depth: 64
m_iterations: 10
m_vorticityStrength: 1
m_densityAmount: 1
m_densityDissipation: 0.999
m_densityBuoyancy: 1
m_densityWeight: 0.0125
m_temperatureAmount: 10
m_temperatureDissipation: 0.995
m_reactionAmount: 1
m_reactionDecay: 0.001
m_reactionExtinguishment: 0.01
m_velocityDissipation: 0.995
m_inputRadius: 0.04
m_inputPos: {x: 0.5, y: 0.1, z: 0.5, w: 0}
m_applyImpulse: {fileID: 7200000, guid: a080c25e6daeb0d4e88fced65f9959ce, type: 3}
m_applyAdvect: {fileID: 7200000, guid: 411cedf0db0a1904693c77b97afbf915, type: 3}
m_computeVorticity: {fileID: 7200000, guid: 62b5b102c778bbd4682f63bf0a9bd2fe, type: 3}
m_computeDivergence: {fileID: 7200000, guid: e25212f321912c44ab6d9430762d37b6, type: 3}
m_computeJacobi: {fileID: 7200000, guid: cebd12b982d79674aab2ed65879e49d0, type: 3}
m_computeProjection: {fileID: 7200000, guid: aa1de4528a2c0d24983dce181ecd63af, type: 3}
m_computeConfinement: {fileID: 7200000, guid: 4b0055f0edf774c4ea97ac8cd62e6158,
type: 3}
m_computeObstacles: {fileID: 7200000, guid: 6a49b38e37bae7a4ab2903fbdde8e4ac, type: 3}
m_applyBuoyancy: {fileID: 7200000, guid: 0d7710a16db583e418df13bddb0be43d, type: 3}
--- !u!23 &410104092
MeshRenderer:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 2300000, guid: 254356bdfdadcdd4aafdd4454a3d8f02,
type: 2}
m_PrefabInternal: {fileID: 1685451357}
m_GameObject: {fileID: 410104090}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_MotionVectors: 1
m_LightProbeUsage: 0
m_ReflectionProbeUsage: 1
m_Materials:
- {fileID: 2100000, guid: 2006b3393d311dc49ab782b940924419, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &410104093
MeshFilter:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 3300000, guid: 254356bdfdadcdd4aafdd4454a3d8f02,
type: 2}
m_PrefabInternal: {fileID: 1685451357}
m_GameObject: {fileID: 410104090}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &410104094
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
m_PrefabInternal: {fileID: 1685451357}
m_GameObject: {fileID: 410104090}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 4.001, z: 12}
m_LocalScale: {x: 4, y: 8, z: 4}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1470411171
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 100004, guid: 9d4133d5d30b644bd87802a347eaccbe, type: 2}
m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- component: {fileID: 1470411177}
- component: {fileID: 1470411176}
- component: {fileID: 1470411175}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!92 &1470411175
Behaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 9200000, guid: 9d4133d5d30b644bd87802a347eaccbe,
type: 2}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1470411171}
m_Enabled: 1
--- !u!20 &1470411176
Camera:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 2000000, guid: 9d4133d5d30b644bd87802a347eaccbe,
type: 2}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1470411171}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.42647058, g: 0.42647058, b: 0.42647058, a: 1}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 60
field of view: 40
orthographic: 0
orthographic size: 100
m_Depth: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294966527
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 0
m_AllowMSAA: 1
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
m_StereoMirrorMode: 0
--- !u!4 &1470411177
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 400004, guid: 9d4133d5d30b644bd87802a347eaccbe, type: 2}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1470411171}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 2, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &1685451357
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_LocalPosition.y
value: 4.00099993
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_LocalPosition.z
value: 12
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 11400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_width
value: 64
objectReference: {fileID: 0}
- target: {fileID: 11400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_depth
value: 64
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_LocalScale.x
value: 4
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_LocalScale.z
value: 4
objectReference: {fileID: 0}
- target: {fileID: 11400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_reactionDecay
value: .00100000005
objectReference: {fileID: 0}
- target: {fileID: 11400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_reactionAdvectionType
value: 1
objectReference: {fileID: 0}
- target: {fileID: 11400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_reactionExtinguishment
value: .00999999978
objectReference: {fileID: 0}
- target: {fileID: 11400000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
propertyPath: m_densityDissipation
value: .999000013
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 254356bdfdadcdd4aafdd4454a3d8f02, type: 2}
m_RootGameObject: {fileID: 410104090}
m_IsPrefabParent: 0
--- !u!1 &1803253977
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- component: {fileID: 1803253979}
- component: {fileID: 1803253978}
m_Layer: 0
m_Name: Directional light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &1803253978
Light:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1803253977}
m_Enabled: 1
serializedVersion: 8
m_Type: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_CookieSize: 10
m_Shadows:
m_Type: 0
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_Lightmapping: 1
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_FalloffTable:
m_Table[0]: 0
m_Table[1]: 0
m_Table[2]: 0
m_Table[3]: 0
m_Table[4]: 0
m_Table[5]: 0
m_Table[6]: 0
m_Table[7]: 0
m_Table[8]: 0
m_Table[9]: 0
m_Table[10]: 0
m_Table[11]: 0
m_Table[12]: 0
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &1803253979
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1803253977}
m_LocalRotation: {x: 0.40821794, y: -0.23456973, z: 0.10938166, w: 0.8754261}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2140950347
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- component: {fileID: 2140950351}
- component: {fileID: 2140950350}
- component: {fileID: 2140950349}
- component: {fileID: 2140950348}
m_Layer: 0
m_Name: Plane
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!23 &2140950348
MeshRenderer:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2140950347}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_MotionVectors: 1
m_LightProbeUsage: 0
m_ReflectionProbeUsage: 1
m_Materials:
- {fileID: 2100000, guid: 0d538acbbf71af343b5efaa45bd9af35, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!64 &2140950349
MeshCollider:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2140950347}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Convex: 0
m_InflateMesh: 0
m_SkinWidth: 0.01
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
--- !u!33 &2140950350
MeshFilter:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2140950347}
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &2140950351
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2140950347}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 8, y: 8, z: 8}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 405ae8807e9bbb141953d785d46979aa
DefaultImporter:
userData:

@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: f6db2bc76e7b3754886e1b8e79996ff0
folderAsset: yes
DefaultImporter:
userData:

@ -0,0 +1,29 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: FireRayCast
m_Shader: {fileID: 4800000, guid: ce7e14398ee00d84193a82fb0174f3f6, type: 3}
m_ShaderKeywords:
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _FireGradient:
m_Texture: {fileID: 2800000, guid: ac2c4961e13090042b382bb1c186bc31, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _FireAbsorption: 30
- _SmokeAbsorption: 60
m_Colors:
- _SmokeColor: {r: 0, g: 0, b: 0, a: 1}

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 2006b3393d311dc49ab782b940924419
NativeFormatImporter:
userData:

@ -0,0 +1,27 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: Plane
m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords:
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats: []
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 0d538acbbf71af343b5efaa45bd9af35
NativeFormatImporter:
userData:

@ -0,0 +1,39 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: SmokeRayCast
m_Shader: {fileID: 4800000, guid: edf7886cf7d957f4c8416e250df7367c, type: 3}
m_ShaderKeywords:
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _FireGradient:
m_Texture: {fileID: 2800000, guid: ac2c4961e13090042b382bb1c186bc31, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Noise:
m_Texture: {fileID: 2800000, guid: 4c7152dd0f6e54d46952f29abb57d4d5, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SmokeGradient:
m_Texture: {fileID: 2800000, guid: e0a2b0af0d77f45478f599c74d453d6f, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _Absorption: 60
- _FireAbsorption: 40
- _SmokeAbsorption: 60
m_Colors:
- _Color: {r: 0, g: 0, b: 0, a: 1}
- _SmokeColor: {r: 0, g: 0, b: 0, a: 1}

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: dfd547b8d6e669e43901fd5e9e8632f1
NativeFormatImporter:
userData:

@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: fd9ac0e19d371c4468b5b921ab7d92a3
folderAsset: yes
DefaultImporter:
userData:

@ -0,0 +1,123 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &100000
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 400000}
- component: {fileID: 3300000}
- component: {fileID: 2300000}
- component: {fileID: 11400000}
m_Layer: 0
m_Name: FireFluidSim
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &400000
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 100000}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 4.001, z: 24}
m_LocalScale: {x: 4, y: 8, z: 4}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &2300000
MeshRenderer:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 100000}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_MotionVectors: 1
m_LightProbeUsage: 0
m_ReflectionProbeUsage: 1
m_Materials:
- {fileID: 2100000, guid: 2006b3393d311dc49ab782b940924419, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &3300000
MeshFilter:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 100000}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 100000}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 164869986c15313419bf6ec021c90430, type: 3}
m_Name:
m_EditorClassIdentifier:
m_denstyAdvectionType: 1
m_reactionAdvectionType: 1
m_width: 128
m_height: 128
m_depth: 128
m_iterations: 10
m_vorticityStrength: 1
m_densityAmount: 1
m_densityDissipation: 0.999
m_densityBuoyancy: 1
m_densityWeight: 0.0125
m_temperatureAmount: 10
m_temperatureDissipation: 0.995
m_reactionAmount: 1
m_reactionDecay: 0.001
m_reactionExtinguishment: 0.01
m_velocityDissipation: 0.995
m_inputRadius: 0.04
m_inputPos: {x: 0.5, y: 0.1, z: 0.5, w: 0}
m_applyImpulse: {fileID: 7200000, guid: a080c25e6daeb0d4e88fced65f9959ce, type: 3}
m_applyAdvect: {fileID: 7200000, guid: 411cedf0db0a1904693c77b97afbf915, type: 3}
m_computeVorticity: {fileID: 7200000, guid: 62b5b102c778bbd4682f63bf0a9bd2fe, type: 3}
m_computeDivergence: {fileID: 7200000, guid: e25212f321912c44ab6d9430762d37b6, type: 3}
m_computeJacobi: {fileID: 7200000, guid: cebd12b982d79674aab2ed65879e49d0, type: 3}
m_computeProjection: {fileID: 7200000, guid: aa1de4528a2c0d24983dce181ecd63af, type: 3}
m_computeConfinement: {fileID: 7200000, guid: 4b0055f0edf774c4ea97ac8cd62e6158,
type: 3}
m_computeObstacles: {fileID: 7200000, guid: 6a49b38e37bae7a4ab2903fbdde8e4ac, type: 3}
m_applyBuoyancy: {fileID: 7200000, guid: 0d7710a16db583e418df13bddb0be43d, type: 3}
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 100000}
m_IsPrefabParent: 1

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 254356bdfdadcdd4aafdd4454a3d8f02
NativeFormatImporter:
userData:

@ -0,0 +1,119 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &100000
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 400000}
- component: {fileID: 3300000}
- component: {fileID: 2300000}
- component: {fileID: 11400000}
m_Layer: 0
m_Name: SmokeFluidSim
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &400000
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 100000}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 4.001, z: 24}
m_LocalScale: {x: 4, y: 8, z: 4}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &2300000
MeshRenderer:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 100000}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_MotionVectors: 1
m_LightProbeUsage: 0
m_ReflectionProbeUsage: 1
m_Materials:
- {fileID: 2100000, guid: dfd547b8d6e669e43901fd5e9e8632f1, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &3300000
MeshFilter:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 100000}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 100000}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a924471615937564f81ebb1540cd8b36, type: 3}
m_Name:
m_EditorClassIdentifier:
m_advectionType: 1
m_width: 64
m_height: 128
m_depth: 64
m_iterations: 10
m_vorticityStrength: 1
m_densityAmount: 1
m_densityDissipation: 0.999
m_densityBuoyancy: 1
m_densityWeight: 0.0125
m_temperatureAmount: 10
m_temperatureDissipation: 0.995
m_velocityDissipation: 0.995
m_inputRadius: 0.04
m_inputPos: {x: 0.5, y: 0.1, z: 0.5, w: 0}
m_applyImpulse: {fileID: 7200000, guid: a080c25e6daeb0d4e88fced65f9959ce, type: 3}
m_applyAdvect: {fileID: 7200000, guid: 411cedf0db0a1904693c77b97afbf915, type: 3}
m_computeVorticity: {fileID: 7200000, guid: 62b5b102c778bbd4682f63bf0a9bd2fe, type: 3}
m_computeDivergence: {fileID: 7200000, guid: e25212f321912c44ab6d9430762d37b6, type: 3}
m_computeJacobi: {fileID: 7200000, guid: cebd12b982d79674aab2ed65879e49d0, type: 3}
m_computeProjection: {fileID: 7200000, guid: aa1de4528a2c0d24983dce181ecd63af, type: 3}
m_computeConfinement: {fileID: 7200000, guid: 4b0055f0edf774c4ea97ac8cd62e6158,
type: 3}
m_computeObstacles: {fileID: 7200000, guid: 6a49b38e37bae7a4ab2903fbdde8e4ac, type: 3}
m_applyBuoyancy: {fileID: 7200000, guid: 0d7710a16db583e418df13bddb0be43d, type: 3}
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 100000}
m_IsPrefabParent: 1

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 0b40c0b4ea4208b4792d95085b850676
NativeFormatImporter:
userData:

@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: 0f670c9ec84a88d4cab33481a41f9b00
folderAsset: yes
DefaultImporter:
userData:

@ -0,0 +1,464 @@
using UnityEngine;
using System.Collections;
namespace FluidSim3DProject
{
public class FireFluidSim : MonoBehaviour
{
//DONT CHANGE THESE
const int READ = 0;
const int WRITE = 1;
const int PHI_N_HAT = 0;
const int PHI_N_1_HAT = 1;
public enum ADVECTION { NORMAL = 1, BFECC = 2, MACCORMACK = 3 };
//You can change this but you must change the same value in all the compute shader's to the same
//Must be a pow2 number
const int NUM_THREADS = 8;
//You can change this or even use Time.DeltaTime but large time steps can cause numerical errors
const float TIME_STEP = 0.1f;
public ADVECTION m_denstyAdvectionType = ADVECTION.NORMAL;
public ADVECTION m_reactionAdvectionType = ADVECTION.NORMAL;
public int m_width = 128;
public int m_height = 128;
public int m_depth = 128;
public int m_iterations = 10;
public float m_vorticityStrength = 1.0f;
public float m_densityAmount = 1.0f;
public float m_densityDissipation = 0.999f;
public float m_densityBuoyancy = 1.0f;
public float m_densityWeight = 0.0125f;
public float m_temperatureAmount = 10.0f;
public float m_temperatureDissipation = 0.995f;
public float m_reactionAmount = 1.0f;
public float m_reactionDecay = 0.001f;
public float m_reactionExtinguishment = 0.01f;
public float m_velocityDissipation = 0.995f;
public float m_inputRadius = 0.04f;
public Vector4 m_inputPos = new Vector4(0.5f,0.1f,0.5f,0.0f);
float m_ambientTemperature = 0.0f;
public ComputeShader m_applyImpulse, m_applyAdvect, m_computeVorticity;
public ComputeShader m_computeDivergence, m_computeJacobi, m_computeProjection;
public ComputeShader m_computeConfinement, m_computeObstacles, m_applyBuoyancy;
Vector4 m_size;
ComputeBuffer[] m_density, m_velocity, m_pressure, m_temperature, m_phi, m_reaction;
ComputeBuffer m_temp3f, m_obstacles;
void Start ()
{
//Dimension sizes must be pow2 numbers
m_width = Mathf.ClosestPowerOfTwo(m_width);
m_height = Mathf.ClosestPowerOfTwo(m_height);
m_depth = Mathf.ClosestPowerOfTwo(m_depth);
//Put all dimension sizes in a vector for easy parsing to shader and also prevents user changing
//dimension sizes during play
m_size = new Vector4(m_width, m_height, m_depth, 0.0f);
//Create all the buffers needed
int SIZE = m_width*m_height*m_depth;
m_density = new ComputeBuffer[2];
m_density[READ] = new ComputeBuffer(SIZE, sizeof(float));
m_density[WRITE] = new ComputeBuffer(SIZE, sizeof(float));
m_temperature = new ComputeBuffer[2];
m_temperature[READ] = new ComputeBuffer(SIZE, sizeof(float));
m_temperature[WRITE] = new ComputeBuffer(SIZE, sizeof(float));
m_reaction = new ComputeBuffer[2];
m_reaction[READ] = new ComputeBuffer(SIZE, sizeof(float));
m_reaction[WRITE] = new ComputeBuffer(SIZE, sizeof(float));
m_phi = new ComputeBuffer[2];
m_phi[READ] = new ComputeBuffer(SIZE, sizeof(float));
m_phi[WRITE] = new ComputeBuffer(SIZE, sizeof(float));
m_velocity = new ComputeBuffer[2];
m_velocity[READ] = new ComputeBuffer(SIZE, sizeof(float)*3);
m_velocity[WRITE] = new ComputeBuffer(SIZE, sizeof(float)*3);
m_pressure = new ComputeBuffer[2];
m_pressure[READ] = new ComputeBuffer(SIZE, sizeof(float));
m_pressure[WRITE] = new ComputeBuffer(SIZE, sizeof(float));
m_obstacles = new ComputeBuffer(SIZE, sizeof(float));
m_temp3f = new ComputeBuffer(SIZE, sizeof(float)*3);
//Any areas that are obstacles need to be masked of in the obstacle buffer
//At the moment is only the border around the edge of the buffers to enforce non-slip boundary conditions
ComputeObstacles();
}
void Swap(ComputeBuffer[] buffer)
{
ComputeBuffer tmp = buffer[READ];
buffer[READ] = buffer[WRITE];
buffer[WRITE] = tmp;
}
void ComputeObstacles()
{
m_computeObstacles.SetVector("_Size", m_size);
m_computeObstacles.SetBuffer(0, "_Write", m_obstacles);
m_computeObstacles.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
}
void ApplyImpulse(float dt, float amount, ComputeBuffer[] buffer)
{
m_applyImpulse.SetVector("_Size", m_size);
m_applyImpulse.SetFloat("_Radius", m_inputRadius);
m_applyImpulse.SetFloat("_Amount", amount);
m_applyImpulse.SetFloat("_DeltaTime", dt);
m_applyImpulse.SetVector("_Pos", m_inputPos);
m_applyImpulse.SetBuffer(0, "_Read", buffer[READ]);
m_applyImpulse.SetBuffer(0, "_Write", buffer[WRITE]);
m_applyImpulse.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(buffer);
}
void ApplyExtinguishmentImpulse(float dt, float amount, ComputeBuffer[] buffer)
{
m_applyImpulse.SetVector("_Size", m_size);
m_applyImpulse.SetFloat("_Radius", m_inputRadius);
m_applyImpulse.SetFloat("_Amount", amount);
m_applyImpulse.SetFloat("_DeltaTime", dt);
m_applyImpulse.SetVector("_Pos", m_inputPos);
m_applyImpulse.SetFloat("_Extinguishment", m_reactionExtinguishment);
m_applyImpulse.SetBuffer(1, "_Read", buffer[READ]);
m_applyImpulse.SetBuffer(1, "_Write", buffer[WRITE]);
m_applyImpulse.SetBuffer(1, "_Reaction", m_reaction[READ]);
m_applyImpulse.Dispatch(1, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(buffer);
}
void ApplyBuoyancy(float dt)
{
m_applyBuoyancy.SetVector("_Size", m_size);
m_applyBuoyancy.SetVector("_Up", new Vector4(0,1,0,0));
m_applyBuoyancy.SetFloat("_Buoyancy", m_densityBuoyancy);
m_applyBuoyancy.SetFloat("_AmbientTemperature", m_ambientTemperature);
m_applyBuoyancy.SetFloat("_Weight", m_densityWeight);
m_applyBuoyancy.SetFloat("_DeltaTime", dt);
m_applyBuoyancy.SetBuffer(0, "_Write", m_velocity[WRITE]);
m_applyBuoyancy.SetBuffer(0, "_Velocity", m_velocity[READ]);
m_applyBuoyancy.SetBuffer(0, "_Density", m_density[READ]);
m_applyBuoyancy.SetBuffer(0, "_Temperature", m_temperature[READ]);
m_applyBuoyancy.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(m_velocity);
}
void ApplyAdvection(float dt, float dissipation, float decay, ComputeBuffer[] buffer, float forward = 1.0f)
{
m_applyAdvect.SetVector("_Size", m_size);
m_applyAdvect.SetFloat("_DeltaTime", dt);
m_applyAdvect.SetFloat("_Dissipate", dissipation);
m_applyAdvect.SetFloat("_Forward", forward);
m_applyAdvect.SetFloat("_Decay", decay);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Read1f", buffer[READ]);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Write1f", buffer[WRITE]);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Velocity", m_velocity[READ]);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Obstacles", m_obstacles);
m_applyAdvect.Dispatch((int)ADVECTION.NORMAL, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(buffer);
}
void ApplyAdvection(float dt, float dissipation, float decay, ComputeBuffer read, ComputeBuffer write, float forward = 1.0f)
{
m_applyAdvect.SetVector("_Size", m_size);
m_applyAdvect.SetFloat("_DeltaTime", dt);
m_applyAdvect.SetFloat("_Dissipate", dissipation);
m_applyAdvect.SetFloat("_Forward", forward);
m_applyAdvect.SetFloat("_Decay", decay);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Read1f", read);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Write1f", write);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Velocity", m_velocity[READ]);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Obstacles", m_obstacles);
m_applyAdvect.Dispatch((int)ADVECTION.NORMAL, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
}
void ApplyAdvectionBFECC(float dt, float dissipation, float decay, ComputeBuffer[] buffer)
{
m_applyAdvect.SetVector("_Size", m_size);
m_applyAdvect.SetFloat("_DeltaTime", dt);
m_applyAdvect.SetFloat("_Dissipate", dissipation);
m_applyAdvect.SetFloat("_Forward", 1.0f);
m_applyAdvect.SetFloat("_Decay", decay);
m_applyAdvect.SetBuffer((int)ADVECTION.BFECC, "_Read1f", buffer[READ]);
m_applyAdvect.SetBuffer((int)ADVECTION.BFECC, "_Write1f", buffer[WRITE]);
m_applyAdvect.SetBuffer((int)ADVECTION.BFECC, "_Phi_n_hat", m_phi[PHI_N_HAT]);
m_applyAdvect.SetBuffer((int)ADVECTION.BFECC, "_Velocity", m_velocity[READ]);
m_applyAdvect.SetBuffer((int)ADVECTION.BFECC, "_Obstacles", m_obstacles);
m_applyAdvect.Dispatch((int)ADVECTION.BFECC, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(buffer);
}
void ApplyAdvectionMacCormack(float dt, float dissipation, float decay, ComputeBuffer[] buffer)
{
m_applyAdvect.SetVector("_Size", m_size);
m_applyAdvect.SetFloat("_DeltaTime", dt);
m_applyAdvect.SetFloat("_Dissipate", dissipation);
m_applyAdvect.SetFloat("_Forward", 1.0f);
m_applyAdvect.SetFloat("_Decay", decay);
m_applyAdvect.SetBuffer((int)ADVECTION.MACCORMACK, "_Read1f", buffer[READ]);
m_applyAdvect.SetBuffer((int)ADVECTION.MACCORMACK, "_Write1f", buffer[WRITE]);
m_applyAdvect.SetBuffer((int)ADVECTION.MACCORMACK, "_Phi_n_1_hat", m_phi[PHI_N_1_HAT]);
m_applyAdvect.SetBuffer((int)ADVECTION.MACCORMACK, "_Phi_n_hat", m_phi[PHI_N_HAT]);
m_applyAdvect.SetBuffer((int)ADVECTION.MACCORMACK, "_Velocity", m_velocity[READ]);
m_applyAdvect.SetBuffer((int)ADVECTION.MACCORMACK, "_Obstacles", m_obstacles);
m_applyAdvect.Dispatch((int)ADVECTION.MACCORMACK, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(buffer);
}
void ApplyAdvectionVelocity(float dt)
{
m_applyAdvect.SetVector("_Size", m_size);
m_applyAdvect.SetFloat("_DeltaTime", dt);
m_applyAdvect.SetFloat("_Dissipate", m_velocityDissipation);
m_applyAdvect.SetFloat("_Forward", 1.0f);
m_applyAdvect.SetFloat("_Decay", 0.0f);
m_applyAdvect.SetBuffer(0, "_Read3f", m_velocity[READ]);
m_applyAdvect.SetBuffer(0, "_Write3f", m_velocity[WRITE]);
m_applyAdvect.SetBuffer(0, "_Velocity", m_velocity[READ]);
m_applyAdvect.SetBuffer(0, "_Obstacles", m_obstacles);
m_applyAdvect.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(m_velocity);
}
void ComputeVorticityConfinement(float dt)
{
m_computeVorticity.SetVector("_Size", m_size);
m_computeVorticity.SetBuffer(0, "_Write", m_temp3f);
m_computeVorticity.SetBuffer(0, "_Velocity", m_velocity[READ]);
m_computeVorticity.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
m_computeConfinement.SetVector("_Size", m_size);
m_computeConfinement.SetFloat("_DeltaTime", dt);
m_computeConfinement.SetFloat("_Epsilon", m_vorticityStrength);
m_computeConfinement.SetBuffer(0, "_Write", m_velocity[WRITE]);
m_computeConfinement.SetBuffer(0, "_Read", m_velocity[READ]);
m_computeConfinement.SetBuffer(0, "_Vorticity", m_temp3f);
m_computeConfinement.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(m_velocity);
}
void ComputeDivergence()
{
m_computeDivergence.SetVector("_Size", m_size);
m_computeDivergence.SetBuffer(0, "_Write", m_temp3f);
m_computeDivergence.SetBuffer(0, "_Velocity", m_velocity[READ]);
m_computeDivergence.SetBuffer(0, "_Obstacles", m_obstacles);
m_computeDivergence.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
}
void ComputePressure()
{
m_computeJacobi.SetVector("_Size", m_size);
m_computeJacobi.SetBuffer(0, "_Divergence", m_temp3f);
m_computeJacobi.SetBuffer(0, "_Obstacles", m_obstacles);
for(int i = 0; i < m_iterations; i++)
{
m_computeJacobi.SetBuffer(0, "_Write", m_pressure[WRITE]);
m_computeJacobi.SetBuffer(0, "_Pressure", m_pressure[READ]);
m_computeJacobi.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(m_pressure);
}
}
void ComputeProjection()
{
m_computeProjection.SetVector("_Size", m_size);
m_computeProjection.SetBuffer(0, "_Obstacles", m_obstacles);
m_computeProjection.SetBuffer(0, "_Pressure", m_pressure[READ]);
m_computeProjection.SetBuffer(0, "_Velocity", m_velocity[READ]);
m_computeProjection.SetBuffer(0, "_Write", m_velocity[WRITE]);
m_computeProjection.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(m_velocity);
}
void Update ()
{
float dt = TIME_STEP;
//First off advect any buffers that contain physical quantities like density or temperature by the
//velocity field. Advection is what moves values around.
ApplyAdvection(dt, m_temperatureDissipation, 0.0f, m_temperature);
//Normal advection can cause smoothing of the advected field making the results look less interesting.
//BFECC is a method of advection that helps to prevents this smoothing at a extra performance cost but is less numerically stable.
//MacCormack does the same as BFECC but is more (not completely) numerically stable and is more costly
//You only really need to do this type of advection on visible fields, but you can do it on non visible ones if you want
if(m_denstyAdvectionType == ADVECTION.BFECC)
{
ApplyAdvection(dt, 1.0f, 0.0f, m_density, 1.0f); //advect forward into write buffer
ApplyAdvection(dt, 1.0f, 0.0f, m_density[READ], m_phi[PHI_N_HAT], -1.0f); //advect back into phi_n_hat buffer
ApplyAdvectionBFECC(dt, m_densityDissipation, 0.0f, m_density); //advect using BFECC
}
else if(m_denstyAdvectionType == ADVECTION.MACCORMACK)
{
ApplyAdvection(dt, 1.0f, 0.0f, m_density[READ], m_phi[PHI_N_1_HAT], 1.0f); //advect forward into phi_n_1_hat buffer
ApplyAdvection(dt, 1.0f, 0.0f, m_phi[PHI_N_1_HAT], m_phi[PHI_N_HAT], -1.0f); //advect back into phi_n_hat buffer
ApplyAdvectionMacCormack(dt, m_densityDissipation, 0.0f, m_density);
}
else
{
ApplyAdvection(dt, m_densityDissipation, 0.0f, m_density);
}
//The reaction advection looks better using normal for shorter lived fire (ie a hight decay rate) and
//looks better with BFECC or macCormack for longer lived fire (in my opinion)
if(m_reactionAdvectionType == ADVECTION.BFECC)
{
ApplyAdvection(dt, 1.0f, 0.0f, m_reaction, 1.0f); //advect forward into write buffer
ApplyAdvection(dt, 1.0f, 0.0f, m_reaction[READ], m_phi[PHI_N_HAT], -1.0f); //advect back into phi_n_hat buffer
ApplyAdvectionBFECC(dt, 1.0f, m_reactionDecay, m_reaction); //advect using BFECC
}
else if(m_reactionAdvectionType == ADVECTION.MACCORMACK)
{
ApplyAdvection(dt, 1.0f, 0.0f, m_reaction[READ], m_phi[PHI_N_1_HAT], 1.0f); //advect forward into phi_n_1_hat buffer
ApplyAdvection(dt, 1.0f, 0.0f, m_phi[PHI_N_1_HAT], m_phi[PHI_N_HAT], -1.0f); //advect back into phi_n_hat buffer
ApplyAdvectionMacCormack(dt, 1.0f, m_reactionDecay, m_reaction);
}
else
{
ApplyAdvection(dt, 1.0f, m_reactionDecay, m_reaction);
}
//The velocity field also advects its self.
ApplyAdvectionVelocity(dt);
//Apply the effect the sinking colder smoke has on the velocity field
ApplyBuoyancy(dt);
//Adds a certain amount of reaction (fire) and temperate
ApplyImpulse(dt, m_reactionAmount, m_reaction);
ApplyImpulse(dt, m_temperatureAmount, m_temperature);
//The smoke is formed when the reaction is extinguished. When the reaction amount
//falls below the extinguishment factor smoke is added
ApplyExtinguishmentImpulse(dt, m_densityAmount, m_density);
//The fuild sim math tends to remove the swirling movement of fluids.
//This step will try and add it back in
ComputeVorticityConfinement(dt);
//Compute the divergence of the velocity field. In fluid simulation the
//fluid is modelled as being incompressible meaning that the volume of the fluid
//does not change over time. The divergence is the amount the field has deviated from being divergence free
ComputeDivergence();
//This computes the pressure need return the fluid to a divergence free condition
ComputePressure();
//Subtract the pressure field from the velocity field enforcing the divergence free conditions
ComputeProjection();
//rotation of box not support because ray cast in shader uses a AABB intersection
transform.rotation = Quaternion.identity;
GetComponent<Renderer>().material.SetVector("_Translate", transform.localPosition);
GetComponent<Renderer>().material.SetVector("_Scale", transform.localScale);
GetComponent<Renderer>().material.SetBuffer("_Density", m_density[READ]);
GetComponent<Renderer>().material.SetBuffer("_Reaction", m_reaction[READ]);
GetComponent<Renderer>().material.SetVector("_Size", m_size);
}
void OnDestroy()
{
m_density[READ].Release();
m_density[WRITE].Release();
m_temperature[READ].Release();
m_temperature[WRITE].Release();
m_reaction[READ].Release();
m_reaction[WRITE].Release();
m_phi[PHI_N_1_HAT].Release();
m_phi[PHI_N_HAT].Release();
m_velocity[READ].Release();
m_velocity[WRITE].Release();
m_pressure[READ].Release();
m_pressure[WRITE].Release();
m_obstacles.Release();
m_temp3f.Release();
}
}
}

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 164869986c15313419bf6ec021c90430
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -0,0 +1,436 @@
using UnityEngine;
using System.Collections;
namespace FluidSim3DProject
{
public class SmokeFluidSim : MonoBehaviour
{
//DONT CHANGE THESE
const int READ = 0;
const int WRITE = 1;
const int PHI_N_HAT = 0;
const int PHI_N_1_HAT = 1;
public enum ADVECTION { NORMAL = 1, BFECC = 2, MACCORMACK = 3 };
//You can change this but you must change the same value in all the compute shader's to the same
//Must be a pow2 number
const int NUM_THREADS = 8;
//You can change this or even use Time.DeltaTime but large time steps can cause numerical errors
const float TIME_STEP = 0.1f;
public ADVECTION m_advectionType = ADVECTION.NORMAL;
public int m_width = 128;
public int m_height = 128;
public int m_depth = 128;
public int m_iterations = 10;
public float m_vorticityStrength = 1.0f;
public float m_densityAmount = 1.0f;
public float m_densityDissipation = 0.999f;
public float m_densityBuoyancy = 1.0f;
public float m_densityWeight = 0.0125f;
public float m_temperatureAmount = 10.0f;
public float m_temperatureDissipation = 0.995f;
public float m_velocityDissipation = 0.995f;
public float m_inputRadius = 0.04f;
public Vector4 m_inputPos = new Vector4(0.5f,0.1f,0.5f,0.0f);
float m_ambientTemperature = 0.0f;
public ComputeShader m_applyImpulse, m_applyAdvect, m_computeVorticity;
public ComputeShader m_computeDivergence, m_computeJacobi, m_computeProjection;
public ComputeShader m_computeConfinement, m_computeObstacles, m_applyBuoyancy;
Vector4 m_size;
ComputeBuffer[] m_density, m_velocity, m_pressure, m_temperature, m_phi;
ComputeBuffer m_temp3f, m_obstacles;
// Ultracombos -------------------------------------------
[Header("Ultracombos Custom")]
public bool doUpdate = true;
public bool doDraw = true;
public float timeStepMultiplier = 5.0f;
public ComputeBuffer DensityBuffer { get { return m_density[READ]; } }
public ComputeBuffer VelocityBuffer { get { return m_velocity[READ]; } }
public ComputeBuffer TemperatureBuffer { get { return m_temperature[READ]; } }
public ComputeBuffer ObstacleBuffer { get { return m_obstacles; } }
public Vector4 GridSize { get { return transform.lossyScale; } }
public Vector4 GridRoot { get { return transform.position - transform.lossyScale * 0.5f; } }
public Vector4 GridDim { get { return m_size; } }
// Ultracombos -------------------------------------------
void Start ()
{
//Dimension sizes must be pow2 numbers
m_width = Mathf.ClosestPowerOfTwo(m_width);
m_height = Mathf.ClosestPowerOfTwo(m_height);
m_depth = Mathf.ClosestPowerOfTwo(m_depth);
//Put all dimension sizes in a vector for easy parsing to shader and also prevents user changing
//dimension sizes during play
m_size = new Vector4(m_width, m_height, m_depth, 0.0f);
//Create all the buffers needed
int SIZE = m_width*m_height*m_depth;
m_density = new ComputeBuffer[2];
m_density[READ] = new ComputeBuffer(SIZE, sizeof(float));
m_density[WRITE] = new ComputeBuffer(SIZE, sizeof(float));
m_temperature = new ComputeBuffer[2];
m_temperature[READ] = new ComputeBuffer(SIZE, sizeof(float));
m_temperature[WRITE] = new ComputeBuffer(SIZE, sizeof(float));
m_phi = new ComputeBuffer[2];
m_phi[READ] = new ComputeBuffer(SIZE, sizeof(float));
m_phi[WRITE] = new ComputeBuffer(SIZE, sizeof(float));
m_velocity = new ComputeBuffer[2];
m_velocity[READ] = new ComputeBuffer(SIZE, sizeof(float)*3);
m_velocity[WRITE] = new ComputeBuffer(SIZE, sizeof(float)*3);
m_pressure = new ComputeBuffer[2];
m_pressure[READ] = new ComputeBuffer(SIZE, sizeof(float));
m_pressure[WRITE] = new ComputeBuffer(SIZE, sizeof(float));
m_obstacles = new ComputeBuffer(SIZE, sizeof(float));
m_temp3f = new ComputeBuffer(SIZE, sizeof(float)*3);
//Any areas that are obstacles need to be masked of in the obstacle buffer
//At the moment is only the border around the edge of the buffers to enforce non-slip boundary conditions
ComputeObstacles();
}
void Swap(ComputeBuffer[] buffer)
{
ComputeBuffer tmp = buffer[READ];
buffer[READ] = buffer[WRITE];
buffer[WRITE] = tmp;
}
void ComputeObstacles()
{
m_computeObstacles.SetVector("_Size", m_size);
m_computeObstacles.SetBuffer(0, "_Write", m_obstacles);
m_computeObstacles.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
}
void ApplyImpulse(float dt, float amount, ComputeBuffer[] buffer)
{
m_applyImpulse.SetVector("_Size", m_size);
m_applyImpulse.SetFloat("_Radius", m_inputRadius);
m_applyImpulse.SetFloat("_Amount", amount);
m_applyImpulse.SetFloat("_DeltaTime", dt);
m_applyImpulse.SetVector("_Pos", m_inputPos);
m_applyImpulse.SetBuffer(0, "_Read", buffer[READ]);
m_applyImpulse.SetBuffer(0, "_Write", buffer[WRITE]);
m_applyImpulse.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(buffer);
}
void ApplyBuoyancy(float dt)
{
m_applyBuoyancy.SetVector("_Size", m_size);
m_applyBuoyancy.SetVector("_Up", new Vector4(0,1,0,0));
m_applyBuoyancy.SetFloat("_Buoyancy", m_densityBuoyancy);
m_applyBuoyancy.SetFloat("_AmbientTemperature", m_ambientTemperature);
m_applyBuoyancy.SetFloat("_Weight", m_densityWeight);
m_applyBuoyancy.SetFloat("_DeltaTime", dt);
m_applyBuoyancy.SetBuffer(0, "_Write", m_velocity[WRITE]);
m_applyBuoyancy.SetBuffer(0, "_Velocity", m_velocity[READ]);
m_applyBuoyancy.SetBuffer(0, "_Density", m_density[READ]);
m_applyBuoyancy.SetBuffer(0, "_Temperature", m_temperature[READ]);
m_applyBuoyancy.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(m_velocity);
}
void ApplyAdvection(float dt, float dissipation, float decay, ComputeBuffer[] buffer, float forward = 1.0f)
{
m_applyAdvect.SetVector("_Size", m_size);
m_applyAdvect.SetFloat("_DeltaTime", dt);
m_applyAdvect.SetFloat("_Dissipate", dissipation);
m_applyAdvect.SetFloat("_Forward", forward);
m_applyAdvect.SetFloat("_Decay", decay);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Read1f", buffer[READ]);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Write1f", buffer[WRITE]);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Velocity", m_velocity[READ]);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Obstacles", m_obstacles);
m_applyAdvect.Dispatch((int)ADVECTION.NORMAL, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(buffer);
}
void ApplyAdvection(float dt, float dissipation, float decay, ComputeBuffer read, ComputeBuffer write, float forward = 1.0f)
{
m_applyAdvect.SetVector("_Size", m_size);
m_applyAdvect.SetFloat("_DeltaTime", dt);
m_applyAdvect.SetFloat("_Dissipate", dissipation);
m_applyAdvect.SetFloat("_Forward", forward);
m_applyAdvect.SetFloat("_Decay", decay);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Read1f", read);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Write1f", write);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Velocity", m_velocity[READ]);
m_applyAdvect.SetBuffer((int)ADVECTION.NORMAL, "_Obstacles", m_obstacles);
m_applyAdvect.Dispatch((int)ADVECTION.NORMAL, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
}
void ApplyAdvectionBFECC(float dt, float dissipation, float decay, ComputeBuffer[] buffer)
{
m_applyAdvect.SetVector("_Size", m_size);
m_applyAdvect.SetFloat("_DeltaTime", dt);
m_applyAdvect.SetFloat("_Dissipate", dissipation);
m_applyAdvect.SetFloat("_Forward", 1.0f);
m_applyAdvect.SetFloat("_Decay", decay);
m_applyAdvect.SetBuffer((int)ADVECTION.BFECC, "_Read1f", buffer[READ]);
m_applyAdvect.SetBuffer((int)ADVECTION.BFECC, "_Write1f", buffer[WRITE]);
m_applyAdvect.SetBuffer((int)ADVECTION.BFECC, "_Phi_n_hat", m_phi[PHI_N_HAT]);
m_applyAdvect.SetBuffer((int)ADVECTION.BFECC, "_Velocity", m_velocity[READ]);
m_applyAdvect.SetBuffer((int)ADVECTION.BFECC, "_Obstacles", m_obstacles);
m_applyAdvect.Dispatch((int)ADVECTION.BFECC, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(buffer);
}
void ApplyAdvectionMacCormack(float dt, float dissipation, float decay, ComputeBuffer[] buffer)
{
m_applyAdvect.SetVector("_Size", m_size);
m_applyAdvect.SetFloat("_DeltaTime", dt);
m_applyAdvect.SetFloat("_Dissipate", dissipation);
m_applyAdvect.SetFloat("_Forward", 1.0f);
m_applyAdvect.SetFloat("_Decay", decay);
m_applyAdvect.SetBuffer((int)ADVECTION.MACCORMACK, "_Read1f", buffer[READ]);
m_applyAdvect.SetBuffer((int)ADVECTION.MACCORMACK, "_Write1f", buffer[WRITE]);
m_applyAdvect.SetBuffer((int)ADVECTION.MACCORMACK, "_Phi_n_1_hat", m_phi[PHI_N_1_HAT]);
m_applyAdvect.SetBuffer((int)ADVECTION.MACCORMACK, "_Phi_n_hat", m_phi[PHI_N_HAT]);
m_applyAdvect.SetBuffer((int)ADVECTION.MACCORMACK, "_Velocity", m_velocity[READ]);
m_applyAdvect.SetBuffer((int)ADVECTION.MACCORMACK, "_Obstacles", m_obstacles);
m_applyAdvect.Dispatch((int)ADVECTION.MACCORMACK, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(buffer);
}
void ApplyAdvectionVelocity(float dt)
{
m_applyAdvect.SetVector("_Size", m_size);
m_applyAdvect.SetFloat("_DeltaTime", dt);
m_applyAdvect.SetFloat("_Dissipate", m_velocityDissipation);
m_applyAdvect.SetFloat("_Forward", 1.0f);
m_applyAdvect.SetFloat("_Decay", 0.0f);
m_applyAdvect.SetBuffer(0, "_Read3f", m_velocity[READ]);
m_applyAdvect.SetBuffer(0, "_Write3f", m_velocity[WRITE]);
m_applyAdvect.SetBuffer(0, "_Velocity", m_velocity[READ]);
m_applyAdvect.SetBuffer(0, "_Obstacles", m_obstacles);
m_applyAdvect.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(m_velocity);
}
void ComputeVorticityConfinement(float dt)
{
m_computeVorticity.SetVector("_Size", m_size);
m_computeVorticity.SetBuffer(0, "_Write", m_temp3f);
m_computeVorticity.SetBuffer(0, "_Velocity", m_velocity[READ]);
m_computeVorticity.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
m_computeConfinement.SetVector("_Size", m_size);
m_computeConfinement.SetFloat("_DeltaTime", dt);
m_computeConfinement.SetFloat("_Epsilon", m_vorticityStrength);
m_computeConfinement.SetBuffer(0, "_Write", m_velocity[WRITE]);
m_computeConfinement.SetBuffer(0, "_Read", m_velocity[READ]);
m_computeConfinement.SetBuffer(0, "_Vorticity", m_temp3f);
m_computeConfinement.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(m_velocity);
}
void ComputeDivergence()
{
m_computeDivergence.SetVector("_Size", m_size);
m_computeDivergence.SetBuffer(0, "_Write", m_temp3f);
m_computeDivergence.SetBuffer(0, "_Velocity", m_velocity[READ]);
m_computeDivergence.SetBuffer(0, "_Obstacles", m_obstacles);
m_computeDivergence.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
}
void ComputePressure()
{
m_computeJacobi.SetVector("_Size", m_size);
m_computeJacobi.SetBuffer(0, "_Divergence", m_temp3f);
m_computeJacobi.SetBuffer(0, "_Obstacles", m_obstacles);
for(int i = 0; i < m_iterations; i++)
{
m_computeJacobi.SetBuffer(0, "_Write", m_pressure[WRITE]);
m_computeJacobi.SetBuffer(0, "_Pressure", m_pressure[READ]);
m_computeJacobi.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(m_pressure);
}
}
void ComputeProjection()
{
m_computeProjection.SetVector("_Size", m_size);
m_computeProjection.SetBuffer(0, "_Obstacles", m_obstacles);
m_computeProjection.SetBuffer(0, "_Pressure", m_pressure[READ]);
m_computeProjection.SetBuffer(0, "_Velocity", m_velocity[READ]);
m_computeProjection.SetBuffer(0, "_Write", m_velocity[WRITE]);
m_computeProjection.Dispatch(0, (int)m_size.x/NUM_THREADS, (int)m_size.y/NUM_THREADS, (int)m_size.z/NUM_THREADS);
Swap(m_velocity);
}
private void FixedUpdate()
//void Update ()
{
GetComponent<MeshRenderer>().enabled = doDraw;
if (doUpdate == false)
return;
float dt = Time.fixedDeltaTime * timeStepMultiplier;
//float dt = TIME_STEP;
Simulation(dt);
}
void OnDestroy()
{
m_density[READ].Release();
m_density[WRITE].Release();
m_temperature[READ].Release();
m_temperature[WRITE].Release();
m_phi[PHI_N_1_HAT].Release();
m_phi[PHI_N_HAT].Release();
m_velocity[READ].Release();
m_velocity[WRITE].Release();
m_pressure[READ].Release();
m_pressure[WRITE].Release();
m_obstacles.Release();
m_temp3f.Release();
}
void Simulation(float dt)
{
//First off advect any buffers that contain physical quantities like density or temperature by the
//velocity field. Advection is what moves values around.
ApplyAdvection(dt, m_temperatureDissipation, 0.0f, m_temperature);
//Normal advection can cause smoothing of the advected field making the results look less interesting.
//BFECC is a method of advection that helps to prevents this smoothing at a extra performance cost but is less numerically stable.
//MacCormack does the same as BFECC but is more (not completely) numerically stable and is more costly
if (m_advectionType == ADVECTION.BFECC)
{
ApplyAdvection(dt, 1.0f, 0.0f, m_density, 1.0f); //advect forward into write buffer
ApplyAdvection(dt, 1.0f, 0.0f, m_density[READ], m_phi[PHI_N_HAT], -1.0f); //advect back into phi_n_hat buffer
ApplyAdvectionBFECC(dt, m_densityDissipation, 0.0f, m_density); //advect using BFECC
}
else if (m_advectionType == ADVECTION.MACCORMACK)
{
ApplyAdvection(dt, 1.0f, 0.0f, m_density[READ], m_phi[PHI_N_1_HAT], 1.0f); //advect forward into phi_n_1_hat buffer
ApplyAdvection(dt, 1.0f, 0.0f, m_phi[PHI_N_1_HAT], m_phi[PHI_N_HAT], -1.0f); //advect back into phi_n_hat buffer
ApplyAdvectionMacCormack(dt, m_densityDissipation, 0.0f, m_density);
}
else
{
ApplyAdvection(dt, m_densityDissipation, 0.0f, m_density);
}
//The velocity field also advects its self.
ApplyAdvectionVelocity(dt);
//Apply the effect the sinking colder smoke has on the velocity field
ApplyBuoyancy(dt);
//Adds a certain amount of density (the visible smoke) and temperate
ApplyImpulse(dt, m_densityAmount, m_density);
ApplyImpulse(dt, m_temperatureAmount, m_temperature);
//The fuild sim math tends to remove the swirling movement of fluids.
//This step will try and add it back in
ComputeVorticityConfinement(dt);
//Compute the divergence of the velocity field. In fluid simulation the
//fluid is modelled as being incompressible meaning that the volume of the fluid
//does not change over time. The divergence is the amount the field has deviated from being divergence free
ComputeDivergence();
//This computes the pressure need return the fluid to a divergence free condition
ComputePressure();
//Subtract the pressure field from the velocity field enforcing the divergence free conditions
ComputeProjection();
//rotation of box not support because ray cast in shader uses a AABB intersection
transform.rotation = Quaternion.identity;
GetComponent<Renderer>().material.SetVector("_Translate", transform.localPosition);
GetComponent<Renderer>().material.SetVector("_Scale", transform.localScale);
GetComponent<Renderer>().material.SetBuffer("_Density", m_density[READ]);
GetComponent<Renderer>().material.SetVector("_Size", m_size);
}
}
}

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a924471615937564f81ebb1540cd8b36
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: 8fe3db169bedce248a2ab634d707f41c
folderAsset: yes
DefaultImporter:
userData:

@ -0,0 +1,244 @@
#define NUM_THREADS 8
float4 _Size;
float _DeltaTime, _Dissipate, _Decay, _Forward;
StructuredBuffer<float3> _Velocity;
StructuredBuffer<float> _Obstacles;
RWStructuredBuffer<float> _Write1f;
StructuredBuffer<float> _Read1f;
RWStructuredBuffer<float3> _Write3f;
StructuredBuffer<float3> _Read3f;
StructuredBuffer<float> _Phi_n_1_hat, _Phi_n_hat;
float3 GetAdvectedPosTexCoords(float3 pos, int idx)
{
pos -= _DeltaTime * _Forward * _Velocity[idx];
return pos;
}
float SampleBilinear(StructuredBuffer<float> buffer, float3 uv, float3 size)
{
int x = uv.x;
int y = uv.y;
int z = uv.z;
int X = size.x;
int XY = size.x*size.y;
float fx = uv.x-x;
float fy = uv.y-y;
float fz = uv.z-z;
int xp1 = min(size.x-1, x+1);
int yp1 = min(size.y-1, y+1);
int zp1 = min(size.z-1, z+1);
float x0 = buffer[x+y*X+z*XY] * (1.0f-fx) + buffer[xp1+y*X+z*XY] * fx;
float x1 = buffer[x+y*X+zp1*XY] * (1.0f-fx) + buffer[xp1+y*X+zp1*XY] * fx;
float x2 = buffer[x+yp1*X+z*XY] * (1.0f-fx) + buffer[xp1+yp1*X+z*XY] * fx;
float x3 = buffer[x+yp1*X+zp1*XY] * (1.0f-fx) + buffer[xp1+yp1*X+zp1*XY] * fx;
float z0 = x0 * (1.0f-fz) + x1 * fz;
float z1 = x2 * (1.0f-fz) + x3 * fz;
return z0 * (1.0f-fy) + z1 * fy;
}
float3 SampleBilinear(StructuredBuffer<float3> buffer, float3 uv, float3 size)
{
int x = uv.x;
int y = uv.y;
int z = uv.z;
int X = size.x;
int XY = size.x*size.y;
float fx = uv.x-x;
float fy = uv.y-y;
float fz = uv.z-z;
int xp1 = min(size.x-1, x+1);
int yp1 = min(size.y-1, y+1);
int zp1 = min(size.z-1, z+1);
float3 x0 = buffer[x+y*X+z*XY] * (1.0f-fx) + buffer[xp1+y*X+z*XY] * fx;
float3 x1 = buffer[x+y*X+zp1*XY] * (1.0f-fx) + buffer[xp1+y*X+zp1*XY] * fx;
float3 x2 = buffer[x+yp1*X+z*XY] * (1.0f-fx) + buffer[xp1+yp1*X+z*XY] * fx;
float3 x3 = buffer[x+yp1*X+zp1*XY] * (1.0f-fx) + buffer[xp1+yp1*X+zp1*XY] * fx;
float3 z0 = x0 * (1.0f-fz) + x1 * fz;
float3 z1 = x2 * (1.0f-fz) + x3 * fz;
return z0 * (1.0f-fy) + z1 * fy;
}
#pragma kernel AdvectVelocity
[numthreads(NUM_THREADS,NUM_THREADS,NUM_THREADS)]
void AdvectVelocity(uint3 id : SV_DispatchThreadID)
{
int idx = id.x + id.y*_Size.x + id.z*_Size.x*_Size.y;
if(_Obstacles[idx] > 0.1)
{
_Write3f[idx] = float3(0,0,0);
return;
}
float3 uv = GetAdvectedPosTexCoords(id, idx);
_Write3f[idx] = SampleBilinear(_Read3f, uv, _Size.xyz) * _Dissipate;
}
#pragma kernel Advect
[numthreads(NUM_THREADS,NUM_THREADS,NUM_THREADS)]
void Advect(uint3 id : SV_DispatchThreadID)
{
int idx = id.x + id.y*_Size.x + id.z*_Size.x*_Size.y;
if(_Obstacles[idx] > 0.1)
{
_Write1f[idx] = 0;
return;
}
float3 uv = GetAdvectedPosTexCoords(id, idx);
_Write1f[idx] = max(0, SampleBilinear(_Read1f, uv, _Size.xyz) * _Dissipate - _Decay);
}
#pragma kernel AdvectBFECC
[numthreads(NUM_THREADS,NUM_THREADS,NUM_THREADS)]
void AdvectBFECC(uint3 id : SV_DispatchThreadID)
{
int idx = id.x + id.y*_Size.x + id.z*_Size.x*_Size.y;
if(_Obstacles[idx] > 0.1)
{
_Write1f[idx] = 0;
return;
}
float3 uv = GetAdvectedPosTexCoords(id, idx);
float r;
float4 halfVolumeDim = _Size/2;
float3 diff = abs( halfVolumeDim.xyz - id );
// Must use regular semi-Lagrangian advection instead of BFECC at the volume boundaries
if( (diff.x > (halfVolumeDim.x-4)) || (diff.y > (halfVolumeDim.y-4)) || (diff.z > (halfVolumeDim.z-4)) )
{
r = SampleBilinear(_Read1f, uv, _Size.xyz);
}
else
{
r = 1.5f * SampleBilinear(_Read1f, uv, _Size.xyz) - 0.5f * SampleBilinear(_Phi_n_hat, uv, _Size.xyz);
}
_Write1f[idx] = max(0, r * _Dissipate - _Decay);
}
#pragma kernel AdvectMacCormack
[numthreads(NUM_THREADS,NUM_THREADS,NUM_THREADS)]
void AdvectMacCormack(uint3 id : SV_DispatchThreadID)
{
int idx = id.x + id.y*_Size.x + id.z*_Size.x*_Size.y;
if(_Obstacles[idx] > 0.1)
{
_Write1f[idx] = 0;
return;
}
float3 uv = GetAdvectedPosTexCoords(id, idx);
float r;
float4 halfVolumeDim = _Size/2;
float3 diff = abs( halfVolumeDim.xyz - id );
// Must use regular semi-Lagrangian advection instead of MacCormack at the volume boundaries
if( (diff.x > (halfVolumeDim.x-4)) || (diff.y > (halfVolumeDim.y-4)) || (diff.z > (halfVolumeDim.z-4)) )
{
r = SampleBilinear(_Read1f, uv, _Size.xyz);
}
else
{
int idx0 = (id.x-1) + (id.y-1)*_Size.x + (id.z-1)*_Size.x*_Size.y;
int idx1 = (id.x-1) + (id.y-1)*_Size.x + (id.z+1)*_Size.x*_Size.y;
int idx2 = (id.x-1) + (id.y+1)*_Size.x + (id.z-1)*_Size.x*_Size.y;
int idx3 = (id.x-1) + (id.y+1)*_Size.x + (id.z+1)*_Size.x*_Size.y;
int idx4 = (id.x+1) + (id.y-1)*_Size.x + (id.z-1)*_Size.x*_Size.y;
int idx5 = (id.x+1) + (id.y-1)*_Size.x + (id.z+1)*_Size.x*_Size.y;
int idx6 = (id.x+1) + (id.y+1)*_Size.x + (id.z-1)*_Size.x*_Size.y;
int idx7 = (id.x+1) + (id.y+1)*_Size.x + (id.z+1)*_Size.x*_Size.y;
float nodes[8];
nodes[0] = _Read1f[ idx0 ];
nodes[1] = _Read1f[ idx1 ];
nodes[2] = _Read1f[ idx2 ];
nodes[3] = _Read1f[ idx3 ];
nodes[4] = _Read1f[ idx4 ];
nodes[5] = _Read1f[ idx5 ];
nodes[6] = _Read1f[ idx6 ];
nodes[7] = _Read1f[ idx7 ];
float minPhi = min(min(min(min(min(min(min(nodes[0],nodes[1]),nodes[2]),nodes[3]),nodes[4]),nodes[5]),nodes[6]),nodes[7]);
float maxPhi = max(max(max(max(max(max(max(nodes[0],nodes[1]),nodes[2]),nodes[3]),nodes[4]),nodes[5]),nodes[6]),nodes[7]);
r = SampleBilinear(_Phi_n_1_hat, uv, _Size.xyz) + 0.5f * (_Read1f[idx] - _Phi_n_hat[idx]);
r = max(min(r, maxPhi), minPhi);
}
_Write1f[idx] = max(0, r * _Dissipate - _Decay);
}

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 411cedf0db0a1904693c77b97afbf915
ComputeShaderImporter:
userData:

@ -0,0 +1,47 @@
#pragma kernel CSMain
#define NUM_THREADS 8
float4 _Size, _Up;
float _AmbientTemperature, _DeltaTime, _Buoyancy, _Weight;
RWStructuredBuffer<float3> _Write;
StructuredBuffer<float3> _Velocity;
StructuredBuffer<float> _Density, _Temperature;
[numthreads(NUM_THREADS,NUM_THREADS,NUM_THREADS)]
void CSMain (int3 id : SV_DispatchThreadID)
{
int idx = id.x + id.y*_Size.x + id.z*_Size.x*_Size.y;
float T = _Temperature[idx];
float D = _Density[idx];
float3 V = _Velocity[idx];
if(T > _AmbientTemperature)
V += (_DeltaTime * (T - _AmbientTemperature) * _Buoyancy - D * _Weight) * _Up.xyz;
_Write[idx] = V;
}

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 0d7710a16db583e418df13bddb0be43d
ComputeShaderImporter:
userData:

@ -0,0 +1,57 @@
#define NUM_THREADS 8
float _Radius, _Amount, _DeltaTime, _Extinguishment;
float4 _Pos, _Size;
RWStructuredBuffer<float> _Write;
StructuredBuffer<float> _Read, _Reaction;
#pragma kernel GaussImpulse
[numthreads(NUM_THREADS,NUM_THREADS,NUM_THREADS)]
void GaussImpulse(uint3 id : SV_DispatchThreadID)
{
float3 pos = id/(_Size.xyz-1.0f) - _Pos.xyz;
float mag = pos.x*pos.x + pos.y*pos.y + pos.z*pos.z;
float rad2 = _Radius*_Radius;
float amount = exp(-mag/rad2) * _Amount * _DeltaTime;
int idx = id.x + id.y*_Size.x + id.z*_Size.x*_Size.y;
_Write[idx] = _Read[idx] + amount;
}
#pragma kernel ExtinguishmentImpluse
[numthreads(NUM_THREADS,NUM_THREADS,NUM_THREADS)]
void ExtinguishmentImpluse(uint3 id : SV_DispatchThreadID)
{
int idx = id.x + id.y*_Size.x + id.z*_Size.x*_Size.y;
float amount = 0.0;
float reaction = _Reaction[idx];
if(reaction > 0.0 && reaction < _Extinguishment)
amount = _Amount * reaction;
_Write[idx] = _Read[idx] + amount;
}

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: a080c25e6daeb0d4e88fced65f9959ce
ComputeShaderImporter:
userData:

@ -0,0 +1,44 @@
#pragma kernel CSMain
#define NUM_THREADS 8
float _DeltaTime, _Epsilon;
float4 _Size;
RWStructuredBuffer<float3> _Write;
StructuredBuffer<float3> _Vorticity, _Read;
[numthreads(NUM_THREADS,NUM_THREADS,NUM_THREADS)]
void CSMain (int3 id : SV_DispatchThreadID)
{
int idxL = max(0, id.x-1) + id.y*_Size.x + id.z*_Size.x*_Size.y;
int idxR = min(_Size.x-1, id.x+1) + id.y*_Size.x + id.z*_Size.x*_Size.y;
int idxB = id.x + max(0, id.y-1)*_Size.x + id.z*_Size.x*_Size.y;
int idxT = id.x + min(_Size.y-1, id.y+1)*_Size.x + id.z*_Size.x*_Size.y;
int idxD = id.x + id.y*_Size.x + max(0, id.z-1)*_Size.x*_Size.y;
int idxU = id.x + id.y*_Size.x + min(_Size.z-1, id.z+1)*_Size.x*_Size.y;
float omegaL = length(_Vorticity[ idxL ]);
float omegaR = length(_Vorticity[ idxR ]);
float omegaB = length(_Vorticity[ idxB ]);
float omegaT = length(_Vorticity[ idxT ]);
float omegaD = length(_Vorticity[ idxD ]);
float omegaU = length(_Vorticity[ idxU ]);
int idx = id.x + id.y*_Size.x + id.z*_Size.x*_Size.y;
float3 omega = _Vorticity[idx];
float3 eta = 0.5 * float3( omegaR - omegaL, omegaT - omegaB, omegaU - omegaD );
eta = normalize( eta + float3(0.001,0.001,0.001) );
float3 force = _DeltaTime * _Epsilon * float3( eta.y * omega.z - eta.z * omega.y, eta.z * omega.x - eta.x * omega.z, eta.x * omega.y - eta.y * omega.x );
_Write[idx] = _Read[idx] + force;
}

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 4b0055f0edf774c4ea97ac8cd62e6158
ComputeShaderImporter:
userData:

@ -0,0 +1,49 @@
#pragma kernel CSMain
#define NUM_THREADS 8
float4 _Size;
RWStructuredBuffer<float3> _Write;
StructuredBuffer<float3> _Velocity;
StructuredBuffer<float> _Obstacles;
[numthreads(NUM_THREADS,NUM_THREADS,NUM_THREADS)]
void CSMain (int3 id : SV_DispatchThreadID)
{
int idxL = max(0, id.x-1) + id.y*_Size.x + id.z*_Size.x*_Size.y;
int idxR = min(_Size.x-1, id.x+1) + id.y*_Size.x + id.z*_Size.x*_Size.y;
int idxB = id.x + max(0, id.y-1)*_Size.x + id.z*_Size.x*_Size.y;
int idxT = id.x + min(_Size.y-1, id.y+1)*_Size.x + id.z*_Size.x*_Size.y;
int idxD = id.x + id.y*_Size.x + max(0, id.z-1)*_Size.x*_Size.y;
int idxU = id.x + id.y*_Size.x + min(_Size.z-1, id.z+1)*_Size.x*_Size.y;
float3 L = _Velocity[ idxL ];
float3 R = _Velocity[ idxR ];
float3 B = _Velocity[ idxB ];
float3 T = _Velocity[ idxT ];
float3 D = _Velocity[ idxD ];
float3 U = _Velocity[ idxU ];
float3 obstacleVelocity = float3(0,0,0);
if(_Obstacles[idxL] > 0.1) L = obstacleVelocity;
if(_Obstacles[idxR] > 0.1) R = obstacleVelocity;
if(_Obstacles[idxB] > 0.1) B = obstacleVelocity;
if(_Obstacles[idxT] > 0.1) T = obstacleVelocity;
if(_Obstacles[idxD] > 0.1) D = obstacleVelocity;
if(_Obstacles[idxU] > 0.1) U = obstacleVelocity;
float divergence = 0.5 * ( ( R.x - L.x ) + ( T.y - B.y ) + ( U.z - D.z ) );
int idx = id.x + id.y*_Size.x + id.z*_Size.x*_Size.y;
_Write[idx] = float3(divergence,0,0);
}

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: e25212f321912c44ab6d9430762d37b6
ComputeShaderImporter:
userData:

@ -0,0 +1,65 @@
#pragma kernel CSMain
#define NUM_THREADS 8
float4 _Size;
RWStructuredBuffer<float> _Write;
StructuredBuffer<float> _Pressure, _Obstacles;
StructuredBuffer<float3> _Divergence;
[numthreads(NUM_THREADS,NUM_THREADS,NUM_THREADS)]
void CSMain (int3 id : SV_DispatchThreadID)
{
int idxL = max(0, id.x-1) + id.y*_Size.x + id.z*_Size.x*_Size.y;
int idxR = min(_Size.x-1, id.x+1) + id.y*_Size.x + id.z*_Size.x*_Size.y;
int idxB = id.x + max(0, id.y-1)*_Size.x + id.z*_Size.x*_Size.y;
int idxT = id.x + min(_Size.y-1, id.y+1)*_Size.x + id.z*_Size.x*_Size.y;
int idxD = id.x + id.y*_Size.x + max(0, id.z-1)*_Size.x*_Size.y;
int idxU = id.x + id.y*_Size.x + min(_Size.z-1, id.z+1)*_Size.x*_Size.y;
float L = _Pressure[ idxL ];
float R = _Pressure[ idxR ];
float B = _Pressure[ idxB ];
float T = _Pressure[ idxT ];
float D = _Pressure[ idxD ];
float U = _Pressure[ idxU ];
int idx = id.x + id.y*_Size.x + id.z*_Size.x*_Size.y;
float C = _Pressure[idx];
float divergence = _Divergence[idx].r;
if(_Obstacles[idxL] > 0.1) L = C;
if(_Obstacles[idxR] > 0.1) R = C;
if(_Obstacles[idxB] > 0.1) B = C;
if(_Obstacles[idxT] > 0.1) T = C;
if(_Obstacles[idxD] > 0.1) D = C;
if(_Obstacles[idxU] > 0.1) U = C;
_Write[idx] = ( L + R + B + T + U + D - divergence ) / 6.0;
}

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: cebd12b982d79674aab2ed65879e49d0
ComputeShaderImporter:
userData:

@ -0,0 +1,47 @@
#pragma kernel CSMain
#define NUM_THREADS 8
float4 _Size;
RWStructuredBuffer<float> _Write;
[numthreads(NUM_THREADS,NUM_THREADS,NUM_THREADS)]
void CSMain (int3 id : SV_DispatchThreadID)
{
int idx = id.x + id.y*_Size.x + id.z*_Size.x*_Size.y;
float obstacle = 0;
if(id.x-1 < 0) obstacle = 1;
if(id.x+1 > (int)_Size.x-1) obstacle = 1;
if(id.y-1 < 0) obstacle = 1;
if(id.y+1 > (int)_Size.y-1) obstacle = 1;
if(id.z-1 < 0) obstacle = 1;
if(id.z+1 > (int)_Size.z-1) obstacle = 1;
_Write[idx] = obstacle;
}

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 6a49b38e37bae7a4ab2903fbdde8e4ac
ComputeShaderImporter:
userData:

@ -0,0 +1,76 @@
#pragma kernel CSMain
#define NUM_THREADS 8
float4 _Size;
RWStructuredBuffer<float3> _Write;
StructuredBuffer<float> _Pressure, _Obstacles;
StructuredBuffer<float3> _Velocity;
[numthreads(NUM_THREADS,NUM_THREADS,NUM_THREADS)]
void CSMain (int3 id : SV_DispatchThreadID)
{
int idx = id.x + id.y*_Size.x + id.z*_Size.x*_Size.y;
if(_Obstacles[idx] > 0.1)
{
_Write[idx] = float3(0,0,0);
return;
}
int idxL = max(0, id.x-1) + id.y*_Size.x + id.z*_Size.x*_Size.y;
int idxR = min(_Size.x-1, id.x+1) + id.y*_Size.x + id.z*_Size.x*_Size.y;
int idxB = id.x + max(0, id.y-1)*_Size.x + id.z*_Size.x*_Size.y;
int idxT = id.x + min(_Size.y-1, id.y+1)*_Size.x + id.z*_Size.x*_Size.y;
int idxD = id.x + id.y*_Size.x + max(0, id.z-1)*_Size.x*_Size.y;
int idxU = id.x + id.y*_Size.x + min(_Size.z-1, id.z+1)*_Size.x*_Size.y;
float L = _Pressure[ idxL ];
float R = _Pressure[ idxR ];
float B = _Pressure[ idxB ];
float T = _Pressure[ idxT ];
float D = _Pressure[ idxD ];
float U = _Pressure[ idxU ];
float C = _Pressure[idx];
float3 mask = float3(1,1,1);
if(_Obstacles[idxL] > 0.1) { L = C; mask.x = 0; }
if(_Obstacles[idxR] > 0.1) { R = C; mask.x = 0; }
if(_Obstacles[idxB] > 0.1) { B = C; mask.y = 0; }
if(_Obstacles[idxT] > 0.1) { T = C; mask.y = 0; }
if(_Obstacles[idxD] > 0.1) { D = C; mask.z = 0; }
if(_Obstacles[idxU] > 0.1) { U = C; mask.z = 0; }
float3 v = _Velocity[idx] - float3( R - L, T - B, U - D ) * 0.5;
_Write[idx] = v * mask;
}

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: aa1de4528a2c0d24983dce181ecd63af
ComputeShaderImporter:
userData:

@ -0,0 +1,37 @@
#pragma kernel CSMain
#define NUM_THREADS 8
float4 _Size;
RWStructuredBuffer<float3> _Write;
StructuredBuffer<float3> _Velocity;
[numthreads(NUM_THREADS,NUM_THREADS,NUM_THREADS)]
void CSMain (int3 id : SV_DispatchThreadID)
{
int idxL = max(0, id.x-1) + id.y*_Size.x + id.z*_Size.x*_Size.y;
int idxR = min(_Size.x-1, id.x+1) + id.y*_Size.x + id.z*_Size.x*_Size.y;
int idxB = id.x + max(0, id.y-1)*_Size.x + id.z*_Size.x*_Size.y;
int idxT = id.x + min(_Size.y-1, id.y+1)*_Size.x + id.z*_Size.x*_Size.y;
int idxD = id.x + id.y*_Size.x + max(0, id.z-1)*_Size.x*_Size.y;
int idxU = id.x + id.y*_Size.x + min(_Size.z-1, id.z+1)*_Size.x*_Size.y;
float3 L = _Velocity[ idxL ];
float3 R = _Velocity[ idxR ];
float3 B = _Velocity[ idxB ];
float3 T = _Velocity[ idxT ];
float3 D = _Velocity[ idxD ];
float3 U = _Velocity[ idxU ];
float3 vorticity = 0.5 * float3( (( T.z - B.z ) - ( U.y - D.y )) , (( U.x - D.x ) - ( R.z - L.z )) , (( R.y - L.y ) - ( T.x - B.x )) );
int idx = id.x + id.y*_Size.x + id.z*_Size.x*_Size.y;
_Write[idx] = vorticity;
}

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 62b5b102c778bbd4682f63bf0a9bd2fe
ComputeShaderImporter:
userData:

@ -0,0 +1,193 @@
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
Shader "3DFluidSim/FireRayCast"
{
Properties
{
_FireGradient("FireGradient", 2D) = "red" {}
_SmokeColor("SmokeGradient", Color) = (0,0,0,1)
_SmokeAbsorption("SmokeAbsorbtion", float) = 60.0
_FireAbsorption("FireAbsorbtion", float) = 40.0
}
SubShader
{
Tags { "Queue" = "Transparent" }
Pass
{
Cull front
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#include "UnityCG.cginc"
#pragma target 5.0
#pragma vertex vert
#pragma fragment frag
#define NUM_SAMPLES 64
sampler2D _FireGradient;
float4 _SmokeColor;
float _SmokeAbsorption, _FireAbsorption;
uniform float3 _Translate, _Scale, _Size;
StructuredBuffer<float> _Density, _Reaction;
struct v2f
{
float4 pos : SV_POSITION;
float3 worldPos : TEXCOORD0;
};
v2f vert(appdata_base v)
{
v2f OUT;
OUT.pos = UnityObjectToClipPos(v.vertex);
OUT.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
return OUT;
}
struct Ray {
float3 origin;
float3 dir;
};
struct AABB {
float3 Min;
float3 Max;
};
//find intersection points of a ray with a box
bool intersectBox(Ray r, AABB aabb, out float t0, out float t1)
{
float3 invR = 1.0 / r.dir;
float3 tbot = invR * (aabb.Min-r.origin);
float3 ttop = invR * (aabb.Max-r.origin);
float3 tmin = min(ttop, tbot);
float3 tmax = max(ttop, tbot);
float2 t = max(tmin.xx, tmin.yz);
t0 = max(t.x, t.y);
t = min(tmax.xx, tmax.yz);
t1 = min(t.x, t.y);
return t0 <= t1;
}
float SampleBilinear(StructuredBuffer<float> buffer, float3 uv, float3 size)
{
uv = saturate(uv);
uv = uv * (size-1.0);
int x = uv.x;
int y = uv.y;
int z = uv.z;
int X = size.x;
int XY = size.x*size.y;
float fx = uv.x-x;
float fy = uv.y-y;
float fz = uv.z-z;
int xp1 = min(_Size.x-1, x+1);
int yp1 = min(_Size.y-1, y+1);
int zp1 = min(_Size.z-1, z+1);
float x0 = buffer[x+y*X+z*XY] * (1.0f-fx) + buffer[xp1+y*X+z*XY] * fx;
float x1 = buffer[x+y*X+zp1*XY] * (1.0f-fx) + buffer[xp1+y*X+zp1*XY] * fx;
float x2 = buffer[x+yp1*X+z*XY] * (1.0f-fx) + buffer[xp1+yp1*X+z*XY] * fx;
float x3 = buffer[x+yp1*X+zp1*XY] * (1.0f-fx) + buffer[xp1+yp1*X+zp1*XY] * fx;
float z0 = x0 * (1.0f-fz) + x1 * fz;
float z1 = x2 * (1.0f-fz) + x3 * fz;
return z0 * (1.0f-fy) + z1 * fy;
}
float4 frag(v2f IN) : COLOR
{
float3 pos = _WorldSpaceCameraPos;
Ray r;
r.origin = pos;
r.dir = normalize(IN.worldPos-pos);
AABB aabb;
aabb.Min = float3(-0.5,-0.5,-0.5)*_Scale + _Translate;
aabb.Max = float3(0.5,0.5,0.5)*_Scale + _Translate;
//figure out where ray from eye hit front of cube
float tnear, tfar;
intersectBox(r, aabb, tnear, tfar);
//if eye is in cube then start ray at eye
if (tnear < 0.0) tnear = 0.0;
float3 rayStart = r.origin + r.dir * tnear;
float3 rayStop = r.origin + r.dir * tfar;
//convert to texture space
rayStart -= _Translate;
rayStop -= _Translate;
rayStart = (rayStart + 0.5*_Scale)/_Scale;
rayStop = (rayStop + 0.5*_Scale)/_Scale;
float3 start = rayStart;
float dist = distance(rayStop, rayStart);
float stepSize = dist/float(NUM_SAMPLES);
float3 ds = normalize(rayStop-rayStart) * stepSize;
float fireAlpha = 1.0, smokeAlpha = 1.0;
for(int i=0; i < NUM_SAMPLES; i++, start += ds)
{
float D = SampleBilinear(_Density, start, _Size);
float R = SampleBilinear(_Reaction, start, _Size);
fireAlpha *= 1.0-saturate(R*stepSize*_FireAbsorption);
smokeAlpha *= 1.0-saturate(D*stepSize*_SmokeAbsorption);
if(fireAlpha <= 0.01 && smokeAlpha <= 0.01) break;
}
float4 smoke = _SmokeColor * (1.0-smokeAlpha);
float4 fire = tex2D(_FireGradient, float2(fireAlpha,0)) * (1.0-fireAlpha);
return fire + smoke;
}
ENDCG
}
}
}

@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: ce7e14398ee00d84193a82fb0174f3f6
ShaderImporter:
defaultTextures: []
userData:

@ -0,0 +1,183 @@
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
Shader "3DFluidSim/SmokeRayCast"
{
Properties
{
_SmokeColor("SmokeGradient", Color) = (0,0,0,1)
_SmokeAbsorption("SmokeAbsorbtion", float) = 60.0
}
SubShader
{
Tags { "Queue" = "Transparent" }
Pass
{
Cull front
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#include "UnityCG.cginc"
#pragma target 5.0
#pragma vertex vert
#pragma fragment frag
#define NUM_SAMPLES 64
float4 _SmokeColor;
float _SmokeAbsorption;
uniform float3 _Translate, _Scale, _Size;
StructuredBuffer<float> _Density;
struct v2f
{
float4 pos : SV_POSITION;
float3 worldPos : TEXCOORD0;
};
v2f vert(appdata_base v)
{
v2f OUT;
OUT.pos = UnityObjectToClipPos(v.vertex);
OUT.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
return OUT;
}
struct Ray {
float3 origin;
float3 dir;
};
struct AABB {
float3 Min;
float3 Max;
};
//find intersection points of a ray with a box
bool intersectBox(Ray r, AABB aabb, out float t0, out float t1)
{
float3 invR = 1.0 / r.dir;
float3 tbot = invR * (aabb.Min-r.origin);
float3 ttop = invR * (aabb.Max-r.origin);
float3 tmin = min(ttop, tbot);
float3 tmax = max(ttop, tbot);
float2 t = max(tmin.xx, tmin.yz);
t0 = max(t.x, t.y);
t = min(tmax.xx, tmax.yz);
t1 = min(t.x, t.y);
return t0 <= t1;
}
float SampleBilinear(StructuredBuffer<float> buffer, float3 uv, float3 size)
{
uv = saturate(uv);
uv = uv * (size-1.0);
int x = uv.x;
int y = uv.y;
int z = uv.z;
int X = size.x;
int XY = size.x*size.y;
float fx = uv.x-x;
float fy = uv.y-y;
float fz = uv.z-z;
int xp1 = min(_Size.x-1, x+1);
int yp1 = min(_Size.y-1, y+1);
int zp1 = min(_Size.z-1, z+1);
float x0 = buffer[x+y*X+z*XY] * (1.0f-fx) + buffer[xp1+y*X+z*XY] * fx;
float x1 = buffer[x+y*X+zp1*XY] * (1.0f-fx) + buffer[xp1+y*X+zp1*XY] * fx;
float x2 = buffer[x+yp1*X+z*XY] * (1.0f-fx) + buffer[xp1+yp1*X+z*XY] * fx;
float x3 = buffer[x+yp1*X+zp1*XY] * (1.0f-fx) + buffer[xp1+yp1*X+zp1*XY] * fx;
float z0 = x0 * (1.0f-fz) + x1 * fz;
float z1 = x2 * (1.0f-fz) + x3 * fz;
return z0 * (1.0f-fy) + z1 * fy;
}
float4 frag(v2f IN) : COLOR
{
float3 pos = _WorldSpaceCameraPos;
Ray r;
r.origin = pos;
r.dir = normalize(IN.worldPos-pos);
AABB aabb;
aabb.Min = float3(-0.5,-0.5,-0.5)*_Scale + _Translate;
aabb.Max = float3(0.5,0.5,0.5)*_Scale + _Translate;
//figure out where ray from eye hit front of cube
float tnear, tfar;
intersectBox(r, aabb, tnear, tfar);
//if eye is in cube then start ray at eye
if (tnear < 0.0) tnear = 0.0;
float3 rayStart = r.origin + r.dir * tnear;
float3 rayStop = r.origin + r.dir * tfar;
//convert to texture space
rayStart -= _Translate;
rayStop -= _Translate;
rayStart = (rayStart + 0.5*_Scale)/_Scale;
rayStop = (rayStop + 0.5*_Scale)/_Scale;
float3 start = rayStart;
float dist = distance(rayStop, rayStart);
float stepSize = dist/float(NUM_SAMPLES);
float3 ds = normalize(rayStop-rayStart) * stepSize;
float alpha = 1.0;
for(int i=0; i < NUM_SAMPLES; i++, start += ds)
{
float D = SampleBilinear(_Density, start, _Size);
alpha *= 1.0-saturate(D*stepSize*_SmokeAbsorption);
if(alpha <= 0.01) break;
}
return _SmokeColor * (1-alpha);
}
ENDCG
}
}
}

@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: edf7886cf7d957f4c8416e250df7367c
ShaderImporter:
defaultTextures: []
userData:

@ -0,0 +1,399 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 8
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 3
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
--- !u!157 &4
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
m_GIWorkflowMode: 1
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_TemporalCoherenceThreshold: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 9
m_Resolution: 1
m_BakeResolution: 50
m_TextureWidth: 1024
m_TextureHeight: 1024
m_AO: 1
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 0
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 1
m_BakeBackend: 0
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVRBounces: 2
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringMode: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ShowResolutionOverlay: 1
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 0
--- !u!196 &5
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666666
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &1470411171
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 100004, guid: 9d4133d5d30b644bd87802a347eaccbe, type: 2}
m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- component: {fileID: 1470411177}
- component: {fileID: 1470411176}
- component: {fileID: 1470411175}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!92 &1470411175
Behaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 9200000, guid: 9d4133d5d30b644bd87802a347eaccbe,
type: 2}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1470411171}
m_Enabled: 1
--- !u!20 &1470411176
Camera:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 2000000, guid: 9d4133d5d30b644bd87802a347eaccbe,
type: 2}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1470411171}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.42647058, g: 0.42647058, b: 0.42647058, a: 1}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 60
field of view: 40
orthographic: 0
orthographic size: 100
m_Depth: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294966527
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 0
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &1470411177
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 400004, guid: 9d4133d5d30b644bd87802a347eaccbe, type: 2}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1470411171}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1803253977
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- component: {fileID: 1803253979}
- component: {fileID: 1803253978}
m_Layer: 0
m_Name: Directional light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &1803253978
Light:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1803253977}
m_Enabled: 1
serializedVersion: 8
m_Type: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_CookieSize: 10
m_Shadows:
m_Type: 0
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_Lightmapping: 1
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &1803253979
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1803253977}
m_LocalRotation: {x: 0.40821794, y: -0.23456973, z: 0.10938166, w: 0.8754261}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2140950347
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- component: {fileID: 2140950351}
- component: {fileID: 2140950350}
- component: {fileID: 2140950349}
- component: {fileID: 2140950348}
m_Layer: 0
m_Name: Plane
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!23 &2140950348
MeshRenderer:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2140950347}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 0
m_ReflectionProbeUsage: 1
m_Materials:
- {fileID: 2100000, guid: 0d538acbbf71af343b5efaa45bd9af35, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!64 &2140950349
MeshCollider:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2140950347}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 3
m_Convex: 0
m_CookingOptions: 14
m_SkinWidth: 0.01
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
--- !u!33 &2140950350
MeshFilter:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2140950347}
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &2140950351
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2140950347}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 64, y: 64, z: 64}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &2142477375
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 400000, guid: 0b40c0b4ea4208b4792d95085b850676, type: 2}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 0b40c0b4ea4208b4792d95085b850676, type: 2}
propertyPath: m_LocalPosition.y
value: 4.00099993
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 0b40c0b4ea4208b4792d95085b850676, type: 2}
propertyPath: m_LocalPosition.z
value: 12
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 0b40c0b4ea4208b4792d95085b850676, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 0b40c0b4ea4208b4792d95085b850676, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 0b40c0b4ea4208b4792d95085b850676, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 0b40c0b4ea4208b4792d95085b850676, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 0b40c0b4ea4208b4792d95085b850676, type: 2}
propertyPath: m_LocalScale.x
value: 4
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 0b40c0b4ea4208b4792d95085b850676, type: 2}
propertyPath: m_LocalScale.z
value: 4
objectReference: {fileID: 0}
- target: {fileID: 11400000, guid: 0b40c0b4ea4208b4792d95085b850676, type: 2}
propertyPath: m_width
value: 64
objectReference: {fileID: 0}
- target: {fileID: 11400000, guid: 0b40c0b4ea4208b4792d95085b850676, type: 2}
propertyPath: m_depth
value: 64
objectReference: {fileID: 0}
- target: {fileID: 11400000, guid: 0b40c0b4ea4208b4792d95085b850676, type: 2}
propertyPath: m_advectionType
value: 2
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 0b40c0b4ea4208b4792d95085b850676, type: 2}
m_IsPrefabParent: 0

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 77228c5d076c6bc4fae6e505baf0f4f6
DefaultImporter:
userData:

@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: c41114551fea2914095b31e0e66bfb2b
folderAsset: yes
DefaultImporter:
userData:

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

@ -0,0 +1,45 @@
fileFormatVersion: 2
guid: ac2c4961e13090042b382bb1c186bc31
TextureImporter:
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 1
linearTexture: 0
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: .25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 1024
textureSettings:
filterMode: -1
aniso: -1
mipBias: -1
wrapMode: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: .5, y: .5}
spritePixelsToUnits: 100
alphaIsTransparency: 0
textureType: -1
buildTargetSettings: []
spriteSheet:
sprites: []
spritePackingTag:
userData:

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 5fc36e4bb6aa6c14ba128dca58463ede
folderAsset: yes
timeCreated: 1519705207
licenseType: Free
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,67 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FluidSimInputController : MonoBehaviour
{
[SerializeField]
FluidSim3DProject.SmokeFluidSim fluidSimulation;
public SmokeFluidSimUniforms uniforms;
List<Transform> children = new List<Transform>();
int child_index = 0;
void Start()
{
}
void Update()
{
children.Clear();
for (int i = 0; i < transform.childCount; i++)
{
var child = transform.GetChild(i);
if (child.gameObject.activeSelf)
children.Add(child);
}
Vector3 size = fluidSimulation.GridSize;
Vector3 root = fluidSimulation.GridRoot;
Vector3 inv_size = new Vector3(1.0f / size.x, 1.0f / size.y, 1.0f / size.z);
if (children.Count > 0)
{
child_index %= children.Count;
var trans = children[child_index];
Vector3 pos = Vector3.Scale(trans.position - root, inv_size);
pos.x = Mathf.Clamp01(pos.x);
pos.y = Mathf.Clamp01(pos.y);
pos.z = Mathf.Clamp01(pos.z);
fluidSimulation.m_inputPos = pos;
fluidSimulation.m_inputRadius = trans.lossyScale.x / size.x;
child_index++;
}
else
{
fluidSimulation.m_inputPos = Vector4.zero;
fluidSimulation.m_inputRadius = 0.0f;
}
{
fluidSimulation.m_vorticityStrength = uniforms.m_vorticityStrength;
fluidSimulation.m_densityAmount = uniforms.m_densityAmount;
fluidSimulation.m_densityDissipation = uniforms.m_densityDissipation;
fluidSimulation.m_densityBuoyancy = uniforms.m_densityBuoyancy;
fluidSimulation.m_densityWeight = uniforms.m_densityWeight;
fluidSimulation.m_temperatureAmount = uniforms.m_temperatureAmount;
fluidSimulation.m_temperatureDissipation = uniforms.m_temperatureDissipation;
fluidSimulation.m_velocityDissipation = uniforms.m_velocityDissipation;
}
}
}

@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: efb50f560ef686940ab1bfb542387078
timeCreated: 1519705207
licenseType: Free
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,21 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b1ed87bff91722147827575923ba6b8a, type: 3}
m_Name: SmokeFluidSimUniforms
m_EditorClassIdentifier:
m_vorticityStrength: 1
m_densityAmount: 6.58
m_densityDissipation: 0.999
m_densityBuoyancy: 0.4
m_densityWeight: 0.0125
m_temperatureAmount: 0.9
m_temperatureDissipation: 0.995
m_velocityDissipation: 0.995

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 4dcbc9a971de5974da304d60289ebe0f
timeCreated: 1519718721
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,26 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(order = 1000, menuName = "UltraCombos/SmokeFluidSimUniforms", fileName = "SmokeFluidSimUniforms")]
public class SmokeFluidSimUniforms : ScriptableObject
{
[Header("FluidSimUniforms")]
[Range(0, 10)]
public float m_vorticityStrength = 1.0f;
[Range(0, 10)]
public float m_densityAmount = 1.0f;
[Range(0, 1)]
public float m_densityDissipation = 0.999f;
[Range(0, 10)]
public float m_densityBuoyancy = 1.0f;
[Range(0.0f, 0.1f)]
public float m_densityWeight = 0.0125f;
[Range(0, 50)]
public float m_temperatureAmount = 10.0f;
[Range(0, 1)]
public float m_temperatureDissipation = 0.995f;
[Range(0, 1)]
public float m_velocityDissipation = 0.995f;
}

@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: b1ed87bff91722147827575923ba6b8a
timeCreated: 1519705207
licenseType: Free
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: b6d5c2dc76e09194ab689ea89ecab57d
folderAsset: yes
timeCreated: 1519717125
licenseType: Free
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,16 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 54276434dda9c694e85abaf98cdd981d, type: 3}
m_Name: CosineGradient
m_EditorClassIdentifier:
_redCoeffs: {x: 0.414, y: 0.14, z: 0.56, w: 0.453}
_greenCoeffs: {x: 0.313, y: 0.177, z: 0.3, w: 0.825}
_blueCoeffs: {x: 0.685, y: 0.282, z: 0.27, w: 0}

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 2138651e11178d04ba510ef9164baf46
timeCreated: 1513340684
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 38bc639ed9df8014ea31cbb863868880
folderAsset: yes
timeCreated: 1524815826
licenseType: Free
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Anna_day-Standby
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/day/snow_only_day_version_timeRemap.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 6d7b66e288bf3924fbd7a716ae3ac255
timeCreated: 1524210684
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Anna_day-Trigger
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/day/anna_day_version.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 2845fcd21d061464f8f97219a167ba7a
timeCreated: 1524453128
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Anna_night-Standby
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/day/snow_only_night_version_timeRemap.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: e01bda1b2f4d30449943b9721c77f15a
timeCreated: 1524210684
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Anna_night-Trigger
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/day/anna_night_version.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 09d68748e0fd58e47baf6183a8fd34c7
timeCreated: 1524453128
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Cloud-Standby 1
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/icon/icon_cloud.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 9e519da1c7293b645b3c2bce2455acf6
timeCreated: 1524210684
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Cloud-Standby 2
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/icon/icon_cloud.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 696d013e4c412744fb94ecf601816f51
timeCreated: 1524210684
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Cloud-Standby 3
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/icon/icon_cloud.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: bddde81afd2a6774fb8fa0cb3e4751c1
timeCreated: 1524210684
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Cloud-Standby 4
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/icon/icon_cloud.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: afc5f33340232ac4699f173d79fdfbd1
timeCreated: 1524210684
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Cloud-Standby
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/icon/icon_cloud.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 5b3dac91b0ced2a46b0785831655c98a
timeCreated: 1524210684
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Cloud-Trigger 1
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/effect/Cloud_Snow_hap.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: e6c4f6a38e1dfe04eaf0bb12757a7067
timeCreated: 1524453128
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Cloud-Trigger 2
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/effect/Cloud_Snow_hap.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: a836c026a2d034e498d76b47fa8e49e8
timeCreated: 1524453128
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Cloud-Trigger 3
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/effect/Cloud_Snow_hap.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 449886f54dd9e4446ad39d4fb290d4c0
timeCreated: 1524453128
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Cloud-Trigger 4
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/effect/Cloud_Snow_hap.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: d545578a9d25ff8499f0a5efc803e0fe
timeCreated: 1524453128
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Cloud-Trigger
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/effect/Cloud_Snow_hap.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 708f87d2cbae42445846a25f0ca06829
timeCreated: 1524453128
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Elsa-Standby
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/icon/icon_elsa.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: aa1bbb3d5a802fb47880c1cf0237dc60
timeCreated: 1524210684
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Elsa-Trigger
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/night/Elsa_Hap-700.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 2ea2925de6b8a934fa0ea7a7020103b1
timeCreated: 1524453128
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Elsa_Effect_A-Standby 1
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/icon/icon_snowMagic.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: c4b4ef67857577d4fb6e9761b359839a
timeCreated: 1524453128
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Elsa_Effect_A-Standby 2
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/icon/icon_snowMagic.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: e83615d38d3560c488a57ce710881f59
timeCreated: 1524453128
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Elsa_Effect_A-Standby
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/icon/icon_snowMagic.avi

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 7b0a38d5d484cf54089379ebbe5c1d9d
timeCreated: 1524453128
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7eca376a120a0e49a97afa024778843, type: 3}
m_Name: Elsa_Effect_A-Trigger 1
m_EditorClassIdentifier:
m_VideoLocation: 1
m_VideoPath: ../FrozenMaterial/effect/Elsa_Effect_A_hap.avi

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save