This commit is contained in:
Lasse Jon Fuglsang Pedersen 2020-11-10 16:30:48 +01:00
Родитель a836c51ae2
Коммит bfde2a4352
7 изменённых файлов: 592 добавлений и 581 удалений

Просмотреть файл

@ -4,6 +4,7 @@ using UnityEngine;
using UnityEngine.Rendering;
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using Unity.Mathematics;
namespace Unity.DemoTeam.Hair
{
@ -38,19 +39,18 @@ namespace Unity.DemoTeam.Hair
{
public enum Renderer
{
Lines1px,
PrimitiveLines,
}
public enum Scaling
{
NoScaling,
LocalUniformScaling,
PreserveScale,
ApplyUniformScale,
}
public Scaling strandScaling;
public float strandDiameter;
public Material strandMaterial;
public Renderer strandRenderer;
public Scaling strandScaling;
public bool simulate;
}
public GroomAsset groomAsset;
@ -88,7 +88,7 @@ namespace Unity.DemoTeam.Hair
void OnValidate()
{
volumeSettings.volumeResolution = (Mathf.Max(8, volumeSettings.volumeResolution) / 8) * 8;
volumeSettings.volumeGridResolution = (Mathf.Max(8, volumeSettings.volumeGridResolution) / 8) * 8;
if (boundaries.Count > HairSim.MAX_BOUNDARIES)
{
@ -108,9 +108,7 @@ namespace Unity.DemoTeam.Hair
InitializeContainers();
}
public static Bounds GetRootBounds(MeshFilter rootFilter, Space space = Space.World)
{
if (space == Space.World)
public static Bounds GetRootBounds(MeshFilter rootFilter)
{
var rootBounds = rootFilter.sharedMesh.bounds;
var rootTransform = rootFilter.transform;
@ -127,18 +125,13 @@ namespace Unity.DemoTeam.Hair
return new Bounds(worldCenter, 2.0f * worldExtent);
}
else
{
return rootFilter.sharedMesh.bounds;
}
}
public Bounds GetSimulationBounds(Space space = Space.World)
public Bounds GetSimulationBounds()
{
Debug.Assert(groomAsset != null);
Debug.Assert(groomAsset.strandGroups != null);
var worldBounds = GetRootBounds(groomContainers[0].rootFilter, space);
var worldBounds = GetRootBounds(groomContainers[0].rootFilter);
var worldMargin = groomAsset.strandGroups[0].strandLengthMax;
for (int i = 1; i != groomContainers.Length; i++)
@ -153,38 +146,51 @@ namespace Unity.DemoTeam.Hair
return new Bounds(worldBounds.center, worldBounds.size);
}
public Bounds GetSimulationBoundsSquare(Space space = Space.World)
public Bounds GetSimulationBoundsSquare()
{
var worldBounds = GetSimulationBounds(space);
var worldBounds = GetSimulationBounds();
var worldExtent = worldBounds.extents;
return new Bounds(worldBounds.center, Vector3.one * (2.0f * Mathf.Max(worldExtent.x, worldExtent.y, worldExtent.z)));
}
public float GetSimulationStrandScale()
{
switch (settingsStrands.strandScaling)
{
default:
case SettingsStrands.Scaling.PreserveScale:
return 1.0f;
case SettingsStrands.Scaling.ApplyUniformScale:
return math.cmin(this.transform.localScale);
}
}
public void DispatchStep(CommandBuffer cmd, float dt)
{
if (!InitializeRuntimeData(cmd))
return;
// apply settings
var strandScale = GetSimulationStrandScale();
var volumeBounds = GetSimulationBoundsSquare();
for (int i = 0; i != solverData.Length; i++)
{
HairSim.UpdateSolverData(ref solverData[i], solverSettings, dt);
HairSim.UpdateSolverRoots(cmd, groomContainers[i].rootFilter.sharedMesh, groomContainers[i].rootFilter.transform.localToWorldMatrix, solverData[i]);
}
var volumeBounds = GetSimulationBoundsSquare();
{
volumeSettings.volumeWorldCenter = volumeBounds.center;
volumeSettings.volumeWorldExtent = volumeBounds.extents;
}
HairSim.UpdateVolumeData(ref volumeData, volumeSettings, boundaries);
//TODO this needs to happen after stepping solver
//TODO ^^ this needs to happen after stepping solver
//TODO split boundary data update from volume data update
// pre-step volume if resolution changed
if (HairSim.PrepareVolumeData(ref volumeData, volumeSettings.volumeResolution, halfPrecision: false))
if (HairSim.PrepareVolumeData(ref volumeData, volumeSettings.volumeGridResolution, halfPrecision: false))
{
HairSim.StepVolumeData(cmd, ref volumeData, volumeSettings, solverData);
}
@ -275,23 +281,8 @@ namespace Unity.DemoTeam.Hair
var rootFilter = groomContainers[i].rootFilter;
var rootTransform = rootFilter.transform.localToWorldMatrix;
var strandTransform = Matrix4x4.TRS(rootFilter.transform.position, rootFilter.transform.rotation, Vector3.one);
var strandScale = 1.0f;
switch (settingsStrands.strandScaling)
{
case SettingsStrands.Scaling.NoScaling:
break;
case SettingsStrands.Scaling.LocalUniformScaling:
{
var localScale = rootFilter.transform.localScale;
var localScaleMin = Mathf.Min(localScale.x, localScale.y, localScale.z);
strandTransform = strandTransform * Matrix4x4.Scale(Vector3.one * localScaleMin);
strandScale = localScaleMin;
}
break;
}
var strandScale = GetSimulationStrandScale();
var strandTransform = Matrix4x4.TRS(rootFilter.transform.position, rootFilter.transform.rotation, Vector3.one * strandScale);
HairSim.PrepareSolverData(ref solverData[i], strandGroup.strandCount, strandGroup.strandParticleCount);
@ -337,7 +328,7 @@ namespace Unity.DemoTeam.Hair
HairSim.UpdateSolverData(ref solverData[i], solverSettings, 1.0f);
HairSim.UpdateSolverRoots(cmd, groomContainers[i].rootFilter.sharedMesh, rootTransform, solverData[i]);
{
HairSim.InitSolverData(cmd, ref solverData[i], strandTransform);
HairSim.InitSolverParticles(cmd, solverData[i], strandTransform);
}
// initialize the renderer
@ -352,7 +343,7 @@ namespace Unity.DemoTeam.Hair
groomContainers[i].lineRenderer.SetPropertyBlock(groomContainers[i].lineRendererMPB);
}
HairSim.PrepareVolumeData(ref volumeData, volumeSettings.volumeResolution, halfPrecision: false);
HairSim.PrepareVolumeData(ref volumeData, volumeSettings.volumeGridResolution, halfPrecision: false);
return true;
}

Просмотреть файл

@ -56,11 +56,10 @@ namespace Unity.DemoTeam.Hair
public static ProfilingSampler DrawVolumeData;
}
//TODO remove public
public static class UniformIDs
static class UniformIDs
{
// solver
public static int SolverParams;
public static int SolverCBuffer;
public static int _Length;
public static int _RootPosition;
@ -73,7 +72,7 @@ namespace Unity.DemoTeam.Hair
public static int _ParticleVelocityPrev;
// volume
public static int VolumeParams;
public static int VolumeCBuffer;
public static int _AccuDensity;
public static int _AccuVelocityX;
@ -169,8 +168,8 @@ namespace Unity.DemoTeam.Hair
public enum Compare
{
Equals,
LessThan,
GreaterThan,
EqualsOrLessThan,
EqualsOrGreaterThan,
}
[Range(0.070f, 100.0f), Tooltip("Strand diameter in millimeters")]
@ -178,6 +177,9 @@ namespace Unity.DemoTeam.Hair
[Range(0.0f, 9.0f)]
public float strandParticleContrib;// TODO move elsewhere
[Space]
[Space]
public Method method;
@ -190,14 +192,14 @@ namespace Unity.DemoTeam.Hair
[Space]
[Range(-1.0f, 1.0f), Tooltip("Scaling factor for gravity")]
public float gravity;
[Range(0.0f, 1.0f), Tooltip("Damping factor")]
public float damping;
[Range(0.0f, 1.0f), Tooltip("Scaling factor for volume pressure impulse")]
public float volumeResponse;
public float cellPressure;
[Range(0.0f, 1.0f), Tooltip("Scaling factor for volume velocity impulse (0 == FLIP, 1 == PIC)")]
public float volumeFriction;
public float cellVelocity;
[Range(0.0f, 1.0f), Tooltip("Velocity damping factor")]
public float damping;
[Range(-1.0f, 1.0f), Tooltip("Scaling factor for gravity (Physics.gravity)")]
public float gravity;
[Space]
@ -230,10 +232,10 @@ namespace Unity.DemoTeam.Hair
stiffness = 1.0f,
kSOR = 1.0f,
gravity = 1.0f,
cellPressure = 1.0f,
cellVelocity = 0.05f,
damping = 0.0f,
volumeResponse = 1.0f,
volumeFriction = 0.05f,
gravity = 1.0f,
distance = true,
distanceLRA = true,
@ -242,13 +244,13 @@ namespace Unity.DemoTeam.Hair
boundary = true,
boundaryFriction = 0.5f,
curvature = false,
curvatureCompare = Compare.LessThan,
curvatureCompare = Compare.EqualsOrLessThan,
curvatureCompareTo = 0.1f,
};
}
[Serializable] public struct VolumeSettings
{
public enum Method : uint
public enum SplatMethod
{
None,
Compute,
@ -257,28 +259,49 @@ namespace Unity.DemoTeam.Hair
RasterizationNoGS,
}
[Range(8, 160)]
public int volumeResolution;
public Method volumeSplatMethod;
[Range(0, 100)]
public int pressureIterations;
[Range(0.0f, 1.0f)]
public float weighIncompressibleFlow;
[Range(0.0f, 1.0f)]
public float weighTargetDensity;
public bool supportContraction;
//public enum PressureMode
//{
// Repulsion,
// RepulsionAndAttraction,
//}
public enum TargetDensity
{
Uniform,
//InitialPose,
//InitialPoseInParticles,
}
[HideInInspector] public Vector3 volumeWorldCenter;
[HideInInspector] public Vector3 volumeWorldExtent;
public SplatMethod volumeSplatMethod;
[Range(8, 160)]
public int volumeGridResolution;
[Space]
[Range(0, 100)]
public int pressureIterations;
[Tooltip("Enable this to support attraction of strands")]
public bool pressureAllowsAttraction;
public TargetDensity targetDensity;
[Range(0.0f, 2.0f)]
public float targetDensityFactor;
[Space]
public bool boundariesFromPhysics;
public static readonly VolumeSettings defaults = new VolumeSettings()
{
volumeResolution = 48,
volumeSplatMethod = Method.Compute,
volumeGridResolution = 48,
volumeSplatMethod = SplatMethod.Compute,
pressureIterations = 10,
weighIncompressibleFlow = 1.0f,
weighTargetDensity = 1.0f,
supportContraction = true,
pressureAllowsAttraction = true,
targetDensity = TargetDensity.Uniform,
targetDensityFactor = 1.0f,
boundariesFromPhysics = false,
};
}
[Serializable] public struct DebugSettings
@ -501,12 +524,12 @@ namespace Unity.DemoTeam.Hair
cbuffer._DT = dt;
cbuffer._Iterations = (uint)solverSettings.iterations;
cbuffer._Stiffness = solverSettings.stiffness;
cbuffer._Damping = solverSettings.damping;
cbuffer._Relaxation = solverSettings.kSOR;
cbuffer._Damping = solverSettings.damping;
cbuffer._Gravity = solverSettings.gravity * -Vector3.Magnitude(Physics.gravity);
cbuffer._VolumePressureScale = solverSettings.volumeResponse;
cbuffer._VolumeFrictionScale = solverSettings.volumeFriction;
cbuffer._VolumePressureScale = solverSettings.cellPressure;
cbuffer._VolumeFrictionScale = solverSettings.cellVelocity;
cbuffer._BoundaryFriction = solverSettings.boundaryFriction;
cbuffer._BendingCurvature = solverSettings.curvatureCompareTo * 0.5f * cbuffer._StrandParticleInterval;
@ -520,8 +543,8 @@ namespace Unity.DemoTeam.Hair
keywords.ENABLE_BOUNDARY = (solverSettings.boundary && solverSettings.boundaryFriction == 0.0f);
keywords.ENABLE_BOUNDARY_FRICTION = (solverSettings.boundary && solverSettings.boundaryFriction != 0.0f);
keywords.ENABLE_CURVATURE_EQ = (solverSettings.curvature && solverSettings.curvatureCompare == SolverSettings.Compare.Equals);
keywords.ENABLE_CURVATURE_GEQ = (solverSettings.curvature && solverSettings.curvatureCompare == SolverSettings.Compare.GreaterThan);
keywords.ENABLE_CURVATURE_LEQ = (solverSettings.curvature && solverSettings.curvatureCompare == SolverSettings.Compare.LessThan);
keywords.ENABLE_CURVATURE_GEQ = (solverSettings.curvature && solverSettings.curvatureCompare == SolverSettings.Compare.EqualsOrGreaterThan);
keywords.ENABLE_CURVATURE_LEQ = (solverSettings.curvature && solverSettings.curvatureCompare == SolverSettings.Compare.EqualsOrLessThan);
}
public static void UpdateVolumeData(ref VolumeData volumeData, in VolumeSettings volumeSettings, List<HairSimBoundary> boundaries)
@ -530,12 +553,11 @@ namespace Unity.DemoTeam.Hair
ref var keywords = ref volumeData.keywords;
// update volume parameters
cbuffer._VolumeCells = volumeSettings.volumeResolution * Vector3.one;
cbuffer._VolumeCells = volumeSettings.volumeGridResolution * Vector3.one;
cbuffer._VolumeWorldMin = volumeSettings.volumeWorldCenter - volumeSettings.volumeWorldExtent;
cbuffer._VolumeWorldMax = volumeSettings.volumeWorldCenter + volumeSettings.volumeWorldExtent;
cbuffer._PressureFromVelocity = volumeSettings.weighIncompressibleFlow;
cbuffer._PressureFromDensity = volumeSettings.weighTargetDensity;
cbuffer._TargetDensityFactor = volumeSettings.targetDensityFactor;
// update boundary shapes
cbuffer._BoundaryCapsuleCount = 0;
@ -631,12 +653,12 @@ namespace Unity.DemoTeam.Hair
}
// update keywords
keywords.VOLUME_SUPPORT_CONTRACTION = volumeSettings.supportContraction;
keywords.VOLUME_SUPPORT_CONTRACTION = volumeSettings.pressureAllowsAttraction;
}
public static void PushSolverData(CommandBuffer cmd, ComputeShader cs, int kernel, in SolverData solverData)
{
ConstantBuffer.Push(cmd, solverData.cbuffer, cs, UniformIDs.SolverParams);
ConstantBuffer.Push(cmd, solverData.cbuffer, cs, UniformIDs.SolverCBuffer);
cmd.SetComputeBufferParam(cs, kernel, UniformIDs._Length, solverData.length);
cmd.SetComputeBufferParam(cs, kernel, UniformIDs._RootPosition, solverData.rootPosition);
@ -661,7 +683,7 @@ namespace Unity.DemoTeam.Hair
public static void PushSolverData(CommandBuffer cmd, Material mat, MaterialPropertyBlock mpb, in SolverData solverData)
{
ConstantBuffer.Push(cmd, solverData.cbuffer, mat, UniformIDs.SolverParams);
ConstantBuffer.Push(cmd, solverData.cbuffer, mat, UniformIDs.SolverCBuffer);
mpb.SetBuffer(UniformIDs._Length, solverData.length);
mpb.SetBuffer(UniformIDs._RootPosition, solverData.rootPosition);
@ -686,7 +708,7 @@ namespace Unity.DemoTeam.Hair
public static void PushVolumeData(CommandBuffer cmd, ComputeShader cs, int kernel, in VolumeData volumeData)
{
ConstantBuffer.Push(cmd, volumeData.cbuffer, cs, UniformIDs.VolumeParams);
ConstantBuffer.Push(cmd, volumeData.cbuffer, cs, UniformIDs.VolumeCBuffer);
cmd.SetComputeBufferParam(cs, kernel, UniformIDs._BoundaryPack, volumeData.boundaryPack);
cmd.SetComputeBufferParam(cs, kernel, UniformIDs._BoundaryMatrix, volumeData.boundaryMatrix);
@ -711,7 +733,7 @@ namespace Unity.DemoTeam.Hair
public static void PushVolumeData(CommandBuffer cmd, Material mat, MaterialPropertyBlock mpb, in VolumeData volumeData)
{
ConstantBuffer.Push(cmd, volumeData.cbuffer, mat, UniformIDs.VolumeParams);
ConstantBuffer.Push(cmd, volumeData.cbuffer, mat, UniformIDs.VolumeCBuffer);
mpb.SetBuffer(UniformIDs._BoundaryPack, volumeData.boundaryPack);
mpb.SetBuffer(UniformIDs._BoundaryMatrix, volumeData.boundaryMatrix);
@ -734,7 +756,7 @@ namespace Unity.DemoTeam.Hair
CoreUtils.SetKeyword(mat, "VOLUME_SUPPORT_CONTRACTION", volumeData.keywords.VOLUME_SUPPORT_CONTRACTION);
}
public static void InitSolverData(CommandBuffer cmd, ref SolverData solverData, Matrix4x4 rootTransform)
public static void InitSolverParticles(CommandBuffer cmd, in SolverData solverData, Matrix4x4 rootTransform)
{
var solverDataCopy = solverData;
{
@ -821,9 +843,9 @@ namespace Unity.DemoTeam.Hair
private static void StepVolumeData_Clear(CommandBuffer cmd, ref VolumeData volumeData, in VolumeSettings volumeSettings)
{
int numX = volumeSettings.volumeResolution / 8;
int numY = volumeSettings.volumeResolution / 8;
int numZ = volumeSettings.volumeResolution;
int numX = volumeSettings.volumeGridResolution / 8;
int numY = volumeSettings.volumeGridResolution / 8;
int numZ = volumeSettings.volumeGridResolution;
// clear
using (new ProfilingScope(cmd, MarkersGPU.Volume_0_Clear))
@ -844,7 +866,7 @@ namespace Unity.DemoTeam.Hair
// accumulate
switch (volumeSettings.volumeSplatMethod)
{
case VolumeSettings.Method.Compute:
case VolumeSettings.SplatMethod.Compute:
{
using (new ProfilingScope(cmd, MarkersGPU.Volume_1_Splat))
{
@ -855,7 +877,7 @@ namespace Unity.DemoTeam.Hair
}
break;
case VolumeSettings.Method.ComputeSplit:
case VolumeSettings.SplatMethod.ComputeSplit:
{
using (new ProfilingScope(cmd, MarkersGPU.Volume_1_SplatDensity))
{
@ -881,7 +903,7 @@ namespace Unity.DemoTeam.Hair
}
break;
case VolumeSettings.Method.Rasterization:
case VolumeSettings.SplatMethod.Rasterization:
{
using (new ProfilingScope(cmd, MarkersGPU.Volume_1_SplatByRasterization))
{
@ -893,7 +915,7 @@ namespace Unity.DemoTeam.Hair
}
break;
case VolumeSettings.Method.RasterizationNoGS:
case VolumeSettings.SplatMethod.RasterizationNoGS:
{
using (new ProfilingScope(cmd, MarkersGPU.Volume_1_SplatByRasterizationNoGS))
{
@ -909,15 +931,15 @@ namespace Unity.DemoTeam.Hair
private static void StepVolumeData_Resolve(CommandBuffer cmd, ref VolumeData volumeData, in VolumeSettings volumeSettings)
{
int numX = volumeSettings.volumeResolution / 8;
int numY = volumeSettings.volumeResolution / 8;
int numZ = volumeSettings.volumeResolution;
int numX = volumeSettings.volumeGridResolution / 8;
int numY = volumeSettings.volumeGridResolution / 8;
int numZ = volumeSettings.volumeGridResolution;
// resolve accumulated
switch (volumeSettings.volumeSplatMethod)
{
case VolumeSettings.Method.Compute:
case VolumeSettings.Method.ComputeSplit:
case VolumeSettings.SplatMethod.Compute:
case VolumeSettings.SplatMethod.ComputeSplit:
{
using (new ProfilingScope(cmd, MarkersGPU.Volume_2_Resolve))
{
@ -927,8 +949,8 @@ namespace Unity.DemoTeam.Hair
}
break;
case VolumeSettings.Method.Rasterization:
case VolumeSettings.Method.RasterizationNoGS:
case VolumeSettings.SplatMethod.Rasterization:
case VolumeSettings.SplatMethod.RasterizationNoGS:
{
using (new ProfilingScope(cmd, MarkersGPU.Volume_2_ResolveFromRasterization))
{
@ -1070,7 +1092,7 @@ namespace Unity.DemoTeam.Hair
//TODO move elsewhere
//maybe 'HairSimDataUtility' ?
public static Vector3 GetCellSize(in VolumeParams volumeParams)
public static Vector3 GetCellSize(in VolumeCBuffer volumeParams)
{
var cellSize = new Vector3(
(volumeParams._VolumeWorldMax.x - volumeParams._VolumeWorldMin.x) / volumeParams._VolumeCells.x,
@ -1079,23 +1101,23 @@ namespace Unity.DemoTeam.Hair
return cellSize;
}
public static float GetCellVolume(in VolumeParams volumeParams)
public static float GetCellVolume(in VolumeCBuffer volumeParams)
{
var cellSize = GetCellSize(volumeParams);
return cellSize.x * cellSize.y * cellSize.z;
}
public static int GetCellCount(in VolumeParams volumeParams)
public static int GetCellCount(in VolumeCBuffer volumeParams)
{
return (int)volumeParams._VolumeCells.x * (int)volumeParams._VolumeCells.y * (int)volumeParams._VolumeCells.z;
}
public static Vector3 GetVolumeCenter(in VolumeParams volumeParams)
public static Vector3 GetVolumeCenter(in VolumeCBuffer volumeParams)
{
return (volumeParams._VolumeWorldMax + volumeParams._VolumeWorldMin) * 0.5f;
}
public static Vector3 GetVolumeExtent(in VolumeParams volumeParams)
public static Vector3 GetVolumeExtent(in VolumeCBuffer volumeParams)
{
return (volumeParams._VolumeWorldMax - volumeParams._VolumeWorldMin) * 0.5f;
}

Просмотреть файл

@ -421,9 +421,9 @@ void KVolumeDivergence(
_VolumeDivergence[worldIdx] = 0.0;
#elif VOLUME_AIR_CELL_ZERO_DIVERGENCE
#if VOLUME_REST_AT_ZERO
_VolumeDivergence[worldIdx] = 0.0 - max(0.0, rho / rho0 - 1.0) * (_PressureFromDensity);
_VolumeDivergence[worldIdx] = 0.0 - max(0.0, rho / rho0 - 1.0) * (_TargetDensityFactor);
#else
_VolumeDivergence[worldIdx] = 0.0 - (rho / rho0 - 1.0) * (_PressureFromDensity);
_VolumeDivergence[worldIdx] = 0.0 - (rho / rho0 - 1.0) * (_TargetDensityFactor);
#endif
#else
_VolumeDivergence[worldIdx] = div;
@ -433,9 +433,9 @@ void KVolumeDivergence(
#endif
{
#if VOLUME_REST_AT_ZERO
_VolumeDivergence[worldIdx] = min(0.0, div - (rho / rho0 - 1.0) * (_PressureFromDensity));
_VolumeDivergence[worldIdx] = min(0.0, div - (rho / rho0 - 1.0) * (_TargetDensityFactor));
#else
_VolumeDivergence[worldIdx] = div - (rho / rho0 - 1.0) * (_PressureFromDensity);
_VolumeDivergence[worldIdx] = div - (rho / rho0 - 1.0) * (_TargetDensityFactor);
#endif
}
}
@ -466,9 +466,9 @@ void KVolumePressureEOS(
#endif
{
#if VOLUME_REST_AT_ZERO
_VolumePressure[worldIdx] = max(0.0, rho / rho0 - 1.0) * (_PressureFromDensity * VolumeWorldCellSize().x * VolumeWorldCellSize().x);;
_VolumePressure[worldIdx] = max(0.0, rho / rho0 - 1.0) * (_TargetDensityFactor * VolumeWorldCellSize().x * VolumeWorldCellSize().x);;
#else
_VolumePressure[worldIdx] = (rho / rho0 - 1.0) * (_PressureFromDensity * VolumeWorldCellSize().x * VolumeWorldCellSize().x);
_VolumePressure[worldIdx] = (rho / rho0 - 1.0) * (_TargetDensityFactor * VolumeWorldCellSize().x * VolumeWorldCellSize().x);
#endif
}
}

Просмотреть файл

@ -9,7 +9,7 @@ namespace Unity.DemoTeam.Hair
{
public struct SolverData
{
public SolverParams cbuffer;
public SolverCBuffer cbuffer;
public ComputeBuffer length;
public ComputeBuffer rootPosition;
@ -28,7 +28,7 @@ namespace Unity.DemoTeam.Hair
public struct VolumeData
{
public VolumeParams cbuffer;
public VolumeCBuffer cbuffer;
public RenderTexture accuDensity;
public RenderTexture accuVelocityX;
@ -55,7 +55,7 @@ namespace Unity.DemoTeam.Hair
}
[GenerateHLSL(needAccessors = false, generateCBuffer = true)]
public struct SolverParams
public struct SolverCBuffer
{
public Matrix4x4 _LocalToWorld;
public Matrix4x4 _LocalToWorldInvT;
@ -82,7 +82,7 @@ namespace Unity.DemoTeam.Hair
}
[GenerateHLSL(needAccessors = false, generateCBuffer = true)]
public struct VolumeParams
public struct VolumeCBuffer
{
public Vector3 _VolumeCells;
public uint __pad1;
@ -107,8 +107,7 @@ namespace Unity.DemoTeam.Hair
_VolumeWorldMax = Q
*/
public float _PressureFromVelocity;
public float _PressureFromDensity;
public float _TargetDensityFactor;
public int _BoundaryCapsuleCount;
public int _BoundarySphereCount;

Просмотреть файл

@ -4,9 +4,9 @@
#ifndef HAIRSIMDATA_CS_HLSL
#define HAIRSIMDATA_CS_HLSL
// Generated from Unity.DemoTeam.Hair.HairSim+SolverParams
// Generated from Unity.DemoTeam.Hair.HairSim+SolverCBuffer
// PackingRules = Exact
CBUFFER_START(SolverParams)
CBUFFER_START(SolverCBuffer)
float4x4 _LocalToWorld;
float4x4 _LocalToWorldInvT;
uint _StrandCount;
@ -27,17 +27,16 @@ CBUFFER_START(SolverParams)
float _BendingCurvature;
CBUFFER_END
// Generated from Unity.DemoTeam.Hair.HairSim+VolumeParams
// Generated from Unity.DemoTeam.Hair.HairSim+VolumeCBuffer
// PackingRules = Exact
CBUFFER_START(VolumeParams)
CBUFFER_START(VolumeCBuffer)
float3 _VolumeCells;
uint __pad1;
float3 _VolumeWorldMin;
uint __pad2;
float3 _VolumeWorldMax;
uint __pad3;
float _PressureFromVelocity;
float _PressureFromDensity;
float _TargetDensityFactor;
int _BoundaryCapsuleCount;
int _BoundarySphereCount;
int _BoundaryTorusCount;

Двоичные данные
Samples/HairSim_Demo/HairStyles/Groom.asset

Двоичный файл не отображается.

Просмотреть файл

@ -415,13 +415,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 88329051}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.8, z: -4}
m_LocalRotation: {x: -0, y: -0.9669057, z: -0, w: -0.255134}
m_LocalPosition: {x: -0.546, y: 0.469, z: 1.335}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_LocalEulerAnglesHint: {x: 0, y: -209.563, z: 0}
--- !u!114 &88329055
MonoBehaviour:
m_ObjectHideFlags: 0
@ -1038,45 +1038,6 @@ MonoBehaviour:
position: 65.778755
extent: {x: 0, y: 0, z: 0.2}
period: 1.5707963
--- !u!1 &382623229
GameObject:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 382623230}
- component: {fileID: 382623231}
m_Layer: 0
m_Name: Roots:0
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &382623230
Transform:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 382623229}
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_Children: []
m_Father: {fileID: 1558196476}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &382623231
MeshFilter:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 382623229}
m_Mesh: {fileID: -454972750445034546, guid: 1926e250fa4207b458e46ea322aa682e, type: 2}
--- !u!1 &412194662
GameObject:
m_ObjectHideFlags: 0
@ -1490,295 +1451,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 435694557}
m_LocalRotation: {x: 0.546275, y: 0.3696522, z: -0.75162214, w: -0.0022282538}
m_LocalPosition: {x: -0.685, y: 1.068, z: -3.007}
m_LocalScale: {x: 1, y: 1, z: 1}
m_LocalRotation: {x: 0.91893464, y: 0.1726537, z: 0.13751717, w: 0.32686207}
m_LocalPosition: {x: -1.203, y: 0.547, z: -1.985}
m_LocalScale: {x: 0.49978, y: 0.49978, z: 0.49978}
m_Children: []
m_Father: {fileID: 693103309}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 33.59, y: -81.03, z: -209.264}
--- !u!21 &583229243
Material:
serializedVersion: 6
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: HairMaterial
m_Shader: {fileID: -6465566751694194690, guid: 2fa8c2da3a58a3b49be5441117c20876, type: 3}
m_ShaderKeywords: ENABLE_DISTANCE ENABLE_DISTANCE_LRA HAIRSIMVERTEX_ENABLE_POSITION
LAYOUT_INTERLEAVED _DISABLE_SSR_TRANSPARENT
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: 2225
stringTagMap:
MotionVector: User
disabledShaderPasses:
- DistortionVectors
- RayTracingPrepass
- TransparentDepthPrepass
- TransparentDepthPostpass
- TransparentBackface
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AnisotropyMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BaseColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BentNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BentNormalMapOS:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _CoatMaskMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortionVectorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissiveColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _HeightMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _IridescenceMaskMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _IridescenceThicknessMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MaskMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _NormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _NormalMapOS:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecularColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SubsurfaceMaskMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _TangentMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _TangentMapOS:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ThicknessMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _TransmittanceColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- BOOLEAN_58B50922201C4296ADCD3604F1135012: 1
- BOOLEAN_69B014B20E2848539F679A29B317D5BD: 0
- Boolean_f904f09dbf504d518c3d225aff57a5df: 1
- Vector1_20a47d405fd34354a347258fdfeff805: 0
- Vector1_2e12ccf506a14853b660778272a7d4f1: 0
- Vector1_3c480a7375e14916a17cfbcc2326c547: 0
- Vector1_4fc16fc45ab340f28a9dc98fc33b1c20: 0.666
- Vector1_89223a4ebb3c4ef4a2f9ad915e0c716e: 1
- Vector1_918d42749deb40f889304b01221663a8: 0.666
- Vector1_db946e576f5a49df85d4ab11669cc45a: -0.234
- Vector1_fa9e7a8f18104e3b8d84eda52db629c8: 0.5
- _AORemapMax: 1
- _AORemapMin: 0
- _ATDistance: 1
- _AddPrecomputedVelocity: 0
- _AlbedoAffectEmissive: 0
- _AlphaCutoff: 0.453
- _AlphaCutoffEnable: 0
- _AlphaCutoffPostpass: 0.5
- _AlphaCutoffPrepass: 0.5
- _AlphaCutoffShadow: 0.5
- _AlphaDstBlend: 0
- _AlphaSrcBlend: 1
- _AlphaToMask: 0
- _AlphaToMaskInspectorValue: 0
- _Anisotropy: 0
- _BlendMode: 0
- _CoatMask: 0
- _CullMode: 2
- _CullModeForward: 2
- _Cutoff: 0.453
- _DepthOffsetEnable: 0
- _DetailAlbedoScale: 1
- _DetailNormalScale: 1
- _DetailSmoothnessScale: 1
- _DiffusionProfile: 0
- _DiffusionProfileHash: 2.969268
- _DisplacementLockObjectScale: 1
- _DisplacementLockTilingScale: 1
- _DisplacementMode: 0
- _DistortionBlendMode: 0
- _DistortionBlurBlendMode: 0
- _DistortionBlurDstBlend: 1
- _DistortionBlurRemapMax: 1
- _DistortionBlurRemapMin: 0
- _DistortionBlurScale: 1
- _DistortionBlurSrcBlend: 1
- _DistortionDepthTest: 1
- _DistortionDstBlend: 1
- _DistortionEnable: 0
- _DistortionScale: 1
- _DistortionSrcBlend: 1
- _DistortionVectorBias: -1
- _DistortionVectorScale: 2
- _DoubleSidedEnable: 0
- _DoubleSidedNormalMode: 2
- _DstBlend: 0
- _EmissiveColorMode: 1
- _EmissiveExposureWeight: 1
- _EmissiveIntensity: 1
- _EmissiveIntensityUnit: 0
- _EnableBlendModePreserveSpecularLighting: 1
- _EnableFogOnTransparent: 1
- _EnableGeometricSpecularAA: 0
- _EnergyConservingSpecularColor: 1
- _HeightAmplitude: 0.02
- _HeightCenter: 0.5
- _HeightMapParametrization: 0
- _HeightMax: 1
- _HeightMin: -1
- _HeightOffset: 0
- _HeightPoMAmplitude: 2
- _HeightTessAmplitude: 2
- _HeightTessCenter: 0.5
- _InvTilingScale: 1
- _Ior: 1.5
- _IridescenceMask: 1
- _IridescenceThickness: 1
- _LinkDetailsWithBase: 1
- _MaterialID: 1
- _Metallic: 0.227
- _NormalMapSpace: 0
- _NormalScale: 2.64
- _OpaqueCullMode: 2
- _PPDLodThreshold: 5
- _PPDMaxSamples: 15
- _PPDMinSamples: 5
- _PPDPrimitiveLength: 1
- _PPDPrimitiveWidth: 1
- _RayTracing: 0
- _ReceivesSSR: 1
- _ReceivesSSRTransparent: 0
- _RefractionModel: 0
- _RenderQueueType: 1
- _RequireSplitLighting: 0
- _SSRefractionProjectionModel: 0
- _Smoothness: 0.329
- _SmoothnessRemapMax: 1
- _SmoothnessRemapMin: 0
- _SpecularAAScreenSpaceVariance: 0.1
- _SpecularAAThreshold: 0.2
- _SpecularOcclusionMode: 1
- _SrcBlend: 1
- _StencilRef: 0
- _StencilRefDepth: 8
- _StencilRefDistortionVec: 4
- _StencilRefGBuffer: 10
- _StencilRefMV: 40
- _StencilWriteMask: 6
- _StencilWriteMaskDepth: 8
- _StencilWriteMaskDistortionVec: 4
- _StencilWriteMaskGBuffer: 14
- _StencilWriteMaskMV: 40
- _SubsurfaceMask: 1
- _SupportDecals: 1
- _SurfaceType: 0
- _TexWorldScale: 1
- _TexWorldScaleEmissive: 1
- _Thickness: 1
- _TransmissionEnable: 1
- _TransparentBackfaceEnable: 0
- _TransparentCullMode: 2
- _TransparentDepthPostpassEnable: 0
- _TransparentDepthPrepassEnable: 0
- _TransparentSortPriority: 0
- _TransparentWritingMotionVec: 0
- _TransparentZWrite: 0
- _UVBase: 0
- _UVDetail: 0
- _UVEmissive: 0
- _UseEmissiveIntensity: 0
- _UseShadowThreshold: 0
- _ZTestDepthEqualForOpaque: 3
- _ZTestGBuffer: 4
- _ZTestModeDistortion: 4
- _ZTestTransparent: 4
- _ZWrite: 1
m_Colors:
- Color_176191224d9a4233962725cd1ff09079: {r: 1, g: 0.70980394, b: 0.40000004, a: 0}
- Color_62c64135deeb4c0f8f8dd2dd4d258618: {r: 0.5254902, g: 0.34509805, b: 0.33333334, a: 1}
- Color_808fa7985ea04aae8fd9e29e269a6cbe: {r: 1, g: 0.71, b: 0.39999998, a: 0}
- Color_ef1f857a65f143afae0a6362fd9a650e: {r: 1, g: 0.70980394, b: 0.40000004, a: 1}
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _DiffusionProfileAsset: {r: 0.001549049, g: 6.537953e-17, b: 78.9151, a: 0.00037284626}
- _DoubleSidedConstants: {r: 1, g: 1, b: 1, a: 0}
- _EmissionColor: {r: 1, g: 1, b: 1, a: 1}
- _EmissiveColor: {r: 0, g: 0, b: 0, a: 1}
- _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1}
- _InvPrimScale: {r: 1, g: 1, b: 0, a: 0}
- _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0}
- _SpecularColor: {r: 1, g: 1, b: 1, a: 1}
- _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0}
- _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1}
- _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0}
- _UVMappingMask: {r: 1, g: 0, b: 0, a: 0}
- _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []
m_LocalEulerAnglesHint: {x: 33.59, y: -206.033, z: -209.264}
--- !u!1 &661927249
GameObject:
m_ObjectHideFlags: 0
@ -2195,6 +1874,288 @@ MonoBehaviour:
m_EditorClassIdentifier:
type: 1
outerRadius: 0
--- !u!21 &965861407
Material:
serializedVersion: 6
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: HairMaterial
m_Shader: {fileID: -6465566751694194690, guid: 2fa8c2da3a58a3b49be5441117c20876, type: 3}
m_ShaderKeywords: ENABLE_DISTANCE ENABLE_DISTANCE_LRA HAIRSIMVERTEX_ENABLE_POSITION
LAYOUT_INTERLEAVED _DISABLE_SSR_TRANSPARENT
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: 2225
stringTagMap:
MotionVector: User
disabledShaderPasses:
- DistortionVectors
- RayTracingPrepass
- TransparentDepthPrepass
- TransparentDepthPostpass
- TransparentBackface
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AnisotropyMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BaseColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BentNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BentNormalMapOS:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _CoatMaskMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortionVectorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissiveColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _HeightMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _IridescenceMaskMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _IridescenceThicknessMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MaskMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _NormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _NormalMapOS:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecularColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SubsurfaceMaskMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _TangentMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _TangentMapOS:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ThicknessMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _TransmittanceColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- BOOLEAN_58B50922201C4296ADCD3604F1135012: 1
- BOOLEAN_69B014B20E2848539F679A29B317D5BD: 0
- Boolean_f904f09dbf504d518c3d225aff57a5df: 1
- Vector1_20a47d405fd34354a347258fdfeff805: 0
- Vector1_2e12ccf506a14853b660778272a7d4f1: 0
- Vector1_3c480a7375e14916a17cfbcc2326c547: 0
- Vector1_4fc16fc45ab340f28a9dc98fc33b1c20: 0.666
- Vector1_89223a4ebb3c4ef4a2f9ad915e0c716e: 1
- Vector1_918d42749deb40f889304b01221663a8: 0.666
- Vector1_db946e576f5a49df85d4ab11669cc45a: -0.234
- Vector1_fa9e7a8f18104e3b8d84eda52db629c8: 0.5
- _AORemapMax: 1
- _AORemapMin: 0
- _ATDistance: 1
- _AddPrecomputedVelocity: 0
- _AlbedoAffectEmissive: 0
- _AlphaCutoff: 0.453
- _AlphaCutoffEnable: 0
- _AlphaCutoffPostpass: 0.5
- _AlphaCutoffPrepass: 0.5
- _AlphaCutoffShadow: 0.5
- _AlphaDstBlend: 0
- _AlphaSrcBlend: 1
- _AlphaToMask: 0
- _AlphaToMaskInspectorValue: 0
- _Anisotropy: 0
- _BlendMode: 0
- _CoatMask: 0
- _CullMode: 2
- _CullModeForward: 2
- _Cutoff: 0.453
- _DepthOffsetEnable: 0
- _DetailAlbedoScale: 1
- _DetailNormalScale: 1
- _DetailSmoothnessScale: 1
- _DiffusionProfile: 0
- _DiffusionProfileHash: 2.969268
- _DisplacementLockObjectScale: 1
- _DisplacementLockTilingScale: 1
- _DisplacementMode: 0
- _DistortionBlendMode: 0
- _DistortionBlurBlendMode: 0
- _DistortionBlurDstBlend: 1
- _DistortionBlurRemapMax: 1
- _DistortionBlurRemapMin: 0
- _DistortionBlurScale: 1
- _DistortionBlurSrcBlend: 1
- _DistortionDepthTest: 1
- _DistortionDstBlend: 1
- _DistortionEnable: 0
- _DistortionScale: 1
- _DistortionSrcBlend: 1
- _DistortionVectorBias: -1
- _DistortionVectorScale: 2
- _DoubleSidedEnable: 0
- _DoubleSidedNormalMode: 2
- _DstBlend: 0
- _EmissiveColorMode: 1
- _EmissiveExposureWeight: 1
- _EmissiveIntensity: 1
- _EmissiveIntensityUnit: 0
- _EnableBlendModePreserveSpecularLighting: 1
- _EnableFogOnTransparent: 1
- _EnableGeometricSpecularAA: 0
- _EnergyConservingSpecularColor: 1
- _HeightAmplitude: 0.02
- _HeightCenter: 0.5
- _HeightMapParametrization: 0
- _HeightMax: 1
- _HeightMin: -1
- _HeightOffset: 0
- _HeightPoMAmplitude: 2
- _HeightTessAmplitude: 2
- _HeightTessCenter: 0.5
- _InvTilingScale: 1
- _Ior: 1.5
- _IridescenceMask: 1
- _IridescenceThickness: 1
- _LinkDetailsWithBase: 1
- _MaterialID: 1
- _Metallic: 0.227
- _NormalMapSpace: 0
- _NormalScale: 2.64
- _OpaqueCullMode: 2
- _PPDLodThreshold: 5
- _PPDMaxSamples: 15
- _PPDMinSamples: 5
- _PPDPrimitiveLength: 1
- _PPDPrimitiveWidth: 1
- _RayTracing: 0
- _ReceivesSSR: 1
- _ReceivesSSRTransparent: 0
- _RefractionModel: 0
- _RenderQueueType: 1
- _RequireSplitLighting: 0
- _SSRefractionProjectionModel: 0
- _Smoothness: 0.329
- _SmoothnessRemapMax: 1
- _SmoothnessRemapMin: 0
- _SpecularAAScreenSpaceVariance: 0.1
- _SpecularAAThreshold: 0.2
- _SpecularOcclusionMode: 1
- _SrcBlend: 1
- _StencilRef: 0
- _StencilRefDepth: 8
- _StencilRefDistortionVec: 4
- _StencilRefGBuffer: 10
- _StencilRefMV: 40
- _StencilWriteMask: 6
- _StencilWriteMaskDepth: 8
- _StencilWriteMaskDistortionVec: 4
- _StencilWriteMaskGBuffer: 14
- _StencilWriteMaskMV: 40
- _SubsurfaceMask: 1
- _SupportDecals: 1
- _SurfaceType: 0
- _TexWorldScale: 1
- _TexWorldScaleEmissive: 1
- _Thickness: 1
- _TransmissionEnable: 1
- _TransparentBackfaceEnable: 0
- _TransparentCullMode: 2
- _TransparentDepthPostpassEnable: 0
- _TransparentDepthPrepassEnable: 0
- _TransparentSortPriority: 0
- _TransparentWritingMotionVec: 0
- _TransparentZWrite: 0
- _UVBase: 0
- _UVDetail: 0
- _UVEmissive: 0
- _UseEmissiveIntensity: 0
- _UseShadowThreshold: 0
- _ZTestDepthEqualForOpaque: 3
- _ZTestGBuffer: 4
- _ZTestModeDistortion: 4
- _ZTestTransparent: 4
- _ZWrite: 1
m_Colors:
- Color_176191224d9a4233962725cd1ff09079: {r: 1, g: 0.70980394, b: 0.40000004, a: 0}
- Color_62c64135deeb4c0f8f8dd2dd4d258618: {r: 0.5254902, g: 0.34509805, b: 0.33333334, a: 1}
- Color_808fa7985ea04aae8fd9e29e269a6cbe: {r: 1, g: 0.71, b: 0.39999998, a: 0}
- Color_ef1f857a65f143afae0a6362fd9a650e: {r: 1, g: 0.70980394, b: 0.40000004, a: 1}
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _DiffusionProfileAsset: {r: 0.001549049, g: 6.537953e-17, b: 78.9151, a: 0.00037284626}
- _DoubleSidedConstants: {r: 1, g: 1, b: 1, a: 0}
- _EmissionColor: {r: 1, g: 1, b: 1, a: 1}
- _EmissiveColor: {r: 0, g: 0, b: 0, a: 1}
- _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1}
- _InvPrimScale: {r: 1, g: 1, b: 0, a: 0}
- _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0}
- _SpecularColor: {r: 1, g: 1, b: 1, a: 1}
- _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0}
- _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1}
- _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0}
- _UVMappingMask: {r: 1, g: 0, b: 0, a: 0}
- _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []
--- !u!1 &1011175219
GameObject:
m_ObjectHideFlags: 0
@ -2680,7 +2641,7 @@ Transform:
m_Father: {fileID: 693103309}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: -488.577, z: 0}
--- !u!1 &1558196475
--- !u!1 &1426011974
GameObject:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
@ -2688,7 +2649,46 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1558196476}
- component: {fileID: 1426011975}
- component: {fileID: 1426011976}
m_Layer: 0
m_Name: Roots:0
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1426011975
Transform:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1426011974}
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_Children: []
m_Father: {fileID: 1478803479}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &1426011976
MeshFilter:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1426011974}
m_Mesh: {fileID: -7005794540788253560, guid: 1926e250fa4207b458e46ea322aa682e, type: 2}
--- !u!1 &1478803478
GameObject:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1478803479}
m_Layer: 0
m_Name: Group:0
m_TagString: Untagged
@ -2696,22 +2696,103 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1558196476
--- !u!4 &1478803479
Transform:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1558196475}
m_GameObject: {fileID: 1478803478}
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_Children:
- {fileID: 2038281359}
- {fileID: 382623230}
- {fileID: 1593862055}
- {fileID: 1426011975}
m_Father: {fileID: 2037350749}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1593862053
GameObject:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1593862055}
- component: {fileID: 1593862056}
- component: {fileID: 1593862054}
m_Layer: 0
m_Name: Lines:0
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!23 &1593862054
MeshRenderer:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1593862053}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 257
m_RendererPriority: 0
m_Materials:
- {fileID: 965861407}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!4 &1593862055
Transform:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1593862053}
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_Children: []
m_Father: {fileID: 1478803479}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &1593862056
MeshFilter:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1593862053}
m_Mesh: {fileID: -9484199191433736, guid: 1926e250fa4207b458e46ea322aa682e, type: 2}
--- !u!1 &1851342448
GameObject:
m_ObjectHideFlags: 0
@ -2998,30 +3079,29 @@ MonoBehaviour:
groomAsset: {fileID: 11400000, guid: 1926e250fa4207b458e46ea322aa682e, type: 2}
groomAssetQuickEdit: 0
groomContainers:
- group: {fileID: 1558196475}
rootFilter: {fileID: 382623231}
lineFilter: {fileID: 2038281360}
lineRenderer: {fileID: 2038281358}
groomContainersChecksum: 9ad95f84528cc2d1e9359664c31a9380
- group: {fileID: 1478803478}
rootFilter: {fileID: 1426011976}
lineFilter: {fileID: 1593862056}
lineRenderer: {fileID: 1593862054}
groomContainersChecksum: c0feb65c1c1e14cd277f410c90cdc406
settingsRoots:
rootsTarget: {fileID: 0}
rootsAttached: 0
settingsStrands:
strandScaling: 0
strandDiameter: 0
strandMaterial: {fileID: 0}
strandRenderer: 0
strandScaling: 1
simulate: 0
solverSettings:
strandDiameter: 16.7
strandParticleContrib: 2.15
strandDiameter: 0.1
strandParticleContrib: 0
method: 1
iterations: 15
stiffness: 1
kSOR: 1
gravity: 1
cellPressure: 1
cellVelocity: 0.05
damping: 0
volumeResponse: 1
volumeFriction: 0.05
gravity: 0.716
distance: 1
distanceLRA: 1
distanceFTL: 0
@ -3030,16 +3110,17 @@ MonoBehaviour:
boundaryFriction: 0.5
curvature: 0
curvatureCompare: 0
curvatureCompareTo: 0
curvatureCompareTo: 0.626
volumeSettings:
volumeResolution: 32
volumeSplatMethod: 2
pressureIterations: 10
weighIncompressibleFlow: 1
weighTargetDensity: 1
supportContraction: 1
volumeWorldCenter: {x: 0.21901168, y: 0.577, z: -0.19486868}
volumeWorldExtent: {x: 0.7999063, y: 0.7999063, z: 0.7999063}
volumeWorldCenter: {x: 0.28298324, y: 0.577, z: -0.116787575}
volumeWorldExtent: {x: 1.3685832, y: 1.3685832, z: 1.3685832}
volumeSplatMethod: 1
volumeGridResolution: 48
pressureIterations: 42
pressureAllowsAttraction: 1
targetDensity: 0
targetDensityFactor: 1
boundariesFromPhysics: 1
debugSettings:
drawParticles: 0
drawStrands: 0
@ -3051,7 +3132,7 @@ MonoBehaviour:
drawSliceOffsetX: 0.843
drawSliceOffsetY: 0.254
drawSliceOffsetZ: 0.496
drawSliceDivider: 0.47
drawSliceDivider: 0
boundaries: []
--- !u!4 &2037350749
Transform:
@ -3060,95 +3141,14 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2037350747}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.219, y: 0.577, z: -0.195}
m_LocalScale: {x: 0.1, y: 1, z: 0.1}
m_LocalRotation: {x: -0, y: -0.59954786, z: -0, w: 0.8003389}
m_LocalPosition: {x: 0.285, y: 0.577, z: -0.1175}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1558196476}
- {fileID: 1478803479}
m_Father: {fileID: 0}
m_RootOrder: 10
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2038281357
GameObject:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2038281359}
- component: {fileID: 2038281360}
- component: {fileID: 2038281358}
m_Layer: 0
m_Name: Lines:0
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!23 &2038281358
MeshRenderer:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2038281357}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 583229243}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!4 &2038281359
Transform:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2038281357}
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_Children: []
m_Father: {fileID: 1558196476}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &2038281360
MeshFilter:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2038281357}
m_Mesh: {fileID: -4650721940403172821, guid: 1926e250fa4207b458e46ea322aa682e, type: 2}
m_LocalEulerAnglesHint: {x: 0, y: -73.675, z: 0}
--- !u!1 &2046897697
GameObject:
m_ObjectHideFlags: 0