Compare commits
18 Commits
6d4166ed60
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 97c82d46b8 | |||
| 3769723861 | |||
| 48a0e3facb | |||
| f620a650aa | |||
| 2a2ebf8ae7 | |||
| e774cc6663 | |||
| e9819ca6cc | |||
| 645efbea4a | |||
| 69703a4e29 | |||
| 3f2e75c629 | |||
| f90347de3e | |||
| 8062d24202 | |||
| 9f3b858896 | |||
| 8153950d63 | |||
| 2c6a696f0a | |||
| 819d0b813d | |||
| 452d94eec7 | |||
| b0ac70f913 |
@@ -1,432 +0,0 @@
|
|||||||
%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: 10
|
|
||||||
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.212, g: 0.227, b: 0.259, a: 1}
|
|
||||||
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
|
|
||||||
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
|
|
||||||
m_AmbientIntensity: 1
|
|
||||||
m_AmbientMode: 0
|
|
||||||
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
|
|
||||||
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 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.18028378, g: 0.22571412, b: 0.30692285, a: 1}
|
|
||||||
m_UseRadianceAmbientProbe: 0
|
|
||||||
--- !u!157 &3
|
|
||||||
LightmapSettings:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
serializedVersion: 12
|
|
||||||
m_GISettings:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_BounceScale: 1
|
|
||||||
m_IndirectOutputScale: 1
|
|
||||||
m_AlbedoBoost: 1
|
|
||||||
m_EnvironmentLightingMode: 0
|
|
||||||
m_EnableBakedLightmaps: 1
|
|
||||||
m_EnableRealtimeLightmaps: 0
|
|
||||||
m_LightmapEditorSettings:
|
|
||||||
serializedVersion: 12
|
|
||||||
m_Resolution: 2
|
|
||||||
m_BakeResolution: 40
|
|
||||||
m_AtlasSize: 1024
|
|
||||||
m_AO: 0
|
|
||||||
m_AOMaxDistance: 1
|
|
||||||
m_CompAOExponent: 1
|
|
||||||
m_CompAOExponentDirect: 0
|
|
||||||
m_ExtractAmbientOcclusion: 0
|
|
||||||
m_Padding: 2
|
|
||||||
m_LightmapParameters: {fileID: 0}
|
|
||||||
m_LightmapsBakeMode: 1
|
|
||||||
m_TextureCompression: 1
|
|
||||||
m_ReflectionCompression: 2
|
|
||||||
m_MixedBakeMode: 2
|
|
||||||
m_BakeBackend: 1
|
|
||||||
m_PVRSampling: 1
|
|
||||||
m_PVRDirectSampleCount: 32
|
|
||||||
m_PVRSampleCount: 512
|
|
||||||
m_PVRBounces: 2
|
|
||||||
m_PVREnvironmentSampleCount: 256
|
|
||||||
m_PVREnvironmentReferencePointCount: 2048
|
|
||||||
m_PVRFilteringMode: 1
|
|
||||||
m_PVRDenoiserTypeDirect: 1
|
|
||||||
m_PVRDenoiserTypeIndirect: 1
|
|
||||||
m_PVRDenoiserTypeAO: 1
|
|
||||||
m_PVRFilterTypeDirect: 0
|
|
||||||
m_PVRFilterTypeIndirect: 0
|
|
||||||
m_PVRFilterTypeAO: 0
|
|
||||||
m_PVREnvironmentMIS: 1
|
|
||||||
m_PVRCulling: 1
|
|
||||||
m_PVRFilteringGaussRadiusDirect: 1
|
|
||||||
m_PVRFilteringGaussRadiusIndirect: 5
|
|
||||||
m_PVRFilteringGaussRadiusAO: 2
|
|
||||||
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
|
|
||||||
m_PVRFilteringAtrousPositionSigmaIndirect: 2
|
|
||||||
m_PVRFilteringAtrousPositionSigmaAO: 1
|
|
||||||
m_ExportTrainingData: 0
|
|
||||||
m_TrainingDataDestination: TrainingData
|
|
||||||
m_LightProbeSampleCountMultiplier: 4
|
|
||||||
m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
|
|
||||||
m_LightingSettings: {fileID: 0}
|
|
||||||
--- !u!196 &4
|
|
||||||
NavMeshSettings:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_BuildSettings:
|
|
||||||
serializedVersion: 3
|
|
||||||
agentTypeID: 0
|
|
||||||
agentRadius: 0.5
|
|
||||||
agentHeight: 2
|
|
||||||
agentSlope: 45
|
|
||||||
agentClimb: 0.4
|
|
||||||
ledgeDropHeight: 0
|
|
||||||
maxJumpAcrossDistance: 0
|
|
||||||
minRegionArea: 2
|
|
||||||
manualCellSize: 0
|
|
||||||
cellSize: 0.16666667
|
|
||||||
manualTileSize: 0
|
|
||||||
tileSize: 256
|
|
||||||
buildHeightMesh: 0
|
|
||||||
maxJobWorkers: 0
|
|
||||||
preserveTilesOutsideBounds: 0
|
|
||||||
debug:
|
|
||||||
m_Flags: 0
|
|
||||||
m_NavMeshData: {fileID: 0}
|
|
||||||
--- !u!1 &330585543
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 330585546}
|
|
||||||
- component: {fileID: 330585545}
|
|
||||||
- component: {fileID: 330585544}
|
|
||||||
- component: {fileID: 330585547}
|
|
||||||
m_Layer: 0
|
|
||||||
m_Name: Main Camera
|
|
||||||
m_TagString: MainCamera
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!81 &330585544
|
|
||||||
AudioListener:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 330585543}
|
|
||||||
m_Enabled: 1
|
|
||||||
--- !u!20 &330585545
|
|
||||||
Camera:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 330585543}
|
|
||||||
m_Enabled: 1
|
|
||||||
serializedVersion: 2
|
|
||||||
m_ClearFlags: 1
|
|
||||||
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
|
|
||||||
m_projectionMatrixMode: 1
|
|
||||||
m_GateFitMode: 2
|
|
||||||
m_FOVAxisMode: 0
|
|
||||||
m_Iso: 200
|
|
||||||
m_ShutterSpeed: 0.005
|
|
||||||
m_Aperture: 16
|
|
||||||
m_FocusDistance: 10
|
|
||||||
m_FocalLength: 50
|
|
||||||
m_BladeCount: 5
|
|
||||||
m_Curvature: {x: 2, y: 11}
|
|
||||||
m_BarrelClipping: 0.25
|
|
||||||
m_Anamorphism: 0
|
|
||||||
m_SensorSize: {x: 36, y: 24}
|
|
||||||
m_LensShift: {x: 0, y: 0}
|
|
||||||
m_NormalizedViewPortRect:
|
|
||||||
serializedVersion: 2
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
width: 1
|
|
||||||
height: 1
|
|
||||||
near clip plane: 0.3
|
|
||||||
far clip plane: 1000
|
|
||||||
field of view: 60
|
|
||||||
orthographic: 0
|
|
||||||
orthographic size: 5
|
|
||||||
m_Depth: -1
|
|
||||||
m_CullingMask:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Bits: 4294967295
|
|
||||||
m_RenderingPath: -1
|
|
||||||
m_TargetTexture: {fileID: 0}
|
|
||||||
m_TargetDisplay: 0
|
|
||||||
m_TargetEye: 3
|
|
||||||
m_HDR: 1
|
|
||||||
m_AllowMSAA: 1
|
|
||||||
m_AllowDynamicResolution: 0
|
|
||||||
m_ForceIntoRT: 0
|
|
||||||
m_OcclusionCulling: 1
|
|
||||||
m_StereoConvergence: 10
|
|
||||||
m_StereoSeparation: 0.022
|
|
||||||
--- !u!4 &330585546
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 330585543}
|
|
||||||
serializedVersion: 2
|
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
m_LocalPosition: {x: 0, y: 1, z: -10}
|
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
||||||
m_ConstrainProportionsScale: 0
|
|
||||||
m_Children: []
|
|
||||||
m_Father: {fileID: 0}
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!114 &330585547
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 330585543}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
m_RenderShadows: 1
|
|
||||||
m_RequiresDepthTextureOption: 2
|
|
||||||
m_RequiresOpaqueTextureOption: 2
|
|
||||||
m_CameraType: 0
|
|
||||||
m_Cameras: []
|
|
||||||
m_RendererIndex: -1
|
|
||||||
m_VolumeLayerMask:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Bits: 1
|
|
||||||
m_VolumeTrigger: {fileID: 0}
|
|
||||||
m_VolumeFrameworkUpdateModeOption: 2
|
|
||||||
m_RenderPostProcessing: 1
|
|
||||||
m_Antialiasing: 0
|
|
||||||
m_AntialiasingQuality: 2
|
|
||||||
m_StopNaN: 0
|
|
||||||
m_Dithering: 0
|
|
||||||
m_ClearDepth: 1
|
|
||||||
m_AllowXRRendering: 1
|
|
||||||
m_AllowHDROutput: 1
|
|
||||||
m_UseScreenCoordOverride: 0
|
|
||||||
m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
m_RequiresDepthTexture: 0
|
|
||||||
m_RequiresColorTexture: 0
|
|
||||||
m_Version: 2
|
|
||||||
m_TaaSettings:
|
|
||||||
quality: 3
|
|
||||||
frameInfluence: 0.1
|
|
||||||
jitterScale: 1
|
|
||||||
mipBias: 0
|
|
||||||
varianceClampScale: 0.9
|
|
||||||
contrastAdaptiveSharpening: 0
|
|
||||||
--- !u!1 &410087039
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 410087041}
|
|
||||||
- component: {fileID: 410087040}
|
|
||||||
- component: {fileID: 410087042}
|
|
||||||
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 &410087040
|
|
||||||
Light:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 410087039}
|
|
||||||
m_Enabled: 1
|
|
||||||
serializedVersion: 11
|
|
||||||
m_Type: 1
|
|
||||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
|
||||||
m_Intensity: 2
|
|
||||||
m_Range: 10
|
|
||||||
m_SpotAngle: 30
|
|
||||||
m_InnerSpotAngle: 21.80208
|
|
||||||
m_CookieSize: 10
|
|
||||||
m_Shadows:
|
|
||||||
m_Type: 2
|
|
||||||
m_Resolution: -1
|
|
||||||
m_CustomResolution: -1
|
|
||||||
m_Strength: 1
|
|
||||||
m_Bias: 0.05
|
|
||||||
m_NormalBias: 0.4
|
|
||||||
m_NearPlane: 0.2
|
|
||||||
m_CullingMatrixOverride:
|
|
||||||
e00: 1
|
|
||||||
e01: 0
|
|
||||||
e02: 0
|
|
||||||
e03: 0
|
|
||||||
e10: 0
|
|
||||||
e11: 1
|
|
||||||
e12: 0
|
|
||||||
e13: 0
|
|
||||||
e20: 0
|
|
||||||
e21: 0
|
|
||||||
e22: 1
|
|
||||||
e23: 0
|
|
||||||
e30: 0
|
|
||||||
e31: 0
|
|
||||||
e32: 0
|
|
||||||
e33: 1
|
|
||||||
m_UseCullingMatrixOverride: 0
|
|
||||||
m_Cookie: {fileID: 0}
|
|
||||||
m_DrawHalo: 0
|
|
||||||
m_Flare: {fileID: 0}
|
|
||||||
m_RenderMode: 0
|
|
||||||
m_CullingMask:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Bits: 4294967295
|
|
||||||
m_RenderingLayerMask: 1
|
|
||||||
m_Lightmapping: 4
|
|
||||||
m_LightShadowCasterMode: 0
|
|
||||||
m_AreaSize: {x: 1, y: 1}
|
|
||||||
m_BounceIntensity: 1
|
|
||||||
m_ColorTemperature: 5000
|
|
||||||
m_UseColorTemperature: 1
|
|
||||||
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
m_UseBoundingSphereOverride: 0
|
|
||||||
m_UseViewFrustumForShadowCasterCull: 1
|
|
||||||
m_ForceVisible: 0
|
|
||||||
m_ShadowRadius: 0
|
|
||||||
m_ShadowAngle: 0
|
|
||||||
--- !u!4 &410087041
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 410087039}
|
|
||||||
serializedVersion: 2
|
|
||||||
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
|
|
||||||
m_LocalPosition: {x: 0, y: 3, z: 0}
|
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
||||||
m_ConstrainProportionsScale: 0
|
|
||||||
m_Children: []
|
|
||||||
m_Father: {fileID: 0}
|
|
||||||
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
|
|
||||||
--- !u!114 &410087042
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 410087039}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
m_Version: 3
|
|
||||||
m_UsePipelineSettings: 1
|
|
||||||
m_AdditionalLightsShadowResolutionTier: 2
|
|
||||||
m_LightLayerMask: 1
|
|
||||||
m_RenderingLayers: 1
|
|
||||||
m_CustomShadowLayers: 0
|
|
||||||
m_ShadowLayerMask: 1
|
|
||||||
m_ShadowRenderingLayers: 1
|
|
||||||
m_LightCookieSize: {x: 1, y: 1}
|
|
||||||
m_LightCookieOffset: {x: 0, y: 0}
|
|
||||||
m_SoftShadowQuality: 1
|
|
||||||
--- !u!1 &832575517
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 832575519}
|
|
||||||
- component: {fileID: 832575518}
|
|
||||||
m_Layer: 0
|
|
||||||
m_Name: Global Volume
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!114 &832575518
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 832575517}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
m_IsGlobal: 1
|
|
||||||
priority: 0
|
|
||||||
blendDistance: 0
|
|
||||||
weight: 1
|
|
||||||
sharedProfile: {fileID: 11400000, guid: 10fc4df2da32a41aaa32d77bc913491c, type: 2}
|
|
||||||
--- !u!4 &832575519
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 832575517}
|
|
||||||
serializedVersion: 2
|
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
||||||
m_ConstrainProportionsScale: 0
|
|
||||||
m_Children: []
|
|
||||||
m_Father: {fileID: 0}
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!1660057539 &9223372036854775807
|
|
||||||
SceneRoots:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_Roots:
|
|
||||||
- {fileID: 330585546}
|
|
||||||
- {fileID: 410087041}
|
|
||||||
- {fileID: 832575519}
|
|
||||||
@@ -342,6 +342,9 @@ MonoBehaviour:
|
|||||||
skyOcclusionIntensityMultiplier:
|
skyOcclusionIntensityMultiplier:
|
||||||
m_OverrideState: 1
|
m_OverrideState: 1
|
||||||
m_Value: 1
|
m_Value: 1
|
||||||
|
worldOffset:
|
||||||
|
m_OverrideState: 1
|
||||||
|
m_Value: {x: 0, y: 0, z: 0}
|
||||||
--- !u!114 &-1216621516061285780
|
--- !u!114 &-1216621516061285780
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 3
|
m_ObjectHideFlags: 3
|
||||||
@@ -376,6 +379,9 @@ MonoBehaviour:
|
|||||||
highQualityFiltering:
|
highQualityFiltering:
|
||||||
m_OverrideState: 1
|
m_OverrideState: 1
|
||||||
m_Value: 0
|
m_Value: 0
|
||||||
|
filter:
|
||||||
|
m_OverrideState: 1
|
||||||
|
m_Value: 0
|
||||||
downscale:
|
downscale:
|
||||||
m_OverrideState: 1
|
m_OverrideState: 1
|
||||||
m_Value: 0
|
m_Value: 0
|
||||||
@@ -462,8 +468,6 @@ MonoBehaviour:
|
|||||||
- {fileID: -6288072647309666549}
|
- {fileID: -6288072647309666549}
|
||||||
- {fileID: 7518938298396184218}
|
- {fileID: 7518938298396184218}
|
||||||
- {fileID: -1410297666881709256}
|
- {fileID: -1410297666881709256}
|
||||||
- {fileID: -7750755424749557576}
|
|
||||||
- {fileID: -5139089513906902183}
|
|
||||||
--- !u!114 &853819529557874667
|
--- !u!114 &853819529557874667
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 3
|
m_ObjectHideFlags: 3
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3}
|
m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3}
|
||||||
m_Name: Mobile_RPAsset
|
m_Name: Mobile_RPAsset
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
k_AssetVersion: 12
|
k_AssetVersion: 13
|
||||||
k_AssetPreviousVersion: 12
|
k_AssetPreviousVersion: 13
|
||||||
m_RendererType: 1
|
m_RendererType: 1
|
||||||
m_RendererData: {fileID: 0}
|
m_RendererData: {fileID: 0}
|
||||||
m_RendererDataList:
|
m_RendererDataList:
|
||||||
@@ -23,7 +23,7 @@ MonoBehaviour:
|
|||||||
m_RequireOpaqueTexture: 0
|
m_RequireOpaqueTexture: 0
|
||||||
m_OpaqueDownsampling: 0
|
m_OpaqueDownsampling: 0
|
||||||
m_SupportsTerrainHoles: 1
|
m_SupportsTerrainHoles: 1
|
||||||
m_SupportsHDR: 1
|
m_SupportsHDR: 0
|
||||||
m_HDRColorBufferPrecision: 0
|
m_HDRColorBufferPrecision: 0
|
||||||
m_MSAA: 1
|
m_MSAA: 1
|
||||||
m_RenderScale: 0.8
|
m_RenderScale: 0.8
|
||||||
@@ -53,6 +53,7 @@ MonoBehaviour:
|
|||||||
m_AdditionalLightsShadowResolutionTierHigh: 1024
|
m_AdditionalLightsShadowResolutionTierHigh: 1024
|
||||||
m_ReflectionProbeBlending: 1
|
m_ReflectionProbeBlending: 1
|
||||||
m_ReflectionProbeBoxProjection: 1
|
m_ReflectionProbeBoxProjection: 1
|
||||||
|
m_ReflectionProbeAtlas: 1
|
||||||
m_ShadowDistance: 50
|
m_ShadowDistance: 50
|
||||||
m_ShadowCascadeCount: 1
|
m_ShadowCascadeCount: 1
|
||||||
m_Cascade2Split: 0.25
|
m_Cascade2Split: 0.25
|
||||||
@@ -78,11 +79,11 @@ MonoBehaviour:
|
|||||||
m_UseAdaptivePerformance: 1
|
m_UseAdaptivePerformance: 1
|
||||||
m_ColorGradingMode: 0
|
m_ColorGradingMode: 0
|
||||||
m_ColorGradingLutSize: 32
|
m_ColorGradingLutSize: 32
|
||||||
|
m_AllowPostProcessAlphaOutput: 0
|
||||||
m_UseFastSRGBLinearConversion: 1
|
m_UseFastSRGBLinearConversion: 1
|
||||||
m_SupportDataDrivenLensFlare: 1
|
m_SupportDataDrivenLensFlare: 1
|
||||||
m_SupportScreenSpaceLensFlare: 1
|
m_SupportScreenSpaceLensFlare: 1
|
||||||
m_GPUResidentDrawerMode: 0
|
m_GPUResidentDrawerMode: 0
|
||||||
m_UseLegacyLightmaps: 0
|
|
||||||
m_SmallMeshScreenPercentage: 0
|
m_SmallMeshScreenPercentage: 0
|
||||||
m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0
|
m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0
|
||||||
m_ShadowType: 1
|
m_ShadowType: 1
|
||||||
@@ -100,23 +101,24 @@ MonoBehaviour:
|
|||||||
m_Keys: []
|
m_Keys: []
|
||||||
m_Values:
|
m_Values:
|
||||||
m_PrefilteringModeMainLightShadows: 3
|
m_PrefilteringModeMainLightShadows: 3
|
||||||
m_PrefilteringModeAdditionalLight: 4
|
m_PrefilteringModeAdditionalLight: 3
|
||||||
m_PrefilteringModeAdditionalLightShadows: 0
|
m_PrefilteringModeAdditionalLightShadows: 0
|
||||||
m_PrefilterXRKeywords: 1
|
m_PrefilterXRKeywords: 1
|
||||||
m_PrefilteringModeForwardPlus: 1
|
m_PrefilteringModeForwardPlus: 0
|
||||||
m_PrefilteringModeDeferredRendering: 0
|
m_PrefilteringModeDeferredRendering: 0
|
||||||
m_PrefilteringModeScreenSpaceOcclusion: 0
|
m_PrefilteringModeScreenSpaceOcclusion: 0
|
||||||
m_PrefilterDebugKeywords: 1
|
m_PrefilterDebugKeywords: 1
|
||||||
m_PrefilterWriteRenderingLayers: 1
|
m_PrefilterWriteRenderingLayers: 1
|
||||||
m_PrefilterHDROutput: 1
|
m_PrefilterHDROutput: 1
|
||||||
|
m_PrefilterAlphaOutput: 1
|
||||||
m_PrefilterSSAODepthNormals: 1
|
m_PrefilterSSAODepthNormals: 1
|
||||||
m_PrefilterSSAOSourceDepthLow: 1
|
m_PrefilterSSAOSourceDepthLow: 1
|
||||||
m_PrefilterSSAOSourceDepthMedium: 0
|
m_PrefilterSSAOSourceDepthMedium: 1
|
||||||
m_PrefilterSSAOSourceDepthHigh: 1
|
m_PrefilterSSAOSourceDepthHigh: 1
|
||||||
m_PrefilterSSAOInterleaved: 0
|
m_PrefilterSSAOInterleaved: 1
|
||||||
m_PrefilterSSAOBlueNoise: 1
|
m_PrefilterSSAOBlueNoise: 1
|
||||||
m_PrefilterSSAOSampleCountLow: 1
|
m_PrefilterSSAOSampleCountLow: 1
|
||||||
m_PrefilterSSAOSampleCountMedium: 0
|
m_PrefilterSSAOSampleCountMedium: 1
|
||||||
m_PrefilterSSAOSampleCountHigh: 1
|
m_PrefilterSSAOSampleCountHigh: 1
|
||||||
m_PrefilterDBufferMRT1: 1
|
m_PrefilterDBufferMRT1: 1
|
||||||
m_PrefilterDBufferMRT2: 1
|
m_PrefilterDBufferMRT2: 1
|
||||||
@@ -126,8 +128,14 @@ MonoBehaviour:
|
|||||||
m_PrefilterSoftShadowsQualityHigh: 1
|
m_PrefilterSoftShadowsQualityHigh: 1
|
||||||
m_PrefilterSoftShadows: 0
|
m_PrefilterSoftShadows: 0
|
||||||
m_PrefilterScreenCoord: 1
|
m_PrefilterScreenCoord: 1
|
||||||
|
m_PrefilterScreenSpaceIrradiance: 1
|
||||||
m_PrefilterNativeRenderPass: 1
|
m_PrefilterNativeRenderPass: 1
|
||||||
m_PrefilterUseLegacyLightmaps: 0
|
m_PrefilterUseLegacyLightmaps: 0
|
||||||
|
m_PrefilterBicubicLightmapSampling: 1
|
||||||
|
m_PrefilterReflectionProbeRotation: 1
|
||||||
|
m_PrefilterReflectionProbeBlending: 0
|
||||||
|
m_PrefilterReflectionProbeBoxProjection: 0
|
||||||
|
m_PrefilterReflectionProbeAtlas: 1
|
||||||
m_ShaderVariantLogLevel: 0
|
m_ShaderVariantLogLevel: 0
|
||||||
m_ShadowCascades: 0
|
m_ShadowCascades: 0
|
||||||
m_Textures:
|
m_Textures:
|
||||||
|
|||||||
@@ -101,16 +101,16 @@ MonoBehaviour:
|
|||||||
m_Keys: []
|
m_Keys: []
|
||||||
m_Values:
|
m_Values:
|
||||||
m_PrefilteringModeMainLightShadows: 3
|
m_PrefilteringModeMainLightShadows: 3
|
||||||
m_PrefilteringModeAdditionalLight: 4
|
m_PrefilteringModeAdditionalLight: 0
|
||||||
m_PrefilteringModeAdditionalLightShadows: 0
|
m_PrefilteringModeAdditionalLightShadows: 2
|
||||||
m_PrefilterXRKeywords: 1
|
m_PrefilterXRKeywords: 1
|
||||||
m_PrefilteringModeForwardPlus: 1
|
m_PrefilteringModeForwardPlus: 2
|
||||||
m_PrefilteringModeDeferredRendering: 0
|
m_PrefilteringModeDeferredRendering: 0
|
||||||
m_PrefilteringModeScreenSpaceOcclusion: 1
|
m_PrefilteringModeScreenSpaceOcclusion: 2
|
||||||
m_PrefilterDebugKeywords: 1
|
m_PrefilterDebugKeywords: 1
|
||||||
m_PrefilterWriteRenderingLayers: 0
|
m_PrefilterWriteRenderingLayers: 1
|
||||||
m_PrefilterHDROutput: 1
|
m_PrefilterHDROutput: 1
|
||||||
m_PrefilterAlphaOutput: 0
|
m_PrefilterAlphaOutput: 1
|
||||||
m_PrefilterSSAODepthNormals: 0
|
m_PrefilterSSAODepthNormals: 0
|
||||||
m_PrefilterSSAOSourceDepthLow: 1
|
m_PrefilterSSAOSourceDepthLow: 1
|
||||||
m_PrefilterSSAOSourceDepthMedium: 1
|
m_PrefilterSSAOSourceDepthMedium: 1
|
||||||
@@ -122,17 +122,17 @@ MonoBehaviour:
|
|||||||
m_PrefilterSSAOSampleCountHigh: 1
|
m_PrefilterSSAOSampleCountHigh: 1
|
||||||
m_PrefilterDBufferMRT1: 1
|
m_PrefilterDBufferMRT1: 1
|
||||||
m_PrefilterDBufferMRT2: 1
|
m_PrefilterDBufferMRT2: 1
|
||||||
m_PrefilterDBufferMRT3: 0
|
m_PrefilterDBufferMRT3: 1
|
||||||
m_PrefilterSoftShadowsQualityLow: 0
|
m_PrefilterSoftShadowsQualityLow: 1
|
||||||
m_PrefilterSoftShadowsQualityMedium: 0
|
m_PrefilterSoftShadowsQualityMedium: 1
|
||||||
m_PrefilterSoftShadowsQualityHigh: 0
|
m_PrefilterSoftShadowsQualityHigh: 1
|
||||||
m_PrefilterSoftShadows: 0
|
m_PrefilterSoftShadows: 0
|
||||||
m_PrefilterScreenCoord: 1
|
m_PrefilterScreenCoord: 1
|
||||||
m_PrefilterScreenSpaceIrradiance: 0
|
m_PrefilterScreenSpaceIrradiance: 1
|
||||||
m_PrefilterNativeRenderPass: 1
|
m_PrefilterNativeRenderPass: 1
|
||||||
m_PrefilterUseLegacyLightmaps: 0
|
m_PrefilterUseLegacyLightmaps: 0
|
||||||
m_PrefilterBicubicLightmapSampling: 0
|
m_PrefilterBicubicLightmapSampling: 1
|
||||||
m_PrefilterReflectionProbeRotation: 0
|
m_PrefilterReflectionProbeRotation: 1
|
||||||
m_PrefilterReflectionProbeBlending: 0
|
m_PrefilterReflectionProbeBlending: 0
|
||||||
m_PrefilterReflectionProbeBoxProjection: 0
|
m_PrefilterReflectionProbeBoxProjection: 0
|
||||||
m_PrefilterReflectionProbeAtlas: 0
|
m_PrefilterReflectionProbeAtlas: 0
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ MonoBehaviour:
|
|||||||
highQualityFiltering:
|
highQualityFiltering:
|
||||||
m_OverrideState: 1
|
m_OverrideState: 1
|
||||||
m_Value: 1
|
m_Value: 1
|
||||||
|
filter:
|
||||||
|
m_OverrideState: 0
|
||||||
|
m_Value: 0
|
||||||
downscale:
|
downscale:
|
||||||
m_OverrideState: 0
|
m_OverrideState: 0
|
||||||
m_Value: 0
|
m_Value: 0
|
||||||
|
|||||||
@@ -68,7 +68,22 @@ MonoBehaviour:
|
|||||||
- rid: 6885172117838757900
|
- rid: 6885172117838757900
|
||||||
- rid: 6885172117838757901
|
- rid: 6885172117838757901
|
||||||
m_RuntimeSettings:
|
m_RuntimeSettings:
|
||||||
m_List: []
|
m_List:
|
||||||
|
- rid: 6852985685364965378
|
||||||
|
- rid: 6852985685364965379
|
||||||
|
- rid: 6852985685364965380
|
||||||
|
- rid: 6852985685364965381
|
||||||
|
- rid: 6852985685364965384
|
||||||
|
- rid: 6852985685364965385
|
||||||
|
- rid: 6852985685364965392
|
||||||
|
- rid: 6852985685364965394
|
||||||
|
- rid: 8712630790384254976
|
||||||
|
- rid: 6885172117838757889
|
||||||
|
- rid: 6885172117838757890
|
||||||
|
- rid: 6885172117838757893
|
||||||
|
- rid: 6885172117838757894
|
||||||
|
- rid: 6885172117838757899
|
||||||
|
- rid: 6885172117838757901
|
||||||
m_AssetVersion: 10
|
m_AssetVersion: 10
|
||||||
m_ObsoleteDefaultVolumeProfile: {fileID: 0}
|
m_ObsoleteDefaultVolumeProfile: {fileID: 0}
|
||||||
m_RenderingLayerNames:
|
m_RenderingLayerNames:
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 99c9720ab356a0642a771bea13969a05
|
guid: 3af8f06e8a10afb43b30f6746acbf7a3
|
||||||
|
folderAsset: yes
|
||||||
DefaultImporter:
|
DefaultImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
userData:
|
userData:
|
||||||
Binary file not shown.
@@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8705e6675e3398743b179e7517477f95
|
||||||
|
ScriptedImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
script: {fileID: 11500000, guid: 7aed4a49184670549a7848ee83952078, type: 3}
|
||||||
Binary file not shown.
@@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: dfbafcee1589b994190c8b138fa536fd
|
||||||
|
ScriptedImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
script: {fileID: 11500000, guid: 7aed4a49184670549a7848ee83952078, type: 3}
|
||||||
Binary file not shown.
@@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 06451afa071792b4fb063e0bcda1bf4e
|
||||||
|
ScriptedImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
script: {fileID: 11500000, guid: 7aed4a49184670549a7848ee83952078, type: 3}
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 31ae15794738c134a94e378c021711b0
|
||||||
|
ScriptedImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
script: {fileID: 11500000, guid: 7aed4a49184670549a7848ee83952078, type: 3}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 8b806a6344f096541a361192f27632ab
|
guid: cb5a5730510d4e149b46695b20885be2
|
||||||
folderAsset: yes
|
folderAsset: yes
|
||||||
DefaultImporter:
|
DefaultImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
@@ -119,119 +119,55 @@ NavMeshSettings:
|
|||||||
debug:
|
debug:
|
||||||
m_Flags: 0
|
m_Flags: 0
|
||||||
m_NavMeshData: {fileID: 0}
|
m_NavMeshData: {fileID: 0}
|
||||||
--- !u!1001 &562634546
|
--- !u!1 &688714159
|
||||||
PrefabInstance:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 688714160}
|
||||||
|
- component: {fileID: 688714161}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Target
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &688714160
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 688714159}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Modification:
|
m_LocalRotation: {x: -0, y: -0.6424656, z: -0, w: -0.76631457}
|
||||||
serializedVersion: 3
|
m_LocalPosition: {x: 0.06, y: 0.13, z: -0.16}
|
||||||
m_TransformParent: {fileID: 0}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_Modifications:
|
m_ConstrainProportionsScale: 0
|
||||||
- target: {fileID: -973084862543737302, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
m_Children:
|
||||||
propertyPath: m_PropertySheet.m_Uint.m_Array.Array.size
|
- {fileID: 1826889290}
|
||||||
value: 2
|
m_Father: {fileID: 0}
|
||||||
objectReference: {fileID: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
- target: {fileID: -973084862543737302, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
--- !u!114 &688714161
|
||||||
propertyPath: m_PropertySheet.m_Float.m_Array.Array.size
|
MonoBehaviour:
|
||||||
value: 1
|
m_ObjectHideFlags: 0
|
||||||
objectReference: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
- target: {fileID: -973084862543737302, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
m_PrefabInstance: {fileID: 0}
|
||||||
propertyPath: m_PropertySheet.m_Uint.m_Array.Array.data[0].m_Name
|
m_PrefabAsset: {fileID: 0}
|
||||||
value: SplatCount
|
m_GameObject: {fileID: 688714159}
|
||||||
objectReference: {fileID: 0}
|
m_Enabled: 1
|
||||||
- target: {fileID: -973084862543737302, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
m_EditorHideFlags: 0
|
||||||
propertyPath: m_PropertySheet.m_Uint.m_Array.Array.data[1].m_Name
|
m_Script: {fileID: 11500000, guid: 536715a2510f9db4883a1cd9d1bf11ef, type: 3}
|
||||||
value: SHDegrees
|
m_Name:
|
||||||
objectReference: {fileID: 0}
|
m_EditorClassIdentifier: Assembly-CSharp::SimpleSpin
|
||||||
- target: {fileID: -973084862543737302, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
rotationSpeed: -15
|
||||||
propertyPath: m_PropertySheet.m_Float.m_Array.Array.data[0].m_Name
|
rotationAxis: {x: 0, y: 1, z: 0}
|
||||||
value: ScaleMultiplier
|
useLocalRotation: 1
|
||||||
objectReference: {fileID: 0}
|
enableRotation: 1
|
||||||
- target: {fileID: -973084862543737302, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_PropertySheet.m_Uint.m_Array.Array.data[0].m_Value
|
|
||||||
value: 200000
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -973084862543737302, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_PropertySheet.m_Uint.m_Array.Array.data[1].m_Value
|
|
||||||
value: 3
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -973084862543737302, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_PropertySheet.m_Float.m_Array.Array.data[0].m_Value
|
|
||||||
value: 64
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -973084862543737302, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_PropertySheet.m_Uint.m_Array.Array.data[0].m_Overridden
|
|
||||||
value: 1
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -973084862543737302, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_PropertySheet.m_Uint.m_Array.Array.data[1].m_Overridden
|
|
||||||
value: 1
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -973084862543737302, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_PropertySheet.m_Float.m_Array.Array.data[0].m_Overridden
|
|
||||||
value: 1
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -774367247743995920, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_Enabled
|
|
||||||
value: 1
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -364223573239433514, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_LocalScale.y
|
|
||||||
value: -1
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -364223573239433514, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_LocalPosition.x
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -364223573239433514, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_LocalPosition.y
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -364223573239433514, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_LocalPosition.z
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -364223573239433514, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_LocalRotation.w
|
|
||||||
value: 1
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -364223573239433514, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_LocalRotation.x
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -364223573239433514, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_LocalRotation.y
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -364223573239433514, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_LocalRotation.z
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -364223573239433514, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_LocalEulerAnglesHint.x
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -364223573239433514, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_LocalEulerAnglesHint.y
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: -364223573239433514, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_LocalEulerAnglesHint.z
|
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 8980549144392899874, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_Name
|
|
||||||
value: splat_45000
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 8980549144392899874, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
propertyPath: m_IsActive
|
|
||||||
value: 1
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
m_RemovedComponents: []
|
|
||||||
m_RemovedGameObjects: []
|
|
||||||
m_AddedGameObjects: []
|
|
||||||
m_AddedComponents: []
|
|
||||||
m_SourcePrefab: {fileID: -4216948427090074523, guid: 25c54d8c074f08447ab1c822a6a052fa, type: 3}
|
|
||||||
--- !u!1 &1826889287
|
--- !u!1 &1826889287
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -277,7 +213,7 @@ Camera:
|
|||||||
m_ShutterSpeed: 0.005
|
m_ShutterSpeed: 0.005
|
||||||
m_Aperture: 16
|
m_Aperture: 16
|
||||||
m_FocusDistance: 10
|
m_FocusDistance: 10
|
||||||
m_FocalLength: 50
|
m_FocalLength: 23.999998
|
||||||
m_BladeCount: 5
|
m_BladeCount: 5
|
||||||
m_Curvature: {x: 2, y: 11}
|
m_Curvature: {x: 2, y: 11}
|
||||||
m_BarrelClipping: 0.25
|
m_BarrelClipping: 0.25
|
||||||
@@ -292,7 +228,7 @@ Camera:
|
|||||||
height: 1
|
height: 1
|
||||||
near clip plane: 0.3
|
near clip plane: 0.3
|
||||||
far clip plane: 1000
|
far clip plane: 1000
|
||||||
field of view: 60
|
field of view: 53.130108
|
||||||
orthographic: 0
|
orthographic: 0
|
||||||
orthographic size: 5
|
orthographic size: 5
|
||||||
m_Depth: -1
|
m_Depth: -1
|
||||||
@@ -318,13 +254,13 @@ Transform:
|
|||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 1826889287}
|
m_GameObject: {fileID: 1826889287}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
m_LocalRotation: {x: 0.18301274, y: -0.6830127, z: 0.18301274, w: 0.6830127}
|
||||||
m_LocalPosition: {x: 0, y: 0, z: -5}
|
m_LocalPosition: {x: 2.1, y: 1.23, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 688714160}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 30, y: -90, z: 0}
|
||||||
--- !u!114 &1826889291
|
--- !u!114 &1826889291
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -496,10 +432,151 @@ Transform:
|
|||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
|
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
|
||||||
|
--- !u!1001 &2104382819
|
||||||
|
PrefabInstance:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Modification:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TransformParent: {fileID: 0}
|
||||||
|
m_Modifications:
|
||||||
|
- target: {fileID: -8930390722167643903, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_ExecuteInEditor
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -973084862543737302, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_PropertySheet.m_Uint.m_Array.Array.size
|
||||||
|
value: 2
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -973084862543737302, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_PropertySheet.m_Float.m_Array.Array.size
|
||||||
|
value: 2
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -973084862543737302, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_PropertySheet.m_Uint.m_Array.Array.data[0].m_Name
|
||||||
|
value: SplatCount
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -973084862543737302, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_PropertySheet.m_Uint.m_Array.Array.data[1].m_Name
|
||||||
|
value: SHDegrees
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -973084862543737302, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_PropertySheet.m_Float.m_Array.Array.data[0].m_Name
|
||||||
|
value: OpacityMultiplier
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -973084862543737302, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_PropertySheet.m_Float.m_Array.Array.data[1].m_Name
|
||||||
|
value: ScaleMultiplier
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -973084862543737302, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_PropertySheet.m_Uint.m_Array.Array.data[0].m_Value
|
||||||
|
value: 20000
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -973084862543737302, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_PropertySheet.m_Uint.m_Array.Array.data[1].m_Value
|
||||||
|
value: 3
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -973084862543737302, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_PropertySheet.m_Float.m_Array.Array.data[0].m_Value
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -973084862543737302, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_PropertySheet.m_Float.m_Array.Array.data[1].m_Value
|
||||||
|
value: 64
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -973084862543737302, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_PropertySheet.m_Uint.m_Array.Array.data[0].m_Overridden
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -973084862543737302, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_PropertySheet.m_Uint.m_Array.Array.data[1].m_Overridden
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -973084862543737302, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_PropertySheet.m_Float.m_Array.Array.data[0].m_Overridden
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -973084862543737302, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_PropertySheet.m_Float.m_Array.Array.data[1].m_Overridden
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -774367247743995920, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_Enabled
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -364223573239433514, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_LocalScale.x
|
||||||
|
value: 2
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -364223573239433514, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_LocalScale.y
|
||||||
|
value: -2
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -364223573239433514, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_LocalScale.z
|
||||||
|
value: 2
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -364223573239433514, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.x
|
||||||
|
value: 0.11
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -364223573239433514, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.y
|
||||||
|
value: 3.09
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -364223573239433514, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.z
|
||||||
|
value: -0.1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -364223573239433514, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.w
|
||||||
|
value: 0.96583617
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -364223573239433514, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.x
|
||||||
|
value: 0.09989466
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -364223573239433514, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.y
|
||||||
|
value: -0.23785771
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -364223573239433514, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.z
|
||||||
|
value: 0.024601186
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -364223573239433514, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.x
|
||||||
|
value: 11.81
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -364223573239433514, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.y
|
||||||
|
value: -27.67
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -364223573239433514, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -364223573239433514, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_ConstrainProportionsScale
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8980549144392899874, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_Name
|
||||||
|
value: watch
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8980549144392899874, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
|
propertyPath: m_IsActive
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
m_RemovedComponents: []
|
||||||
|
m_RemovedGameObjects: []
|
||||||
|
m_AddedGameObjects: []
|
||||||
|
m_AddedComponents: []
|
||||||
|
m_SourcePrefab: {fileID: -4216948427090074523, guid: 31ae15794738c134a94e378c021711b0, type: 3}
|
||||||
--- !u!1660057539 &9223372036854775807
|
--- !u!1660057539 &9223372036854775807
|
||||||
SceneRoots:
|
SceneRoots:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_Roots:
|
m_Roots:
|
||||||
- {fileID: 1826889290}
|
- {fileID: 688714160}
|
||||||
- {fileID: 1911516433}
|
- {fileID: 1911516433}
|
||||||
- {fileID: 562634546}
|
- {fileID: 2104382819}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: be08df561d070254fba75f41010423f9
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,353 @@
|
|||||||
|
using Unity.Burst;
|
||||||
|
using Unity.Mathematics;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.VFX;
|
||||||
|
using UnityEngine.VFX.Utility;
|
||||||
|
using UnityEditor.AssetImporters;
|
||||||
|
using UnityEditor.Experimental;
|
||||||
|
using System.IO;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Unity.Collections;
|
||||||
|
using Unity.Jobs;
|
||||||
|
|
||||||
|
namespace SplatVfx.Editor
|
||||||
|
{
|
||||||
|
|
||||||
|
[ScriptedImporter(1, "ply"), BurstCompile]
|
||||||
|
public sealed class SplatImporter : ScriptedImporter
|
||||||
|
{
|
||||||
|
const float SH_C0 = 0.28209479177387814f;
|
||||||
|
const string DefaultVfxPath = "Assets/vfx-graph-gs/SplatVFX.vfx";
|
||||||
|
|
||||||
|
public override void OnImportAsset(AssetImportContext context)
|
||||||
|
{
|
||||||
|
var (headerString, endHeaderPosition) = GetHeader(context.assetPath);
|
||||||
|
var headerData = ParseMetadata(headerString);
|
||||||
|
|
||||||
|
var data = ImportData(headerData, context.assetPath, endHeaderPosition);
|
||||||
|
data.name = Path.GetFileNameWithoutExtension(context.assetPath);
|
||||||
|
context.AddObjectToAsset("data", data);
|
||||||
|
|
||||||
|
var prefab = CreatePrefab(data);
|
||||||
|
context.AddObjectToAsset("prefab", prefab);
|
||||||
|
context.SetMainObject(prefab);
|
||||||
|
}
|
||||||
|
|
||||||
|
private GameObject CreatePrefab(SplatData data)
|
||||||
|
{
|
||||||
|
var go = new GameObject();
|
||||||
|
var vfx = go.AddComponent<VisualEffect>();
|
||||||
|
vfx.visualEffectAsset = EditorResources.Load<VisualEffectAsset>(DefaultVfxPath);
|
||||||
|
|
||||||
|
var binderBase = go.AddComponent<VFXPropertyBinder>();
|
||||||
|
var binder = binderBase.AddPropertyBinder<VFXSplatDataBinder>();
|
||||||
|
|
||||||
|
binder.SplatData = data;
|
||||||
|
|
||||||
|
return go;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int MAX_CHUNK_SIZE = 1048576 * 256; // 256MiB
|
||||||
|
|
||||||
|
private enum TypeEnum
|
||||||
|
{
|
||||||
|
None, Float32, Float64, Float16, Int8, UInt8, Char, Short, UInt16
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum DataEnum
|
||||||
|
{
|
||||||
|
x, y, z, f_dc_0, f_dc_1, f_dc_2, f_rest_0, f_rest_1, f_rest_2,
|
||||||
|
f_rest_3, f_rest_4, f_rest_5, f_rest_6, f_rest_7, f_rest_8,
|
||||||
|
f_rest_9, f_rest_10, f_rest_11, f_rest_12, f_rest_13, f_rest_14,
|
||||||
|
f_rest_15, f_rest_16, f_rest_17, f_rest_18, f_rest_19, f_rest_20,
|
||||||
|
f_rest_21, f_rest_22, f_rest_23, f_rest_24, f_rest_25, f_rest_26,
|
||||||
|
f_rest_27, f_rest_28, f_rest_29, f_rest_30, f_rest_31, f_rest_32,
|
||||||
|
f_rest_33, f_rest_34, f_rest_35, f_rest_36, f_rest_37, f_rest_38,
|
||||||
|
f_rest_39, f_rest_40, f_rest_41, f_rest_42, f_rest_43, f_rest_44,
|
||||||
|
opacity, scale_0, scale_1, scale_2, rot_0, rot_1, rot_2, rot_3
|
||||||
|
}
|
||||||
|
|
||||||
|
private static readonly Dictionary<TypeEnum, int> TypeToByteLengths =
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
{ TypeEnum.Float32, 4 },
|
||||||
|
{ TypeEnum.Float64, 8 },
|
||||||
|
{ TypeEnum.Float16, 2 }, // keeping this here to support half precision floats in the future
|
||||||
|
{ TypeEnum.UInt8, 1 },
|
||||||
|
{ TypeEnum.Int8, 1 }
|
||||||
|
};
|
||||||
|
|
||||||
|
private static readonly Dictionary<string, TypeEnum> TypeMappings =
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
{ "float", TypeEnum.Float32 },
|
||||||
|
{ "double", TypeEnum.Float64 },
|
||||||
|
{ "uint8", TypeEnum.UInt8 },
|
||||||
|
{ "int8", TypeEnum.Int8 }
|
||||||
|
};
|
||||||
|
|
||||||
|
private struct HeaderData
|
||||||
|
{
|
||||||
|
public uint NumElements;
|
||||||
|
public uint BinaryDataStartOffset;
|
||||||
|
public NativeArray<int> ElementByteOffsets;
|
||||||
|
public NativeArray<int> ElementTypes;
|
||||||
|
public int BytesPerElement;
|
||||||
|
|
||||||
|
public HeaderData(int count)
|
||||||
|
{
|
||||||
|
NumElements = 0;
|
||||||
|
BinaryDataStartOffset = 0;
|
||||||
|
ElementByteOffsets = new NativeArray<int>(count, Allocator.Persistent);
|
||||||
|
ElementTypes = new NativeArray<int>(count, Allocator.Persistent);
|
||||||
|
BytesPerElement = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
ElementByteOffsets.Dispose();
|
||||||
|
ElementTypes.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static (string headerString, int endHeaderPosition) GetHeader(string filePath)
|
||||||
|
{
|
||||||
|
using var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
|
||||||
|
using var reader = new StreamReader(fileStream);
|
||||||
|
|
||||||
|
var headerBuilder = new StringBuilder();
|
||||||
|
string line;
|
||||||
|
|
||||||
|
while ((line = reader.ReadLine()) != null)
|
||||||
|
{
|
||||||
|
headerBuilder.AppendLine(line);
|
||||||
|
if (line.Trim() == "end_header")
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Old logic that works because AppendLine adds another \n
|
||||||
|
// TODO: Fix this logic
|
||||||
|
int endHeaderPosition = headerBuilder.Length - headerBuilder.ToString().Split('\n').Length + 1;
|
||||||
|
Debug.Log($"Total filesize: {fileStream.Length}");
|
||||||
|
Debug.Log($"Byte stream start position: {endHeaderPosition}");
|
||||||
|
|
||||||
|
return (headerBuilder.ToString(), endHeaderPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HeaderData ParseMetadata(string headerString)
|
||||||
|
{
|
||||||
|
HeaderData result = new(59);
|
||||||
|
string line;
|
||||||
|
|
||||||
|
using var reader = new StringReader(headerString);
|
||||||
|
|
||||||
|
while ((line = reader.ReadLine()) != null)
|
||||||
|
{
|
||||||
|
if (line.Trim() == "end_header")
|
||||||
|
break;
|
||||||
|
|
||||||
|
var strings = line.Split(" ");
|
||||||
|
|
||||||
|
switch (strings.FirstOrDefault())
|
||||||
|
{
|
||||||
|
case "element":
|
||||||
|
result.NumElements = uint.Parse(strings[2]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "property":
|
||||||
|
TypeEnum dataType = TypeMappings[strings[1]];
|
||||||
|
|
||||||
|
// If in DataEnum, store byte offset and type
|
||||||
|
if (DataEnum.TryParse(strings[2], out DataEnum dataName))
|
||||||
|
{
|
||||||
|
int ix = (int)dataName;
|
||||||
|
result.ElementByteOffsets[ix] = result.BytesPerElement;
|
||||||
|
result.ElementTypes[ix] = (int)dataType;
|
||||||
|
}
|
||||||
|
|
||||||
|
result.BytesPerElement += TypeToByteLengths[dataType];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Debug.Log($"Bytes per Element: {result.BytesPerElement}");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
[BurstCompile]
|
||||||
|
private struct SplatDataNative
|
||||||
|
{
|
||||||
|
public NativeArray<float3> position;
|
||||||
|
public NativeArray<float3> color;
|
||||||
|
public NativeArray<float> sh;
|
||||||
|
public NativeArray<float> opacity;
|
||||||
|
public NativeArray<float3> scale;
|
||||||
|
public NativeArray<float4> rotation;
|
||||||
|
|
||||||
|
public SplatDataNative(int count)
|
||||||
|
{
|
||||||
|
position = new NativeArray<float3>(count, Allocator.Persistent);
|
||||||
|
color = new NativeArray<float3>(count, Allocator.Persistent);
|
||||||
|
sh = new NativeArray<float>(count * 45, Allocator.Persistent);
|
||||||
|
opacity = new NativeArray<float>(count, Allocator.Persistent);
|
||||||
|
scale = new NativeArray<float3>(count, Allocator.Persistent);
|
||||||
|
rotation = new NativeArray<float4>(count, Allocator.Persistent);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
position.Dispose();
|
||||||
|
color.Dispose();
|
||||||
|
sh.Dispose();
|
||||||
|
opacity.Dispose();
|
||||||
|
scale.Dispose();
|
||||||
|
rotation.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static SplatData ImportData(HeaderData headerData, string filePath, int endHeaderPosition)
|
||||||
|
{
|
||||||
|
var splatData = ScriptableObject.CreateInstance<SplatData>();
|
||||||
|
|
||||||
|
splatData.PositionArray = new Vector3[headerData.NumElements];
|
||||||
|
splatData.ScaleArray = new Vector3[headerData.NumElements];
|
||||||
|
splatData.RotationArray = new Quaternion[headerData.NumElements];
|
||||||
|
splatData.ColorArray = new Color[headerData.NumElements];
|
||||||
|
splatData.OpacityArray = new float[headerData.NumElements];
|
||||||
|
splatData.SHArray = new float[headerData.NumElements * 45];
|
||||||
|
|
||||||
|
int elementsPerChunk = Mathf.Min(
|
||||||
|
MAX_CHUNK_SIZE / headerData.BytesPerElement,
|
||||||
|
(int)headerData.NumElements
|
||||||
|
);
|
||||||
|
int chunkSize = elementsPerChunk * headerData.BytesPerElement;
|
||||||
|
|
||||||
|
// Debug.Log($"Elements per chunk: {elementsPerChunk}");
|
||||||
|
// Debug.Log($"Chunk size: {chunkSize}");
|
||||||
|
|
||||||
|
using var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
|
||||||
|
fileStream.Seek(endHeaderPosition, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
int totalBytes = (int)fileStream.Length - endHeaderPosition;
|
||||||
|
// Debug.Log($"Total bytes: {totalBytes}");
|
||||||
|
|
||||||
|
var splatDataNative = new SplatDataNative(elementsPerChunk);
|
||||||
|
var chunkBuffer = new NativeArray<byte>(chunkSize, Allocator.Persistent);
|
||||||
|
var chunkBufferSpan = MemoryMarshal.AsBytes<byte>(chunkBuffer);
|
||||||
|
int numBytesRead;
|
||||||
|
int numElemsRead;
|
||||||
|
int totalElemsRead = 0;
|
||||||
|
|
||||||
|
while ((numBytesRead = fileStream.Read(chunkBufferSpan)) > 0)
|
||||||
|
{
|
||||||
|
numElemsRead = numBytesRead / headerData.BytesPerElement;
|
||||||
|
var splatElementJob = new SplatElementJob
|
||||||
|
{
|
||||||
|
chunkBytes = chunkBuffer,
|
||||||
|
splatDataNative = splatDataNative,
|
||||||
|
headerData = headerData,
|
||||||
|
totalElemsRead = totalElemsRead,
|
||||||
|
numElemsRead = numElemsRead
|
||||||
|
};
|
||||||
|
|
||||||
|
splatElementJob.Schedule().Complete();
|
||||||
|
|
||||||
|
for (int i = 0; i < numElemsRead; i++)
|
||||||
|
{
|
||||||
|
splatData.PositionArray[totalElemsRead + i] = splatDataNative.position[i];
|
||||||
|
splatData.ColorArray[totalElemsRead + i].r = splatDataNative.color[i].x;
|
||||||
|
splatData.ColorArray[totalElemsRead + i].g = splatDataNative.color[i].y;
|
||||||
|
splatData.ColorArray[totalElemsRead + i].b = splatDataNative.color[i].z;
|
||||||
|
splatData.OpacityArray[totalElemsRead + i] = splatDataNative.opacity[i];
|
||||||
|
splatData.ScaleArray[totalElemsRead + i] = splatDataNative.scale[i];
|
||||||
|
splatData.RotationArray[totalElemsRead + i] = new quaternion(splatDataNative.rotation[i]);
|
||||||
|
for (int j = 0; j < 45; j++)
|
||||||
|
{
|
||||||
|
splatData.SHArray[(totalElemsRead + i) * 45 + j] = splatDataNative.sh[i * 45 + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
totalElemsRead += numElemsRead;
|
||||||
|
// Debug.Log($"Current Elements Read: {totalElemsRead}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Debug.Log($"First position Vector3: {splatData.PositionArray[0]}");
|
||||||
|
|
||||||
|
headerData.Dispose();
|
||||||
|
splatDataNative.Dispose();
|
||||||
|
chunkBuffer.Dispose();
|
||||||
|
|
||||||
|
splatData.ReleaseGpuResources();
|
||||||
|
|
||||||
|
return splatData;
|
||||||
|
}
|
||||||
|
|
||||||
|
[BurstCompile]
|
||||||
|
private struct SplatElementJob : IJob
|
||||||
|
{
|
||||||
|
public NativeArray<byte> chunkBytes;
|
||||||
|
public SplatDataNative splatDataNative;
|
||||||
|
[ReadOnly] public HeaderData headerData;
|
||||||
|
[ReadOnly] public int totalElemsRead;
|
||||||
|
[ReadOnly] public int numElemsRead;
|
||||||
|
|
||||||
|
public void Execute()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < numElemsRead; i++)
|
||||||
|
{
|
||||||
|
int elemIx = i;
|
||||||
|
int start = elemIx * headerData.BytesPerElement;
|
||||||
|
|
||||||
|
splatDataNative.position[elemIx] = new()
|
||||||
|
{
|
||||||
|
x = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.x]),
|
||||||
|
y = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.y]),
|
||||||
|
z = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.z])
|
||||||
|
};
|
||||||
|
|
||||||
|
float3 color = new()
|
||||||
|
{
|
||||||
|
x = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.f_dc_0]),
|
||||||
|
y = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.f_dc_1]),
|
||||||
|
z = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.f_dc_2])
|
||||||
|
};
|
||||||
|
color = 0.5f + color * SH_C0;
|
||||||
|
splatDataNative.color[elemIx] = color;
|
||||||
|
|
||||||
|
for (int j = 0; j < 15; j++)
|
||||||
|
{
|
||||||
|
splatDataNative.sh[elemIx * 45 + j * 3] = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.f_rest_0 + j]);
|
||||||
|
splatDataNative.sh[elemIx * 45 + j * 3 + 1] = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.f_rest_0 + 15 + j]);
|
||||||
|
splatDataNative.sh[elemIx * 45 + j * 3 + 2] = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.f_rest_0 + 30 + j]);
|
||||||
|
}
|
||||||
|
|
||||||
|
float opacity = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.opacity]);
|
||||||
|
opacity = 1 / (1 + math.exp(-opacity));
|
||||||
|
splatDataNative.opacity[elemIx] = opacity;
|
||||||
|
|
||||||
|
float3 scale = new()
|
||||||
|
{
|
||||||
|
x = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.scale_0]),
|
||||||
|
y = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.scale_1]),
|
||||||
|
z = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.scale_2])
|
||||||
|
};
|
||||||
|
scale = math.exp(scale);
|
||||||
|
splatDataNative.scale[elemIx] = scale;
|
||||||
|
|
||||||
|
splatDataNative.rotation[elemIx] = new()
|
||||||
|
{
|
||||||
|
w = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.rot_0]),
|
||||||
|
x = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.rot_1]),
|
||||||
|
y = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.rot_2]),
|
||||||
|
z = chunkBytes.ReinterpretLoad<float>(start + headerData.ElementByteOffsets[(int)DataEnum.rot_3])
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
public class SimpleSpin : MonoBehaviour
|
||||||
|
{
|
||||||
|
[Header("Rotation Settings")]
|
||||||
|
[Tooltip("Rotation speed in degrees per second")]
|
||||||
|
[Range(-200f, 200f)]
|
||||||
|
public float rotationSpeed = 10f;
|
||||||
|
|
||||||
|
[Tooltip("Rotation axis (X, Y, Z components)")]
|
||||||
|
public Vector3 rotationAxis = Vector3.up;
|
||||||
|
|
||||||
|
[Tooltip("Rotate in local or world space")]
|
||||||
|
public bool useLocalRotation = true;
|
||||||
|
|
||||||
|
[Header("Advanced Options")]
|
||||||
|
[Tooltip("Enable rotation on this script")]
|
||||||
|
public bool enableRotation = true;
|
||||||
|
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
if (rotationAxis == Vector3.zero)
|
||||||
|
rotationAxis = Vector3.up;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
if (!enableRotation)
|
||||||
|
return;
|
||||||
|
|
||||||
|
float rotationAmount = rotationSpeed * Time.deltaTime;
|
||||||
|
|
||||||
|
if (useLocalRotation)
|
||||||
|
transform.Rotate(rotationAxis, rotationAmount, Space.Self);
|
||||||
|
else
|
||||||
|
transform.Rotate(rotationAxis, rotationAmount, Space.World);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 536715a2510f9db4883a1cd9d1bf11ef
|
||||||
@@ -1,328 +0,0 @@
|
|||||||
using Unity.Burst;
|
|
||||||
using Unity.Mathematics;
|
|
||||||
using UnityEngine;
|
|
||||||
using UnityEngine.VFX;
|
|
||||||
using UnityEngine.VFX.Utility;
|
|
||||||
using UnityEditor;
|
|
||||||
using UnityEditor.AssetImporters;
|
|
||||||
using UnityEditor.Experimental;
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Text;
|
|
||||||
using UnityEditor.Rendering.LookDev;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Unity.VectorGraphics;
|
|
||||||
using Unity.VisualScripting;
|
|
||||||
using System.Collections;
|
|
||||||
using Unity.Collections;
|
|
||||||
using UnityEditor.Experimental.GraphView;
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
TODO:
|
|
||||||
1. Move header parsing to ParsePLYFile
|
|
||||||
2. Improve exception reporting and handling
|
|
||||||
3. Use Burst compiler for parsing binary data
|
|
||||||
4. If we can reasonably assume that items are contigious (e.g. position)
|
|
||||||
use MemoryMarshal
|
|
||||||
5. Use a struct for header_info
|
|
||||||
6. Write handler for data other than 32 bit float
|
|
||||||
7. Pass around Span<byte> instead of byte[] for memory safety
|
|
||||||
8. Implement opacity clamping in the VFX Graph
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
namespace SplatVfx.Editor
|
|
||||||
{
|
|
||||||
|
|
||||||
[ScriptedImporter(1, "ply"), BurstCompile]
|
|
||||||
public sealed class SplatImporter : ScriptedImporter
|
|
||||||
{
|
|
||||||
const float SH_C0 = 0.28209479177387814f;
|
|
||||||
|
|
||||||
#region ScriptedImporter implementation
|
|
||||||
|
|
||||||
[BurstCompile]
|
|
||||||
public override void OnImportAsset(AssetImportContext context)
|
|
||||||
{
|
|
||||||
var ply = ParsePLYFile(context.assetPath);
|
|
||||||
var header_info = ParseHeader(ply.header);
|
|
||||||
|
|
||||||
var data = ImportAsSplatData(header_info, ply.binaryData);
|
|
||||||
data.name = Path.GetFileNameWithoutExtension(context.assetPath);
|
|
||||||
context.AddObjectToAsset("data", data);
|
|
||||||
|
|
||||||
var prefab = CreatePrefab(data);
|
|
||||||
context.AddObjectToAsset("prefab", prefab);
|
|
||||||
context.SetMainObject(prefab);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Prefab construction
|
|
||||||
|
|
||||||
const string DefaultVfxPath = "Assets/vfx-graph-gs/SplatVFX.vfx";
|
|
||||||
|
|
||||||
[BurstCompile]
|
|
||||||
GameObject CreatePrefab(SplatData data)
|
|
||||||
{
|
|
||||||
var go = new GameObject();
|
|
||||||
var vfx = go.AddComponent<VisualEffect>();
|
|
||||||
vfx.visualEffectAsset = EditorResources.Load<VisualEffectAsset>(DefaultVfxPath);
|
|
||||||
|
|
||||||
var binderBase = go.AddComponent<VFXPropertyBinder>();
|
|
||||||
var binder = binderBase.AddPropertyBinder<VFXSplatDataBinder>();
|
|
||||||
|
|
||||||
binder.SplatData = data;
|
|
||||||
|
|
||||||
return go;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Reader implementation
|
|
||||||
|
|
||||||
[BurstCompile]
|
|
||||||
(string header, byte[] binaryData) ParsePLYFile(string filePath)
|
|
||||||
{
|
|
||||||
using var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
|
|
||||||
using var reader = new StreamReader(fileStream);
|
|
||||||
|
|
||||||
var headerBuilder = new StringBuilder();
|
|
||||||
string line;
|
|
||||||
|
|
||||||
while ((line = reader.ReadLine()) != null)
|
|
||||||
{
|
|
||||||
headerBuilder.AppendLine(line);
|
|
||||||
if (line.Trim() == "end_header")
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
long endHeaderPosition = headerBuilder.Length - headerBuilder.ToString().Split('\n').Length + 1;
|
|
||||||
fileStream.Seek(endHeaderPosition, SeekOrigin.Begin);
|
|
||||||
|
|
||||||
var binaryReader = new BinaryReader(fileStream);
|
|
||||||
var binaryData = binaryReader.ReadBytes((int)(fileStream.Length - endHeaderPosition));
|
|
||||||
|
|
||||||
return (headerBuilder.ToString(), binaryData);
|
|
||||||
}
|
|
||||||
|
|
||||||
[BurstCompile]
|
|
||||||
(string format, int num_element, List<(string, string)> properties)
|
|
||||||
ParseHeader(string header)
|
|
||||||
{
|
|
||||||
using var reader = new StringReader(header);
|
|
||||||
string line;
|
|
||||||
|
|
||||||
string format = "";
|
|
||||||
int num_element = 0;
|
|
||||||
var properties = new List<(string, string)>();
|
|
||||||
|
|
||||||
while ((line = reader.ReadLine()) != null)
|
|
||||||
{
|
|
||||||
if (line.StartsWith("end_header"))
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
var strings = line.Split(" ");
|
|
||||||
|
|
||||||
switch (strings.FirstOrDefault())
|
|
||||||
{
|
|
||||||
case "format":
|
|
||||||
format = strings[1];
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "element":
|
|
||||||
num_element = int.Parse(strings[2]);
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "property":
|
|
||||||
properties.Add((strings[2].Trim(), strings[1].Trim()));
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (format, num_element, properties);
|
|
||||||
}
|
|
||||||
|
|
||||||
[BurstCompile]
|
|
||||||
SplatData ImportAsSplatData((string format, int num_element, List<(string, string)> properties) header_info, byte[] binaryData)
|
|
||||||
{
|
|
||||||
var splatData = ScriptableObject.CreateInstance<SplatData>();
|
|
||||||
|
|
||||||
var stream = new MemoryStream(binaryData);
|
|
||||||
var reader = new BinaryReader(stream);
|
|
||||||
|
|
||||||
splatData.PositionArray = new Vector3[header_info.num_element];
|
|
||||||
splatData.ScaleArray = new Vector3[header_info.num_element];
|
|
||||||
splatData.RotationArray = new Quaternion[header_info.num_element];
|
|
||||||
splatData.ColorArray = new Color[header_info.num_element];
|
|
||||||
splatData.OpacityArray = new float[header_info.num_element];
|
|
||||||
splatData.SHArray = new float[header_info.num_element * 45];
|
|
||||||
|
|
||||||
for (int i = 0; i < header_info.num_element; i++)
|
|
||||||
{
|
|
||||||
foreach ((string name, string dtype) property in header_info.properties)
|
|
||||||
{
|
|
||||||
float val = reader.ReadSingle();
|
|
||||||
|
|
||||||
switch (property.name)
|
|
||||||
{
|
|
||||||
case "x":
|
|
||||||
splatData.PositionArray[i].x = val;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "y":
|
|
||||||
splatData.PositionArray[i].y = val;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "z":
|
|
||||||
splatData.PositionArray[i].z = val;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "opacity":
|
|
||||||
splatData.OpacityArray[i] = 1 / (1 + math.exp(-val));
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
if (property.name.StartsWith("f_dc"))
|
|
||||||
{
|
|
||||||
switch (property.name[5])
|
|
||||||
{
|
|
||||||
case '0':
|
|
||||||
splatData.ColorArray[i].r = 0.5f + val * SH_C0;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '1':
|
|
||||||
splatData.ColorArray[i].g = 0.5f + val * SH_C0;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '2':
|
|
||||||
splatData.ColorArray[i].b = 0.5f + val * SH_C0;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (property.name.StartsWith("scale"))
|
|
||||||
{
|
|
||||||
switch (property.name[6])
|
|
||||||
{
|
|
||||||
case '0':
|
|
||||||
splatData.ScaleArray[i].x = math.exp(val);
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '1':
|
|
||||||
splatData.ScaleArray[i].y = math.exp(val);
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '2':
|
|
||||||
splatData.ScaleArray[i].z = math.exp(val);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (property.name.StartsWith("rot"))
|
|
||||||
{
|
|
||||||
switch (property.name[4])
|
|
||||||
{
|
|
||||||
case '0':
|
|
||||||
splatData.RotationArray[i].w = val;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '1':
|
|
||||||
splatData.RotationArray[i].x = val;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '2':
|
|
||||||
splatData.RotationArray[i].y = val;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '3':
|
|
||||||
splatData.RotationArray[i].z = val;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
splatData.ReleaseGpuResources();
|
|
||||||
|
|
||||||
return splatData;
|
|
||||||
}
|
|
||||||
|
|
||||||
// struct ReadData
|
|
||||||
// {
|
|
||||||
// public float px, py, pz;
|
|
||||||
// public float sx, sy, sz;
|
|
||||||
// public byte r, g, b, a;
|
|
||||||
// public byte rw, rx, ry, rz;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// (Vector3[] position, Vector3[] axis, Color[] color)
|
|
||||||
// LoadDataArrays(string path)
|
|
||||||
// {
|
|
||||||
// var bytes = (Span<byte>)File.ReadAllBytes(path);
|
|
||||||
// var count = bytes.Length / 32;
|
|
||||||
|
|
||||||
// var source = MemoryMarshal.Cast<byte, ReadData>(bytes);
|
|
||||||
|
|
||||||
// var position = new Vector3[count];
|
|
||||||
// var axis = new Vector3[count * 3];
|
|
||||||
// var color = new Color[count];
|
|
||||||
|
|
||||||
// for (var i = 0; i < count; i++)
|
|
||||||
// ParseReadData(source[i],
|
|
||||||
// out position[i],
|
|
||||||
// out axis[i * 3],
|
|
||||||
// out axis[i * 3 + 1],
|
|
||||||
// out axis[i * 3 + 2],
|
|
||||||
// out color[i]);
|
|
||||||
|
|
||||||
// return (position, axis, color);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// [BurstCompile]
|
|
||||||
// void ParseReadData(in ReadData src,
|
|
||||||
// out Vector3 position,
|
|
||||||
// out Vector3 axis1,
|
|
||||||
// out Vector3 axis2,
|
|
||||||
// out Vector3 axis3,
|
|
||||||
// out Color color)
|
|
||||||
// {
|
|
||||||
// var rv = (math.float4(src.rx, src.ry, src.rz, src.rw) - 128) / 128;
|
|
||||||
// var q = math.quaternion(-rv.x, -rv.y, rv.z, rv.w);
|
|
||||||
// position = math.float3(src.px, src.py, -src.pz);
|
|
||||||
// axis1 = math.mul(q, math.float3(src.sx, 0, 0));
|
|
||||||
// axis2 = math.mul(q, math.float3(0, src.sy, 0));
|
|
||||||
// axis3 = math.mul(q, math.float3(0, 0, src.sz));
|
|
||||||
// color = (Vector4)math.float4(src.r, src.g, src.b, src.a) / 255;
|
|
||||||
// }
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace SplatVfx.Editor
|
|
||||||
+43
-21
@@ -1,29 +1,49 @@
|
|||||||
#define sh(i) (float3)SHBuffer.Load3(Index * 45 + (i - 1) * 15)
|
#define sh(i) SHBuffer[Index * 45 + (i - 1)]
|
||||||
|
|
||||||
const float SH_C0 = 0.28209479177387814f;
|
/// Index: The splat's index
|
||||||
const float SH_C1 = 0.4886025119029199f;
|
/// Degrees: The degrees of spherical harmonics to calculate
|
||||||
const float SH_C2[] = {
|
/// DirClr: A 4x4 matrix with the first row containing a vector from the splat position to the camera, and the second row containing its base color
|
||||||
1.0925484305920792f,
|
/// SHBuffer: The spherical harmonics buffer from a SplatData object
|
||||||
-1.0925484305920792f,
|
float3 CalculateSHColor(uint Index, uint Degrees, float4x4 DirClr, StructuredBuffer<float> SHBuffer) {
|
||||||
0.31539156525252005f,
|
const float SH_C0 = 0.28209479177387814f;
|
||||||
-1.0925484305920792f,
|
const float SH_C1 = 0.4886025119029199f;
|
||||||
0.5462742152960396f
|
const float SH_C2[] = {
|
||||||
};
|
1.0925484305920792f,
|
||||||
const float SH_C3[] = {
|
-1.0925484305920792f,
|
||||||
-0.5900435899266435f,
|
0.31539156525252005f,
|
||||||
2.890611442640554f,
|
-1.0925484305920792f,
|
||||||
-0.4570457994644658f,
|
0.5462742152960396f
|
||||||
0.3731763325901154f,
|
};
|
||||||
-0.4570457994644658f,
|
const float SH_C3[] = {
|
||||||
1.445305721320277f,
|
-0.5900435899266435f,
|
||||||
-0.5900435899266435f
|
2.890611442640554f,
|
||||||
};
|
-0.4570457994644658f,
|
||||||
|
0.3731763325901154f,
|
||||||
|
-0.4570457994644658f,
|
||||||
|
1.445305721320277f,
|
||||||
|
-0.5900435899266435f
|
||||||
|
};
|
||||||
|
|
||||||
// float3 CalculateSHColor(uint Index, uint Degrees, float3 Direction, StructuredBuffer<float3> SHBuffer) {
|
|
||||||
float3 CalculateSHColor(uint Index, uint Degrees, float4x4 DirClr, ByteAddressBuffer SHBuffer) {
|
|
||||||
float3 dir = DirClr[0].xyz;
|
float3 dir = DirClr[0].xyz;
|
||||||
float3 result = DirClr[1].xyz;
|
float3 result = DirClr[1].xyz;
|
||||||
|
|
||||||
|
float3 sh[16];
|
||||||
|
|
||||||
|
// INTERLEAVED RGB when loaded as StructuredBuffer<float>
|
||||||
|
// for (int i = 1; i < 16; i++)
|
||||||
|
// {
|
||||||
|
// sh[i].x = SHBuffer[Index * 45 + (i - 1) * 3];
|
||||||
|
// sh[i].y = SHBuffer[Index * 45 + (i - 1) * 3 + 1];
|
||||||
|
// sh[i].z = SHBuffer[Index * 45 + (i - 1) * 3 + 2];
|
||||||
|
// }
|
||||||
|
// CONTINUOUS CHANNELS when loaded as StructuredBuffer<float>
|
||||||
|
// for (int i = 1; i < 16; i++)
|
||||||
|
// {
|
||||||
|
// sh[i].x = SHBuffer[Index * 45 + (i - 1)];
|
||||||
|
// sh[i].y = SHBuffer[Index * 45 + 15 + (i - 1)];
|
||||||
|
// sh[i].z = SHBuffer[Index * 45 + 30 + (i - 1)];
|
||||||
|
// }
|
||||||
|
|
||||||
if (Degrees > 0)
|
if (Degrees > 0)
|
||||||
{
|
{
|
||||||
float x = dir.x;
|
float x = dir.x;
|
||||||
@@ -60,6 +80,8 @@ float3 CalculateSHColor(uint Index, uint Degrees, float4x4 DirClr, ByteAddressBu
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
> Reference taken from the original Gaussian splatting paper code
|
||||||
|
|
||||||
// The implementation is loosely based on code for
|
// The implementation is loosely based on code for
|
||||||
// "Differentiable Point-Based Radiance Fields for
|
// "Differentiable Point-Based Radiance Fields for
|
||||||
// Efficient View Synthesis" by Zhang et al. (2022)
|
// Efficient View Synthesis" by Zhang et al. (2022)
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,18 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f0801febb2a50a54ba1429eca4d4c0a1
|
||||||
|
ScriptedImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3}
|
||||||
|
useAsTemplate: 0
|
||||||
|
exposeTemplateAsShader: 0
|
||||||
|
template:
|
||||||
|
name:
|
||||||
|
category:
|
||||||
|
description:
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
thumbnail: {instanceID: 0}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
#define EPSILON 0.0004f
|
||||||
|
|
||||||
|
float CrossProduct(float2 A, float2 B)
|
||||||
|
{
|
||||||
|
return A.x * B.y - A.y * B.x;
|
||||||
|
}
|
||||||
|
|
||||||
|
float SweepArea(float2 A, float2 B)
|
||||||
|
{
|
||||||
|
return abs(CrossProduct(A, B));
|
||||||
|
}
|
||||||
|
|
||||||
|
float4x4 GetMajorAxes(float4x4 Axes, float4x4 AxesProjections)
|
||||||
|
{
|
||||||
|
float4x4 result = (float4x4)0;
|
||||||
|
|
||||||
|
float2 x_proj = AxesProjections[0].xy;
|
||||||
|
float2 y_proj = AxesProjections[1].xy;
|
||||||
|
float2 z_proj = AxesProjections[2].xy;
|
||||||
|
|
||||||
|
float3 x_axes = Axes[0].xyz;
|
||||||
|
float3 y_axes = Axes[1].xyz;
|
||||||
|
float3 z_axes = Axes[2].xyz;
|
||||||
|
|
||||||
|
float xy_area = SweepArea(x_proj, y_proj);
|
||||||
|
float xz_area = SweepArea(x_proj, z_proj);
|
||||||
|
float yz_area = SweepArea(y_proj, z_proj);
|
||||||
|
|
||||||
|
// Compute selection weights using step
|
||||||
|
float xy_is_max = step(xz_area, xy_area) * step(yz_area, xy_area);
|
||||||
|
float xz_is_max = step(yz_area, xz_area) * (1.0 - xy_is_max);
|
||||||
|
float yz_is_max = 1.0 - xy_is_max - xz_is_max;
|
||||||
|
|
||||||
|
// Select axis0
|
||||||
|
float3 axis0 =
|
||||||
|
xy_is_max * x_axes +
|
||||||
|
xz_is_max * x_axes +
|
||||||
|
yz_is_max * y_axes;
|
||||||
|
|
||||||
|
// Select axis1
|
||||||
|
float3 axis1 =
|
||||||
|
xy_is_max * y_axes +
|
||||||
|
xz_is_max * z_axes +
|
||||||
|
yz_is_max * z_axes;
|
||||||
|
|
||||||
|
// Normalize and scale if length is below threshold
|
||||||
|
float len0 = length(axis0);
|
||||||
|
float len1 = length(axis1);
|
||||||
|
|
||||||
|
result[0].xyz = normalize(axis0) * max(len0, EPSILON);
|
||||||
|
result[1].xyz = normalize(axis1) * max(len1, EPSILON);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,44 +0,0 @@
|
|||||||
float CrossProduct(float2 A, float2 B)
|
|
||||||
{
|
|
||||||
return A.x * B.y - A.y * B.x;
|
|
||||||
}
|
|
||||||
|
|
||||||
float SweepArea(float2 A, float2 B)
|
|
||||||
{
|
|
||||||
return abs(CrossProduct(A, B));
|
|
||||||
}
|
|
||||||
|
|
||||||
float4x4 GetMajorAxes(float4x4 Axes, float4x4 AxesProjections)
|
|
||||||
{
|
|
||||||
float4x4 result = (float4x4)0;
|
|
||||||
|
|
||||||
float2 x_proj = AxesProjections[0].xy;
|
|
||||||
float2 y_proj = AxesProjections[1].xy;
|
|
||||||
float2 z_proj = AxesProjections[2].xy;
|
|
||||||
|
|
||||||
float3 x_axes = Axes[0].xyz;
|
|
||||||
float3 y_axes = Axes[1].xyz;
|
|
||||||
float3 z_axes = Axes[2].xyz;
|
|
||||||
|
|
||||||
float xy_area = SweepArea(x_proj, y_proj);
|
|
||||||
float xz_area = SweepArea(x_proj, z_proj);
|
|
||||||
float yz_area = SweepArea(y_proj, z_proj);
|
|
||||||
|
|
||||||
if (xy_area > xz_area && xy_area > yz_area)
|
|
||||||
{
|
|
||||||
result[0].xyz = x_axes;
|
|
||||||
result[1].xyz = y_axes;
|
|
||||||
}
|
|
||||||
else if (xz_area > yz_area)
|
|
||||||
{
|
|
||||||
result[0].xyz = x_axes;
|
|
||||||
result[1].xyz = z_axes;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result[0].xyz = y_axes;
|
|
||||||
result[1].xyz = z_axes;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
Binary file not shown.
+21
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2026 Rafael Formoso
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"com.unity.cinemachine": "3.1.6",
|
||||||
"com.unity.ide.visualstudio": "2.0.27",
|
"com.unity.ide.visualstudio": "2.0.27",
|
||||||
"com.unity.inputsystem": "1.18.0",
|
"com.unity.inputsystem": "1.18.0",
|
||||||
"com.unity.render-pipelines.universal": "17.3.0",
|
"com.unity.render-pipelines.universal": "17.3.0",
|
||||||
@@ -9,7 +10,6 @@
|
|||||||
"com.unity.visualeffectgraph": "17.3.0",
|
"com.unity.visualeffectgraph": "17.3.0",
|
||||||
"com.unity.visualscripting": "1.9.10",
|
"com.unity.visualscripting": "1.9.10",
|
||||||
"com.unity.modules.accessibility": "1.0.0",
|
"com.unity.modules.accessibility": "1.0.0",
|
||||||
"com.unity.modules.adaptiveperformance": "1.0.0",
|
|
||||||
"com.unity.modules.ai": "1.0.0",
|
"com.unity.modules.ai": "1.0.0",
|
||||||
"com.unity.modules.androidjni": "1.0.0",
|
"com.unity.modules.androidjni": "1.0.0",
|
||||||
"com.unity.modules.animation": "1.0.0",
|
"com.unity.modules.animation": "1.0.0",
|
||||||
|
|||||||
@@ -10,6 +10,16 @@
|
|||||||
},
|
},
|
||||||
"url": "https://packages.unity.com"
|
"url": "https://packages.unity.com"
|
||||||
},
|
},
|
||||||
|
"com.unity.cinemachine": {
|
||||||
|
"version": "3.1.6",
|
||||||
|
"depth": 0,
|
||||||
|
"source": "registry",
|
||||||
|
"dependencies": {
|
||||||
|
"com.unity.splines": "2.0.0",
|
||||||
|
"com.unity.modules.imgui": "1.0.0"
|
||||||
|
},
|
||||||
|
"url": "https://packages.unity.com"
|
||||||
|
},
|
||||||
"com.unity.collections": {
|
"com.unity.collections": {
|
||||||
"version": "2.6.2",
|
"version": "2.6.2",
|
||||||
"depth": 2,
|
"depth": 2,
|
||||||
@@ -100,6 +110,13 @@
|
|||||||
"dependencies": {},
|
"dependencies": {},
|
||||||
"url": "https://packages.unity.com"
|
"url": "https://packages.unity.com"
|
||||||
},
|
},
|
||||||
|
"com.unity.settings-manager": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"depth": 2,
|
||||||
|
"source": "registry",
|
||||||
|
"dependencies": {},
|
||||||
|
"url": "https://packages.unity.com"
|
||||||
|
},
|
||||||
"com.unity.shadergraph": {
|
"com.unity.shadergraph": {
|
||||||
"version": "17.3.0",
|
"version": "17.3.0",
|
||||||
"depth": 1,
|
"depth": 1,
|
||||||
@@ -109,6 +126,17 @@
|
|||||||
"com.unity.searcher": "4.9.3"
|
"com.unity.searcher": "4.9.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"com.unity.splines": {
|
||||||
|
"version": "2.8.2",
|
||||||
|
"depth": 1,
|
||||||
|
"source": "registry",
|
||||||
|
"dependencies": {
|
||||||
|
"com.unity.mathematics": "1.2.1",
|
||||||
|
"com.unity.modules.imgui": "1.0.0",
|
||||||
|
"com.unity.settings-manager": "1.0.3"
|
||||||
|
},
|
||||||
|
"url": "https://packages.unity.com"
|
||||||
|
},
|
||||||
"com.unity.test-framework": {
|
"com.unity.test-framework": {
|
||||||
"version": "1.6.0",
|
"version": "1.6.0",
|
||||||
"depth": 0,
|
"depth": 0,
|
||||||
@@ -175,14 +203,6 @@
|
|||||||
"source": "builtin",
|
"source": "builtin",
|
||||||
"dependencies": {}
|
"dependencies": {}
|
||||||
},
|
},
|
||||||
"com.unity.modules.adaptiveperformance": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"depth": 0,
|
|
||||||
"source": "builtin",
|
|
||||||
"dependencies": {
|
|
||||||
"com.unity.modules.subsystems": "1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"com.unity.modules.ai": {
|
"com.unity.modules.ai": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"depth": 0,
|
"depth": 0,
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ EditorBuildSettings:
|
|||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Scenes:
|
m_Scenes:
|
||||||
- enabled: 1
|
- enabled: 1
|
||||||
path: Assets/Scenes/SampleScene.unity
|
path: Assets/vfx-graph-gs/Scenes/Main.unity
|
||||||
guid: 99c9720ab356a0642a771bea13969a05
|
guid: 09fad7c6f4d48844d9510f9903fca619
|
||||||
m_configObjects:
|
m_configObjects:
|
||||||
com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3}
|
com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3}
|
||||||
m_UseUCBPForAssetBundles: 0
|
m_UseUCBPForAssetBundles: 0
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ GraphicsSettings:
|
|||||||
UnityEngine.Rendering.Universal.UniversalRenderPipeline: {fileID: 11400000, guid: 18dc0cd2c080841dea60987a38ce93fa, type: 2}
|
UnityEngine.Rendering.Universal.UniversalRenderPipeline: {fileID: 11400000, guid: 18dc0cd2c080841dea60987a38ce93fa, type: 2}
|
||||||
m_ShaderBuildSettings:
|
m_ShaderBuildSettings:
|
||||||
keywordDeclarationOverrides: []
|
keywordDeclarationOverrides: []
|
||||||
m_LightsUseLinearIntensity: 1
|
m_LightsUseLinearIntensity: 0
|
||||||
m_LightsUseColorTemperature: 1
|
m_LightsUseColorTemperature: 1
|
||||||
m_LogWhenShaderIsCompiled: 0
|
m_LogWhenShaderIsCompiled: 0
|
||||||
m_LightProbeOutsideHullStrategy: 0
|
m_LightProbeOutsideHullStrategy: 0
|
||||||
|
|||||||
@@ -12,11 +12,13 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}
|
m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_EnablePreviewPackages: 0
|
m_EnablePreReleasePackages: 0
|
||||||
m_EnablePackageDependencies: 0
|
|
||||||
m_AdvancedSettingsExpanded: 1
|
m_AdvancedSettingsExpanded: 1
|
||||||
m_ScopedRegistriesSettingsExpanded: 1
|
m_ScopedRegistriesSettingsExpanded: 1
|
||||||
oneTimeWarningShown: 0
|
m_SeeAllPackageVersions: 0
|
||||||
|
m_DismissPreviewPackagesInUse: 0
|
||||||
|
oneTimeWarningShown: 1
|
||||||
|
oneTimePackageErrorsPopUpShown: 0
|
||||||
m_Registries:
|
m_Registries:
|
||||||
- m_Id: main
|
- m_Id: main
|
||||||
m_Name:
|
m_Name:
|
||||||
@@ -24,20 +26,15 @@ MonoBehaviour:
|
|||||||
m_Scopes: []
|
m_Scopes: []
|
||||||
m_IsDefault: 1
|
m_IsDefault: 1
|
||||||
m_Capabilities: 7
|
m_Capabilities: 7
|
||||||
|
m_ConfigSource: 0
|
||||||
|
m_Compliance:
|
||||||
|
m_Status: 0
|
||||||
|
m_Violations: []
|
||||||
m_UserSelectedRegistryName:
|
m_UserSelectedRegistryName:
|
||||||
m_UserAddingNewScopedRegistry: 0
|
m_UserAddingNewScopedRegistry: 0
|
||||||
m_RegistryInfoDraft:
|
m_RegistryInfoDraft:
|
||||||
m_ErrorMessage:
|
|
||||||
m_Original:
|
|
||||||
m_Id:
|
|
||||||
m_Name:
|
|
||||||
m_Url:
|
|
||||||
m_Scopes: []
|
|
||||||
m_IsDefault: 0
|
|
||||||
m_Capabilities: 0
|
|
||||||
m_Modified: 0
|
m_Modified: 0
|
||||||
m_Name:
|
m_ErrorMessage:
|
||||||
m_Url:
|
m_UserModificationsInstanceId: -900
|
||||||
m_Scopes:
|
m_OriginalInstanceId: -902
|
||||||
-
|
m_LoadAssets: 0
|
||||||
m_SelectedScopeIndex: 0
|
|
||||||
|
|||||||
@@ -12,13 +12,13 @@ PlayerSettings:
|
|||||||
targetDevice: 2
|
targetDevice: 2
|
||||||
useOnDemandResources: 0
|
useOnDemandResources: 0
|
||||||
accelerometerFrequency: 60
|
accelerometerFrequency: 60
|
||||||
companyName: DefaultCompany
|
companyName: rsformoso
|
||||||
productName: vfx-graph-gs
|
productName: vfx-graph-gs
|
||||||
defaultCursor: {fileID: 0}
|
defaultCursor: {fileID: 0}
|
||||||
cursorHotspot: {x: 0, y: 0}
|
cursorHotspot: {x: 0, y: 0}
|
||||||
m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
|
m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
|
||||||
m_ShowUnitySplashScreen: 1
|
m_ShowUnitySplashScreen: 0
|
||||||
m_ShowUnitySplashLogo: 1
|
m_ShowUnitySplashLogo: 0
|
||||||
m_SplashScreenOverlayOpacity: 1
|
m_SplashScreenOverlayOpacity: 1
|
||||||
m_SplashScreenAnimation: 1
|
m_SplashScreenAnimation: 1
|
||||||
m_SplashScreenLogoStyle: 1
|
m_SplashScreenLogoStyle: 1
|
||||||
@@ -47,7 +47,7 @@ PlayerSettings:
|
|||||||
defaultScreenWidthWeb: 960
|
defaultScreenWidthWeb: 960
|
||||||
defaultScreenHeightWeb: 600
|
defaultScreenHeightWeb: 600
|
||||||
m_StereoRenderingPath: 0
|
m_StereoRenderingPath: 0
|
||||||
m_ActiveColorSpace: 1
|
m_ActiveColorSpace: 0
|
||||||
unsupportedMSAAFallback: 0
|
unsupportedMSAAFallback: 0
|
||||||
m_SpriteBatchMaxVertexCount: 65535
|
m_SpriteBatchMaxVertexCount: 65535
|
||||||
m_SpriteBatchVertexThreshold: 300
|
m_SpriteBatchVertexThreshold: 300
|
||||||
@@ -143,8 +143,9 @@ PlayerSettings:
|
|||||||
loadStoreDebugModeEnabled: 0
|
loadStoreDebugModeEnabled: 0
|
||||||
visionOSBundleVersion: 1.0
|
visionOSBundleVersion: 1.0
|
||||||
tvOSBundleVersion: 1.0
|
tvOSBundleVersion: 1.0
|
||||||
bundleVersion: 0.1.0
|
bundleVersion: 0.0.0-prototype
|
||||||
preloadedAssets: []
|
preloadedAssets:
|
||||||
|
- {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3}
|
||||||
metroInputSource: 0
|
metroInputSource: 0
|
||||||
wsaTransparentSwapchain: 0
|
wsaTransparentSwapchain: 0
|
||||||
m_HolographicPauseOnTrackingLoss: 1
|
m_HolographicPauseOnTrackingLoss: 1
|
||||||
@@ -524,7 +525,10 @@ PlayerSettings:
|
|||||||
m_Height: 720
|
m_Height: 720
|
||||||
m_Kind: 1
|
m_Kind: 1
|
||||||
m_SubKind:
|
m_SubKind:
|
||||||
m_BuildTargetBatching: []
|
m_BuildTargetBatching:
|
||||||
|
- m_BuildTarget: WebGL
|
||||||
|
m_StaticBatching: 0
|
||||||
|
m_DynamicBatching: 0
|
||||||
m_BuildTargetShaderSettings: []
|
m_BuildTargetShaderSettings: []
|
||||||
m_BuildTargetGraphicsJobs: []
|
m_BuildTargetGraphicsJobs: []
|
||||||
m_BuildTargetGraphicsJobMode: []
|
m_BuildTargetGraphicsJobMode: []
|
||||||
@@ -535,6 +539,9 @@ PlayerSettings:
|
|||||||
- m_BuildTarget: AndroidPlayer
|
- m_BuildTarget: AndroidPlayer
|
||||||
m_APIs: 150000000b000000
|
m_APIs: 150000000b000000
|
||||||
m_Automatic: 0
|
m_Automatic: 0
|
||||||
|
- m_BuildTarget: WebGLSupport
|
||||||
|
m_APIs: 1c0000000b000000
|
||||||
|
m_Automatic: 0
|
||||||
m_BuildTargetVRSettings: []
|
m_BuildTargetVRSettings: []
|
||||||
m_DefaultShaderChunkSizeInMB: 16
|
m_DefaultShaderChunkSizeInMB: 16
|
||||||
m_DefaultShaderChunkCount: 0
|
m_DefaultShaderChunkCount: 0
|
||||||
@@ -560,6 +567,9 @@ PlayerSettings:
|
|||||||
- serializedVersion: 3
|
- serializedVersion: 3
|
||||||
m_BuildTarget: Android
|
m_BuildTarget: Android
|
||||||
m_Formats: 03000000
|
m_Formats: 03000000
|
||||||
|
- serializedVersion: 3
|
||||||
|
m_BuildTarget: WebGL
|
||||||
|
m_Formats: 05000000
|
||||||
playModeTestRunnerEnabled: 0
|
playModeTestRunnerEnabled: 0
|
||||||
runPlayModeTestAsEditModeTest: 0
|
runPlayModeTestAsEditModeTest: 0
|
||||||
actionOnDotNetUnhandledException: 1
|
actionOnDotNetUnhandledException: 1
|
||||||
@@ -812,14 +822,14 @@ PlayerSettings:
|
|||||||
webGLWasmArithmeticExceptions: 0
|
webGLWasmArithmeticExceptions: 0
|
||||||
webGLLinkerTarget: 1
|
webGLLinkerTarget: 1
|
||||||
webGLThreadsSupport: 0
|
webGLThreadsSupport: 0
|
||||||
webGLDecompressionFallback: 0
|
webGLDecompressionFallback: 1
|
||||||
webGLInitialMemorySize: 32
|
webGLInitialMemorySize: 32
|
||||||
webGLMaximumMemorySize: 2048
|
webGLMaximumMemorySize: 2048
|
||||||
webGLMemoryGrowthMode: 2
|
webGLMemoryGrowthMode: 2
|
||||||
webGLMemoryLinearGrowthStep: 16
|
webGLMemoryLinearGrowthStep: 16
|
||||||
webGLMemoryGeometricGrowthStep: 0.2
|
webGLMemoryGeometricGrowthStep: 0.2
|
||||||
webGLMemoryGeometricGrowthCap: 96
|
webGLMemoryGeometricGrowthCap: 96
|
||||||
webGLPowerPreference: 2
|
webGLPowerPreference: 1
|
||||||
webGLWebAssemblyTable: 0
|
webGLWebAssemblyTable: 0
|
||||||
webGLWebAssemblyBigInt: 0
|
webGLWebAssemblyBigInt: 0
|
||||||
webGLCloseOnQuit: 0
|
webGLCloseOnQuit: 0
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
QualitySettings:
|
QualitySettings:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
serializedVersion: 5
|
serializedVersion: 5
|
||||||
m_CurrentQuality: 1
|
m_CurrentQuality: 0
|
||||||
m_QualitySettings:
|
m_QualitySettings:
|
||||||
- serializedVersion: 4
|
- serializedVersion: 5
|
||||||
name: Mobile
|
name: Mobile
|
||||||
pixelLightCount: 2
|
pixelLightCount: 2
|
||||||
shadows: 2
|
shadows: 2
|
||||||
@@ -34,6 +34,7 @@ QualitySettings:
|
|||||||
adaptiveVsyncExtraA: 0
|
adaptiveVsyncExtraA: 0
|
||||||
adaptiveVsyncExtraB: 0
|
adaptiveVsyncExtraB: 0
|
||||||
lodBias: 1
|
lodBias: 1
|
||||||
|
meshLodThreshold: 1
|
||||||
maximumLODLevel: 0
|
maximumLODLevel: 0
|
||||||
enableLODCrossFade: 1
|
enableLODCrossFade: 1
|
||||||
streamingMipmapsActive: 0
|
streamingMipmapsActive: 0
|
||||||
@@ -47,8 +48,7 @@ QualitySettings:
|
|||||||
asyncUploadBufferSize: 16
|
asyncUploadBufferSize: 16
|
||||||
asyncUploadPersistentBuffer: 1
|
asyncUploadPersistentBuffer: 1
|
||||||
resolutionScalingFixedDPIFactor: 1
|
resolutionScalingFixedDPIFactor: 1
|
||||||
customRenderPipeline: {fileID: 11400000, guid: 5e6cbd92db86f4b18aec3ed561671858,
|
customRenderPipeline: {fileID: 11400000, guid: 5e6cbd92db86f4b18aec3ed561671858, type: 2}
|
||||||
type: 2}
|
|
||||||
terrainQualityOverrides: 0
|
terrainQualityOverrides: 0
|
||||||
terrainPixelError: 1
|
terrainPixelError: 1
|
||||||
terrainDetailDensityScale: 1
|
terrainDetailDensityScale: 1
|
||||||
@@ -60,7 +60,7 @@ QualitySettings:
|
|||||||
terrainMaxTrees: 50
|
terrainMaxTrees: 50
|
||||||
excludedTargetPlatforms:
|
excludedTargetPlatforms:
|
||||||
- Standalone
|
- Standalone
|
||||||
- serializedVersion: 4
|
- serializedVersion: 5
|
||||||
name: PC
|
name: PC
|
||||||
pixelLightCount: 2
|
pixelLightCount: 2
|
||||||
shadows: 2
|
shadows: 2
|
||||||
@@ -88,6 +88,7 @@ QualitySettings:
|
|||||||
adaptiveVsyncExtraA: 0
|
adaptiveVsyncExtraA: 0
|
||||||
adaptiveVsyncExtraB: 0
|
adaptiveVsyncExtraB: 0
|
||||||
lodBias: 2
|
lodBias: 2
|
||||||
|
meshLodThreshold: 1
|
||||||
maximumLODLevel: 0
|
maximumLODLevel: 0
|
||||||
enableLODCrossFade: 1
|
enableLODCrossFade: 1
|
||||||
streamingMipmapsActive: 0
|
streamingMipmapsActive: 0
|
||||||
@@ -101,8 +102,7 @@ QualitySettings:
|
|||||||
asyncUploadBufferSize: 16
|
asyncUploadBufferSize: 16
|
||||||
asyncUploadPersistentBuffer: 1
|
asyncUploadPersistentBuffer: 1
|
||||||
resolutionScalingFixedDPIFactor: 1
|
resolutionScalingFixedDPIFactor: 1
|
||||||
customRenderPipeline: {fileID: 11400000, guid: 4b83569d67af61e458304325a23e5dfd,
|
customRenderPipeline: {fileID: 11400000, guid: 4b83569d67af61e458304325a23e5dfd, type: 2}
|
||||||
type: 2}
|
|
||||||
terrainQualityOverrides: 0
|
terrainQualityOverrides: 0
|
||||||
terrainPixelError: 1
|
terrainPixelError: 1
|
||||||
terrainDetailDensityScale: 1
|
terrainDetailDensityScale: 1
|
||||||
@@ -122,6 +122,7 @@ QualitySettings:
|
|||||||
GameCoreXboxOne: 1
|
GameCoreXboxOne: 1
|
||||||
Lumin: 0
|
Lumin: 0
|
||||||
Nintendo Switch: 1
|
Nintendo Switch: 1
|
||||||
|
Nintendo Switch 2: 1
|
||||||
PS4: 1
|
PS4: 1
|
||||||
PS5: 1
|
PS5: 1
|
||||||
Server: 0
|
Server: 0
|
||||||
|
|||||||
@@ -0,0 +1,121 @@
|
|||||||
|
{
|
||||||
|
"templatePinStates": [],
|
||||||
|
"dependencyTypeInfos": [
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.AnimationClip",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEditor.Animations.AnimatorController",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.AnimatorOverrideController",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEditor.Audio.AudioMixerController",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.ComputeShader",
|
||||||
|
"defaultInstantiationMode": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.Cubemap",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.GameObject",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEditor.LightingDataAsset",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.LightingSettings",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.Material",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEditor.MonoScript",
|
||||||
|
"defaultInstantiationMode": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.PhysicsMaterial",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.PhysicsMaterial2D",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.Rendering.PostProcessing.PostProcessResources",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.Rendering.VolumeProfile",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEditor.SceneAsset",
|
||||||
|
"defaultInstantiationMode": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.Shader",
|
||||||
|
"defaultInstantiationMode": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.ShaderVariantCollection",
|
||||||
|
"defaultInstantiationMode": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.Texture",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.Texture2D",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "UnityEngine.Timeline.TimelineAsset",
|
||||||
|
"defaultInstantiationMode": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"defaultDependencyTypeInfo": {
|
||||||
|
"userAdded": false,
|
||||||
|
"type": "<default_scene_template_dependencies>",
|
||||||
|
"defaultInstantiationMode": 1
|
||||||
|
},
|
||||||
|
"newSceneOverride": 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &1
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 53
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 0}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: a287be6c49135cd4f9b2b8666c39d999, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.Timeline.Editor::TimelineProjectSettings
|
||||||
|
assetDefaultFramerate: 60
|
||||||
|
m_DefaultFrameRate: 60
|
||||||
@@ -3,12 +3,12 @@
|
|||||||
--- !u!937362698 &1
|
--- !u!937362698 &1
|
||||||
VFXManager:
|
VFXManager:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_IndirectShader: {fileID: 0}
|
m_IndirectShader: {fileID: 7200000, guid: 84a17cfa13e40ae4082ef42714f0a81c, type: 3}
|
||||||
m_CopyBufferShader: {fileID: 0}
|
m_CopyBufferShader: {fileID: 7200000, guid: 23c51f21a3503f6428b527b01f8a2f4e, type: 3}
|
||||||
m_PrefixSumShader: {fileID: 0}
|
m_PrefixSumShader: {fileID: 7200000, guid: 783e0fdc1a277f54bb851fd2ceab1e7f, type: 3}
|
||||||
m_SortShader: {fileID: 0}
|
m_SortShader: {fileID: 7200000, guid: ea257ca3cfb12a642a5025e612af6b2a, type: 3}
|
||||||
m_StripUpdateShader: {fileID: 0}
|
m_StripUpdateShader: {fileID: 7200000, guid: 8fa6c4009fe2a4d4486c62736fc30ad8, type: 3}
|
||||||
m_EmptyShader: {fileID: 0}
|
m_EmptyShader: {fileID: 4800000, guid: 33a2079f6a2db4c4eb2e44b33f4ddf6b, type: 3}
|
||||||
m_RenderPipeSettingsPath:
|
m_RenderPipeSettingsPath:
|
||||||
m_FixedTimeStep: 0.016666668
|
m_FixedTimeStep: 0.016666668
|
||||||
m_MaxDeltaTime: 0.05
|
m_MaxDeltaTime: 0.05
|
||||||
@@ -16,5 +16,5 @@ VFXManager:
|
|||||||
m_MaxCapacity: 100000000
|
m_MaxCapacity: 100000000
|
||||||
m_CompiledVersion: 7
|
m_CompiledVersion: 7
|
||||||
m_RuntimeVersion: 39
|
m_RuntimeVersion: 39
|
||||||
m_RuntimeResources: {fileID: 0}
|
m_RuntimeResources: {fileID: 11400000, guid: bc10b42afe3813544bffd38ae2cd893d, type: 2}
|
||||||
m_BatchEmptyLifetime: 300
|
m_BatchEmptyLifetime: 300
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
# Unity VFX Graph Gaussian Splatting Renderer
|
||||||
|
|
||||||
|
A Unity implementation of Gaussian splatting using VFX Graph for real-time rendering. This project uses Unity's VFX Graph system as an alternative to the EWA algorithm to provide more flexibility in accessing the splat's data structures.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Import this project into Unity or copy the `Assets/vfx-graph-gs/` folder to your project
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Importing PLY Files
|
||||||
|
|
||||||
|
1. Place your PLY file containing Gaussian splat data in your project
|
||||||
|
2. The custom `SplatImporter` will automatically process the file
|
||||||
|
3. A VFX prefab will be generated that you can drag on to a scene
|
||||||
|
|
||||||
|
## File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
Assets/vfx-graph-gs/
|
||||||
|
├── Scripts/ # Core C# implementation
|
||||||
|
│ ├── SplatData.cs # Data container and GPU buffer management
|
||||||
|
│ ├── SplatDataBinder.cs # VFX Graph integration
|
||||||
|
│ ├── SplatDataInspector.cs # Custom inspector for SplatData
|
||||||
|
│ └── SplatImporter.cs # PLY file importer with burst compilation
|
||||||
|
├── VFXGraphHLSL/ # GPU shader functions
|
||||||
|
│ ├── CalculateAxes.hlsl # Quaternion to matrix conversion
|
||||||
|
│ ├── CalculateSH.hlsl # Spherical harmonics calculations
|
||||||
|
│ └── GetMajorAxes.hlsl # Projection axis selection
|
||||||
|
├── SplatVFX.vfx # Main VFX Graph asset
|
||||||
|
└── [PLY files] # Gaussian splat data files
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the MIT License. See the LICENSE file for details.
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- [Original Gaussian Splatting Code](https://github.com/graphdeco-inria/gaussian-splatting)
|
||||||
|
- [SplatVFX](https://github.com/keijiro/SplatVFX)
|
||||||
|
|
||||||
|
|
||||||
|
> ## Additional Notes
|
||||||
|
> - The importer processes files in 256MB chunks to handle large files
|
||||||
|
> - Presently, the splat file *must* have all splat data present, including spherical harmonics. It currently only supports `float` type variables and binary-encoded files.
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# TODO
|
||||||
|
- [ ] Account for the fact that a larger minor axis "hardens" splat edges
|
||||||
|
- Maybe shift the alpha gradient, or incorporate into shader
|
||||||
|
- [ ] Rework SplatBinder system to collect all splat objects in the scene and
|
||||||
|
combine their buffers
|
||||||
|
- [ ] Write shader to calculate Gaussians at runtime
|
||||||
|
- Texture lookups are slow on mobile
|
||||||
|
- [ ] ~~Write shader that prevents pixel overdraw~~
|
||||||
|
- ~~Applies cumulative alpha,while drawing back to front, and writes to the
|
||||||
|
Z-buffer after a certain threshold~~
|
||||||
|
- [ ] Optimize CalculateAxes.hlsl
|
||||||
|
- [ ] Allow splat data buffers to be accessible by other VFX Graphs
|
||||||
|
- [ ] Support SOGS format
|
||||||
|
- [ ] Add exception reporting and handling for incomplete splat data
|
||||||
|
- [ ] Add support for other PLY data types and endianness
|
||||||
|
- [ ] Add support for ASCII PLY data
|
||||||
|
- [ ] Fix the header parsing logic in SplatImporter.cs
|
||||||
|
- [ ] Add more thorough checks in SplatDataBinder.cs
|
||||||
|
|
||||||
|
# DONE
|
||||||
|
- [x] Rewrite SH Array to use interleaved RGB rather than contiguous data per
|
||||||
|
channel
|
||||||
|
- [x] Switch to using ByteAddressBuffers instead of loops in CalculateSH.hlsl
|
||||||
|
- Used StructuredBuffer\<float3\> instead
|
||||||
|
|
||||||
|
# NOTES
|
||||||
|
- Does VFX Graph calculate the Update and Render blocks before applying Z-test?
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
<Solution>
|
<Solution>
|
||||||
<Project Path="Assembly-CSharp.csproj" />
|
<Project Path="Assembly-CSharp.csproj" />
|
||||||
|
<Project Path="Assembly-CSharp-Editor.csproj" />
|
||||||
</Solution>
|
</Solution>
|
||||||
|
|||||||
Reference in New Issue
Block a user