您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
17161 行
999 KiB
17161 行
999 KiB
%YAML 1.1
|
|
%TAG !u! tag:unity3d.com,2011:
|
|
--- !u!114 &114340500867371532
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 1
|
|
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: d01270efd3285ea4a9d6c555cb0a8027, type: 3}
|
|
m_Name: VFXUI
|
|
m_EditorClassIdentifier:
|
|
groupInfos:
|
|
- title: Nucleus Shake
|
|
position:
|
|
serializedVersion: 2
|
|
x: -159
|
|
y: -1362
|
|
width: 947
|
|
height: 388
|
|
contents:
|
|
- model: {fileID: 8926484042661623227}
|
|
id: 0
|
|
isStickyNote: 0
|
|
- model: {fileID: 8926484042661623213}
|
|
id: 0
|
|
isStickyNote: 0
|
|
- model: {fileID: 8926484042661620430}
|
|
id: 40
|
|
isStickyNote: 0
|
|
- model: {fileID: 8926484042661623234}
|
|
id: 0
|
|
isStickyNote: 0
|
|
- model: {fileID: 8926484042661623480}
|
|
id: 0
|
|
isStickyNote: 0
|
|
- model: {fileID: 8926484042661620428}
|
|
id: 51
|
|
isStickyNote: 0
|
|
- model: {fileID: 8926484042661623484}
|
|
id: 0
|
|
isStickyNote: 0
|
|
- title: Nucleus Scale
|
|
position:
|
|
serializedVersion: 2
|
|
x: -240
|
|
y: -872
|
|
width: 1025
|
|
height: 462
|
|
contents:
|
|
- model: {fileID: 8926484042661620430}
|
|
id: 41
|
|
isStickyNote: 0
|
|
- model: {fileID: 8926484042661623370}
|
|
id: 0
|
|
isStickyNote: 0
|
|
- model: {fileID: 8926484042661623368}
|
|
id: 0
|
|
isStickyNote: 0
|
|
- model: {fileID: 8926484042661623353}
|
|
id: 0
|
|
isStickyNote: 0
|
|
- model: {fileID: 8926484042661623357}
|
|
id: 0
|
|
isStickyNote: 0
|
|
- model: {fileID: 8926484042661623374}
|
|
id: 0
|
|
isStickyNote: 0
|
|
- model: {fileID: 8926484042661623378}
|
|
id: 0
|
|
isStickyNote: 0
|
|
stickyNoteInfos:
|
|
- title: 'Power Down : Core Collapse'
|
|
position:
|
|
serializedVersion: 2
|
|
x: 2460
|
|
y: -2063
|
|
width: 921
|
|
height: 259
|
|
contents: '
|
|
|
|
When powering down, the core collapses.
|
|
|
|
This Sub System
|
|
contains all the visual elements of the Core collapse'
|
|
theme: Classic
|
|
textSize: Large
|
|
- title: 'Take Hit: Electric Arks'
|
|
position:
|
|
serializedVersion: 2
|
|
x: 2186
|
|
y: -805
|
|
width: 778
|
|
height: 259
|
|
contents: '
|
|
|
|
Every Hit, in addition to the shaking of the Core, an event
|
|
is sent to spawn electric arks and a flash on the Core '
|
|
theme: Classic
|
|
textSize: Large
|
|
- title: 'Take Hit/Power: Core Shake'
|
|
position:
|
|
serializedVersion: 2
|
|
x: -1245
|
|
y: -1078
|
|
width: 892
|
|
height: 349
|
|
contents: '
|
|
|
|
Every Hit, the Timeline animates the Hit Float property to
|
|
animate a shaking of the core. The Hit shake is also composed with the Power
|
|
value of the ship Core that increases the shaking as the energy depletes.'
|
|
theme: Classic
|
|
textSize: Large
|
|
systemInfos:
|
|
- title: Rings
|
|
position:
|
|
serializedVersion: 2
|
|
x: 0
|
|
y: 0
|
|
width: 0
|
|
height: 0
|
|
contexts:
|
|
- {fileID: 0}
|
|
- title: Ring Sparks
|
|
position:
|
|
serializedVersion: 2
|
|
x: 0
|
|
y: 0
|
|
width: 0
|
|
height: 0
|
|
contexts:
|
|
- {fileID: 0}
|
|
- title: Halo
|
|
position:
|
|
serializedVersion: 2
|
|
x: 0
|
|
y: 0
|
|
width: 0
|
|
height: 0
|
|
contexts:
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- title: Black Core
|
|
position:
|
|
serializedVersion: 2
|
|
x: 0
|
|
y: 0
|
|
width: 0
|
|
height: 0
|
|
contexts:
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- title: Light Rays
|
|
position:
|
|
serializedVersion: 2
|
|
x: 0
|
|
y: 0
|
|
width: 0
|
|
height: 0
|
|
contexts:
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- title: Power Down Flash
|
|
position:
|
|
serializedVersion: 2
|
|
x: 0
|
|
y: 0
|
|
width: 0
|
|
height: 0
|
|
contexts:
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- title: Power Down Sparks
|
|
position:
|
|
serializedVersion: 2
|
|
x: 0
|
|
y: 0
|
|
width: 0
|
|
height: 0
|
|
contexts:
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- title: Core Black Swarm Ring
|
|
position:
|
|
serializedVersion: 2
|
|
x: 0
|
|
y: 0
|
|
width: 0
|
|
height: 0
|
|
contexts:
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- title: Electric Arks
|
|
position:
|
|
serializedVersion: 2
|
|
x: 0
|
|
y: 0
|
|
width: 0
|
|
height: 0
|
|
contexts:
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- title: Core Inner Glow
|
|
position:
|
|
serializedVersion: 2
|
|
x: 0
|
|
y: 0
|
|
width: 0
|
|
height: 0
|
|
contexts:
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- title: Hit Flash
|
|
position:
|
|
serializedVersion: 2
|
|
x: 0
|
|
y: 0
|
|
width: 0
|
|
height: 0
|
|
contexts:
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
- {fileID: 0}
|
|
categories:
|
|
- name: Public Parameters
|
|
collapsed: 0
|
|
- name: Electricity
|
|
collapsed: 1
|
|
uiBounds:
|
|
serializedVersion: 2
|
|
x: -1245
|
|
y: -2063
|
|
width: 4626
|
|
height: 1783
|
|
--- !u!114 &114350483966674976
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 1
|
|
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: 7d4c867f6b72b714dbb5fd1780afe208, type: 3}
|
|
m_Name: ShipCore
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children:
|
|
- {fileID: 8926484042661620398}
|
|
- {fileID: 8926484042661620428}
|
|
- {fileID: 8926484042661620430}
|
|
- {fileID: 8926484042661620464}
|
|
- {fileID: 8926484042661620470}
|
|
- {fileID: 8926484042661620476}
|
|
- {fileID: 8926484042661623213}
|
|
- {fileID: 8926484042661623227}
|
|
- {fileID: 8926484042661623234}
|
|
- {fileID: 8926484042661623353}
|
|
- {fileID: 8926484042661623357}
|
|
- {fileID: 8926484042661623368}
|
|
- {fileID: 8926484042661623370}
|
|
- {fileID: 8926484042661623374}
|
|
- {fileID: 8926484042661623378}
|
|
- {fileID: 8926484042661623480}
|
|
- {fileID: 8926484042661623484}
|
|
- {fileID: 8926484042661623624}
|
|
- {fileID: 8926484042661623631}
|
|
- {fileID: 8926484042661623692}
|
|
- {fileID: 8926484042661623732}
|
|
- {fileID: 8926484042661623760}
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_UIInfos: {fileID: 114340500867371532}
|
|
m_ParameterInfo:
|
|
- name: Public Parameters
|
|
path:
|
|
tooltip:
|
|
sheetType:
|
|
realType:
|
|
defaultValue:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
min: -Infinity
|
|
max: Infinity
|
|
descendantCount: 0
|
|
- name: Hit
|
|
path: Hit
|
|
tooltip: Core intensity when hit (0 is calm, 1 is excited)
|
|
sheetType: m_Float
|
|
realType: Single
|
|
defaultValue:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
min: 0
|
|
max: 1
|
|
descendantCount: 0
|
|
- name: Power
|
|
path: Power
|
|
tooltip: Core power (1 is full, 0 is depleted)
|
|
sheetType: m_Float
|
|
realType: Single
|
|
defaultValue:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 1
|
|
min: 0
|
|
max: 1
|
|
descendantCount: 0
|
|
m_GraphVersion: 4
|
|
m_saved: 1
|
|
m_SubgraphDependencies:
|
|
- {fileID: 8926484042661614526, guid: 049cc134d7f1f16409be8d1a6c6ed112, type: 3}
|
|
- {fileID: 8926484042661614526, guid: e18ff24922338944aac6f6eb1ca45c56, type: 3}
|
|
- {fileID: 8926484042661614526, guid: d19bed95ca138a74882c90863f5bef14, type: 3}
|
|
- {fileID: 5371698745253816930, guid: 031c735315b2a38449661dc37bb95135, type: 3}
|
|
m_CategoryPath:
|
|
--- !u!2058629511 &8926484042661614527
|
|
VisualEffectResource:
|
|
m_ObjectHideFlags: 0
|
|
m_CorrespondingSourceObject: {fileID: 0}
|
|
m_PrefabInstance: {fileID: 0}
|
|
m_PrefabAsset: {fileID: 0}
|
|
m_Name: ShipCore
|
|
m_Graph: {fileID: 114350483966674976}
|
|
m_ShaderSources:
|
|
- compute: 1
|
|
name: '[System 1]Initialize Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_SEED_CURRENT
|
|
1\n#define VFX_USE_POSITION_CURRENT 1\n#define VFX_USE_DIRECTION_CURRENT 1\n#define
|
|
VFX_USE_SIZE_CURRENT 1\n#define VFX_USE_VELOCITY_CURRENT 1\n#define VFX_USE_AGE_CURRENT
|
|
1\n#define VFX_USE_ALIVE_CURRENT 1\n#define VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\n\nstruct
|
|
Attributes\n{\n float lifetime;\n uint seed;\n float3 position;\n
|
|
float3 direction;\n float size;\n float3 velocity;\n float age;\n
|
|
bool alive;\n};\n\nstruct SourceAttributes\n{\n};\n\n\n\r\n\r\n#define USE_DEAD_LIST
|
|
(VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer attributeBuffer;\r\nByteAddressBuffer
|
|
sourceAttributeBuffer;\r\n\r\nCBUFFER_START(initParams)\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
uint nbSpawned;\t\t\t\t\t// Numbers of particle spawned\r\n uint spawnIndex;\t\t\t\t//
|
|
Index of the first particle spawned\r\n uint dispatchWidth;\r\n#else\r\n
|
|
uint offsetInAdditionalOutput;\r\n\tuint nbMax;\r\n#endif\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#if
|
|
USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListIn;\r\nByteAddressBuffer
|
|
deadListCount; // This is bad to use a SRV to fetch deadList count but Unity
|
|
API currently prevent from copying to CB\r\n#endif\r\n\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\nStructuredBuffer<uint>
|
|
eventList;\r\nByteAddressBuffer inputAdditional;\r\n#endif\r\n\r\n#if HAS_STRIPS\r\nRWBuffer<uint>
|
|
stripDataBuffer;\r\n#endif\r\n\r\n#include \"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
SetAttribute_F01429A3(inout float lifetime, inout uint seed, float A, float
|
|
B) /*attribute:lifetime Composition:Overwrite Source:Slot Random:Uniform channels:XYZ
|
|
*/\n{\n lifetime = lerp(A,B,RAND);\n}\nvoid PositionSphere_0(inout float3
|
|
position, inout uint seed, inout float3 direction, float3 ArcSphere_sphere_center,
|
|
float ArcSphere_sphere_radius, float ArcSphere_arc, float volumeFactor) /*positionMode:Surface
|
|
spawnMode:Random */\n{\n float cosPhi = 2.0f * RAND - 1.0f;float theta =
|
|
ArcSphere_arc * RAND;\n float rNorm = pow(volumeFactor + (1 - volumeFactor)
|
|
* RAND, 1.0f / 3.0f);\n \n float2 sincosTheta;\n sincos(theta, sincosTheta.x,
|
|
sincosTheta.y);\n sincosTheta *= sqrt(1.0f - cosPhi * cosPhi);\n \n
|
|
direction = float3(sincosTheta, cosPhi);\n position += direction * (rNorm
|
|
* ArcSphere_sphere_radius) + ArcSphere_sphere_center;\n \n}\nvoid SetAttribute_3278B543(inout
|
|
float size, inout uint seed, float A, float B) /*attribute:size Composition:Overwrite
|
|
Source:Slot Random:Uniform channels:X */\n{\n size = lerp(A,B,RAND);\n}\nvoid
|
|
VelocitySpherical_18C(inout float3 velocity, inout float3 direction, inout
|
|
uint seed, float3 position, float3 center, float MinSpeed, float MaxSpeed,
|
|
float DirectionBlend) /*composition:Add speedMode:Random */\n{\n float3
|
|
sphereDirection = VFXSafeNormalize(position - center);\n float speed = lerp(MinSpeed,MaxSpeed,RAND);\n
|
|
direction = VFXSafeNormalize(lerp(direction, sphereDirection, DirectionBlend));\n
|
|
velocity += direction * speed;\n}\n\n\r\n\r\n// Due to a bug in HLSL compiler,
|
|
disable spurious \"unitialized variable\" due to mid function return statement\r\n#pragma
|
|
warning(push)\r\n#pragma warning(disable : 4000)\r\n#if HAS_STRIPS\r\nbool
|
|
GetParticleIndex(inout uint particleIndex, uint stripIndex)\r\n{\r\n\tuint
|
|
relativeIndex;\r\n\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX, stripIndex),
|
|
1, relativeIndex);\r\n\tif (relativeIndex >= PARTICLE_PER_STRIP_COUNT) // strip
|
|
is full\r\n\t{\r\n\t\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX, stripIndex),
|
|
-1); // Remove previous increment\r\n\t\treturn false;\r\n\t}\r\n\r\n\tparticleIndex
|
|
= stripIndex * PARTICLE_PER_STRIP_COUNT + ((STRIP_DATA(STRIP_FIRST_INDEX, stripIndex)
|
|
+ relativeIndex) % PARTICLE_PER_STRIP_COUNT);\r\n return true;\r\n}\r\n#endif\r\n#pragma
|
|
warning(pop)\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n
|
|
uint id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP;\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
id += groupId.y * dispatchWidth * NB_THREADS_PER_GROUP;\r\n#endif\r\n\r\n#if
|
|
VFX_USE_SPAWNER_FROM_GPU\r\n uint maxThreadId = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 0) << 2);\r\n uint currentSpawnIndex = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 1) << 2) - maxThreadId;\r\n#else\r\n uint maxThreadId = nbSpawned;\r\n
|
|
uint currentSpawnIndex = spawnIndex;\r\n#endif\r\n\r\n#if USE_DEAD_LIST\r\n
|
|
maxThreadId = min(maxThreadId, deadListCount.Load(0x0));\r\n#elif VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
maxThreadId = min(maxThreadId, nbMax); //otherwise, nbSpawned already clamped
|
|
on CPU\r\n#endif\r\n\r\n if (id < maxThreadId)\r\n {\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
int sourceIndex = eventList[id];\r\n#endif\r\n\t\tuint particleIndex = id +
|
|
currentSpawnIndex;\r\n\t\t\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n int
|
|
sourceIndex = 0;\n /*//Loop with 1 iteration generate a wrong IL Assembly
|
|
(and actually, useless code)\n uint currentSumSpawnCount = 0u;\n
|
|
for (sourceIndex=0; sourceIndex<1; sourceIndex++)\n {\n currentSumSpawnCount
|
|
+= uint(asfloat(sourceAttributeBuffer.Load((sourceIndex * 0x1 + 0x0) << 2)));\n
|
|
if (id < currentSumSpawnCount)\n {\n break;\n
|
|
}\n }\n */\n \n\r\n#endif\r\n\r\n\t\tAttributes attributes
|
|
= (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes = (SourceAttributes)0;\r\n\t\t\r\n
|
|
attributes.lifetime = (float)1;\n attributes.seed = (uint)0;\n
|
|
attributes.position = float3(0, 0, 0);\n attributes.direction = float3(0,
|
|
0, 1);\n attributes.size = (float)0.100000001;\n attributes.velocity
|
|
= float3(0, 0, 0);\n attributes.age = (float)0;\n attributes.alive
|
|
= (bool)true;\n \n\r\n#if VFX_USE_PARTICLEID_CURRENT\r\n attributes.particleId
|
|
= particleIndex;\r\n#endif\r\n#if VFX_USE_SEED_CURRENT\r\n attributes.seed
|
|
= WangHash(particleIndex ^ systemSeed);\r\n#endif\r\n#if VFX_USE_SPAWNINDEX_CURRENT\r\n
|
|
attributes.spawnIndex = id;\r\n#endif\r\n#if HAS_STRIPS\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n\t\t\r\n#else\r\n
|
|
uint stripIndex = sourceIndex;\r\n#endif\r\n\t\tstripIndex = min(stripIndex,
|
|
STRIP_COUNT);\r\n\r\n if (!GetParticleIndex(particleIndex, stripIndex))\r\n
|
|
return;\r\n\r\n const StripData stripData = GetStripDataFromStripIndex(stripIndex,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n\t\tInitStripAttributes(particleIndex, attributes,
|
|
stripData);\r\n\t\t// TODO Change seed to be sure we're deterministic on random
|
|
with strip\r\n#endif\r\n \r\n {\n SetAttribute_F01429A3(
|
|
/*inout */attributes.lifetime, /*inout */attributes.seed, (float)0.5, (float)11);\n
|
|
}\n {\n PositionSphere_0( /*inout */attributes.position,
|
|
/*inout */attributes.seed, /*inout */attributes.direction, float3(0, 0, 0),
|
|
(float)3.5, (float)6.28318548, (float)1);\n }\n {\n
|
|
SetAttribute_3278B543( /*inout */attributes.size, /*inout */attributes.seed,
|
|
(float)0.0500000007, (float)0.100000001);\n }\n {\n
|
|
VelocitySpherical_18C( /*inout */attributes.velocity, /*inout */attributes.direction,
|
|
/*inout */attributes.seed, attributes.position, float3(0, 0, 0), (float)12,
|
|
(float)128, (float)0.5);\n }\n \n\r\n\t\t\r\n#if VFX_USE_ALIVE_CURRENT\r\n
|
|
if (attributes.alive)\r\n#endif \r\n {\r\n#if USE_DEAD_LIST\r\n\t
|
|
uint deadIndex = deadListIn.DecrementCounter();\r\n uint index =
|
|
deadListIn[deadIndex];\r\n#else\r\n uint index = particleIndex;\r\n#endif\r\n
|
|
attributeBuffer.Store((index * 0x2 + 0x0) << 2,asuint(attributes.lifetime));\n
|
|
attributeBuffer.Store3((index * 0x8 + 0x1F400) << 2,asuint(attributes.position));\n
|
|
attributeBuffer.Store((index * 0x2 + 0x1) << 2,asuint(attributes.size));\n
|
|
attributeBuffer.Store3((index * 0x8 + 0x1F404) << 2,asuint(attributes.velocity));\n
|
|
attributeBuffer.Store((index * 0x8 + 0x1F403) << 2,asuint(attributes.age));\n
|
|
attributeBuffer.Store((index * 0x8 + 0x1F407) << 2,uint(attributes.alive));\n
|
|
\n\r\n }\r\n }\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[System 1]Update Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_POSITION_CURRENT
|
|
1\n#define VFX_USE_SIZE_CURRENT 1\n#define VFX_USE_VELOCITY_CURRENT 1\n#define
|
|
VFX_USE_MASS_CURRENT 1\n#define VFX_USE_SCALEX_CURRENT 1\n#define VFX_USE_SCALEY_CURRENT
|
|
1\n#define VFX_USE_AGE_CURRENT 1\n#define VFX_USE_ALIVE_CURRENT 1\n#define
|
|
VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float4x4 InvFieldTransform_a;\n float4x4 FieldTransform_a;\n float4 uniform_a;\n
|
|
float deltaTime_a;\n uint3 PADDING_0;\nCBUFFER_END\n\nstruct Attributes\n{\n
|
|
float lifetime;\n float3 position;\n float size;\n float3 velocity;\n
|
|
float mass;\n float scaleX;\n float scaleY;\n float age;\n bool
|
|
alive;\n};\n\nstruct SourceAttributes\n{\n};\n\nTexture3D VectorField_a;\nSamplerState
|
|
samplerVectorField_a;\nfloat4 VectorField_a_TexelSize;\n\n\n\r\n\r\n#define
|
|
USE_DEAD_LIST (VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer
|
|
attributeBuffer;\r\n\r\n#if USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListOut;\r\n#endif\r\n\r\n#if
|
|
VFX_HAS_INDIRECT_DRAW\r\nRWStructuredBuffer<uint> indirectBuffer;\r\n#endif\r\n\r\n#if
|
|
HAS_STRIPS\r\nRWBuffer<uint> stripDataBuffer;\r\n#endif\r\n\r\n#if VFX_USE_STRIPALIVE_CURRENT\r\nBuffer<uint>
|
|
attachedStripDataBuffer;\r\n#endif\r\n\r\nCBUFFER_START(updateParams)\r\n
|
|
uint nbMax;\r\n\tuint dispatchWidth;\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
VectorFieldForce_267A9(inout float3 velocity, float mass, float3 position,
|
|
VFXSampler3D VectorField, float4x4 InvFieldTransform, float4x4 FieldTransform,
|
|
float Intensity, float Drag, float deltaTime) /*DataEncoding:UnsignedNormalized
|
|
Mode:Relative ClosedField:False ConserveMagnitude:False */\n{\n float3 vectorFieldCoord
|
|
= mul(InvFieldTransform, float4(position,1.0f)).xyz;\n \n float3 value
|
|
= SampleTexture(VectorField, vectorFieldCoord + 0.5f).xyz * 2.0f - 1.0f;\n
|
|
value = mul(FieldTransform,float4(value,0.0f)).xyz;\n \n velocity +=
|
|
((value * Intensity) - velocity) * min(1.0f,Drag * deltaTime / mass);\n}\nvoid
|
|
ConformToSphere(inout float3 velocity, float3 position, float mass, float3
|
|
Sphere_center, float Sphere_radius, float attractionSpeed, float attractionForce,
|
|
float stickDistance, float stickForce, float deltaTime)\n{\n \n float3
|
|
dir = Sphere_center - position;\n float distToCenter = length(dir);\n
|
|
float distToSurface = distToCenter - Sphere_radius;\n dir /= max(VFX_FLT_MIN,distToCenter);
|
|
// safe normalize\n float spdNormal = dot(dir,velocity);\n float ratio
|
|
= smoothstep(0.0,stickDistance * 2.0,abs(distToSurface));\n float tgtSpeed
|
|
= sign(distToSurface) * attractionSpeed * ratio;\n float deltaSpeed = tgtSpeed
|
|
- spdNormal;\n velocity += sign(deltaSpeed) * min(abs(deltaSpeed),deltaTime
|
|
* lerp(stickForce,attractionForce,ratio)) * dir / mass;\n}\nvoid Drag_1(inout
|
|
float3 velocity, float mass, float size, float scaleX, float scaleY, float
|
|
dragCoefficient, float deltaTime) /*UseParticleSize:True */\n{\n \n float2
|
|
side = size * (scaleX, scaleY);\n dragCoefficient *= side.x * side.y;\n
|
|
velocity *= max(0.0,(1.0 - (dragCoefficient * deltaTime) / mass));\n}\nvoid
|
|
CollisionSphere_0(inout float3 position, inout float3 velocity, inout float
|
|
age, float lifetime, float3 Sphere_center, float Sphere_radius, float Bounce,
|
|
float Friction, float LifetimeLoss, float deltaTime, float colliderSign, float
|
|
radius) /*mode:Solid radiusMode:None roughSurface:False */\n{\n \n float3
|
|
nextPos = position + velocity * deltaTime;\n float3 dir = nextPos - Sphere_center;\n
|
|
float sqrLength = dot(dir, dir);\n float totalRadius = Sphere_radius + colliderSign
|
|
* radius;\n if (colliderSign * sqrLength <= colliderSign * totalRadius *
|
|
totalRadius)\n {\n float dist = sqrt(sqrLength);\n float3
|
|
n = colliderSign * dir / dist;\n position -= n * (dist - totalRadius)
|
|
* colliderSign;\n \n float projVelocity = dot(n, velocity);\n
|
|
\n float3 normalVelocity = projVelocity * n;\n float3 tangentVelocity
|
|
= velocity - normalVelocity;\n \n if (projVelocity < 0)\n
|
|
velocity -= ((1 + Bounce) * projVelocity) * n;\n velocity -= Friction
|
|
* tangentVelocity;\n \n age += (LifetimeLoss * lifetime);\n \n
|
|
}\n}\nvoid EulerIntegration(inout float3 position, float3 velocity, float deltaTime)\n{\n
|
|
position += velocity * deltaTime;\n}\nvoid Age(inout float age, float deltaTime)\n{\n
|
|
age += deltaTime;\n}\nvoid Reap(float age, float lifetime, inout bool alive)\n{\n
|
|
if(age > lifetime) { alive = false; }\n}\n\n\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid
|
|
CSMain(uint3 groupId : SV_GroupID,\r\n uint3 groupThreadId
|
|
: SV_GroupThreadID)\r\n{\r\n\tuint id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP
|
|
+ groupId.y * dispatchWidth * NB_THREADS_PER_GROUP;\r\n\tuint index = id;\r\n\tif
|
|
(id < nbMax)\r\n\t{\r\n Attributes attributes = (Attributes)0;\r\n\t\tSourceAttributes
|
|
sourceAttributes = (SourceAttributes)0;\r\n\r\n#if VFX_USE_ALIVE_CURRENT\r\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x8 + 0x1F407) << 2));\n\t\t\n\r\n\t\tif (attributes.alive)\r\n\t\t{\r\n\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x0) << 2));\n\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x1F400) << 2));\n\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x1) << 2));\n\t\t\tattributes.velocity
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x1F404) << 2));\n\t\t\tattributes.mass
|
|
= (float)1;\n\t\t\tattributes.scaleX = (float)1;\n\t\t\tattributes.scaleY =
|
|
(float)1;\n\t\t\tattributes.age = asfloat(attributeBuffer.Load((index * 0x8
|
|
+ 0x1F403) << 2));\n\t\t\t\n\r\n\r\n// Initialize built-in needed attributes\r\n#if
|
|
VFX_USE_OLDPOSITION_CURRENT\r\n\t\t\tattributes.oldPosition = attributes.position;\r\n#endif\r\n#if
|
|
HAS_STRIPS\r\n const StripData stripData = GetStripDataFromParticleIndex(index,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n InitStripAttributes(index, attributes,
|
|
stripData);\r\n#endif\r\n\t\t\t\r\n\t\t\t{\n\t\t\t VectorFieldForce_267A9(
|
|
/*inout */attributes.velocity, attributes.mass, attributes.position, GetVFXSampler(VectorField_a,
|
|
samplerVectorField_a), InvFieldTransform_a, FieldTransform_a, (float)7, (float)3,
|
|
deltaTime_a);\n\t\t\t}\n\t\t\t{\n\t\t\t ConformToSphere( /*inout */attributes.velocity,
|
|
attributes.position, attributes.mass, float3(0, 0, 0), (float)1, (float)5,
|
|
(float)20, (float)0.100000001, (float)50, deltaTime_a);\n\t\t\t}\n\t\t\t{\n\t\t\t
|
|
Drag_1( /*inout */attributes.velocity, attributes.mass, attributes.size, attributes.scaleX,
|
|
attributes.scaleY, (float)2000, deltaTime_a);\n\t\t\t}\n\t\t\t{\n\t\t\t
|
|
float tmp_bd = SampleCurve(uniform_a,attributes.age);\n\t\t\t CollisionSphere_0(
|
|
/*inout */attributes.position, /*inout */attributes.velocity, /*inout */attributes.age,
|
|
attributes.lifetime, float3(0, 0, 0), tmp_bd, (float)0.100000001, (float)0,
|
|
(float)0, deltaTime_a, (float)1, (float)0);\n\t\t\t}\n\t\t\tEulerIntegration(
|
|
/*inout */attributes.position, attributes.velocity, deltaTime_a);\n\t\t\tAge(
|
|
/*inout */attributes.age, deltaTime_a);\n\t\t\tReap(attributes.age, attributes.lifetime,
|
|
/*inout */attributes.alive);\n\t\t\t\n\r\n\r\n\t\t\tif (attributes.alive)\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store3((index
|
|
* 0x8 + 0x1F400) << 2,asuint(attributes.position));\n\t\t\t\tattributeBuffer.Store3((index
|
|
* 0x8 + 0x1F404) << 2,asuint(attributes.velocity));\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x8 + 0x1F403) << 2,asuint(attributes.age));\n\t\t\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\t\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n\r\n#if HAS_STRIPS\t\t\t\r\n\t\t\t\tuint relativeIndexInStrip
|
|
= GetRelativeIndex(index, stripData);\r\n\t\t\t\tInterlockedMin(STRIP_DATA(STRIP_MIN_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n\t\t\t\tInterlockedMax(STRIP_DATA(STRIP_MAX_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n#endif\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x8 + 0x1F407) << 2,uint(attributes.alive));\n\t\t\t\t\n\r\n#if USE_DEAD_LIST
|
|
&& !VFX_USE_STRIPALIVE_CURRENT\r\n\t\t\t\tuint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n#endif\r\n\t\t\t}\r\n\t\t}\r\n#if USE_DEAD_LIST && VFX_USE_STRIPALIVE_CURRENT\r\n
|
|
else if (attributes.stripAlive)\r\n {\r\n if (STRIP_DATA_X(attachedStripDataBuffer,
|
|
STRIP_MIN_ALIVE, index) == ~1) // Attached strip is no longer alive, recycle
|
|
the particle \r\n {\r\n uint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n attributes.stripAlive = false;\r\n
|
|
\r\n } \r\n }\r\n#endif\r\n#else\r\n\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x0) << 2));\n\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x1F400) << 2));\n\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x1) << 2));\n\t\tattributes.velocity
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x1F404) << 2));\n\t\tattributes.mass
|
|
= (float)1;\n\t\tattributes.scaleX = (float)1;\n\t\tattributes.scaleY = (float)1;\n\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x1F403) << 2));\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x8 + 0x1F407) << 2));\n\t\t\n\r\n\t\t\r\n#if
|
|
VFX_USE_OLDPOSITION_CURRENT\r\n\t\tattributes.oldPosition = attributes.position;\r\n#endif\r\n#if
|
|
HAS_STRIPS\r\n const StripData stripData = GetStripDataFromParticleIndex(index,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n InitStripAttributes(index, attributes,
|
|
stripData);\r\n#endif\r\n\t\t\r\n\t\t{\n\t\t VectorFieldForce_267A9( /*inout
|
|
*/attributes.velocity, attributes.mass, attributes.position, GetVFXSampler(VectorField_a,
|
|
samplerVectorField_a), InvFieldTransform_a, FieldTransform_a, (float)7, (float)3,
|
|
deltaTime_a);\n\t\t}\n\t\t{\n\t\t ConformToSphere( /*inout */attributes.velocity,
|
|
attributes.position, attributes.mass, float3(0, 0, 0), (float)1, (float)5,
|
|
(float)20, (float)0.100000001, (float)50, deltaTime_a);\n\t\t}\n\t\t{\n\t\t
|
|
Drag_1( /*inout */attributes.velocity, attributes.mass, attributes.size, attributes.scaleX,
|
|
attributes.scaleY, (float)2000, deltaTime_a);\n\t\t}\n\t\t{\n\t\t float
|
|
tmp_bd = SampleCurve(uniform_a,attributes.age);\n\t\t CollisionSphere_0(
|
|
/*inout */attributes.position, /*inout */attributes.velocity, /*inout */attributes.age,
|
|
attributes.lifetime, float3(0, 0, 0), tmp_bd, (float)0.100000001, (float)0,
|
|
(float)0, deltaTime_a, (float)1, (float)0);\n\t\t}\n\t\tEulerIntegration( /*inout
|
|
*/attributes.position, attributes.velocity, deltaTime_a);\n\t\tAge( /*inout
|
|
*/attributes.age, deltaTime_a);\n\t\tReap(attributes.age, attributes.lifetime,
|
|
/*inout */attributes.alive);\n\t\t\n\r\n\t\tattributeBuffer.Store3((index *
|
|
0x8 + 0x1F400) << 2,asuint(attributes.position));\n\t\tattributeBuffer.Store3((index
|
|
* 0x8 + 0x1F404) << 2,asuint(attributes.velocity));\n\t\tattributeBuffer.Store((index
|
|
* 0x8 + 0x1F403) << 2,asuint(attributes.age));\n\t\tattributeBuffer.Store((index
|
|
* 0x8 + 0x1F407) << 2,uint(attributes.alive));\n\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n#endif\r\n\t}\r\n}\r\n"
|
|
- compute: 0
|
|
name: '[System 1]Output Particle Quad'
|
|
source: "Shader \"Hidden/VFX/ShipCore-PowerDown/System 1/Output Particle Quad\"\n{\r\n\tSubShader\r\n\t{\t\r\n\t\tCull
|
|
Off\r\n\t\t\r\n\t\tTags { \"Queue\"=\"Transparent+0\" \"IgnoreProjector\"=\"True\"
|
|
\"RenderType\"=\"Transparent\" }\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tBlend
|
|
SrcAlpha One \n\t\tZTest LEqual\n\t\tZWrite Off\n\t\tCull Off\n\t\t\n\t\n\t\t\t\n\t\tHLSLINCLUDE\n\t\t\n\t\t#define
|
|
NB_THREADS_PER_GROUP 64\n\t\t#define HAS_ATTRIBUTES 1\n\t\t#define VFX_PASSDEPTH_ACTUAL
|
|
(0)\n\t\t#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n\t\t#define VFX_PASSDEPTH_SELECTION
|
|
(2)\n\t\t#define VFX_USE_LIFETIME_CURRENT 1\n\t\t#define VFX_USE_POSITION_CURRENT
|
|
1\n\t\t#define VFX_USE_SIZE_CURRENT 1\n\t\t#define VFX_USE_VELOCITY_CURRENT
|
|
1\n\t\t#define VFX_USE_SCALEX_CURRENT 1\n\t\t#define VFX_USE_SCALEY_CURRENT
|
|
1\n\t\t#define VFX_USE_AGE_CURRENT 1\n\t\t#define VFX_USE_COLOR_CURRENT 1\n\t\t#define
|
|
VFX_USE_ALPHA_CURRENT 1\n\t\t#define VFX_USE_ALIVE_CURRENT 1\n\t\t#define VFX_USE_AXISX_CURRENT
|
|
1\n\t\t#define VFX_USE_AXISY_CURRENT 1\n\t\t#define VFX_USE_AXISZ_CURRENT 1\n\t\t#define
|
|
VFX_USE_ANGLEX_CURRENT 1\n\t\t#define VFX_USE_ANGLEY_CURRENT 1\n\t\t#define
|
|
VFX_USE_ANGLEZ_CURRENT 1\n\t\t#define VFX_USE_PIVOTX_CURRENT 1\n\t\t#define
|
|
VFX_USE_PIVOTY_CURRENT 1\n\t\t#define VFX_USE_PIVOTZ_CURRENT 1\n\t\t#define
|
|
VFX_USE_SCALEZ_CURRENT 1\n\t\t#define VFX_COLORMAPPING_GRADIENTMAPPED 1\n\t\t#define
|
|
IS_TRANSPARENT_PARTICLE 1\n\t\t#define VFX_BLENDMODE_ADD 1\n\t\t#define VFX_BYPASS_EXPOSURE
|
|
1\n\t\t#define VFX_PRIMITIVE_QUAD 1\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t#define
|
|
VFX_LOCAL_SPACE 1\n\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\t\t\n\n\t\tCBUFFER_START(parameters)\n\t\t
|
|
float4 uniform_a;\n\t\t float Color_b;\n\t\t float gradient;\n\t\t
|
|
uint2 PADDING_0;\n\t\tCBUFFER_END\n\t\t\n\t\tstruct Attributes\n\t\t{\n\t\t
|
|
float lifetime;\n\t\t float3 position;\n\t\t float size;\n\t\t float3
|
|
velocity;\n\t\t float scaleX;\n\t\t float scaleY;\n\t\t float age;\n\t\t
|
|
float3 color;\n\t\t float alpha;\n\t\t bool alive;\n\t\t float3 axisX;\n\t\t
|
|
float3 axisY;\n\t\t float3 axisZ;\n\t\t float angleX;\n\t\t float
|
|
angleY;\n\t\t float angleZ;\n\t\t float pivotX;\n\t\t float pivotY;\n\t\t
|
|
float pivotZ;\n\t\t float scaleZ;\n\t\t};\n\t\t\n\t\tstruct SourceAttributes\n\t\t{\n\t\t};\n\t\t\n\t\tTexture2D
|
|
mainTexture;\n\t\tSamplerState samplermainTexture;\n\t\tfloat4 mainTexture_TexelSize;\n\t\t\n\t\t\n\n\t\t\n\t\t#define
|
|
VFX_NEEDS_COLOR_INTERPOLATOR (VFX_USE_COLOR_CURRENT || VFX_USE_ALPHA_CURRENT)\n\t\t#if
|
|
HAS_STRIPS\n\t\t#define VFX_OPTIONAL_INTERPOLATION \n\t\t#else\n\t\t#define
|
|
VFX_OPTIONAL_INTERPOLATION nointerpolation\n\t\t#endif\n\t\t\n\t\tByteAddressBuffer
|
|
attributeBuffer;\t\n\t\t\n\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\tStructuredBuffer<uint>
|
|
indirectBuffer;\t\n\t\t#endif\t\n\t\t\n\t\t#if USE_DEAD_LIST_COUNT\n\t\tByteAddressBuffer
|
|
deadListCount;\n\t\t#endif\n\t\t\n\t\t#if HAS_STRIPS\n\t\tBuffer<uint> stripDataBuffer;\n\t\t#endif\n\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD || USE_MOTION_VECTORS_PASS\n\t\tByteAddressBuffer
|
|
elementToVFXBufferPrevious;\n\t\t#endif\n\t\t\n\t\tCBUFFER_START(outputParams)\n\t\t\tfloat
|
|
nbMax;\n\t\t\tfloat systemSeed;\n\t\tCBUFFER_END\n\t\t\n\t\t// Helper macros
|
|
to always use a valid instanceID\n\t\t#if defined(UNITY_STEREO_INSTANCING_ENABLED)\n\t\t\t#define
|
|
VFX_DECLARE_INSTANCE_ID UNITY_VERTEX_INPUT_INSTANCE_ID\n\t\t\t#define VFX_GET_INSTANCE_ID(i)
|
|
unity_InstanceID\n\t\t#else\n\t\t\t#define VFX_DECLARE_INSTANCE_ID uint
|
|
instanceID : SV_InstanceID;\n\t\t\t#define VFX_GET_INSTANCE_ID(i) i.instanceID\n\t\t#endif\n\t\t\n\t\tENDHLSL\n\t\t\n\r\n\t\tPass\n\t\t{\t\t\n\t\t\tTags
|
|
{ \"LightMode\"=\"SceneSelectionPass\" }\n\t\t\n\t\t\tZWrite On\n\t\t\tBlend
|
|
Off\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#define VFX_PASSDEPTH VFX_PASSDEPTH_SELECTION\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos : SV_POSITION;\n\t\t\t\t#if
|
|
USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if USE_ALPHA_TEST || USE_FLIPBOOK_INTERPOLATION
|
|
|| VFX_USE_ALPHA_CURRENT\n\t\t\t\t// x: alpha threshold\n\t\t\t\t// y: frame
|
|
blending factor\n\t\t\t\t// z: alpha\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION float3
|
|
builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\tfloat4 cPosPrevious :
|
|
TEXCOORD3;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD4;\n\t\t\t\t#endif\n\t\t\t
|
|
\n\t\t\t #if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t float3 posWS : TEXCOORD5;\n\t\t\t
|
|
#endif\n\t\t\t \n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t\t#define VFX_VARYING_POSCS pos\n\t\t\t#define
|
|
VFX_VARYING_ALPHA builtInInterpolants.z\n\t\t\t#define VFX_VARYING_ALPHATHRESHOLD
|
|
builtInInterpolants.x\n\t\t\t#define VFX_VARYING_FRAMEBLEND builtInInterpolants.y\n\t\t\t#define
|
|
VFX_VARYING_MOTIONVECTORSCALE builtInInterpolants2.xy\n\t\t\t#define VFX_VARYING_UV
|
|
uv\n\t\t\t\n\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t#define VFX_VARYING_POSWS
|
|
posWS\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_MOTION_VECTORS\n\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_DEPTH_ONLY\n\t\t\t#endif\n\t\t\t\n\t\t\t#if !(defined(VFX_VARYING_PS_INPUTS)
|
|
&& defined(VFX_VARYING_POSCS))\n\t\t\t#error VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS
|
|
and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
SetAttribute_D5151642(inout float scaleX, inout float scaleY, inout float scaleZ,
|
|
float3 Scale) /*attribute:scale Composition:Overwrite Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t scaleX = Scale.x;\n\t\t\t scaleY = Scale.y;\n\t\t\t
|
|
scaleZ = Scale.z;\n\t\t\t}\n\t\t\tvoid AttributeFromCurve_48A86161(inout float3
|
|
color, inout float alpha, float age, float lifetime, float Color) /*attribute:color
|
|
Composition:Overwrite AlphaComposition:Overwrite SampleMode:OverLife Mode:PerComponent
|
|
ColorMode:ColorAndAlpha channels:XYZ */\n\t\t\t{\n\t\t\t float t = age /
|
|
lifetime;\n\t\t\t float4 value = 0.0f;\n\t\t\t value = SampleGradient(Color,
|
|
t);\n\t\t\t color = value.rgb;\n\t\t\t alpha = value.a;\n\t\t\t}\n\t\t\tvoid
|
|
Orient_94A(inout float3 axisX, inout float3 axisY, inout float3 axisZ, float3
|
|
position, float3 velocity) /*mode:AlongVelocity axes:ZY */\n\t\t\t{\n\t\t\t
|
|
\n\t\t\t axisY = normalize(velocity);\n\t\t\t axisZ = position - GetViewVFXPosition();\n\t\t\t
|
|
axisX = normalize(cross(axisY,axisZ));\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error
|
|
VFX_PRIMITIVE_QUAD must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct
|
|
vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x1F400) << 2));\n\t\t\t\t\n\n\t\t\t\treturn
|
|
attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3 GetStripTangent(float3
|
|
currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x0) << 2));\n\t\t\t\t\t\tattributes.position = asfloat(attributeBuffer.Load3((index
|
|
* 0x8 + 0x1F400) << 2));\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x1) << 2));\n\t\t\t\t\t\tattributes.velocity = asfloat(attributeBuffer.Load3((index
|
|
* 0x8 + 0x1F404) << 2));\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x1F403) << 2));\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x8 + 0x1F407) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x8 + 0x1F407) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x0) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x1F400) << 2));\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x1) << 2));\n\t\t\t\t\t\tattributes.velocity
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x1F404) << 2));\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x1F403) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t{\n\t\t\t\t
|
|
float tmp_bc = SampleCurve(uniform_a,attributes.age);\n\t\t\t\t float3 tmp_be
|
|
= float3((float)0.5, tmp_bc, (float)1);\n\t\t\t\t SetAttribute_D5151642(
|
|
/*inout */attributes.scaleX, /*inout */attributes.scaleY, /*inout */attributes.scaleZ,
|
|
tmp_be);\n\t\t\t\t}\n\t\t\t\tAttributeFromCurve_48A86161( /*inout */attributes.color,
|
|
/*inout */attributes.alpha, attributes.age, attributes.lifetime, Color_b);\n\t\t\t\tOrient_94A(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ,
|
|
attributes.position, attributes.velocity);\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\tif (!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#define
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 1\n\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t#ifndef
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t#define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH
|
|
0\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\tint _ObjectId;\n\t\t\t\t\tint
|
|
_PassValue;\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#pragma fragment frag\n\t\t\t\t\tvoid
|
|
frag(ps_input i\n\t\t\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t
|
|
#ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t // We need the depth color as SV_Target0
|
|
for alpha to coverage\n\t\t\t\t\t , out float4 outDepthColor : SV_Target0\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target1\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
// When no MSAA, the motion vector is always the first buffer\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t #ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t
|
|
, out float4 outDepthColor : SV_Target0\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
, out float4 dummy : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t , out float4 outSelection : SV_Target0\n\t\t\t\t\t#endif\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\t
|
|
#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t
|
|
float alpha = OUTSG.;\n\t\t\t\t\t #else\n\t\t\t\t\t float alpha =
|
|
VFXGetFragmentColor(i).a;\n\t\t\t\t\t\t\t#if VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t\t\t\talpha
|
|
*= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t
|
|
#endif\n\t\t\t\t\t\tVFXClipFragmentColor(alpha,i);\n\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\toutDepthColor = i.VFX_VARYING_POSCS.z;\n\t\t\t\t\t\t\t#if
|
|
VFX_USE_ALPHA_TO_MASK\n\t\t\t\t\t\t\t\toutDepthColor.a = alpha;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat2
|
|
velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w) -
|
|
(i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\t\t\t\tVFXEncodeMotionVector(velocity
|
|
* 0.5f, encodedMotionVector);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\toutMotionVector
|
|
= encodedMotionVector;\n\t\t\t\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t\t\toutSelection
|
|
= float4(_ObjectId, _PassValue, 1.0, 1.0);\n\t\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t\t\t#ifndef WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\t\tdummy
|
|
= (float4)0;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t#error
|
|
VFX_PASSDEPTH undefined \n\t\t\t\t\t\t#endif\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\n\t\t\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t\t\r\n\t\t//
|
|
Forward pass\n\t\tPass\n\t\t{\t\t\n\t\t\tTags { \"LightMode\"=\"ForwardOnly\"
|
|
}\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#pragma target 4.5\n\t\t\t#pragma multi_compile
|
|
_ DEBUG_DISPLAY\n\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos :
|
|
SV_POSITION;\n\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_COLOR_INTERPOLATOR\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 color : COLOR0;\n\t\t\t\t#endif\n\t\t\t\t#if USE_SOFT_PARTICLE || USE_ALPHA_TEST
|
|
|| USE_FLIPBOOK_INTERPOLATION || USE_EXPOSURE_WEIGHT || WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t//
|
|
x: inverse soft particles fade distance\n\t\t\t\t// y: alpha threshold\n\t\t\t\t//
|
|
z: frame blending factor\n\t\t\t\t// w: exposure weight\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t\tfloat3
|
|
posWS : TEXCOORD3;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
cPosPrevious : TEXCOORD4;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD5;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t\t\tfloat3 normal : TEXCOORD6;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t\t\tfloat3 tangent : TEXCOORD7;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t
|
|
\n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\tstruct
|
|
ps_output\n\t\t\t{\n\t\t\t\tfloat4 color : SV_Target0;\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
outMotionVector : SV_Target1;\n\t\t#endif\n\t\t\t};\n\t\t\n\t\t#define VFX_VARYING_PS_INPUTS
|
|
ps_input\n\t\t#define VFX_VARYING_POSCS pos\n\t\t#define VFX_VARYING_COLOR
|
|
color.rgb\n\t\t#define VFX_VARYING_ALPHA color.a\n\t\t#define VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
builtInInterpolants.x\n\t\t#define VFX_VARYING_ALPHATHRESHOLD builtInInterpolants.y\n\t\t#define
|
|
VFX_VARYING_FRAMEBLEND builtInInterpolants.z\n\t\t#define VFX_VARYING_MOTIONVECTORSCALE
|
|
builtInInterpolants2.xy\n\t\t#define VFX_VARYING_UV uv\n\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t#define
|
|
VFX_VARYING_POSWS posWS\n\t\t#endif\n\t\t#if USE_EXPOSURE_WEIGHT\n\t\t#define
|
|
VFX_VARYING_EXPOSUREWEIGHT builtInInterpolants.w\n\t\t#endif\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t#endif\n\t\t\n\t\t#define SHADERPASS SHADERPASS_FORWARD_UNLIT\n\t\t\t\n\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t#define VFX_VARYING_NORMAL normal\n\t\t#endif\n\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t#define VFX_VARYING_TANGENT tangent\n\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
!(defined(VFX_VARYING_PS_INPUTS) && defined(VFX_VARYING_POSCS))\n\t\t\t#error
|
|
VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
SetAttribute_D5151642(inout float scaleX, inout float scaleY, inout float scaleZ,
|
|
float3 Scale) /*attribute:scale Composition:Overwrite Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t scaleX = Scale.x;\n\t\t\t scaleY = Scale.y;\n\t\t\t
|
|
scaleZ = Scale.z;\n\t\t\t}\n\t\t\tvoid AttributeFromCurve_48A86161(inout float3
|
|
color, inout float alpha, float age, float lifetime, float Color) /*attribute:color
|
|
Composition:Overwrite AlphaComposition:Overwrite SampleMode:OverLife Mode:PerComponent
|
|
ColorMode:ColorAndAlpha channels:XYZ */\n\t\t\t{\n\t\t\t float t = age /
|
|
lifetime;\n\t\t\t float4 value = 0.0f;\n\t\t\t value = SampleGradient(Color,
|
|
t);\n\t\t\t color = value.rgb;\n\t\t\t alpha = value.a;\n\t\t\t}\n\t\t\tvoid
|
|
Orient_94A(inout float3 axisX, inout float3 axisY, inout float3 axisZ, float3
|
|
position, float3 velocity) /*mode:AlongVelocity axes:ZY */\n\t\t\t{\n\t\t\t
|
|
\n\t\t\t axisY = normalize(velocity);\n\t\t\t axisZ = position - GetViewVFXPosition();\n\t\t\t
|
|
axisX = normalize(cross(axisY,axisZ));\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error
|
|
VFX_PRIMITIVE_QUAD must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct
|
|
vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x1F400) << 2));\n\t\t\t\t\n\n\t\t\t\treturn
|
|
attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3 GetStripTangent(float3
|
|
currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x0) << 2));\n\t\t\t\t\t\tattributes.position = asfloat(attributeBuffer.Load3((index
|
|
* 0x8 + 0x1F400) << 2));\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x1) << 2));\n\t\t\t\t\t\tattributes.velocity = asfloat(attributeBuffer.Load3((index
|
|
* 0x8 + 0x1F404) << 2));\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x1F403) << 2));\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x8 + 0x1F407) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x8 + 0x1F407) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x0) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x1F400) << 2));\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x1) << 2));\n\t\t\t\t\t\tattributes.velocity
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x1F404) << 2));\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x1F403) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t{\n\t\t\t\t
|
|
float tmp_bc = SampleCurve(uniform_a,attributes.age);\n\t\t\t\t float3 tmp_be
|
|
= float3((float)0.5, tmp_bc, (float)1);\n\t\t\t\t SetAttribute_D5151642(
|
|
/*inout */attributes.scaleX, /*inout */attributes.scaleY, /*inout */attributes.scaleZ,
|
|
tmp_be);\n\t\t\t\t}\n\t\t\t\tAttributeFromCurve_48A86161( /*inout */attributes.color,
|
|
/*inout */attributes.alpha, attributes.age, attributes.lifetime, Color_b);\n\t\t\t\tOrient_94A(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ,
|
|
attributes.position, attributes.velocity);\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\tif (!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t\t\n\t\t#endif\n\t\t\t\t\n\t\t\t#pragma fragment frag\n\t\t\tps_output
|
|
frag(ps_input i)\n\t\t\t{\n\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\tps_output
|
|
o = (ps_output)0;\n\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\n\t\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\t\t\t\t#if USE_DOUBLE_SIDED\n\t\t\t\t\t\t\tconst
|
|
float faceMul = frontFace ? 1.0f : -1.0f;\n\t\t\t\t\t\t\t#else\n\t\t\t\t\t\t\tconst
|
|
float faceMul = 1.0f;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3
|
|
normalWS = i.VFX_VARYING_NORMAL * faceMul;\n\t\t\t\t\t\t\tconst VFXUVData uvData
|
|
= GetUVData(i);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_TANGENT\n\t\t\t\t\t\t\tfloat3
|
|
tangentWS = i.VFX_VARYING_TANGENT;\n\t\t\t\t\t\t\tfloat3 bitangentWS = cross(i.VFX_VARYING_TANGENT,i.VFX_VARYING_NORMAL);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_BENTFACTORS) && USE_NORMAL_BENDING\t\n\t\t\t\t\t\t\tfloat3
|
|
bentFactors = float3(i.VFX_VARYING_BENTFACTORS.xy,sqrt(1.0f - dot(i.VFX_VARYING_BENTFACTORS,i.VFX_VARYING_BENTFACTORS)));\n\t\t\t\t\t\t\tnormalWS
|
|
= tangentWS * bentFactors.x + bitangentWS * bentFactors.y + normalWS * bentFactors.z;\n\t\t\t\t\t\t\ttangentWS
|
|
= normalize(cross(normalWS,bitangentWS));\n\t\t\t\t\t\t\tbitangentWS = cross(tangentWS,normalWS);\n\t\t\t\t\t\t\ttangentWS
|
|
*= faceMul;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3x3 tbn
|
|
= float3x3(tangentWS,bitangentWS,normalWS);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
USE_NORMAL_MAP\n\t\t\t\t\t\t\tfloat3 n = SampleNormalMap(VFX_SAMPLER(normalMap),uvData);\n\t\t\t\t\t\t\tfloat
|
|
normalScale = 1.0f;\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_NORMALSCALE\n\t\t\t\t\t\t\tnormalScale
|
|
= i.VFX_VARYING_NORMALSCALE;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\tnormalWS
|
|
= normalize(lerp(normalWS,mul(n,tbn),normalScale));\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t \n\t\t \n\t\t \n\t\t \n\t\t
|
|
#if HAS_SHADERGRAPH_PARAM_COLOR\n\t\t o.color.rgb = OUTSG..rgb;\n\t\t
|
|
#endif\n\t\t \n\t\t #if HAS_SHADERGRAPH_PARAM_ALPHA \n\t\t
|
|
o.color.a = OUTSG.;\n\t\t #endif\n\t\t#else\n\t\t\t\n\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR VFXGetTextureColor(VFX_SAMPLER(mainTexture),i)\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tfloat4
|
|
color = VFXGetFragmentColor(i);\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifndef VFX_TEXTURE_COLOR\n\t\t\t\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR float4(1.0,1.0,1.0,1.0)\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_DEFAULT\n\t\t\t\t\t\t\to.color = color * VFX_TEXTURE_COLOR;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_GRADIENTMAPPED\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\to.color = SampleGradient(gradient,
|
|
VFX_TEXTURE_COLOR.a * color.a) * float4(color.rgb,1.0);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\to.color
|
|
= VFXApplyPreExposure(o.color, i);\n\t\t#endif\n\t\t\n\t\t\t\to.color = VFXApplyFog(o.color,i);\n\t\t\t\tVFXClipFragmentColor(o.color.a,i);\n\t\t\t\to.color.a
|
|
= saturate(o.color.a);\n\t\t\t\to.color = VFXTransformFinalColor(o.color);\n\t\t\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t\n\t\t\t\t\t\tfloat2 velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w)
|
|
- (i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\tVFXEncodeMotionVector(velocity * 0.5f,
|
|
encodedMotionVector);\n\t\t\t\t\t\t\n\t\t\t\to.outMotionVector = encodedMotionVector;\n\t\t
|
|
o.outMotionVector.a = o.color.a < i.VFX_VARYING_ALPHATHRESHOLD ? 0.0f : 1.0f;
|
|
//Independant clipping for motion vector pass\n\t\t#endif\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t}\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[System 2]Update Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_SIZE_CURRENT
|
|
1\n#define VFX_USE_AGE_CURRENT 1\n#define VFX_USE_ALIVE_CURRENT 1\n#define
|
|
VFX_HAS_INDIRECT_DRAW 1\n#define VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float4 uniform_a;\n float deltaTime_b;\n uint3 PADDING_0;\nCBUFFER_END\n\nstruct
|
|
Attributes\n{\n float lifetime;\n float size;\n float age;\n bool
|
|
alive;\n};\n\nstruct SourceAttributes\n{\n};\n\n\n\r\n\r\n#define USE_DEAD_LIST
|
|
(VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer attributeBuffer;\r\n\r\n#if
|
|
USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListOut;\r\n#endif\r\n\r\n#if
|
|
VFX_HAS_INDIRECT_DRAW\r\nRWStructuredBuffer<uint> indirectBuffer;\r\n#endif\r\n\r\n#if
|
|
HAS_STRIPS\r\nRWBuffer<uint> stripDataBuffer;\r\n#endif\r\n\r\n#if VFX_USE_STRIPALIVE_CURRENT\r\nBuffer<uint>
|
|
attachedStripDataBuffer;\r\n#endif\r\n\r\nCBUFFER_START(updateParams)\r\n
|
|
uint nbMax;\r\n\tuint dispatchWidth;\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
SetAttribute_3278B22F(inout float size, float Size) /*attribute:size Composition:Overwrite
|
|
Source:Slot Random:Off channels:XYZ */\n{\n size = Size;\n}\nvoid Age(inout
|
|
float age, float deltaTime)\n{\n age += deltaTime;\n}\nvoid Reap(float age,
|
|
float lifetime, inout bool alive)\n{\n if(age > lifetime) { alive = false;
|
|
}\n}\n\n\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n\tuint
|
|
id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP + groupId.y * dispatchWidth
|
|
* NB_THREADS_PER_GROUP;\r\n\tuint index = id;\r\n\tif (id < nbMax)\r\n\t{\r\n
|
|
Attributes attributes = (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\r\n\r\n#if VFX_USE_ALIVE_CURRENT\r\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x9) << 2));\n\t\t\n\r\n\t\tif (attributes.alive)\r\n\t\t{\r\n\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x4) << 2));\n\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x8) << 2));\n\t\t\t\n\r\n\r\n//
|
|
Initialize built-in needed attributes\r\n#if VFX_USE_OLDPOSITION_CURRENT\r\n\t\t\tattributes.oldPosition
|
|
= attributes.position;\r\n#endif\r\n#if HAS_STRIPS\r\n const StripData
|
|
stripData = GetStripDataFromParticleIndex(index, PARTICLE_PER_STRIP_COUNT);\r\n
|
|
InitStripAttributes(index, attributes, stripData);\r\n#endif\r\n\t\t\t\r\n\t\t\t{\n\t\t\t
|
|
float tmp_v = SampleCurve(uniform_a,attributes.age);\n\t\t\t SetAttribute_3278B22F(
|
|
/*inout */attributes.size, tmp_v);\n\t\t\t}\n\t\t\tAge( /*inout */attributes.age,
|
|
deltaTime_b);\n\t\t\tReap(attributes.age, attributes.lifetime, /*inout */attributes.alive);\n\t\t\t\n\r\n\r\n\t\t\tif
|
|
(attributes.alive)\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index * 0x1
|
|
+ 0x4) << 2,asuint(attributes.size));\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x8) << 2,asuint(attributes.age));\n\t\t\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\t\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n\r\n#if HAS_STRIPS\t\t\t\r\n\t\t\t\tuint relativeIndexInStrip
|
|
= GetRelativeIndex(index, stripData);\r\n\t\t\t\tInterlockedMin(STRIP_DATA(STRIP_MIN_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n\t\t\t\tInterlockedMax(STRIP_DATA(STRIP_MAX_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n#endif\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x9) << 2,uint(attributes.alive));\n\t\t\t\t\n\r\n#if USE_DEAD_LIST
|
|
&& !VFX_USE_STRIPALIVE_CURRENT\r\n\t\t\t\tuint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n#endif\r\n\t\t\t}\r\n\t\t}\r\n#if USE_DEAD_LIST && VFX_USE_STRIPALIVE_CURRENT\r\n
|
|
else if (attributes.stripAlive)\r\n {\r\n if (STRIP_DATA_X(attachedStripDataBuffer,
|
|
STRIP_MIN_ALIVE, index) == ~1) // Attached strip is no longer alive, recycle
|
|
the particle \r\n {\r\n uint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n attributes.stripAlive = false;\r\n
|
|
\r\n } \r\n }\r\n#endif\r\n#else\r\n\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x4) << 2));\n\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x8) << 2));\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x9) << 2));\n\t\t\n\r\n\t\t\r\n#if
|
|
VFX_USE_OLDPOSITION_CURRENT\r\n\t\tattributes.oldPosition = attributes.position;\r\n#endif\r\n#if
|
|
HAS_STRIPS\r\n const StripData stripData = GetStripDataFromParticleIndex(index,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n InitStripAttributes(index, attributes,
|
|
stripData);\r\n#endif\r\n\t\t\r\n\t\t{\n\t\t float tmp_v = SampleCurve(uniform_a,attributes.age);\n\t\t
|
|
SetAttribute_3278B22F( /*inout */attributes.size, tmp_v);\n\t\t}\n\t\tAge(
|
|
/*inout */attributes.age, deltaTime_b);\n\t\tReap(attributes.age, attributes.lifetime,
|
|
/*inout */attributes.alive);\n\t\t\n\r\n\t\tattributeBuffer.Store((index *
|
|
0x1 + 0x4) << 2,asuint(attributes.size));\n\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x8) << 2,asuint(attributes.age));\n\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x9) << 2,uint(attributes.alive));\n\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n#endif\r\n\t}\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[System 2]Initialize Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_SIZE_CURRENT
|
|
1\n#define VFX_USE_AGE_CURRENT 1\n#define VFX_USE_ALIVE_CURRENT 1\n#define
|
|
VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\n\nstruct
|
|
Attributes\n{\n float lifetime;\n float size;\n float age;\n bool
|
|
alive;\n};\n\nstruct SourceAttributes\n{\n};\n\n\n\r\n\r\n#define USE_DEAD_LIST
|
|
(VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer attributeBuffer;\r\nByteAddressBuffer
|
|
sourceAttributeBuffer;\r\n\r\nCBUFFER_START(initParams)\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
uint nbSpawned;\t\t\t\t\t// Numbers of particle spawned\r\n uint spawnIndex;\t\t\t\t//
|
|
Index of the first particle spawned\r\n uint dispatchWidth;\r\n#else\r\n
|
|
uint offsetInAdditionalOutput;\r\n\tuint nbMax;\r\n#endif\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#if
|
|
USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListIn;\r\nByteAddressBuffer
|
|
deadListCount; // This is bad to use a SRV to fetch deadList count but Unity
|
|
API currently prevent from copying to CB\r\n#endif\r\n\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\nStructuredBuffer<uint>
|
|
eventList;\r\nByteAddressBuffer inputAdditional;\r\n#endif\r\n\r\n#if HAS_STRIPS\r\nRWBuffer<uint>
|
|
stripDataBuffer;\r\n#endif\r\n\r\n#include \"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
SetAttribute_F0142CB9(inout float lifetime, float Lifetime) /*attribute:lifetime
|
|
Composition:Overwrite Source:Slot Random:Off channels:XYZ */\n{\n lifetime
|
|
= Lifetime;\n}\n\n\r\n\r\n// Due to a bug in HLSL compiler, disable spurious
|
|
\"unitialized variable\" due to mid function return statement\r\n#pragma warning(push)\r\n#pragma
|
|
warning(disable : 4000)\r\n#if HAS_STRIPS\r\nbool GetParticleIndex(inout uint
|
|
particleIndex, uint stripIndex)\r\n{\r\n\tuint relativeIndex;\r\n\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX,
|
|
stripIndex), 1, relativeIndex);\r\n\tif (relativeIndex >= PARTICLE_PER_STRIP_COUNT)
|
|
// strip is full\r\n\t{\r\n\t\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX,
|
|
stripIndex), -1); // Remove previous increment\r\n\t\treturn false;\r\n\t}\r\n\r\n\tparticleIndex
|
|
= stripIndex * PARTICLE_PER_STRIP_COUNT + ((STRIP_DATA(STRIP_FIRST_INDEX, stripIndex)
|
|
+ relativeIndex) % PARTICLE_PER_STRIP_COUNT);\r\n return true;\r\n}\r\n#endif\r\n#pragma
|
|
warning(pop)\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n
|
|
uint id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP;\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
id += groupId.y * dispatchWidth * NB_THREADS_PER_GROUP;\r\n#endif\r\n\r\n#if
|
|
VFX_USE_SPAWNER_FROM_GPU\r\n uint maxThreadId = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 0) << 2);\r\n uint currentSpawnIndex = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 1) << 2) - maxThreadId;\r\n#else\r\n uint maxThreadId = nbSpawned;\r\n
|
|
uint currentSpawnIndex = spawnIndex;\r\n#endif\r\n\r\n#if USE_DEAD_LIST\r\n
|
|
maxThreadId = min(maxThreadId, deadListCount.Load(0x0));\r\n#elif VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
maxThreadId = min(maxThreadId, nbMax); //otherwise, nbSpawned already clamped
|
|
on CPU\r\n#endif\r\n\r\n if (id < maxThreadId)\r\n {\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
int sourceIndex = eventList[id];\r\n#endif\r\n\t\tuint particleIndex = id +
|
|
currentSpawnIndex;\r\n\t\t\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n int
|
|
sourceIndex = 0;\n /*//Loop with 1 iteration generate a wrong IL Assembly
|
|
(and actually, useless code)\n uint currentSumSpawnCount = 0u;\n
|
|
for (sourceIndex=0; sourceIndex<1; sourceIndex++)\n {\n currentSumSpawnCount
|
|
+= uint(asfloat(sourceAttributeBuffer.Load((sourceIndex * 0x1 + 0x0) << 2)));\n
|
|
if (id < currentSumSpawnCount)\n {\n break;\n
|
|
}\n }\n */\n \n\r\n#endif\r\n\r\n\t\tAttributes attributes
|
|
= (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes = (SourceAttributes)0;\r\n\t\t\r\n
|
|
attributes.lifetime = (float)1;\n attributes.size = (float)0.100000001;\n
|
|
attributes.age = (float)0;\n attributes.alive = (bool)true;\n
|
|
\n\r\n#if VFX_USE_PARTICLEID_CURRENT\r\n attributes.particleId = particleIndex;\r\n#endif\r\n#if
|
|
VFX_USE_SEED_CURRENT\r\n attributes.seed = WangHash(particleIndex ^
|
|
systemSeed);\r\n#endif\r\n#if VFX_USE_SPAWNINDEX_CURRENT\r\n attributes.spawnIndex
|
|
= id;\r\n#endif\r\n#if HAS_STRIPS\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n\t\t\r\n#else\r\n
|
|
uint stripIndex = sourceIndex;\r\n#endif\r\n\t\tstripIndex = min(stripIndex,
|
|
STRIP_COUNT);\r\n\r\n if (!GetParticleIndex(particleIndex, stripIndex))\r\n
|
|
return;\r\n\r\n const StripData stripData = GetStripDataFromStripIndex(stripIndex,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n\t\tInitStripAttributes(particleIndex, attributes,
|
|
stripData);\r\n\t\t// TODO Change seed to be sure we're deterministic on random
|
|
with strip\r\n#endif\r\n \r\n {\n SetAttribute_F0142CB9(
|
|
/*inout */attributes.lifetime, (float)4);\n }\n \n\r\n\t\t\r\n#if
|
|
VFX_USE_ALIVE_CURRENT\r\n if (attributes.alive)\r\n#endif \r\n
|
|
{\r\n#if USE_DEAD_LIST\r\n\t uint deadIndex = deadListIn.DecrementCounter();\r\n
|
|
uint index = deadListIn[deadIndex];\r\n#else\r\n uint index = particleIndex;\r\n#endif\r\n
|
|
attributeBuffer.Store((index * 0x1 + 0x0) << 2,asuint(attributes.lifetime));\n
|
|
attributeBuffer.Store((index * 0x1 + 0x4) << 2,asuint(attributes.size));\n
|
|
attributeBuffer.Store((index * 0x2 + 0x8) << 2,asuint(attributes.age));\n
|
|
attributeBuffer.Store((index * 0x2 + 0x9) << 2,uint(attributes.alive));\n
|
|
\n\r\n }\r\n }\r\n}\r\n"
|
|
- compute: 0
|
|
name: '[System 2]Output Particle Distortion Mesh'
|
|
source: "Shader \"Hidden/VFX/ShipCore-PowerDown/System 2/Output Particle Distortion
|
|
Mesh\"\n{\r\n\tSubShader\r\n\t{\t\r\n\t\tCull Off\r\n\t\t\r\n\t\tTags { \"Queue\"=\"Transparent\"
|
|
\"IgnoreProjector\"=\"True\" \"RenderType\"=\"Transparent\" }\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tBlend
|
|
One One\n\t\tZTest LEqual\n\t\tZWrite Off\n\t\tCull Back\n\t\t\n\t\n\t\t\t\n\t\tHLSLINCLUDE\n\t\t\n\t\t#define
|
|
NB_THREADS_PER_GROUP 64\n\t\t#define HAS_ATTRIBUTES 1\n\t\t#define VFX_PASSDEPTH_ACTUAL
|
|
(0)\n\t\t#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n\t\t#define VFX_PASSDEPTH_SELECTION
|
|
(2)\n\t\t#define VFX_USE_LIFETIME_CURRENT 1\n\t\t#define VFX_USE_SIZE_CURRENT
|
|
1\n\t\t#define VFX_USE_AGE_CURRENT 1\n\t\t#define VFX_USE_POSITION_CURRENT
|
|
1\n\t\t#define VFX_USE_ALPHA_CURRENT 1\n\t\t#define VFX_USE_ALIVE_CURRENT 1\n\t\t#define
|
|
VFX_USE_AXISX_CURRENT 1\n\t\t#define VFX_USE_AXISY_CURRENT 1\n\t\t#define VFX_USE_AXISZ_CURRENT
|
|
1\n\t\t#define VFX_USE_ANGLEX_CURRENT 1\n\t\t#define VFX_USE_ANGLEY_CURRENT
|
|
1\n\t\t#define VFX_USE_ANGLEZ_CURRENT 1\n\t\t#define VFX_USE_PIVOTX_CURRENT
|
|
1\n\t\t#define VFX_USE_PIVOTY_CURRENT 1\n\t\t#define VFX_USE_PIVOTZ_CURRENT
|
|
1\n\t\t#define VFX_USE_SCALEX_CURRENT 1\n\t\t#define VFX_USE_SCALEY_CURRENT
|
|
1\n\t\t#define VFX_USE_SCALEZ_CURRENT 1\n\t\t#define VFX_COLORMAPPING_DEFAULT
|
|
1\n\t\t#define IS_TRANSPARENT_PARTICLE 1\n\t\t#define VFX_BLENDMODE_ADD 1\n\t\t#define
|
|
USE_UV_SCALE_BIAS 1\n\t\t#define DISTORTION_SCREENSPACE 1\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t#define
|
|
VFX_LOCAL_SPACE 1\n\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\t\t\n\n\t\tCBUFFER_START(parameters)\n\t\t
|
|
float4 Alpha_a;\n\t\t float2 uvBias;\n\t\t uint2 PADDING_0;\n\t\tCBUFFER_END\n\t\t\n\t\tstruct
|
|
Attributes\n\t\t{\n\t\t float lifetime;\n\t\t float size;\n\t\t float
|
|
age;\n\t\t float3 position;\n\t\t float alpha;\n\t\t bool alive;\n\t\t
|
|
float3 axisX;\n\t\t float3 axisY;\n\t\t float3 axisZ;\n\t\t float
|
|
angleX;\n\t\t float angleY;\n\t\t float angleZ;\n\t\t float pivotX;\n\t\t
|
|
float pivotY;\n\t\t float pivotZ;\n\t\t float scaleX;\n\t\t float
|
|
scaleY;\n\t\t float scaleZ;\n\t\t};\n\t\t\n\t\tstruct SourceAttributes\n\t\t{\n\t\t};\n\t\t\n\t\tTexture2D
|
|
distortionBlurMap;\n\t\tSamplerState samplerdistortionBlurMap;\n\t\tfloat4
|
|
distortionBlurMap_TexelSize;\n\t\t\n\t\t\n\n\t\t\n\t\t#define VFX_NEEDS_COLOR_INTERPOLATOR
|
|
(VFX_USE_COLOR_CURRENT || VFX_USE_ALPHA_CURRENT)\n\t\t#if HAS_STRIPS\n\t\t#define
|
|
VFX_OPTIONAL_INTERPOLATION \n\t\t#else\n\t\t#define VFX_OPTIONAL_INTERPOLATION
|
|
nointerpolation\n\t\t#endif\n\t\t\n\t\tByteAddressBuffer attributeBuffer;\t\n\t\t\n\t\t#if
|
|
VFX_HAS_INDIRECT_DRAW\n\t\tStructuredBuffer<uint> indirectBuffer;\t\n\t\t#endif\t\n\t\t\n\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\tByteAddressBuffer deadListCount;\n\t\t#endif\n\t\t\n\t\t#if
|
|
HAS_STRIPS\n\t\tBuffer<uint> stripDataBuffer;\n\t\t#endif\n\t\t\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD
|
|
|| USE_MOTION_VECTORS_PASS\n\t\tByteAddressBuffer elementToVFXBufferPrevious;\n\t\t#endif\n\t\t\n\t\tCBUFFER_START(outputParams)\n\t\t\tfloat
|
|
nbMax;\n\t\t\tfloat systemSeed;\n\t\tCBUFFER_END\n\t\t\n\t\t// Helper macros
|
|
to always use a valid instanceID\n\t\t#if defined(UNITY_STEREO_INSTANCING_ENABLED)\n\t\t\t#define
|
|
VFX_DECLARE_INSTANCE_ID UNITY_VERTEX_INPUT_INSTANCE_ID\n\t\t\t#define VFX_GET_INSTANCE_ID(i)
|
|
unity_InstanceID\n\t\t#else\n\t\t\t#define VFX_DECLARE_INSTANCE_ID uint
|
|
instanceID : SV_InstanceID;\n\t\t\t#define VFX_GET_INSTANCE_ID(i) i.instanceID\n\t\t#endif\n\t\t\n\t\tENDHLSL\n\t\t\n\r\n\t\tPass\n\t\t{\t\t\n\t\t\tTags
|
|
{ \"LightMode\"=\"SceneSelectionPass\" }\n\t\t\n\t\t\tZWrite On\n\t\t\tBlend
|
|
Off\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#define VFX_PASSDEPTH VFX_PASSDEPTH_SELECTION\n\t\t\t\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t#define UNITY_MATERIAL_LIT\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\t\t\n\t\t\t\tfloat4
|
|
pos : SV_POSITION;\n\t\t\t\tfloat2 uv : TEXCOORD0;\t\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t
|
|
float4 uv1 : COLOR2;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t
|
|
float4 uv2 : COLOR3;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t
|
|
float4 uv3 : COLOR4;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t
|
|
float4 vertexColor : COLOR1;\n\t\t\t #endif\n\t\t\t\t#if USE_ALPHA_TEST
|
|
|| USE_FLIPBOOK_INTERPOLATION || VFX_USE_ALPHA_CURRENT\n\t\t\t\t// x: alpha
|
|
threshold\n\t\t\t\t// y: frame blending factor\n\t\t\t\t// z: alpha\n\t\t\t\t//
|
|
w: smoothness\n\t\t\t\tnointerpolation float4 builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t// x: motion vector scale u\n\t\t\t\t//
|
|
y: motion vector scale v\n\t\t\t\tnointerpolation float2 builtInInterpolants2
|
|
: TEXCOORD3;\n\t\t\t\t#endif\n\t\t\t\t#if defined(WRITE_NORMAL_BUFFER) || SHADERGRAPH_NEEDS_NORMAL_DEPTHONLY\n\t\t\t\tfloat3
|
|
normal : TEXCOORD4;\n\t\t\t\t#if SHADERGRAPH_NEEDS_TANGENT_DEPTHONLY\n\t\t\t\tfloat4
|
|
tangent : TEXCOORD5;\n\t\t\t\t#endif\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\tfloat4 cPosPrevious :
|
|
TEXCOORD6;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD7;\n\t\t\t\t#endif\n\t\t\t
|
|
\n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t\t#define VFX_VARYING_POSCS pos\n\t\t\t#define
|
|
VFX_VARYING_ALPHA builtInInterpolants.z\n\t\t\t#define VFX_VARYING_ALPHATHRESHOLD
|
|
builtInInterpolants.x\n\t\t\t#define VFX_VARYING_FRAMEBLEND builtInInterpolants.y\n\t\t\t#define
|
|
VFX_VARYING_MOTIONVECTORSCALE builtInInterpolants2.xy\n\t\t\t#define VFX_VARYING_UV
|
|
uv\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t\t#endif\n\t\t\t\n\t\t\t#if defined(WRITE_NORMAL_BUFFER)
|
|
|| SHADERGRAPH_NEEDS_NORMAL_DEPTHONLY\n\t\t\t#define VFX_VARYING_NORMAL normal\n\t\t\t#endif\n\t\t\t#ifdef
|
|
WRITE_NORMAL_BUFFER\n\t\t\t#define VFX_VARYING_SMOOTHNESS builtInInterpolants.w\n\t\t\t#endif\n\t\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_DEPTHONLY\n\t\t\t#define VFX_VARYING_TANGENT tangent\n\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\n\t\t\t\t\t\n\t\t\t#if
|
|
!(defined(VFX_VARYING_PS_INPUTS) && defined(VFX_VARYING_POSCS))\n\t\t\t#error
|
|
VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
AttributeFromCurve_7BA3F6A(inout float alpha, float age, float lifetime, float4
|
|
Alpha) /*attribute:alpha Composition:Overwrite AlphaComposition:Overwrite SampleMode:OverLife
|
|
Mode:PerComponent ColorMode:ColorAndAlpha channels:XYZ */\n\t\t\t{\n\t\t\t
|
|
float t = age / lifetime;\n\t\t\t float value = 0.0f;\n\t\t\t value =
|
|
SampleCurve(Alpha, t);\n\t\t\t alpha = value;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\tstruct
|
|
vs_input\n\t\t\t{\n\t\t\t\tfloat3 pos : POSITION;\n\t\t\t\tfloat2 uv : TEXCOORD0;\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t float4 uv1 : TEXCOORD1;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t float4 uv2 : TEXCOORD2;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t float4 uv3 : TEXCOORD3;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t float4 vertexColor : COLOR;\n\t\t\t
|
|
#endif\n\t\t\t\tfloat3 normal : NORMAL;\n\t\t\t\t#if defined(VFX_VARYING_TANGENT)
|
|
|| SHADERGRAPH_HAS_NORMAL\n\t\t\t\tfloat4 tangent : TANGENT;\n\t\t\t\t#endif\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#pragma
|
|
vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS vert(vs_input i)\n\t\t\t{\n\t\t\t
|
|
VFX_VARYING_PS_INPUTS o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t\tuint
|
|
index = VFX_GET_INSTANCE_ID(i);\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount
|
|
= 0;\n\t\t\t\t\t\t#if USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x4) << 2));\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x8) << 2));\n\t\t\t\t\t\tattributes.position = float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x9) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x9) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x4) << 2));\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x8) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\tAttributeFromCurve_7BA3F6A(
|
|
/*inout */attributes.alpha, attributes.age, attributes.lifetime, Alpha_a);\n\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\tif
|
|
(!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\to.VFX_VARYING_UV.xy
|
|
= i.uv;\n\t\t\t \n\t\t\t #if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t o.uv1
|
|
= i.uv1;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t
|
|
o.uv2 = i.uv2;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t
|
|
o.uv3 = i.uv3;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t
|
|
o.vertexColor = i.vertexColor;\n\t\t\t #endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = i.pos;\n\t\t\t\tfloat4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
vPos = mul(elementToVFX,float4(inputVertexPosition,1.0f)).xyz;\n\t\t\t\tfloat4
|
|
csPos = TransformPositionVFXToClip(vPos);\n\t\t\t\to.VFX_VARYING_POSCS = csPos;\n\t\t\t\t\n\t\t\t\tfloat3
|
|
normalWS = normalize(TransformDirectionVFXToWorld(mul((float3x3)elementToVFX,
|
|
i.normal)));\n\t\t\t\t#ifdef VFX_VARYING_NORMAL // TODO Should use inverse
|
|
transpose\n\t\t\t\to.VFX_VARYING_NORMAL = normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = float4(normalize(TransformDirectionVFXToWorld(mul((float3x3)elementToVFX,i.tangent.xyz))),i.tangent.w);\n\t\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\tfloat2
|
|
uvScale = (float2)0;\n\t\t\t\t\t\t{\n\t\t\t\t\t\t \n\t\t\t\t\t\t uvScale
|
|
= float2(1, 3);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t#define SHADERPASS
|
|
SHADERPASS_MOTION_VECTORS\n\t\t\t\t\t#else\n\t\t\t\t\t#define SHADERPASS SHADERPASS_DEPTH_ONLY\n\t\t\t\t\t#endif\n\t\t\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXLit.hlsl\"\n\t\t\t\t\t\n\t\t\t\t\t#ifndef
|
|
VFX_SHADERGRAPH\n\t\t\t\t\t\n\t\t\t\t\tvoid VFXGetHDRPLitData(out SurfaceData
|
|
surfaceData, out BuiltinData builtinData, out BSDFData bsdfData, out PreLightData
|
|
preLightData, VFX_VARYING_PS_INPUTS i, float3 normalWS, const VFXUVData uvData,
|
|
uint2 tileIndex)\n\t\t\t\t\t{\t\n\t\t\t\t\t\t#if HDRP_MATERIAL_TYPE_TRANSLUCENT\n\t\t\t\t\t\t
|
|
// Loads diffusion profile\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tconst uint diffusionProfileHash
|
|
= 0;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tfloat3 posRWS = VFXGetPositionRWS(i);\n\t\t\t\t\t\tfloat4
|
|
posSS = i.VFX_VARYING_POSCS;\n\t\t\t\t\t\tPositionInputs posInput = GetPositionInput(posSS.xy,
|
|
_ScreenSize.zw, posSS.z, posSS.w, posRWS, tileIndex);\n\t\t\t\t\t\t\n\t\t\t\t\t\tfloat
|
|
alpha;\n\t\t\t\t\t\tsurfaceData = VFXGetSurfaceData(i,normalWS,uvData,diffusionProfileHash,alpha);\t\n\t\t\t\t\t\tbsdfData
|
|
= ConvertSurfaceDataToBSDFData(posSS.xy, surfaceData);\n\t\t\t\t\t\n\t\t\t\t\t\tpreLightData
|
|
= GetPreLightData(GetWorldSpaceNormalizeViewDir(posRWS),posInput,bsdfData);\n\t\t\t\t\t\t\n\t\t\t\t\t\tpreLightData.diffuseFGD
|
|
= 1.0f;\n\t\t\t\t\t //TODO: investigate why this is needed\n\t\t\t\t\t
|
|
preLightData.coatPartLambdaV = 0;\n\t\t\t\t\t preLightData.coatIblR = 0;\n\t\t\t\t\t
|
|
preLightData.coatIblF = 0;\n\t\t\t\t\t \n\t\t\t\t\t\tbuiltinData = VFXGetBuiltinData(i,posInput,surfaceData,uvData,alpha);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvoid
|
|
VFXGetHDRPLitData(out SurfaceData surfaceData, out BuiltinData builtinData,
|
|
VFX_VARYING_PS_INPUTS i, float3 normalWS, const VFXUVData uvData)\n\t\t\t\t\t{\n\t\t\t\t\t\tBSDFData
|
|
bsdfData = (BSDFData)0;\n\t\t\t\t\t\tPreLightData preLightData = (PreLightData)0;\n\t\t\t\t\t\tpreLightData.diffuseFGD
|
|
= 1.0f;\n\t\t\t\t\t\tVFXGetHDRPLitData(surfaceData,builtinData,bsdfData,preLightData,i,normalWS,uvData,uint2(0,0));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXLitPixelOutput.hlsl\"\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\tint _ObjectId;\n\t\t\t\t\tint
|
|
_PassValue;\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#pragma fragment frag\n\t\t\t\t\tvoid
|
|
frag(ps_input i\n\t\t\t\t\t#if USE_DOUBLE_SIDED\n\t\t\t\t\t\t, bool frontFace
|
|
: SV_IsFrontFace\n\t\t\t\t\t#endif\n\t\t\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t\t#ifdef
|
|
WRITE_MSAA_DEPTH\n\t\t\t\t\t\t// We need the depth color as SV_Target0 for
|
|
alpha to coverage\n\t\t\t\t\t\t, out float4 outDepthColor : SV_Target0\n\t\t\t\t\t\t,
|
|
out float4 outMotionVector : SV_Target1\n\t\t\t\t\t\t\t#ifdef WRITE_NORMAL_BUFFER\n\t\t\t\t\t\t\t,
|
|
out float4 outNormalBuffer : SV_Target2\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t//
|
|
When no MSAA, the motion vector is always the first buffer\n\t\t\t\t\t\t, out
|
|
float4 outMotionVector : SV_Target0\n\t\t\t\t\t\t\t#ifdef WRITE_NORMAL_BUFFER\n\t\t\t\t\t\t\t,
|
|
out float4 outNormalBuffer : SV_Target1\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t#elif
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t\t#ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t\t//
|
|
We need the depth color as SV_Target0 for alpha to coverage\n\t\t\t\t\t\t,
|
|
out float4 outDepthColor : SV_Target0\n\t\t\t\t\t\t\t#ifdef WRITE_NORMAL_BUFFER\n\t\t\t\t\t\t\t,
|
|
out float4 outNormalBuffer : SV_Target1\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#elif
|
|
defined(WRITE_NORMAL_BUFFER)\n\t\t\t\t\t\t, out float4 outNormalBuffer : SV_Target0\n\t\t\t\t\t\t#endif\n\t\t\t\t\t#elif
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t , out float4 outColor
|
|
: SV_Target0\n\t\t\t\t\t#endif\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\t\t\t\t\t\t#if USE_DOUBLE_SIDED\n\t\t\t\t\t\t\t\t\tconst
|
|
float faceMul = frontFace ? 1.0f : -1.0f;\n\t\t\t\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t\t\tconst
|
|
float faceMul = 1.0f;\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat3
|
|
normalWS = normalize(i.VFX_VARYING_NORMAL * faceMul);\n\t\t\t\t\t\t\t\t\tconst
|
|
VFXUVData uvData = GetUVData(i);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\t\t\t\t\t\tfloat3 tangentWS = normalize(i.VFX_VARYING_TANGENT.xyz);\n\t\t\t\t\t\t\t\t\tfloat3
|
|
bitangentWS = cross(normalWS,tangentWS) * (i.VFX_VARYING_TANGENT.w * faceMul);\n\t\t\t\t\t\t\t\t\tfloat3x3
|
|
tbn = float3x3(tangentWS,bitangentWS,normalWS);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t#if
|
|
USE_NORMAL_MAP\n\t\t\t\t\t\t\t\t\tfloat3 n = SampleNormalMap(VFX_SAMPLER(normalMap),uvData);\n\t\t\t\t\t\t\t\t\tfloat
|
|
normalScale = 1.0f;\n\t\t\t\t\t\t\t\t\t#ifdef VFX_VARYING_NORMALSCALE\n\t\t\t\t\t\t\t\t\tnormalScale
|
|
= i.VFX_VARYING_NORMALSCALE;\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\tnormalWS
|
|
= normalize(lerp(normalWS,mul(n,tbn),normalScale));\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_SHADERGRAPH\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t
|
|
float alpha = OUTSG.;\n\t\t\t\t\t #else\n\t\t\t\t\t\t\n\t\t\t\t\t\tfloat
|
|
alpha = VFXGetFragmentColor(i).a;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if HDRP_USE_BASE_COLOR_MAP_ALPHA\n\t\t\t\t\t\t\talpha
|
|
*= VFXGetTextureColor(VFX_SAMPLER(baseColorMap),i).a;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t
|
|
#endif\n\t\t\t\t\t\tVFXClipFragmentColor(alpha,i);\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
WRITE_NORMAL_BUFFER\n\t\t\t\t\t #ifndef VFX_SHADERGRAPH\n\t\t\t\t\t
|
|
VFXComputePixelOutputToNormalBuffer(i,normalWS,uvData,outNormalBuffer);\n\t\t\t\t\t
|
|
#else\n\t\t\t\t\t #if HAS_SHADERGRAPH_PARAM_NORMAL\n\t\t\t\t\t
|
|
float3 n = OUTSG.Normal_8;\n\t\t\t\t\t normalWS = mul(n,tbn);\n\t\t\t\t\t
|
|
#endif\n\t\t\t\t\t SurfaceData surface = (SurfaceData)0;\n\t\t\t\t\t
|
|
surface.normalWS = normalWS;\n\t\t\t\t\t EncodeIntoNormalBuffer(ConvertSurfaceDataToNormalData(surface),
|
|
i.VFX_VARYING_POSCS.xy, outNormalBuffer);\n\t\t\t\t\t #endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\toutDepthColor = i.VFX_VARYING_POSCS.z;\n\t\t\t\t\t\t\t#if
|
|
VFX_USE_ALPHA_TO_MASK\n\t\t\t\t\t\t\t\toutDepthColor.a = alpha;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat2
|
|
velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w) -
|
|
(i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\t\t\t\tVFXEncodeMotionVector(velocity
|
|
* 0.5f, encodedMotionVector);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\toutMotionVector
|
|
= encodedMotionVector;\n\t\t\t\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t\t\t//
|
|
We use depth prepass for scene selection in the editor, this code allow to
|
|
output the outline correctly\n\t\t\t\t\t\t\toutColor = float4(_ObjectId, _PassValue,
|
|
1.0, 1.0);\n\t\t\t\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t\t\t//void\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t#error
|
|
VFX_PASSDEPTH undefined\n\t\t\t\t\t\t#endif\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t//
|
|
Distortion pass\n\t\tPass\n\t\t{\t\t\n\t\t\tTags { \"LightMode\"=\"DistortionVectors\"
|
|
}\n\t\t\n\t\t Stencil\n\t\t {\n\t\t WriteMask 4\n\t\t Ref 4\n\t\t
|
|
Comp Always\n\t\t Pass Replace\n\t\t }\n\n\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t#pragma multi_compile _ DEBUG_DISPLAY\n\t\t\t\n\t\t\t#define
|
|
USE_NORMAL_MAP DISTORTION_NORMALBASED\n\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4
|
|
pos : SV_POSITION;\n\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4
|
|
uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2 uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\n\t\t\t\t#if
|
|
USE_SOFT_PARTICLE || VFX_USE_ALPHA_CURRENT || USE_FLIPBOOK_INTERPOLATION\n\t\t\t\t//
|
|
x: inverse soft particles fade distance\n\t\t\t\t// y: alpha threshold\n\t\t\t\t//
|
|
z: frame blending factor\n\t\t\t\t// w: alpha\n\t\t\t\tnointerpolation float4
|
|
builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vector scale u\n\t\t\t\t// y: motion vector scale v\n\t\t\t\tnointerpolation
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\n\t\t\t\t//
|
|
x: horizontal value / normal scale\n\t\t\t\t// y: vertical value \n\t\t\t\t//
|
|
z: blur scale\n\t\t\t\tnointerpolation float3 distortionInterpolants : TEXCOORD3;\n\t\t\n\t\t\t\t#if
|
|
USE_SOFT_PARTICLE\n\t\t\t\tfloat4 projPos : TEXCOORD4;\n\t\t\t\t#endif\n\t\t\n\t\t\t\t#if
|
|
DISTORTION_NORMALBASED\n\t\t\t\tfloat3 normal : TEXCOORD5;\n\t\t\t\tfloat4
|
|
tangent : TEXCOORD6;\n\t\t\t\t#endif\n\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\n\t\t\tstruct
|
|
ps_output\n\t\t\t{\n\t\t\t\tfloat4 distortion : SV_Target0;\n\t\t\t};\n\t\t\n\t\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t\t#define VFX_VARYING_POSCS pos\n\t\t\t#define
|
|
VFX_VARYING_POSSS projPos\n\t\t\t#define VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
builtInInterpolants.x\n\t\t\t#define VFX_VARYING_ALPHATHRESHOLD builtInInterpolants.y\n\t\t\t#define
|
|
VFX_VARYING_FRAMEBLEND builtInInterpolants.z\n\t\t\t#define VFX_VARYING_MOTIONVECTORSCALE
|
|
builtInInterpolants2.xy\n\t\t\t#define VFX_VARYING_ALPHA builtInInterpolants.w\n\t\t#if
|
|
DISTORTION_NORMALBASED\n\t\t\t#define VFX_VARYING_NORMAL normal\n\t\t\t#define
|
|
VFX_VARYING_TANGENT tangent\n\t\t#endif\n\t\t\t#define VFX_VARYING_UV uv\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\t#if
|
|
!(defined(VFX_VARYING_PS_INPUTS) && defined(VFX_VARYING_POSCS))\n\t\t\t#error
|
|
VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
AttributeFromCurve_7BA3F6A(inout float alpha, float age, float lifetime, float4
|
|
Alpha) /*attribute:alpha Composition:Overwrite AlphaComposition:Overwrite SampleMode:OverLife
|
|
Mode:PerComponent ColorMode:ColorAndAlpha channels:XYZ */\n\t\t\t{\n\t\t\t
|
|
float t = age / lifetime;\n\t\t\t float value = 0.0f;\n\t\t\t value =
|
|
SampleCurve(Alpha, t);\n\t\t\t alpha = value;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\tstruct
|
|
vs_input\n\t\t\t{\n\t\t\t\tfloat3 pos : POSITION;\n\t\t\t\tfloat2 uv : TEXCOORD0;\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t float4 uv1 : TEXCOORD1;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t float4 uv2 : TEXCOORD2;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t float4 uv3 : TEXCOORD3;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t float4 vertexColor : COLOR;\n\t\t\t
|
|
#endif\n\t\t\t\tfloat3 normal : NORMAL;\n\t\t\t\t#if defined(VFX_VARYING_TANGENT)
|
|
|| SHADERGRAPH_HAS_NORMAL\n\t\t\t\tfloat4 tangent : TANGENT;\n\t\t\t\t#endif\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#pragma
|
|
vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS vert(vs_input i)\n\t\t\t{\n\t\t\t
|
|
VFX_VARYING_PS_INPUTS o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t\tuint
|
|
index = VFX_GET_INSTANCE_ID(i);\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount
|
|
= 0;\n\t\t\t\t\t\t#if USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x4) << 2));\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x8) << 2));\n\t\t\t\t\t\tattributes.position = float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x9) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x9) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x4) << 2));\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x8) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\tAttributeFromCurve_7BA3F6A(
|
|
/*inout */attributes.alpha, attributes.age, attributes.lifetime, Alpha_a);\n\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\tif
|
|
(!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\to.VFX_VARYING_UV.xy
|
|
= i.uv;\n\t\t\t \n\t\t\t #if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t o.uv1
|
|
= i.uv1;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t
|
|
o.uv2 = i.uv2;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t
|
|
o.uv3 = i.uv3;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t
|
|
o.vertexColor = i.vertexColor;\n\t\t\t #endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = i.pos;\n\t\t\t\tfloat4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
vPos = mul(elementToVFX,float4(inputVertexPosition,1.0f)).xyz;\n\t\t\t\tfloat4
|
|
csPos = TransformPositionVFXToClip(vPos);\n\t\t\t\to.VFX_VARYING_POSCS = csPos;\n\t\t\t\t\n\t\t\t\tfloat3
|
|
normalWS = normalize(TransformDirectionVFXToWorld(mul((float3x3)elementToVFX,
|
|
i.normal)));\n\t\t\t\t#ifdef VFX_VARYING_NORMAL // TODO Should use inverse
|
|
transpose\n\t\t\t\to.VFX_VARYING_NORMAL = normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = float4(normalize(TransformDirectionVFXToWorld(mul((float3x3)elementToVFX,i.tangent.xyz))),i.tangent.w);\n\t\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\tfloat2
|
|
uvScale = (float2)0;\n\t\t\t\t\t\t{\n\t\t\t\t\t\t \n\t\t\t\t\t\t uvScale
|
|
= float2(1, 3);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t#if
|
|
DISTORTION_SCREENSPACE\n\t\t\t\t\t\t\t\t\t\t\t\tfloat2 distortionScale = (float2)0;\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t
|
|
\n\t\t\t\t\t\t\t\t\t\t\t\t distortionScale = float2(16, 16);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\to.distortionInterpolants.xy
|
|
= distortionScale;\n\t\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t#if
|
|
DISTORTION_NORMALBASED\n\t\t\t\t\t\t\t\t\t\t\t\tfloat2 distortionScale = (float2)0;\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t
|
|
\n\t\t\t\t\t\t\t\t\t\t\t\t distortionScale = float2(16, 16);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\to.distortionInterpolants.x
|
|
= distortionScale;\n\t\t\t\t\t\t\t\t\t\t\t\to.distortionInterpolants.y = 0.0;\n\t\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tfloat
|
|
blurScale = (float)0;\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t
|
|
\n\t\t\t\t\t\t\t\t\t\t\t\t blurScale = (float)0.100000001;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\to.distortionInterpolants.z
|
|
= blurScale;\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t#if DISTORTION_SCALE_BY_DISTANCE\n\t\t\t\t\t\t\t\t\t\t\t\t//
|
|
Scale Distortion by Distance\n\t\t\t\t\t\t\t\t\t\t\t\tfloat clipPosW = o.VFX_VARYING_POSCS.w;\n\t\t\t\t\t\t\t\t\t\t\t\to.distortionInterpolants.xy
|
|
/= clipPosW;\n\t\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t#pragma
|
|
fragment frag\n\t\t\tps_output frag(ps_input i)\n\t\t\t{\n\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\tps_output
|
|
o = (ps_output)0;\n\t\t\t\tVFXTransformPSInputs(i);\n\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat2
|
|
distortion;\n\t\t\t\t\t\t\t\t\tfloat blur;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
DISTORTION_SCREENSPACE\n\t\t\t\t\t\t\t\t\tfloat3 smpDistort = VFXGetTextureColor(VFX_SAMPLER(distortionBlurMap),i).xyz;\n\t\t\t\t\t\t\t\t\tdistortion
|
|
= (smpDistort.xy * 2.0 - 1.0) * i.distortionInterpolants.xy;\n\t\t\t\t\t\t\t\t\tblur
|
|
= smpDistort.z * i.distortionInterpolants.z;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
DISTORTION_NORMALBASED\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\t\t\t\t\t\t\t\t\t#if USE_DOUBLE_SIDED\n\t\t\t\t\t\t\t\t\t\t\t\tconst
|
|
float faceMul = frontFace ? 1.0f : -1.0f;\n\t\t\t\t\t\t\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t\t\t\t\t\tconst
|
|
float faceMul = 1.0f;\n\t\t\t\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tfloat3
|
|
normalWS = normalize(i.VFX_VARYING_NORMAL * faceMul);\n\t\t\t\t\t\t\t\t\t\t\t\tconst
|
|
VFXUVData uvData = GetUVData(i);\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\t\t\t\t\t\t\t\t\tfloat3 tangentWS = normalize(i.VFX_VARYING_TANGENT.xyz);\n\t\t\t\t\t\t\t\t\t\t\t\tfloat3
|
|
bitangentWS = cross(normalWS,tangentWS) * (i.VFX_VARYING_TANGENT.w * faceMul);\n\t\t\t\t\t\t\t\t\t\t\t\tfloat3x3
|
|
tbn = float3x3(tangentWS,bitangentWS,normalWS);\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t#if
|
|
USE_NORMAL_MAP\n\t\t\t\t\t\t\t\t\t\t\t\tfloat3 n = SampleNormalMap(VFX_SAMPLER(normalMap),uvData);\n\t\t\t\t\t\t\t\t\t\t\t\tfloat
|
|
normalScale = 1.0f;\n\t\t\t\t\t\t\t\t\t\t\t\t#ifdef VFX_VARYING_NORMALSCALE\n\t\t\t\t\t\t\t\t\t\t\t\tnormalScale
|
|
= i.VFX_VARYING_NORMALSCALE;\n\t\t\t\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\t\t\t\tnormalWS
|
|
= normalize(lerp(normalWS,mul(n,tbn),normalScale));\n\t\t\t\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat3
|
|
viewNormal = mul(VFXGetWorldToViewRotMatrix(),normalWS);\n\t\t\t\t\t\t\t\t\tfloat
|
|
smpSmoothness = VFXGetTextureColor(VFX_SAMPLER(smoothnessMap),i).a;\n\t\t\t\t\t\t\t\t\tfloat
|
|
smpMask = VFXGetTextureColor(VFX_SAMPLER(alphaMask),i).a;\n\t\t\t\t\t\t\t\t\tdistortion
|
|
= viewNormal.xy * i.distortionInterpolants.x * smpMask;\n\t\t\t\t\t\t\t\t\tblur
|
|
= (1.0-smpSmoothness) * i.distortionInterpolants.z * smpMask; \n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\tfloat
|
|
fade = VFXGetSoftParticleFade(i);\n\t\t\t\t\t\t\t\t\to.distortion.xyw = fade
|
|
* i.VFX_VARYING_ALPHA * float3(distortion.xy, blur);\n\t\t\t\t\t\t\t\t\to.distortion.z
|
|
= 1.0;\n\t\t\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t}\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t}\r\n}\r\n"
|
|
- compute: 0
|
|
name: '[System 2]Output Particle Quad'
|
|
source: "Shader \"Hidden/VFX/ShipCore-PowerDown/System 2/Output Particle Quad\"\n{\r\n\tSubShader\r\n\t{\t\r\n\t\tCull
|
|
Off\r\n\t\t\r\n\t\tTags { \"Queue\"=\"Transparent+0\" \"IgnoreProjector\"=\"True\"
|
|
\"RenderType\"=\"Transparent\" }\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tBlend
|
|
SrcAlpha OneMinusSrcAlpha \n\t\tZTest LEqual\n\t\tZWrite Off\n\t\tCull Off\n\t\t\n\t\n\t\t\t\n\t\tHLSLINCLUDE\n\t\t\n\t\t#define
|
|
NB_THREADS_PER_GROUP 64\n\t\t#define HAS_ATTRIBUTES 1\n\t\t#define VFX_PASSDEPTH_ACTUAL
|
|
(0)\n\t\t#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n\t\t#define VFX_PASSDEPTH_SELECTION
|
|
(2)\n\t\t#define VFX_USE_LIFETIME_CURRENT 1\n\t\t#define VFX_USE_SIZE_CURRENT
|
|
1\n\t\t#define VFX_USE_AGE_CURRENT 1\n\t\t#define VFX_USE_POSITION_CURRENT
|
|
1\n\t\t#define VFX_USE_ALPHA_CURRENT 1\n\t\t#define VFX_USE_ALIVE_CURRENT 1\n\t\t#define
|
|
VFX_USE_AXISX_CURRENT 1\n\t\t#define VFX_USE_AXISY_CURRENT 1\n\t\t#define VFX_USE_AXISZ_CURRENT
|
|
1\n\t\t#define VFX_USE_ANGLEX_CURRENT 1\n\t\t#define VFX_USE_ANGLEY_CURRENT
|
|
1\n\t\t#define VFX_USE_ANGLEZ_CURRENT 1\n\t\t#define VFX_USE_PIVOTX_CURRENT
|
|
1\n\t\t#define VFX_USE_PIVOTY_CURRENT 1\n\t\t#define VFX_USE_PIVOTZ_CURRENT
|
|
1\n\t\t#define VFX_USE_SCALEX_CURRENT 1\n\t\t#define VFX_USE_SCALEY_CURRENT
|
|
1\n\t\t#define VFX_USE_SCALEZ_CURRENT 1\n\t\t#define VFX_USE_COLOR_CURRENT
|
|
1\n\t\t#define VFX_COLORMAPPING_DEFAULT 1\n\t\t#define IS_TRANSPARENT_PARTICLE
|
|
1\n\t\t#define VFX_BLENDMODE_ALPHA 1\n\t\t#define VFX_HAS_INDIRECT_DRAW 1\n\t\t#define
|
|
VFX_BYPASS_EXPOSURE 1\n\t\t#define USE_DEAD_LIST_COUNT 1\n\t\t#define VFX_PRIMITIVE_QUAD
|
|
1\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t#define
|
|
VFX_LOCAL_SPACE 1\n\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\t\t\n\n\t\tCBUFFER_START(parameters)\n\t\t
|
|
float4 Alpha_b;\n\t\tCBUFFER_END\n\t\t\n\t\tstruct Attributes\n\t\t{\n\t\t
|
|
float lifetime;\n\t\t float size;\n\t\t float age;\n\t\t float3 position;\n\t\t
|
|
float alpha;\n\t\t bool alive;\n\t\t float3 axisX;\n\t\t float3 axisY;\n\t\t
|
|
float3 axisZ;\n\t\t float angleX;\n\t\t float angleY;\n\t\t float
|
|
angleZ;\n\t\t float pivotX;\n\t\t float pivotY;\n\t\t float pivotZ;\n\t\t
|
|
float scaleX;\n\t\t float scaleY;\n\t\t float scaleZ;\n\t\t float3
|
|
color;\n\t\t};\n\t\t\n\t\tstruct SourceAttributes\n\t\t{\n\t\t};\n\t\t\n\t\tTexture2D
|
|
mainTexture;\n\t\tSamplerState samplermainTexture;\n\t\tfloat4 mainTexture_TexelSize;\n\t\t\n\t\t\n\n\t\t\n\t\t#define
|
|
VFX_NEEDS_COLOR_INTERPOLATOR (VFX_USE_COLOR_CURRENT || VFX_USE_ALPHA_CURRENT)\n\t\t#if
|
|
HAS_STRIPS\n\t\t#define VFX_OPTIONAL_INTERPOLATION \n\t\t#else\n\t\t#define
|
|
VFX_OPTIONAL_INTERPOLATION nointerpolation\n\t\t#endif\n\t\t\n\t\tByteAddressBuffer
|
|
attributeBuffer;\t\n\t\t\n\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\tStructuredBuffer<uint>
|
|
indirectBuffer;\t\n\t\t#endif\t\n\t\t\n\t\t#if USE_DEAD_LIST_COUNT\n\t\tByteAddressBuffer
|
|
deadListCount;\n\t\t#endif\n\t\t\n\t\t#if HAS_STRIPS\n\t\tBuffer<uint> stripDataBuffer;\n\t\t#endif\n\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD || USE_MOTION_VECTORS_PASS\n\t\tByteAddressBuffer
|
|
elementToVFXBufferPrevious;\n\t\t#endif\n\t\t\n\t\tCBUFFER_START(outputParams)\n\t\t\tfloat
|
|
nbMax;\n\t\t\tfloat systemSeed;\n\t\tCBUFFER_END\n\t\t\n\t\t// Helper macros
|
|
to always use a valid instanceID\n\t\t#if defined(UNITY_STEREO_INSTANCING_ENABLED)\n\t\t\t#define
|
|
VFX_DECLARE_INSTANCE_ID UNITY_VERTEX_INPUT_INSTANCE_ID\n\t\t\t#define VFX_GET_INSTANCE_ID(i)
|
|
unity_InstanceID\n\t\t#else\n\t\t\t#define VFX_DECLARE_INSTANCE_ID uint
|
|
instanceID : SV_InstanceID;\n\t\t\t#define VFX_GET_INSTANCE_ID(i) i.instanceID\n\t\t#endif\n\t\t\n\t\tENDHLSL\n\t\t\n\r\n\t\tPass\n\t\t{\t\t\n\t\t\tTags
|
|
{ \"LightMode\"=\"SceneSelectionPass\" }\n\t\t\n\t\t\tZWrite On\n\t\t\tBlend
|
|
Off\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#define VFX_PASSDEPTH VFX_PASSDEPTH_SELECTION\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos : SV_POSITION;\n\t\t\t\t#if
|
|
USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if USE_ALPHA_TEST || USE_FLIPBOOK_INTERPOLATION
|
|
|| VFX_USE_ALPHA_CURRENT\n\t\t\t\t// x: alpha threshold\n\t\t\t\t// y: frame
|
|
blending factor\n\t\t\t\t// z: alpha\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION float3
|
|
builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\tfloat4 cPosPrevious :
|
|
TEXCOORD3;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD4;\n\t\t\t\t#endif\n\t\t\t
|
|
\n\t\t\t #if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t float3 posWS : TEXCOORD5;\n\t\t\t
|
|
#endif\n\t\t\t \n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t\t#define VFX_VARYING_POSCS pos\n\t\t\t#define
|
|
VFX_VARYING_ALPHA builtInInterpolants.z\n\t\t\t#define VFX_VARYING_ALPHATHRESHOLD
|
|
builtInInterpolants.x\n\t\t\t#define VFX_VARYING_FRAMEBLEND builtInInterpolants.y\n\t\t\t#define
|
|
VFX_VARYING_MOTIONVECTORSCALE builtInInterpolants2.xy\n\t\t\t#define VFX_VARYING_UV
|
|
uv\n\t\t\t\n\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t#define VFX_VARYING_POSWS
|
|
posWS\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_MOTION_VECTORS\n\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_DEPTH_ONLY\n\t\t\t#endif\n\t\t\t\n\t\t\t#if !(defined(VFX_VARYING_PS_INPUTS)
|
|
&& defined(VFX_VARYING_POSCS))\n\t\t\t#error VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS
|
|
and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
Orient_4(inout float3 axisX, inout float3 axisY, inout float3 axisZ) /*mode:FaceCameraPlane
|
|
axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t float3x3 viewRot = GetVFXToViewRotMatrix();\n\t\t\t
|
|
axisX = viewRot[0].xyz;\n\t\t\t axisY = viewRot[1].xyz;\n\t\t\t #if VFX_LOCAL_SPACE
|
|
// Need to remove potential scale in local transform\n\t\t\t axisX = normalize(axisX);\n\t\t\t
|
|
axisY = normalize(axisY);\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
#else\n\t\t\t axisZ = -viewRot[2].xyz;\n\t\t\t #endif\n\t\t\t \n\t\t\t}\n\t\t\tvoid
|
|
AttributeFromCurve_7BA3F6A(inout float alpha, float age, float lifetime, float4
|
|
Alpha) /*attribute:alpha Composition:Overwrite AlphaComposition:Overwrite SampleMode:OverLife
|
|
Mode:PerComponent ColorMode:ColorAndAlpha channels:XYZ */\n\t\t\t{\n\t\t\t
|
|
float t = age / lifetime;\n\t\t\t float value = 0.0f;\n\t\t\t value =
|
|
SampleCurve(Alpha, t);\n\t\t\t alpha = value;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if
|
|
defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error VFX_PRIMITIVE_QUAD
|
|
must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\n\n\t\t\t\treturn attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3
|
|
GetStripTangent(float3 currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x4) << 2));\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x8) << 2));\n\t\t\t\t\t\tattributes.position = float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x9) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x9) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x4) << 2));\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x8) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\tOrient_4(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ);\n\t\t\t\tAttributeFromCurve_7BA3F6A(
|
|
/*inout */attributes.alpha, attributes.age, attributes.lifetime, Alpha_b);\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\tif (!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#define
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 1\n\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t#ifndef
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t#define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH
|
|
0\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\tint _ObjectId;\n\t\t\t\t\tint
|
|
_PassValue;\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#pragma fragment frag\n\t\t\t\t\tvoid
|
|
frag(ps_input i\n\t\t\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t
|
|
#ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t // We need the depth color as SV_Target0
|
|
for alpha to coverage\n\t\t\t\t\t , out float4 outDepthColor : SV_Target0\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target1\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
// When no MSAA, the motion vector is always the first buffer\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t #ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t
|
|
, out float4 outDepthColor : SV_Target0\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
, out float4 dummy : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t , out float4 outSelection : SV_Target0\n\t\t\t\t\t#endif\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\t
|
|
#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t
|
|
float alpha = OUTSG.;\n\t\t\t\t\t #else\n\t\t\t\t\t float alpha =
|
|
VFXGetFragmentColor(i).a;\n\t\t\t\t\t\t\t#if VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t\t\t\talpha
|
|
*= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t
|
|
#endif\n\t\t\t\t\t\tVFXClipFragmentColor(alpha,i);\n\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\toutDepthColor = i.VFX_VARYING_POSCS.z;\n\t\t\t\t\t\t\t#if
|
|
VFX_USE_ALPHA_TO_MASK\n\t\t\t\t\t\t\t\toutDepthColor.a = alpha;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat2
|
|
velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w) -
|
|
(i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\t\t\t\tVFXEncodeMotionVector(velocity
|
|
* 0.5f, encodedMotionVector);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\toutMotionVector
|
|
= encodedMotionVector;\n\t\t\t\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t\t\toutSelection
|
|
= float4(_ObjectId, _PassValue, 1.0, 1.0);\n\t\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t\t\t#ifndef WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\t\tdummy
|
|
= (float4)0;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t#error
|
|
VFX_PASSDEPTH undefined \n\t\t\t\t\t\t#endif\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\n\t\t\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t\t\r\n\t\t//
|
|
Forward pass\n\t\tPass\n\t\t{\t\t\n\t\t\tTags { \"LightMode\"=\"ForwardOnly\"
|
|
}\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#pragma target 4.5\n\t\t\t#pragma multi_compile
|
|
_ DEBUG_DISPLAY\n\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos :
|
|
SV_POSITION;\n\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_COLOR_INTERPOLATOR\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 color : COLOR0;\n\t\t\t\t#endif\n\t\t\t\t#if USE_SOFT_PARTICLE || USE_ALPHA_TEST
|
|
|| USE_FLIPBOOK_INTERPOLATION || USE_EXPOSURE_WEIGHT || WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t//
|
|
x: inverse soft particles fade distance\n\t\t\t\t// y: alpha threshold\n\t\t\t\t//
|
|
z: frame blending factor\n\t\t\t\t// w: exposure weight\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t\tfloat3
|
|
posWS : TEXCOORD3;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
cPosPrevious : TEXCOORD4;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD5;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t\t\tfloat3 normal : TEXCOORD6;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t\t\tfloat3 tangent : TEXCOORD7;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t
|
|
\n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\tstruct
|
|
ps_output\n\t\t\t{\n\t\t\t\tfloat4 color : SV_Target0;\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
outMotionVector : SV_Target1;\n\t\t#endif\n\t\t\t};\n\t\t\n\t\t#define VFX_VARYING_PS_INPUTS
|
|
ps_input\n\t\t#define VFX_VARYING_POSCS pos\n\t\t#define VFX_VARYING_COLOR
|
|
color.rgb\n\t\t#define VFX_VARYING_ALPHA color.a\n\t\t#define VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
builtInInterpolants.x\n\t\t#define VFX_VARYING_ALPHATHRESHOLD builtInInterpolants.y\n\t\t#define
|
|
VFX_VARYING_FRAMEBLEND builtInInterpolants.z\n\t\t#define VFX_VARYING_MOTIONVECTORSCALE
|
|
builtInInterpolants2.xy\n\t\t#define VFX_VARYING_UV uv\n\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t#define
|
|
VFX_VARYING_POSWS posWS\n\t\t#endif\n\t\t#if USE_EXPOSURE_WEIGHT\n\t\t#define
|
|
VFX_VARYING_EXPOSUREWEIGHT builtInInterpolants.w\n\t\t#endif\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t#endif\n\t\t\n\t\t#define SHADERPASS SHADERPASS_FORWARD_UNLIT\n\t\t\t\n\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t#define VFX_VARYING_NORMAL normal\n\t\t#endif\n\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t#define VFX_VARYING_TANGENT tangent\n\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
!(defined(VFX_VARYING_PS_INPUTS) && defined(VFX_VARYING_POSCS))\n\t\t\t#error
|
|
VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
Orient_4(inout float3 axisX, inout float3 axisY, inout float3 axisZ) /*mode:FaceCameraPlane
|
|
axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t float3x3 viewRot = GetVFXToViewRotMatrix();\n\t\t\t
|
|
axisX = viewRot[0].xyz;\n\t\t\t axisY = viewRot[1].xyz;\n\t\t\t #if VFX_LOCAL_SPACE
|
|
// Need to remove potential scale in local transform\n\t\t\t axisX = normalize(axisX);\n\t\t\t
|
|
axisY = normalize(axisY);\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
#else\n\t\t\t axisZ = -viewRot[2].xyz;\n\t\t\t #endif\n\t\t\t \n\t\t\t}\n\t\t\tvoid
|
|
AttributeFromCurve_7BA3F6A(inout float alpha, float age, float lifetime, float4
|
|
Alpha) /*attribute:alpha Composition:Overwrite AlphaComposition:Overwrite SampleMode:OverLife
|
|
Mode:PerComponent ColorMode:ColorAndAlpha channels:XYZ */\n\t\t\t{\n\t\t\t
|
|
float t = age / lifetime;\n\t\t\t float value = 0.0f;\n\t\t\t value =
|
|
SampleCurve(Alpha, t);\n\t\t\t alpha = value;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if
|
|
defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error VFX_PRIMITIVE_QUAD
|
|
must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\n\n\t\t\t\treturn attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3
|
|
GetStripTangent(float3 currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x4) << 2));\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x8) << 2));\n\t\t\t\t\t\tattributes.position = float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x9) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x9) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x4) << 2));\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x8) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\tOrient_4(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ);\n\t\t\t\tAttributeFromCurve_7BA3F6A(
|
|
/*inout */attributes.alpha, attributes.age, attributes.lifetime, Alpha_b);\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\tif (!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t\t\n\t\t#endif\n\t\t\t\t\n\t\t\t#pragma fragment frag\n\t\t\tps_output
|
|
frag(ps_input i)\n\t\t\t{\n\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\tps_output
|
|
o = (ps_output)0;\n\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\n\t\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\t\t\t\t#if USE_DOUBLE_SIDED\n\t\t\t\t\t\t\tconst
|
|
float faceMul = frontFace ? 1.0f : -1.0f;\n\t\t\t\t\t\t\t#else\n\t\t\t\t\t\t\tconst
|
|
float faceMul = 1.0f;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3
|
|
normalWS = i.VFX_VARYING_NORMAL * faceMul;\n\t\t\t\t\t\t\tconst VFXUVData uvData
|
|
= GetUVData(i);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_TANGENT\n\t\t\t\t\t\t\tfloat3
|
|
tangentWS = i.VFX_VARYING_TANGENT;\n\t\t\t\t\t\t\tfloat3 bitangentWS = cross(i.VFX_VARYING_TANGENT,i.VFX_VARYING_NORMAL);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_BENTFACTORS) && USE_NORMAL_BENDING\t\n\t\t\t\t\t\t\tfloat3
|
|
bentFactors = float3(i.VFX_VARYING_BENTFACTORS.xy,sqrt(1.0f - dot(i.VFX_VARYING_BENTFACTORS,i.VFX_VARYING_BENTFACTORS)));\n\t\t\t\t\t\t\tnormalWS
|
|
= tangentWS * bentFactors.x + bitangentWS * bentFactors.y + normalWS * bentFactors.z;\n\t\t\t\t\t\t\ttangentWS
|
|
= normalize(cross(normalWS,bitangentWS));\n\t\t\t\t\t\t\tbitangentWS = cross(tangentWS,normalWS);\n\t\t\t\t\t\t\ttangentWS
|
|
*= faceMul;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3x3 tbn
|
|
= float3x3(tangentWS,bitangentWS,normalWS);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
USE_NORMAL_MAP\n\t\t\t\t\t\t\tfloat3 n = SampleNormalMap(VFX_SAMPLER(normalMap),uvData);\n\t\t\t\t\t\t\tfloat
|
|
normalScale = 1.0f;\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_NORMALSCALE\n\t\t\t\t\t\t\tnormalScale
|
|
= i.VFX_VARYING_NORMALSCALE;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\tnormalWS
|
|
= normalize(lerp(normalWS,mul(n,tbn),normalScale));\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t \n\t\t \n\t\t \n\t\t \n\t\t
|
|
#if HAS_SHADERGRAPH_PARAM_COLOR\n\t\t o.color.rgb = OUTSG..rgb;\n\t\t
|
|
#endif\n\t\t \n\t\t #if HAS_SHADERGRAPH_PARAM_ALPHA \n\t\t
|
|
o.color.a = OUTSG.;\n\t\t #endif\n\t\t#else\n\t\t\t\n\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR VFXGetTextureColor(VFX_SAMPLER(mainTexture),i)\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tfloat4
|
|
color = VFXGetFragmentColor(i);\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifndef VFX_TEXTURE_COLOR\n\t\t\t\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR float4(1.0,1.0,1.0,1.0)\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_DEFAULT\n\t\t\t\t\t\t\to.color = color * VFX_TEXTURE_COLOR;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_GRADIENTMAPPED\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\to.color = SampleGradient(gradient,
|
|
VFX_TEXTURE_COLOR.a * color.a) * float4(color.rgb,1.0);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\to.color
|
|
= VFXApplyPreExposure(o.color, i);\n\t\t#endif\n\t\t\n\t\t\t\to.color = VFXApplyFog(o.color,i);\n\t\t\t\tVFXClipFragmentColor(o.color.a,i);\n\t\t\t\to.color.a
|
|
= saturate(o.color.a);\n\t\t\t\to.color = VFXTransformFinalColor(o.color);\n\t\t\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t\n\t\t\t\t\t\tfloat2 velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w)
|
|
- (i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\tVFXEncodeMotionVector(velocity * 0.5f,
|
|
encodedMotionVector);\n\t\t\t\t\t\t\n\t\t\t\to.outMotionVector = encodedMotionVector;\n\t\t
|
|
o.outMotionVector.a = o.color.a < i.VFX_VARYING_ALPHATHRESHOLD ? 0.0f : 1.0f;
|
|
//Independant clipping for motion vector pass\n\t\t#endif\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t}\r\n}\r\n"
|
|
- compute: 0
|
|
name: '[System 2]Output Particle Quad'
|
|
source: "Shader \"Hidden/VFX/ShipCore-PowerDown/System 2/Output Particle Quad\"\n{\r\n\tSubShader\r\n\t{\t\r\n\t\tCull
|
|
Off\r\n\t\t\r\n\t\tTags { \"Queue\"=\"Transparent+0\" \"IgnoreProjector\"=\"True\"
|
|
\"RenderType\"=\"Transparent\" }\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tBlend
|
|
SrcAlpha One \n\t\tZTest LEqual\n\t\tZWrite Off\n\t\tCull Off\n\t\t\n\t\n\t\t\t\n\t\tHLSLINCLUDE\n\t\t\n\t\t#define
|
|
NB_THREADS_PER_GROUP 64\n\t\t#define HAS_ATTRIBUTES 1\n\t\t#define VFX_PASSDEPTH_ACTUAL
|
|
(0)\n\t\t#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n\t\t#define VFX_PASSDEPTH_SELECTION
|
|
(2)\n\t\t#define VFX_USE_LIFETIME_CURRENT 1\n\t\t#define VFX_USE_SIZE_CURRENT
|
|
1\n\t\t#define VFX_USE_AGE_CURRENT 1\n\t\t#define VFX_USE_POSITION_CURRENT
|
|
1\n\t\t#define VFX_USE_ALPHA_CURRENT 1\n\t\t#define VFX_USE_ALIVE_CURRENT 1\n\t\t#define
|
|
VFX_USE_AXISX_CURRENT 1\n\t\t#define VFX_USE_AXISY_CURRENT 1\n\t\t#define VFX_USE_AXISZ_CURRENT
|
|
1\n\t\t#define VFX_USE_ANGLEX_CURRENT 1\n\t\t#define VFX_USE_ANGLEY_CURRENT
|
|
1\n\t\t#define VFX_USE_ANGLEZ_CURRENT 1\n\t\t#define VFX_USE_PIVOTX_CURRENT
|
|
1\n\t\t#define VFX_USE_PIVOTY_CURRENT 1\n\t\t#define VFX_USE_PIVOTZ_CURRENT
|
|
1\n\t\t#define VFX_USE_SCALEX_CURRENT 1\n\t\t#define VFX_USE_SCALEY_CURRENT
|
|
1\n\t\t#define VFX_USE_SCALEZ_CURRENT 1\n\t\t#define VFX_USE_COLOR_CURRENT
|
|
1\n\t\t#define VFX_COLORMAPPING_DEFAULT 1\n\t\t#define IS_TRANSPARENT_PARTICLE
|
|
1\n\t\t#define VFX_BLENDMODE_ADD 1\n\t\t#define VFX_BYPASS_EXPOSURE 1\n\t\t#define
|
|
VFX_PRIMITIVE_QUAD 1\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t#define
|
|
VFX_LOCAL_SPACE 1\n\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\t\t\n\n\t\tCBUFFER_START(parameters)\n\t\t
|
|
float gradient_b;\n\t\t uint3 PADDING_0;\n\t\tCBUFFER_END\n\t\t\n\t\tstruct
|
|
Attributes\n\t\t{\n\t\t float lifetime;\n\t\t float size;\n\t\t float
|
|
age;\n\t\t float3 position;\n\t\t float alpha;\n\t\t bool alive;\n\t\t
|
|
float3 axisX;\n\t\t float3 axisY;\n\t\t float3 axisZ;\n\t\t float
|
|
angleX;\n\t\t float angleY;\n\t\t float angleZ;\n\t\t float pivotX;\n\t\t
|
|
float pivotY;\n\t\t float pivotZ;\n\t\t float scaleX;\n\t\t float
|
|
scaleY;\n\t\t float scaleZ;\n\t\t float3 color;\n\t\t};\n\t\t\n\t\tstruct
|
|
SourceAttributes\n\t\t{\n\t\t};\n\t\t\n\t\tTexture2D mainTexture;\n\t\tSamplerState
|
|
samplermainTexture;\n\t\tfloat4 mainTexture_TexelSize;\n\t\t\n\t\t\n\n\t\t\n\t\t#define
|
|
VFX_NEEDS_COLOR_INTERPOLATOR (VFX_USE_COLOR_CURRENT || VFX_USE_ALPHA_CURRENT)\n\t\t#if
|
|
HAS_STRIPS\n\t\t#define VFX_OPTIONAL_INTERPOLATION \n\t\t#else\n\t\t#define
|
|
VFX_OPTIONAL_INTERPOLATION nointerpolation\n\t\t#endif\n\t\t\n\t\tByteAddressBuffer
|
|
attributeBuffer;\t\n\t\t\n\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\tStructuredBuffer<uint>
|
|
indirectBuffer;\t\n\t\t#endif\t\n\t\t\n\t\t#if USE_DEAD_LIST_COUNT\n\t\tByteAddressBuffer
|
|
deadListCount;\n\t\t#endif\n\t\t\n\t\t#if HAS_STRIPS\n\t\tBuffer<uint> stripDataBuffer;\n\t\t#endif\n\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD || USE_MOTION_VECTORS_PASS\n\t\tByteAddressBuffer
|
|
elementToVFXBufferPrevious;\n\t\t#endif\n\t\t\n\t\tCBUFFER_START(outputParams)\n\t\t\tfloat
|
|
nbMax;\n\t\t\tfloat systemSeed;\n\t\tCBUFFER_END\n\t\t\n\t\t// Helper macros
|
|
to always use a valid instanceID\n\t\t#if defined(UNITY_STEREO_INSTANCING_ENABLED)\n\t\t\t#define
|
|
VFX_DECLARE_INSTANCE_ID UNITY_VERTEX_INPUT_INSTANCE_ID\n\t\t\t#define VFX_GET_INSTANCE_ID(i)
|
|
unity_InstanceID\n\t\t#else\n\t\t\t#define VFX_DECLARE_INSTANCE_ID uint
|
|
instanceID : SV_InstanceID;\n\t\t\t#define VFX_GET_INSTANCE_ID(i) i.instanceID\n\t\t#endif\n\t\t\n\t\tENDHLSL\n\t\t\n\r\n\t\tPass\n\t\t{\t\t\n\t\t\tTags
|
|
{ \"LightMode\"=\"SceneSelectionPass\" }\n\t\t\n\t\t\tZWrite On\n\t\t\tBlend
|
|
Off\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#define VFX_PASSDEPTH VFX_PASSDEPTH_SELECTION\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos : SV_POSITION;\n\t\t\t\t#if
|
|
USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if USE_ALPHA_TEST || USE_FLIPBOOK_INTERPOLATION
|
|
|| VFX_USE_ALPHA_CURRENT\n\t\t\t\t// x: alpha threshold\n\t\t\t\t// y: frame
|
|
blending factor\n\t\t\t\t// z: alpha\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION float3
|
|
builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\tfloat4 cPosPrevious :
|
|
TEXCOORD3;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD4;\n\t\t\t\t#endif\n\t\t\t
|
|
\n\t\t\t #if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t float3 posWS : TEXCOORD5;\n\t\t\t
|
|
#endif\n\t\t\t \n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t\t#define VFX_VARYING_POSCS pos\n\t\t\t#define
|
|
VFX_VARYING_ALPHA builtInInterpolants.z\n\t\t\t#define VFX_VARYING_ALPHATHRESHOLD
|
|
builtInInterpolants.x\n\t\t\t#define VFX_VARYING_FRAMEBLEND builtInInterpolants.y\n\t\t\t#define
|
|
VFX_VARYING_MOTIONVECTORSCALE builtInInterpolants2.xy\n\t\t\t#define VFX_VARYING_UV
|
|
uv\n\t\t\t\n\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t#define VFX_VARYING_POSWS
|
|
posWS\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_MOTION_VECTORS\n\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_DEPTH_ONLY\n\t\t\t#endif\n\t\t\t\n\t\t\t#if !(defined(VFX_VARYING_PS_INPUTS)
|
|
&& defined(VFX_VARYING_POSCS))\n\t\t\t#error VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS
|
|
and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
Orient_4(inout float3 axisX, inout float3 axisY, inout float3 axisZ) /*mode:FaceCameraPlane
|
|
axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t float3x3 viewRot = GetVFXToViewRotMatrix();\n\t\t\t
|
|
axisX = viewRot[0].xyz;\n\t\t\t axisY = viewRot[1].xyz;\n\t\t\t #if VFX_LOCAL_SPACE
|
|
// Need to remove potential scale in local transform\n\t\t\t axisX = normalize(axisX);\n\t\t\t
|
|
axisY = normalize(axisY);\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
#else\n\t\t\t axisZ = -viewRot[2].xyz;\n\t\t\t #endif\n\t\t\t \n\t\t\t}\n\t\t\tvoid
|
|
ColorOverLife_733E3(float age, float lifetime, inout float3 color, inout float
|
|
alpha, float gradient) /*mode:ColorAndAlpha ColorComposition:Multiply AlphaComposition:Multiply
|
|
*/\n\t\t\t{\n\t\t\t \n\t\t\t float4 sampledColor = SampleGradient(gradient,
|
|
age/lifetime);\n\t\t\t color *= sampledColor.rgb;\n\t\t\t alpha *= sampledColor.a;\n\t\t\t
|
|
\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error
|
|
VFX_PRIMITIVE_QUAD must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct
|
|
vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\n\n\t\t\t\treturn attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3
|
|
GetStripTangent(float3 currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x4) << 2));\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x8) << 2));\n\t\t\t\t\t\tattributes.position = float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x9) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x9) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x4) << 2));\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x8) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\tOrient_4(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ);\n\t\t\t\tColorOverLife_733E3(attributes.age,
|
|
attributes.lifetime, /*inout */attributes.color, /*inout */attributes.alpha,
|
|
gradient_b);\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if !HAS_STRIPS\n\t\t\t\tif (!attributes.alive)\n\t\t\t\t\treturn
|
|
o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x =
|
|
(float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#define
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 1\n\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t#ifndef
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t#define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH
|
|
0\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\tint _ObjectId;\n\t\t\t\t\tint
|
|
_PassValue;\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#pragma fragment frag\n\t\t\t\t\tvoid
|
|
frag(ps_input i\n\t\t\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t
|
|
#ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t // We need the depth color as SV_Target0
|
|
for alpha to coverage\n\t\t\t\t\t , out float4 outDepthColor : SV_Target0\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target1\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
// When no MSAA, the motion vector is always the first buffer\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t #ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t
|
|
, out float4 outDepthColor : SV_Target0\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
, out float4 dummy : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t , out float4 outSelection : SV_Target0\n\t\t\t\t\t#endif\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\t
|
|
#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t
|
|
float alpha = OUTSG.;\n\t\t\t\t\t #else\n\t\t\t\t\t float alpha =
|
|
VFXGetFragmentColor(i).a;\n\t\t\t\t\t\t\t#if VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t\t\t\talpha
|
|
*= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t
|
|
#endif\n\t\t\t\t\t\tVFXClipFragmentColor(alpha,i);\n\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\toutDepthColor = i.VFX_VARYING_POSCS.z;\n\t\t\t\t\t\t\t#if
|
|
VFX_USE_ALPHA_TO_MASK\n\t\t\t\t\t\t\t\toutDepthColor.a = alpha;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat2
|
|
velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w) -
|
|
(i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\t\t\t\tVFXEncodeMotionVector(velocity
|
|
* 0.5f, encodedMotionVector);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\toutMotionVector
|
|
= encodedMotionVector;\n\t\t\t\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t\t\toutSelection
|
|
= float4(_ObjectId, _PassValue, 1.0, 1.0);\n\t\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t\t\t#ifndef WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\t\tdummy
|
|
= (float4)0;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t#error
|
|
VFX_PASSDEPTH undefined \n\t\t\t\t\t\t#endif\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\n\t\t\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t\t\r\n\t\t//
|
|
Forward pass\n\t\tPass\n\t\t{\t\t\n\t\t\tTags { \"LightMode\"=\"ForwardOnly\"
|
|
}\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#pragma target 4.5\n\t\t\t#pragma multi_compile
|
|
_ DEBUG_DISPLAY\n\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos :
|
|
SV_POSITION;\n\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_COLOR_INTERPOLATOR\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 color : COLOR0;\n\t\t\t\t#endif\n\t\t\t\t#if USE_SOFT_PARTICLE || USE_ALPHA_TEST
|
|
|| USE_FLIPBOOK_INTERPOLATION || USE_EXPOSURE_WEIGHT || WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t//
|
|
x: inverse soft particles fade distance\n\t\t\t\t// y: alpha threshold\n\t\t\t\t//
|
|
z: frame blending factor\n\t\t\t\t// w: exposure weight\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t\tfloat3
|
|
posWS : TEXCOORD3;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
cPosPrevious : TEXCOORD4;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD5;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t\t\tfloat3 normal : TEXCOORD6;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t\t\tfloat3 tangent : TEXCOORD7;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t
|
|
\n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\tstruct
|
|
ps_output\n\t\t\t{\n\t\t\t\tfloat4 color : SV_Target0;\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
outMotionVector : SV_Target1;\n\t\t#endif\n\t\t\t};\n\t\t\n\t\t#define VFX_VARYING_PS_INPUTS
|
|
ps_input\n\t\t#define VFX_VARYING_POSCS pos\n\t\t#define VFX_VARYING_COLOR
|
|
color.rgb\n\t\t#define VFX_VARYING_ALPHA color.a\n\t\t#define VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
builtInInterpolants.x\n\t\t#define VFX_VARYING_ALPHATHRESHOLD builtInInterpolants.y\n\t\t#define
|
|
VFX_VARYING_FRAMEBLEND builtInInterpolants.z\n\t\t#define VFX_VARYING_MOTIONVECTORSCALE
|
|
builtInInterpolants2.xy\n\t\t#define VFX_VARYING_UV uv\n\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t#define
|
|
VFX_VARYING_POSWS posWS\n\t\t#endif\n\t\t#if USE_EXPOSURE_WEIGHT\n\t\t#define
|
|
VFX_VARYING_EXPOSUREWEIGHT builtInInterpolants.w\n\t\t#endif\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t#endif\n\t\t\n\t\t#define SHADERPASS SHADERPASS_FORWARD_UNLIT\n\t\t\t\n\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t#define VFX_VARYING_NORMAL normal\n\t\t#endif\n\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t#define VFX_VARYING_TANGENT tangent\n\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
!(defined(VFX_VARYING_PS_INPUTS) && defined(VFX_VARYING_POSCS))\n\t\t\t#error
|
|
VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
Orient_4(inout float3 axisX, inout float3 axisY, inout float3 axisZ) /*mode:FaceCameraPlane
|
|
axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t float3x3 viewRot = GetVFXToViewRotMatrix();\n\t\t\t
|
|
axisX = viewRot[0].xyz;\n\t\t\t axisY = viewRot[1].xyz;\n\t\t\t #if VFX_LOCAL_SPACE
|
|
// Need to remove potential scale in local transform\n\t\t\t axisX = normalize(axisX);\n\t\t\t
|
|
axisY = normalize(axisY);\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
#else\n\t\t\t axisZ = -viewRot[2].xyz;\n\t\t\t #endif\n\t\t\t \n\t\t\t}\n\t\t\tvoid
|
|
ColorOverLife_733E3(float age, float lifetime, inout float3 color, inout float
|
|
alpha, float gradient) /*mode:ColorAndAlpha ColorComposition:Multiply AlphaComposition:Multiply
|
|
*/\n\t\t\t{\n\t\t\t \n\t\t\t float4 sampledColor = SampleGradient(gradient,
|
|
age/lifetime);\n\t\t\t color *= sampledColor.rgb;\n\t\t\t alpha *= sampledColor.a;\n\t\t\t
|
|
\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error
|
|
VFX_PRIMITIVE_QUAD must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct
|
|
vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\n\n\t\t\t\treturn attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3
|
|
GetStripTangent(float3 currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x4) << 2));\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x8) << 2));\n\t\t\t\t\t\tattributes.position = float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x9) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x9) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x4) << 2));\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x8) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\tOrient_4(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ);\n\t\t\t\tColorOverLife_733E3(attributes.age,
|
|
attributes.lifetime, /*inout */attributes.color, /*inout */attributes.alpha,
|
|
gradient_b);\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if !HAS_STRIPS\n\t\t\t\tif (!attributes.alive)\n\t\t\t\t\treturn
|
|
o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x =
|
|
(float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t\t\n\t\t#endif\n\t\t\t\t\n\t\t\t#pragma fragment frag\n\t\t\tps_output
|
|
frag(ps_input i)\n\t\t\t{\n\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\tps_output
|
|
o = (ps_output)0;\n\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\n\t\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\t\t\t\t#if USE_DOUBLE_SIDED\n\t\t\t\t\t\t\tconst
|
|
float faceMul = frontFace ? 1.0f : -1.0f;\n\t\t\t\t\t\t\t#else\n\t\t\t\t\t\t\tconst
|
|
float faceMul = 1.0f;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3
|
|
normalWS = i.VFX_VARYING_NORMAL * faceMul;\n\t\t\t\t\t\t\tconst VFXUVData uvData
|
|
= GetUVData(i);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_TANGENT\n\t\t\t\t\t\t\tfloat3
|
|
tangentWS = i.VFX_VARYING_TANGENT;\n\t\t\t\t\t\t\tfloat3 bitangentWS = cross(i.VFX_VARYING_TANGENT,i.VFX_VARYING_NORMAL);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_BENTFACTORS) && USE_NORMAL_BENDING\t\n\t\t\t\t\t\t\tfloat3
|
|
bentFactors = float3(i.VFX_VARYING_BENTFACTORS.xy,sqrt(1.0f - dot(i.VFX_VARYING_BENTFACTORS,i.VFX_VARYING_BENTFACTORS)));\n\t\t\t\t\t\t\tnormalWS
|
|
= tangentWS * bentFactors.x + bitangentWS * bentFactors.y + normalWS * bentFactors.z;\n\t\t\t\t\t\t\ttangentWS
|
|
= normalize(cross(normalWS,bitangentWS));\n\t\t\t\t\t\t\tbitangentWS = cross(tangentWS,normalWS);\n\t\t\t\t\t\t\ttangentWS
|
|
*= faceMul;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3x3 tbn
|
|
= float3x3(tangentWS,bitangentWS,normalWS);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
USE_NORMAL_MAP\n\t\t\t\t\t\t\tfloat3 n = SampleNormalMap(VFX_SAMPLER(normalMap),uvData);\n\t\t\t\t\t\t\tfloat
|
|
normalScale = 1.0f;\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_NORMALSCALE\n\t\t\t\t\t\t\tnormalScale
|
|
= i.VFX_VARYING_NORMALSCALE;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\tnormalWS
|
|
= normalize(lerp(normalWS,mul(n,tbn),normalScale));\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t \n\t\t \n\t\t \n\t\t \n\t\t
|
|
#if HAS_SHADERGRAPH_PARAM_COLOR\n\t\t o.color.rgb = OUTSG..rgb;\n\t\t
|
|
#endif\n\t\t \n\t\t #if HAS_SHADERGRAPH_PARAM_ALPHA \n\t\t
|
|
o.color.a = OUTSG.;\n\t\t #endif\n\t\t#else\n\t\t\t\n\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR VFXGetTextureColor(VFX_SAMPLER(mainTexture),i)\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tfloat4
|
|
color = VFXGetFragmentColor(i);\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifndef VFX_TEXTURE_COLOR\n\t\t\t\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR float4(1.0,1.0,1.0,1.0)\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_DEFAULT\n\t\t\t\t\t\t\to.color = color * VFX_TEXTURE_COLOR;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_GRADIENTMAPPED\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\to.color = SampleGradient(gradient,
|
|
VFX_TEXTURE_COLOR.a * color.a) * float4(color.rgb,1.0);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\to.color
|
|
= VFXApplyPreExposure(o.color, i);\n\t\t#endif\n\t\t\n\t\t\t\to.color = VFXApplyFog(o.color,i);\n\t\t\t\tVFXClipFragmentColor(o.color.a,i);\n\t\t\t\to.color.a
|
|
= saturate(o.color.a);\n\t\t\t\to.color = VFXTransformFinalColor(o.color);\n\t\t\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t\n\t\t\t\t\t\tfloat2 velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w)
|
|
- (i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\tVFXEncodeMotionVector(velocity * 0.5f,
|
|
encodedMotionVector);\n\t\t\t\t\t\t\n\t\t\t\to.outMotionVector = encodedMotionVector;\n\t\t
|
|
o.outMotionVector.a = o.color.a < i.VFX_VARYING_ALPHATHRESHOLD ? 0.0f : 1.0f;
|
|
//Independant clipping for motion vector pass\n\t\t#endif\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t}\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[System 3]Initialize Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_POSITION_CURRENT 1\n#define VFX_USE_LIFETIME_CURRENT
|
|
1\n#define VFX_USE_ALIVE_CURRENT 1\n#define VFX_USE_AGE_CURRENT 1\n#define
|
|
VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\n\nstruct
|
|
Attributes\n{\n float3 position;\n float lifetime;\n bool alive;\n
|
|
float age;\n};\n\nstruct SourceAttributes\n{\n};\n\n\n\r\n\r\n#define USE_DEAD_LIST
|
|
(VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer attributeBuffer;\r\nByteAddressBuffer
|
|
sourceAttributeBuffer;\r\n\r\nCBUFFER_START(initParams)\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
uint nbSpawned;\t\t\t\t\t// Numbers of particle spawned\r\n uint spawnIndex;\t\t\t\t//
|
|
Index of the first particle spawned\r\n uint dispatchWidth;\r\n#else\r\n
|
|
uint offsetInAdditionalOutput;\r\n\tuint nbMax;\r\n#endif\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#if
|
|
USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListIn;\r\nByteAddressBuffer
|
|
deadListCount; // This is bad to use a SRV to fetch deadList count but Unity
|
|
API currently prevent from copying to CB\r\n#endif\r\n\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\nStructuredBuffer<uint>
|
|
eventList;\r\nByteAddressBuffer inputAdditional;\r\n#endif\r\n\r\n#if HAS_STRIPS\r\nRWBuffer<uint>
|
|
stripDataBuffer;\r\n#endif\r\n\r\n#include \"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
SetAttribute_CAC29747(inout float3 position, float3 Position) /*attribute:position
|
|
Composition:Overwrite Source:Slot Random:Off channels:XYZ */\n{\n position
|
|
= Position;\n}\nvoid SetAttribute_F0142CB9(inout float lifetime, float Lifetime)
|
|
/*attribute:lifetime Composition:Overwrite Source:Slot Random:Off channels:XYZ
|
|
*/\n{\n lifetime = Lifetime;\n}\n\n\r\n\r\n// Due to a bug in HLSL compiler,
|
|
disable spurious \"unitialized variable\" due to mid function return statement\r\n#pragma
|
|
warning(push)\r\n#pragma warning(disable : 4000)\r\n#if HAS_STRIPS\r\nbool
|
|
GetParticleIndex(inout uint particleIndex, uint stripIndex)\r\n{\r\n\tuint
|
|
relativeIndex;\r\n\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX, stripIndex),
|
|
1, relativeIndex);\r\n\tif (relativeIndex >= PARTICLE_PER_STRIP_COUNT) // strip
|
|
is full\r\n\t{\r\n\t\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX, stripIndex),
|
|
-1); // Remove previous increment\r\n\t\treturn false;\r\n\t}\r\n\r\n\tparticleIndex
|
|
= stripIndex * PARTICLE_PER_STRIP_COUNT + ((STRIP_DATA(STRIP_FIRST_INDEX, stripIndex)
|
|
+ relativeIndex) % PARTICLE_PER_STRIP_COUNT);\r\n return true;\r\n}\r\n#endif\r\n#pragma
|
|
warning(pop)\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n
|
|
uint id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP;\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
id += groupId.y * dispatchWidth * NB_THREADS_PER_GROUP;\r\n#endif\r\n\r\n#if
|
|
VFX_USE_SPAWNER_FROM_GPU\r\n uint maxThreadId = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 0) << 2);\r\n uint currentSpawnIndex = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 1) << 2) - maxThreadId;\r\n#else\r\n uint maxThreadId = nbSpawned;\r\n
|
|
uint currentSpawnIndex = spawnIndex;\r\n#endif\r\n\r\n#if USE_DEAD_LIST\r\n
|
|
maxThreadId = min(maxThreadId, deadListCount.Load(0x0));\r\n#elif VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
maxThreadId = min(maxThreadId, nbMax); //otherwise, nbSpawned already clamped
|
|
on CPU\r\n#endif\r\n\r\n if (id < maxThreadId)\r\n {\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
int sourceIndex = eventList[id];\r\n#endif\r\n\t\tuint particleIndex = id +
|
|
currentSpawnIndex;\r\n\t\t\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n int
|
|
sourceIndex = 0;\n /*//Loop with 1 iteration generate a wrong IL Assembly
|
|
(and actually, useless code)\n uint currentSumSpawnCount = 0u;\n
|
|
for (sourceIndex=0; sourceIndex<1; sourceIndex++)\n {\n currentSumSpawnCount
|
|
+= uint(asfloat(sourceAttributeBuffer.Load((sourceIndex * 0x1 + 0x0) << 2)));\n
|
|
if (id < currentSumSpawnCount)\n {\n break;\n
|
|
}\n }\n */\n \n\r\n#endif\r\n\r\n\t\tAttributes attributes
|
|
= (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes = (SourceAttributes)0;\r\n\t\t\r\n
|
|
attributes.position = float3(0, 0, 0);\n attributes.lifetime = (float)1;\n
|
|
attributes.alive = (bool)true;\n attributes.age = (float)0;\n
|
|
\n\r\n#if VFX_USE_PARTICLEID_CURRENT\r\n attributes.particleId = particleIndex;\r\n#endif\r\n#if
|
|
VFX_USE_SEED_CURRENT\r\n attributes.seed = WangHash(particleIndex ^
|
|
systemSeed);\r\n#endif\r\n#if VFX_USE_SPAWNINDEX_CURRENT\r\n attributes.spawnIndex
|
|
= id;\r\n#endif\r\n#if HAS_STRIPS\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n\t\t\r\n#else\r\n
|
|
uint stripIndex = sourceIndex;\r\n#endif\r\n\t\tstripIndex = min(stripIndex,
|
|
STRIP_COUNT);\r\n\r\n if (!GetParticleIndex(particleIndex, stripIndex))\r\n
|
|
return;\r\n\r\n const StripData stripData = GetStripDataFromStripIndex(stripIndex,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n\t\tInitStripAttributes(particleIndex, attributes,
|
|
stripData);\r\n\t\t// TODO Change seed to be sure we're deterministic on random
|
|
with strip\r\n#endif\r\n \r\n {\n SetAttribute_CAC29747(
|
|
/*inout */attributes.position, float3(0, 0, 0));\n }\n {\n
|
|
SetAttribute_F0142CB9( /*inout */attributes.lifetime, (float)0.300000012);\n
|
|
}\n \n\r\n\t\t\r\n#if VFX_USE_ALIVE_CURRENT\r\n if (attributes.alive)\r\n#endif
|
|
\r\n {\r\n#if USE_DEAD_LIST\r\n\t uint deadIndex = deadListIn.DecrementCounter();\r\n
|
|
uint index = deadListIn[deadIndex];\r\n#else\r\n uint index = particleIndex;\r\n#endif\r\n
|
|
attributeBuffer.Store3((index * 0x4 + 0x0) << 2,asuint(attributes.position));\n
|
|
attributeBuffer.Store((index * 0x1 + 0x10) << 2,asuint(attributes.lifetime));\n
|
|
attributeBuffer.Store((index * 0x2 + 0x14) << 2,uint(attributes.alive));\n
|
|
attributeBuffer.Store((index * 0x2 + 0x15) << 2,asuint(attributes.age));\n
|
|
\n\r\n }\r\n }\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[System 3]Update Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_ALIVE_CURRENT
|
|
1\n#define VFX_USE_AGE_CURRENT 1\n#define VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float deltaTime_a;\n uint3 PADDING_0;\nCBUFFER_END\n\nstruct Attributes\n{\n
|
|
float lifetime;\n bool alive;\n float age;\n};\n\nstruct SourceAttributes\n{\n};\n\n\n\r\n\r\n#define
|
|
USE_DEAD_LIST (VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer
|
|
attributeBuffer;\r\n\r\n#if USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListOut;\r\n#endif\r\n\r\n#if
|
|
VFX_HAS_INDIRECT_DRAW\r\nRWStructuredBuffer<uint> indirectBuffer;\r\n#endif\r\n\r\n#if
|
|
HAS_STRIPS\r\nRWBuffer<uint> stripDataBuffer;\r\n#endif\r\n\r\n#if VFX_USE_STRIPALIVE_CURRENT\r\nBuffer<uint>
|
|
attachedStripDataBuffer;\r\n#endif\r\n\r\nCBUFFER_START(updateParams)\r\n
|
|
uint nbMax;\r\n\tuint dispatchWidth;\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
Age(inout float age, float deltaTime)\n{\n age += deltaTime;\n}\nvoid Reap(float
|
|
age, float lifetime, inout bool alive)\n{\n if(age > lifetime) { alive =
|
|
false; }\n}\n\n\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n\tuint
|
|
id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP + groupId.y * dispatchWidth
|
|
* NB_THREADS_PER_GROUP;\r\n\tuint index = id;\r\n\tif (id < nbMax)\r\n\t{\r\n
|
|
Attributes attributes = (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\r\n\r\n#if VFX_USE_ALIVE_CURRENT\r\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x14) << 2));\n\t\t\n\r\n\t\tif (attributes.alive)\r\n\t\t{\r\n\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x10) << 2));\n\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x15) << 2));\n\t\t\t\n\r\n\r\n//
|
|
Initialize built-in needed attributes\r\n#if VFX_USE_OLDPOSITION_CURRENT\r\n\t\t\tattributes.oldPosition
|
|
= attributes.position;\r\n#endif\r\n#if HAS_STRIPS\r\n const StripData
|
|
stripData = GetStripDataFromParticleIndex(index, PARTICLE_PER_STRIP_COUNT);\r\n
|
|
InitStripAttributes(index, attributes, stripData);\r\n#endif\r\n\t\t\t\r\n\t\t\tAge(
|
|
/*inout */attributes.age, deltaTime_a);\n\t\t\tReap(attributes.age, attributes.lifetime,
|
|
/*inout */attributes.alive);\n\t\t\t\n\r\n\r\n\t\t\tif (attributes.alive)\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x15) << 2,asuint(attributes.age));\n\t\t\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\t\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n\r\n#if HAS_STRIPS\t\t\t\r\n\t\t\t\tuint relativeIndexInStrip
|
|
= GetRelativeIndex(index, stripData);\r\n\t\t\t\tInterlockedMin(STRIP_DATA(STRIP_MIN_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n\t\t\t\tInterlockedMax(STRIP_DATA(STRIP_MAX_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n#endif\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x14) << 2,uint(attributes.alive));\n\t\t\t\t\n\r\n#if USE_DEAD_LIST
|
|
&& !VFX_USE_STRIPALIVE_CURRENT\r\n\t\t\t\tuint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n#endif\r\n\t\t\t}\r\n\t\t}\r\n#if USE_DEAD_LIST && VFX_USE_STRIPALIVE_CURRENT\r\n
|
|
else if (attributes.stripAlive)\r\n {\r\n if (STRIP_DATA_X(attachedStripDataBuffer,
|
|
STRIP_MIN_ALIVE, index) == ~1) // Attached strip is no longer alive, recycle
|
|
the particle \r\n {\r\n uint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n attributes.stripAlive = false;\r\n
|
|
\r\n } \r\n }\r\n#endif\r\n#else\r\n\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x10) << 2));\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x14) << 2));\n\t\tattributes.age =
|
|
asfloat(attributeBuffer.Load((index * 0x2 + 0x15) << 2));\n\t\t\n\r\n\t\t\r\n#if
|
|
VFX_USE_OLDPOSITION_CURRENT\r\n\t\tattributes.oldPosition = attributes.position;\r\n#endif\r\n#if
|
|
HAS_STRIPS\r\n const StripData stripData = GetStripDataFromParticleIndex(index,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n InitStripAttributes(index, attributes,
|
|
stripData);\r\n#endif\r\n\t\t\r\n\t\tAge( /*inout */attributes.age, deltaTime_a);\n\t\tReap(attributes.age,
|
|
attributes.lifetime, /*inout */attributes.alive);\n\t\t\n\r\n\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x14) << 2,uint(attributes.alive));\n\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x15) << 2,asuint(attributes.age));\n\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n#endif\r\n\t}\r\n}\r\n"
|
|
- compute: 0
|
|
name: '[System 3]Output Particle Quad'
|
|
source: "Shader \"Hidden/VFX/ShipCore-OnHit/System 3/Output Particle Quad\"\n{\r\n\tSubShader\r\n\t{\t\r\n\t\tCull
|
|
Off\r\n\t\t\r\n\t\tTags { \"Queue\"=\"Transparent+0\" \"IgnoreProjector\"=\"True\"
|
|
\"RenderType\"=\"Transparent\" }\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tBlend
|
|
SrcAlpha One \n\t\tZTest LEqual\n\t\tZWrite Off\n\t\tCull Off\n\t\t\n\t\n\t\t\t\n\t\tHLSLINCLUDE\n\t\t\n\t\t#define
|
|
NB_THREADS_PER_GROUP 64\n\t\t#define HAS_ATTRIBUTES 1\n\t\t#define VFX_PASSDEPTH_ACTUAL
|
|
(0)\n\t\t#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n\t\t#define VFX_PASSDEPTH_SELECTION
|
|
(2)\n\t\t#define VFX_USE_POSITION_CURRENT 1\n\t\t#define VFX_USE_LIFETIME_CURRENT
|
|
1\n\t\t#define VFX_USE_COLOR_CURRENT 1\n\t\t#define VFX_USE_ALPHA_CURRENT 1\n\t\t#define
|
|
VFX_USE_ALIVE_CURRENT 1\n\t\t#define VFX_USE_AXISX_CURRENT 1\n\t\t#define VFX_USE_AXISY_CURRENT
|
|
1\n\t\t#define VFX_USE_AXISZ_CURRENT 1\n\t\t#define VFX_USE_ANGLEX_CURRENT
|
|
1\n\t\t#define VFX_USE_ANGLEY_CURRENT 1\n\t\t#define VFX_USE_ANGLEZ_CURRENT
|
|
1\n\t\t#define VFX_USE_PIVOTX_CURRENT 1\n\t\t#define VFX_USE_PIVOTY_CURRENT
|
|
1\n\t\t#define VFX_USE_PIVOTZ_CURRENT 1\n\t\t#define VFX_USE_SIZE_CURRENT 1\n\t\t#define
|
|
VFX_USE_SCALEX_CURRENT 1\n\t\t#define VFX_USE_SCALEY_CURRENT 1\n\t\t#define
|
|
VFX_USE_SCALEZ_CURRENT 1\n\t\t#define VFX_USE_AGE_CURRENT 1\n\t\t#define VFX_COLORMAPPING_DEFAULT
|
|
1\n\t\t#define IS_TRANSPARENT_PARTICLE 1\n\t\t#define VFX_BLENDMODE_ADD 1\n\t\t#define
|
|
VFX_BYPASS_EXPOSURE 1\n\t\t#define VFX_PRIMITIVE_QUAD 1\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t#define
|
|
VFX_LOCAL_SPACE 1\n\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\t\t\n\n\t\tCBUFFER_START(parameters)\n\t\t
|
|
float3 uniform_e;\n\t\t float Color_b;\n\t\t float3 uniform_f;\n\t\t
|
|
float uniform_a;\n\t\t float uniform_b;\n\t\t float uniform_c;\n\t\t
|
|
float uniform_d;\n\t\t uint PADDING_0;\n\t\tCBUFFER_END\n\t\t\n\t\tstruct
|
|
Attributes\n\t\t{\n\t\t float3 position;\n\t\t float lifetime;\n\t\t
|
|
float3 color;\n\t\t float alpha;\n\t\t bool alive;\n\t\t float3 axisX;\n\t\t
|
|
float3 axisY;\n\t\t float3 axisZ;\n\t\t float angleX;\n\t\t float
|
|
angleY;\n\t\t float angleZ;\n\t\t float pivotX;\n\t\t float pivotY;\n\t\t
|
|
float pivotZ;\n\t\t float size;\n\t\t float scaleX;\n\t\t float scaleY;\n\t\t
|
|
float scaleZ;\n\t\t float age;\n\t\t};\n\t\t\n\t\tstruct SourceAttributes\n\t\t{\n\t\t};\n\t\t\n\t\tTexture2D
|
|
mainTexture;\n\t\tSamplerState samplermainTexture;\n\t\tfloat4 mainTexture_TexelSize;\n\t\t\n\t\t\n\n\t\t\n\t\t#define
|
|
VFX_NEEDS_COLOR_INTERPOLATOR (VFX_USE_COLOR_CURRENT || VFX_USE_ALPHA_CURRENT)\n\t\t#if
|
|
HAS_STRIPS\n\t\t#define VFX_OPTIONAL_INTERPOLATION \n\t\t#else\n\t\t#define
|
|
VFX_OPTIONAL_INTERPOLATION nointerpolation\n\t\t#endif\n\t\t\n\t\tByteAddressBuffer
|
|
attributeBuffer;\t\n\t\t\n\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\tStructuredBuffer<uint>
|
|
indirectBuffer;\t\n\t\t#endif\t\n\t\t\n\t\t#if USE_DEAD_LIST_COUNT\n\t\tByteAddressBuffer
|
|
deadListCount;\n\t\t#endif\n\t\t\n\t\t#if HAS_STRIPS\n\t\tBuffer<uint> stripDataBuffer;\n\t\t#endif\n\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD || USE_MOTION_VECTORS_PASS\n\t\tByteAddressBuffer
|
|
elementToVFXBufferPrevious;\n\t\t#endif\n\t\t\n\t\tCBUFFER_START(outputParams)\n\t\t\tfloat
|
|
nbMax;\n\t\t\tfloat systemSeed;\n\t\tCBUFFER_END\n\t\t\n\t\t// Helper macros
|
|
to always use a valid instanceID\n\t\t#if defined(UNITY_STEREO_INSTANCING_ENABLED)\n\t\t\t#define
|
|
VFX_DECLARE_INSTANCE_ID UNITY_VERTEX_INPUT_INSTANCE_ID\n\t\t\t#define VFX_GET_INSTANCE_ID(i)
|
|
unity_InstanceID\n\t\t#else\n\t\t\t#define VFX_DECLARE_INSTANCE_ID uint
|
|
instanceID : SV_InstanceID;\n\t\t\t#define VFX_GET_INSTANCE_ID(i) i.instanceID\n\t\t#endif\n\t\t\n\t\tENDHLSL\n\t\t\n\r\n\t\tPass\n\t\t{\t\t\n\t\t\tTags
|
|
{ \"LightMode\"=\"SceneSelectionPass\" }\n\t\t\n\t\t\tZWrite On\n\t\t\tBlend
|
|
Off\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#define VFX_PASSDEPTH VFX_PASSDEPTH_SELECTION\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos : SV_POSITION;\n\t\t\t\t#if
|
|
USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if USE_ALPHA_TEST || USE_FLIPBOOK_INTERPOLATION
|
|
|| VFX_USE_ALPHA_CURRENT\n\t\t\t\t// x: alpha threshold\n\t\t\t\t// y: frame
|
|
blending factor\n\t\t\t\t// z: alpha\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION float3
|
|
builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\tfloat4 cPosPrevious :
|
|
TEXCOORD3;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD4;\n\t\t\t\t#endif\n\t\t\t
|
|
\n\t\t\t #if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t float3 posWS : TEXCOORD5;\n\t\t\t
|
|
#endif\n\t\t\t \n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t\t#define VFX_VARYING_POSCS pos\n\t\t\t#define
|
|
VFX_VARYING_ALPHA builtInInterpolants.z\n\t\t\t#define VFX_VARYING_ALPHATHRESHOLD
|
|
builtInInterpolants.x\n\t\t\t#define VFX_VARYING_FRAMEBLEND builtInInterpolants.y\n\t\t\t#define
|
|
VFX_VARYING_MOTIONVECTORSCALE builtInInterpolants2.xy\n\t\t\t#define VFX_VARYING_UV
|
|
uv\n\t\t\t\n\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t#define VFX_VARYING_POSWS
|
|
posWS\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_MOTION_VECTORS\n\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_DEPTH_ONLY\n\t\t\t#endif\n\t\t\t\n\t\t\t#if !(defined(VFX_VARYING_PS_INPUTS)
|
|
&& defined(VFX_VARYING_POSCS))\n\t\t\t#error VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS
|
|
and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
Orient_189(inout float3 axisX, inout float3 axisY, inout float3 axisZ, float3
|
|
position) /*mode:FaceCameraPosition axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t
|
|
if (unity_OrthoParams.w == 1.0f) // Face plane for ortho\n\t\t\t {\n\t\t\t
|
|
float3x3 viewRot = GetVFXToViewRotMatrix();\n\t\t\t axisX = viewRot[0].xyz;\n\t\t\t
|
|
axisY = viewRot[1].xyz;\n\t\t\t #if VFX_LOCAL_SPACE // Need to remove
|
|
potential scale in local transform\n\t\t\t axisX = normalize(axisX);\n\t\t\t
|
|
axisY = normalize(axisY);\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
#else\n\t\t\t axisZ = -viewRot[2].xyz;\n\t\t\t #endif\n\t\t\t
|
|
}\n\t\t\t else\n\t\t\t {\n\t\t\t axisZ = normalize(position -
|
|
GetViewVFXPosition());\n\t\t\t axisX = normalize(cross(GetVFXToViewRotMatrix()[1].xyz,axisZ));\n\t\t\t
|
|
axisY = cross(axisZ,axisX);\n\t\t\t }\n\t\t\t \n\t\t\t}\n\t\t\tvoid AttributeFromCurve_48A86161(inout
|
|
float3 color, inout float alpha, float age, float lifetime, float Color) /*attribute:color
|
|
Composition:Overwrite AlphaComposition:Overwrite SampleMode:OverLife Mode:PerComponent
|
|
ColorMode:ColorAndAlpha channels:XYZ */\n\t\t\t{\n\t\t\t float t = age /
|
|
lifetime;\n\t\t\t float4 value = 0.0f;\n\t\t\t value = SampleGradient(Color,
|
|
t);\n\t\t\t color = value.rgb;\n\t\t\t alpha = value.a;\n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_3278B22F(inout float size, float Size) /*attribute:size Composition:Overwrite
|
|
Source:Slot Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t size = Size;\n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_65DEC940(inout float pivotX, inout float pivotY, inout float pivotZ,
|
|
float3 Pivot) /*attribute:pivot Composition:Overwrite Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t pivotX = Pivot.x;\n\t\t\t pivotY = Pivot.y;\n\t\t\t
|
|
pivotZ = Pivot.z;\n\t\t\t}\n\t\t\tvoid SetAttribute_C707D62A(inout float3 position,
|
|
float3 Position) /*attribute:position Composition:Add Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t position += Position;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if
|
|
defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error VFX_PRIMITIVE_QUAD
|
|
must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x0) << 2));\n\t\t\t\t\n\n\t\t\t\treturn
|
|
attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3 GetStripTangent(float3
|
|
currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.position = asfloat(attributeBuffer.Load3((index
|
|
* 0x4 + 0x0) << 2));\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x10) << 2));\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x14) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.size
|
|
= (float)0.100000001;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x15) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x14) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x0) << 2));\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x10) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.size = (float)0.100000001;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x15) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\tOrient_189(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ,
|
|
attributes.position);\n\t\t\t\tAttributeFromCurve_48A86161( /*inout */attributes.color,
|
|
/*inout */attributes.alpha, attributes.age, attributes.lifetime, Color_b);\n\t\t\t\t{\n\t\t\t\t
|
|
float2 tmp_bd = GeneratePerlinNoise(uniform_c, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t float tmp_be = tmp_bd[0];\n\t\t\t\t
|
|
float tmp_bg = tmp_be - (float)-1;\n\t\t\t\t float tmp_bi = tmp_bg / (float)2;\n\t\t\t\t
|
|
float tmp_bj = tmp_bi * uniform_d;\n\t\t\t\t float tmp_bk = uniform_b +
|
|
tmp_bj;\n\t\t\t\t float tmp_bl = uniform_a + tmp_bk;\n\t\t\t\t float
|
|
tmp_bn = tmp_bl * (float)3;\n\t\t\t\t SetAttribute_3278B22F( /*inout */attributes.size,
|
|
tmp_bn);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t SetAttribute_65DEC940( /*inout
|
|
*/attributes.pivotX, /*inout */attributes.pivotY, /*inout */attributes.pivotZ,
|
|
float3(0, 0, 1));\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t float3 tmp_bd = GeneratePerlinCurlNoise(uniform_e,
|
|
float3(1, 0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t
|
|
float3 tmp_be = tmp_bd * uniform_f;\n\t\t\t\t SetAttribute_C707D62A( /*inout
|
|
*/attributes.position, tmp_be);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\tif (!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#define
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 1\n\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t#ifndef
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t#define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH
|
|
0\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\tint _ObjectId;\n\t\t\t\t\tint
|
|
_PassValue;\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#pragma fragment frag\n\t\t\t\t\tvoid
|
|
frag(ps_input i\n\t\t\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t
|
|
#ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t // We need the depth color as SV_Target0
|
|
for alpha to coverage\n\t\t\t\t\t , out float4 outDepthColor : SV_Target0\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target1\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
// When no MSAA, the motion vector is always the first buffer\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t #ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t
|
|
, out float4 outDepthColor : SV_Target0\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
, out float4 dummy : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t , out float4 outSelection : SV_Target0\n\t\t\t\t\t#endif\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\t
|
|
#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t
|
|
float alpha = OUTSG.;\n\t\t\t\t\t #else\n\t\t\t\t\t float alpha =
|
|
VFXGetFragmentColor(i).a;\n\t\t\t\t\t\t\t#if VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t\t\t\talpha
|
|
*= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t
|
|
#endif\n\t\t\t\t\t\tVFXClipFragmentColor(alpha,i);\n\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\toutDepthColor = i.VFX_VARYING_POSCS.z;\n\t\t\t\t\t\t\t#if
|
|
VFX_USE_ALPHA_TO_MASK\n\t\t\t\t\t\t\t\toutDepthColor.a = alpha;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat2
|
|
velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w) -
|
|
(i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\t\t\t\tVFXEncodeMotionVector(velocity
|
|
* 0.5f, encodedMotionVector);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\toutMotionVector
|
|
= encodedMotionVector;\n\t\t\t\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t\t\toutSelection
|
|
= float4(_ObjectId, _PassValue, 1.0, 1.0);\n\t\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t\t\t#ifndef WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\t\tdummy
|
|
= (float4)0;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t#error
|
|
VFX_PASSDEPTH undefined \n\t\t\t\t\t\t#endif\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\n\t\t\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t\t\r\n\t\t//
|
|
Forward pass\n\t\tPass\n\t\t{\t\t\n\t\t\tTags { \"LightMode\"=\"ForwardOnly\"
|
|
}\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#pragma target 4.5\n\t\t\t#pragma multi_compile
|
|
_ DEBUG_DISPLAY\n\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos :
|
|
SV_POSITION;\n\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_COLOR_INTERPOLATOR\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 color : COLOR0;\n\t\t\t\t#endif\n\t\t\t\t#if USE_SOFT_PARTICLE || USE_ALPHA_TEST
|
|
|| USE_FLIPBOOK_INTERPOLATION || USE_EXPOSURE_WEIGHT || WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t//
|
|
x: inverse soft particles fade distance\n\t\t\t\t// y: alpha threshold\n\t\t\t\t//
|
|
z: frame blending factor\n\t\t\t\t// w: exposure weight\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t\tfloat3
|
|
posWS : TEXCOORD3;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
cPosPrevious : TEXCOORD4;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD5;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t\t\tfloat3 normal : TEXCOORD6;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t\t\tfloat3 tangent : TEXCOORD7;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t
|
|
\n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\tstruct
|
|
ps_output\n\t\t\t{\n\t\t\t\tfloat4 color : SV_Target0;\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
outMotionVector : SV_Target1;\n\t\t#endif\n\t\t\t};\n\t\t\n\t\t#define VFX_VARYING_PS_INPUTS
|
|
ps_input\n\t\t#define VFX_VARYING_POSCS pos\n\t\t#define VFX_VARYING_COLOR
|
|
color.rgb\n\t\t#define VFX_VARYING_ALPHA color.a\n\t\t#define VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
builtInInterpolants.x\n\t\t#define VFX_VARYING_ALPHATHRESHOLD builtInInterpolants.y\n\t\t#define
|
|
VFX_VARYING_FRAMEBLEND builtInInterpolants.z\n\t\t#define VFX_VARYING_MOTIONVECTORSCALE
|
|
builtInInterpolants2.xy\n\t\t#define VFX_VARYING_UV uv\n\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t#define
|
|
VFX_VARYING_POSWS posWS\n\t\t#endif\n\t\t#if USE_EXPOSURE_WEIGHT\n\t\t#define
|
|
VFX_VARYING_EXPOSUREWEIGHT builtInInterpolants.w\n\t\t#endif\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t#endif\n\t\t\n\t\t#define SHADERPASS SHADERPASS_FORWARD_UNLIT\n\t\t\t\n\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t#define VFX_VARYING_NORMAL normal\n\t\t#endif\n\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t#define VFX_VARYING_TANGENT tangent\n\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
!(defined(VFX_VARYING_PS_INPUTS) && defined(VFX_VARYING_POSCS))\n\t\t\t#error
|
|
VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
Orient_189(inout float3 axisX, inout float3 axisY, inout float3 axisZ, float3
|
|
position) /*mode:FaceCameraPosition axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t
|
|
if (unity_OrthoParams.w == 1.0f) // Face plane for ortho\n\t\t\t {\n\t\t\t
|
|
float3x3 viewRot = GetVFXToViewRotMatrix();\n\t\t\t axisX = viewRot[0].xyz;\n\t\t\t
|
|
axisY = viewRot[1].xyz;\n\t\t\t #if VFX_LOCAL_SPACE // Need to remove
|
|
potential scale in local transform\n\t\t\t axisX = normalize(axisX);\n\t\t\t
|
|
axisY = normalize(axisY);\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
#else\n\t\t\t axisZ = -viewRot[2].xyz;\n\t\t\t #endif\n\t\t\t
|
|
}\n\t\t\t else\n\t\t\t {\n\t\t\t axisZ = normalize(position -
|
|
GetViewVFXPosition());\n\t\t\t axisX = normalize(cross(GetVFXToViewRotMatrix()[1].xyz,axisZ));\n\t\t\t
|
|
axisY = cross(axisZ,axisX);\n\t\t\t }\n\t\t\t \n\t\t\t}\n\t\t\tvoid AttributeFromCurve_48A86161(inout
|
|
float3 color, inout float alpha, float age, float lifetime, float Color) /*attribute:color
|
|
Composition:Overwrite AlphaComposition:Overwrite SampleMode:OverLife Mode:PerComponent
|
|
ColorMode:ColorAndAlpha channels:XYZ */\n\t\t\t{\n\t\t\t float t = age /
|
|
lifetime;\n\t\t\t float4 value = 0.0f;\n\t\t\t value = SampleGradient(Color,
|
|
t);\n\t\t\t color = value.rgb;\n\t\t\t alpha = value.a;\n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_3278B22F(inout float size, float Size) /*attribute:size Composition:Overwrite
|
|
Source:Slot Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t size = Size;\n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_65DEC940(inout float pivotX, inout float pivotY, inout float pivotZ,
|
|
float3 Pivot) /*attribute:pivot Composition:Overwrite Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t pivotX = Pivot.x;\n\t\t\t pivotY = Pivot.y;\n\t\t\t
|
|
pivotZ = Pivot.z;\n\t\t\t}\n\t\t\tvoid SetAttribute_C707D62A(inout float3 position,
|
|
float3 Position) /*attribute:position Composition:Add Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t position += Position;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if
|
|
defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error VFX_PRIMITIVE_QUAD
|
|
must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x0) << 2));\n\t\t\t\t\n\n\t\t\t\treturn
|
|
attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3 GetStripTangent(float3
|
|
currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.position = asfloat(attributeBuffer.Load3((index
|
|
* 0x4 + 0x0) << 2));\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x10) << 2));\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x14) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.size
|
|
= (float)0.100000001;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x15) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x14) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x0) << 2));\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x10) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.size = (float)0.100000001;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x15) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\tOrient_189(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ,
|
|
attributes.position);\n\t\t\t\tAttributeFromCurve_48A86161( /*inout */attributes.color,
|
|
/*inout */attributes.alpha, attributes.age, attributes.lifetime, Color_b);\n\t\t\t\t{\n\t\t\t\t
|
|
float2 tmp_bd = GeneratePerlinNoise(uniform_c, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t float tmp_be = tmp_bd[0];\n\t\t\t\t
|
|
float tmp_bg = tmp_be - (float)-1;\n\t\t\t\t float tmp_bi = tmp_bg / (float)2;\n\t\t\t\t
|
|
float tmp_bj = tmp_bi * uniform_d;\n\t\t\t\t float tmp_bk = uniform_b +
|
|
tmp_bj;\n\t\t\t\t float tmp_bl = uniform_a + tmp_bk;\n\t\t\t\t float
|
|
tmp_bn = tmp_bl * (float)3;\n\t\t\t\t SetAttribute_3278B22F( /*inout */attributes.size,
|
|
tmp_bn);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t SetAttribute_65DEC940( /*inout
|
|
*/attributes.pivotX, /*inout */attributes.pivotY, /*inout */attributes.pivotZ,
|
|
float3(0, 0, 1));\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t float3 tmp_bd = GeneratePerlinCurlNoise(uniform_e,
|
|
float3(1, 0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t
|
|
float3 tmp_be = tmp_bd * uniform_f;\n\t\t\t\t SetAttribute_C707D62A( /*inout
|
|
*/attributes.position, tmp_be);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\tif (!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t\t\n\t\t#endif\n\t\t\t\t\n\t\t\t#pragma fragment frag\n\t\t\tps_output
|
|
frag(ps_input i)\n\t\t\t{\n\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\tps_output
|
|
o = (ps_output)0;\n\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\n\t\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\t\t\t\t#if USE_DOUBLE_SIDED\n\t\t\t\t\t\t\tconst
|
|
float faceMul = frontFace ? 1.0f : -1.0f;\n\t\t\t\t\t\t\t#else\n\t\t\t\t\t\t\tconst
|
|
float faceMul = 1.0f;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3
|
|
normalWS = i.VFX_VARYING_NORMAL * faceMul;\n\t\t\t\t\t\t\tconst VFXUVData uvData
|
|
= GetUVData(i);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_TANGENT\n\t\t\t\t\t\t\tfloat3
|
|
tangentWS = i.VFX_VARYING_TANGENT;\n\t\t\t\t\t\t\tfloat3 bitangentWS = cross(i.VFX_VARYING_TANGENT,i.VFX_VARYING_NORMAL);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_BENTFACTORS) && USE_NORMAL_BENDING\t\n\t\t\t\t\t\t\tfloat3
|
|
bentFactors = float3(i.VFX_VARYING_BENTFACTORS.xy,sqrt(1.0f - dot(i.VFX_VARYING_BENTFACTORS,i.VFX_VARYING_BENTFACTORS)));\n\t\t\t\t\t\t\tnormalWS
|
|
= tangentWS * bentFactors.x + bitangentWS * bentFactors.y + normalWS * bentFactors.z;\n\t\t\t\t\t\t\ttangentWS
|
|
= normalize(cross(normalWS,bitangentWS));\n\t\t\t\t\t\t\tbitangentWS = cross(tangentWS,normalWS);\n\t\t\t\t\t\t\ttangentWS
|
|
*= faceMul;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3x3 tbn
|
|
= float3x3(tangentWS,bitangentWS,normalWS);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
USE_NORMAL_MAP\n\t\t\t\t\t\t\tfloat3 n = SampleNormalMap(VFX_SAMPLER(normalMap),uvData);\n\t\t\t\t\t\t\tfloat
|
|
normalScale = 1.0f;\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_NORMALSCALE\n\t\t\t\t\t\t\tnormalScale
|
|
= i.VFX_VARYING_NORMALSCALE;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\tnormalWS
|
|
= normalize(lerp(normalWS,mul(n,tbn),normalScale));\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t \n\t\t \n\t\t \n\t\t \n\t\t
|
|
#if HAS_SHADERGRAPH_PARAM_COLOR\n\t\t o.color.rgb = OUTSG..rgb;\n\t\t
|
|
#endif\n\t\t \n\t\t #if HAS_SHADERGRAPH_PARAM_ALPHA \n\t\t
|
|
o.color.a = OUTSG.;\n\t\t #endif\n\t\t#else\n\t\t\t\n\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR VFXGetTextureColor(VFX_SAMPLER(mainTexture),i)\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tfloat4
|
|
color = VFXGetFragmentColor(i);\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifndef VFX_TEXTURE_COLOR\n\t\t\t\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR float4(1.0,1.0,1.0,1.0)\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_DEFAULT\n\t\t\t\t\t\t\to.color = color * VFX_TEXTURE_COLOR;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_GRADIENTMAPPED\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\to.color = SampleGradient(gradient,
|
|
VFX_TEXTURE_COLOR.a * color.a) * float4(color.rgb,1.0);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\to.color
|
|
= VFXApplyPreExposure(o.color, i);\n\t\t#endif\n\t\t\n\t\t\t\to.color = VFXApplyFog(o.color,i);\n\t\t\t\tVFXClipFragmentColor(o.color.a,i);\n\t\t\t\to.color.a
|
|
= saturate(o.color.a);\n\t\t\t\to.color = VFXTransformFinalColor(o.color);\n\t\t\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t\n\t\t\t\t\t\tfloat2 velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w)
|
|
- (i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\tVFXEncodeMotionVector(velocity * 0.5f,
|
|
encodedMotionVector);\n\t\t\t\t\t\t\n\t\t\t\to.outMotionVector = encodedMotionVector;\n\t\t
|
|
o.outMotionVector.a = o.color.a < i.VFX_VARYING_ALPHATHRESHOLD ? 0.0f : 1.0f;
|
|
//Independant clipping for motion vector pass\n\t\t#endif\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t}\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[System 4]Initialize Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_COLOR_CURRENT
|
|
1\n#define VFX_USE_CHUNKPOSITION_CURRENT 1\n#define VFX_USE_POSITION_CURRENT
|
|
1\n#define VFX_USE_TARGETPOSITION_CURRENT 1\n#define VFX_USE_SIZE_CURRENT 1\n#define
|
|
VFX_USE_PARTICLEID_CURRENT 1\n#define VFX_USE_ALIVE_CURRENT 1\n#define VFX_USE_AGE_CURRENT
|
|
1\n#define VFX_USE_LIFETIME_SOURCE 1\n#define VFX_USE_COLOR_SOURCE 1\n#define
|
|
VFX_USE_TARGETPOSITION_SOURCE 1\n#define VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float uniform_a;\n float uniform_b;\n float uniform_c;\n float uniform_d;\nCBUFFER_END\n\nstruct
|
|
Attributes\n{\n float lifetime;\n float3 color;\n float2 ChunkPosition;\n
|
|
float3 position;\n float3 targetPosition;\n float size;\n uint particleId;\n
|
|
bool alive;\n float age;\n};\n\nstruct SourceAttributes\n{\n float lifetime;\n
|
|
float3 color;\n float3 targetPosition;\n};\n\n\n\r\n\r\n#define USE_DEAD_LIST
|
|
(VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer attributeBuffer;\r\nByteAddressBuffer
|
|
sourceAttributeBuffer;\r\n\r\nCBUFFER_START(initParams)\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
uint nbSpawned;\t\t\t\t\t// Numbers of particle spawned\r\n uint spawnIndex;\t\t\t\t//
|
|
Index of the first particle spawned\r\n uint dispatchWidth;\r\n#else\r\n
|
|
uint offsetInAdditionalOutput;\r\n\tuint nbMax;\r\n#endif\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#if
|
|
USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListIn;\r\nByteAddressBuffer
|
|
deadListCount; // This is bad to use a SRV to fetch deadList count but Unity
|
|
API currently prevent from copying to CB\r\n#endif\r\n\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\nStructuredBuffer<uint>
|
|
eventList;\r\nByteAddressBuffer inputAdditional;\r\n#endif\r\n\r\n#if HAS_STRIPS\r\nRWBuffer<uint>
|
|
stripDataBuffer;\r\n#endif\r\n\r\n#include \"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
SetAttribute_F011C510(inout float lifetime, float Value) /*attribute:lifetime
|
|
Composition:Overwrite Source:Source Random:Off channels:XYZ */\n{\n lifetime
|
|
= Value;\n}\nvoid SetAttribute_FDCE071E(inout float3 color, float3 Value) /*attribute:color
|
|
Composition:Overwrite Source:Source Random:Off channels:XYZ */\n{\n color
|
|
= Value;\n}\nvoid SetCustomAttribute_40F00561(inout float2 ChunkPosition, float2
|
|
_ChunkPosition) /*attribute:ChunkPosition Composition:Overwrite Random:Off
|
|
AttributeType:Vector2 */\n{\n ChunkPosition = _ChunkPosition;\n}\nvoid SetAttribute_CAC29747(inout
|
|
float3 position, float3 Position) /*attribute:position Composition:Overwrite
|
|
Source:Slot Random:Off channels:XYZ */\n{\n position = Position;\n}\nvoid
|
|
SetAttribute_2CF4000A(inout float3 targetPosition, float3 TargetPosition) /*attribute:targetPosition
|
|
Composition:Overwrite Source:Slot Random:Off channels:XYZ */\n{\n targetPosition
|
|
= TargetPosition;\n}\nvoid SetAttribute_3278B229(inout float size, float Size)
|
|
/*attribute:size Composition:Overwrite Source:Slot Random:Off channels:X */\n{\n
|
|
size = Size;\n}\n\n\r\n\r\n// Due to a bug in HLSL compiler, disable spurious
|
|
\"unitialized variable\" due to mid function return statement\r\n#pragma warning(push)\r\n#pragma
|
|
warning(disable : 4000)\r\n#if HAS_STRIPS\r\nbool GetParticleIndex(inout uint
|
|
particleIndex, uint stripIndex)\r\n{\r\n\tuint relativeIndex;\r\n\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX,
|
|
stripIndex), 1, relativeIndex);\r\n\tif (relativeIndex >= PARTICLE_PER_STRIP_COUNT)
|
|
// strip is full\r\n\t{\r\n\t\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX,
|
|
stripIndex), -1); // Remove previous increment\r\n\t\treturn false;\r\n\t}\r\n\r\n\tparticleIndex
|
|
= stripIndex * PARTICLE_PER_STRIP_COUNT + ((STRIP_DATA(STRIP_FIRST_INDEX, stripIndex)
|
|
+ relativeIndex) % PARTICLE_PER_STRIP_COUNT);\r\n return true;\r\n}\r\n#endif\r\n#pragma
|
|
warning(pop)\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n
|
|
uint id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP;\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
id += groupId.y * dispatchWidth * NB_THREADS_PER_GROUP;\r\n#endif\r\n\r\n#if
|
|
VFX_USE_SPAWNER_FROM_GPU\r\n uint maxThreadId = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 0) << 2);\r\n uint currentSpawnIndex = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 1) << 2) - maxThreadId;\r\n#else\r\n uint maxThreadId = nbSpawned;\r\n
|
|
uint currentSpawnIndex = spawnIndex;\r\n#endif\r\n\r\n#if USE_DEAD_LIST\r\n
|
|
maxThreadId = min(maxThreadId, deadListCount.Load(0x0));\r\n#elif VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
maxThreadId = min(maxThreadId, nbMax); //otherwise, nbSpawned already clamped
|
|
on CPU\r\n#endif\r\n\r\n if (id < maxThreadId)\r\n {\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
int sourceIndex = eventList[id];\r\n#endif\r\n\t\tuint particleIndex = id +
|
|
currentSpawnIndex;\r\n\t\t\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n int
|
|
sourceIndex = 0;\n /*//Loop with 1 iteration generate a wrong IL Assembly
|
|
(and actually, useless code)\n uint currentSumSpawnCount = 0u;\n
|
|
for (sourceIndex=0; sourceIndex<1; sourceIndex++)\n {\n currentSumSpawnCount
|
|
+= uint(asfloat(sourceAttributeBuffer.Load((sourceIndex * 0x8 + 0x3) << 2)));\n
|
|
if (id < currentSumSpawnCount)\n {\n break;\n
|
|
}\n }\n */\n \n\r\n#endif\r\n\r\n\t\tAttributes attributes
|
|
= (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes = (SourceAttributes)0;\r\n\t\t\r\n
|
|
attributes.lifetime = (float)1;\n attributes.color = float3(1, 1, 1);\n
|
|
attributes.ChunkPosition = float2(0, 0);\n attributes.position = float3(0,
|
|
0, 0);\n attributes.targetPosition = float3(0, 0, 0);\n attributes.size
|
|
= (float)0.100000001;\n attributes.particleId = (uint)0;\n attributes.alive
|
|
= (bool)true;\n attributes.age = (float)0;\n sourceAttributes.lifetime
|
|
= asfloat(sourceAttributeBuffer.Load((sourceIndex * 0x8 + 0x7) << 2));\n
|
|
sourceAttributes.color = asfloat(sourceAttributeBuffer.Load3((sourceIndex *
|
|
0x8 + 0x0) << 2));\n sourceAttributes.targetPosition = asfloat(sourceAttributeBuffer.Load3((sourceIndex
|
|
* 0x8 + 0x4) << 2));\n \n\r\n#if VFX_USE_PARTICLEID_CURRENT\r\n
|
|
attributes.particleId = particleIndex;\r\n#endif\r\n#if VFX_USE_SEED_CURRENT\r\n
|
|
attributes.seed = WangHash(particleIndex ^ systemSeed);\r\n#endif\r\n#if VFX_USE_SPAWNINDEX_CURRENT\r\n
|
|
attributes.spawnIndex = id;\r\n#endif\r\n#if HAS_STRIPS\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n\t\t\r\n#else\r\n
|
|
uint stripIndex = sourceIndex;\r\n#endif\r\n\t\tstripIndex = min(stripIndex,
|
|
STRIP_COUNT);\r\n\r\n if (!GetParticleIndex(particleIndex, stripIndex))\r\n
|
|
return;\r\n\r\n const StripData stripData = GetStripDataFromStripIndex(stripIndex,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n\t\tInitStripAttributes(particleIndex, attributes,
|
|
stripData);\r\n\t\t// TODO Change seed to be sure we're deterministic on random
|
|
with strip\r\n#endif\r\n \r\n {\n float tmp_o = sourceAttributes.lifetime;\n
|
|
SetAttribute_F011C510( /*inout */attributes.lifetime, tmp_o);\n }\n
|
|
{\n float3 tmp_o = sourceAttributes.color;\n SetAttribute_FDCE071E(
|
|
/*inout */attributes.color, tmp_o);\n }\n {\n uint
|
|
tmp_p = attributes.particleId / (uint)500;\n uint tmp_q = tmp_p
|
|
* (uint)500;\n uint tmp_r = attributes.particleId - tmp_q;\n
|
|
float tmp_s = (float)tmp_r;\n float tmp_u = tmp_s / (float)500;\n
|
|
uint tmp_w = attributes.particleId + (uint)1;\n uint tmp_x = tmp_w
|
|
/ (uint)500;\n uint tmp_y = tmp_x * (uint)500;\n uint
|
|
tmp_z = tmp_w - tmp_y;\n float tmp_ba = (float)tmp_z;\n
|
|
bool tmp_bc = tmp_ba == (float)0;\n float tmp_bd = tmp_bc ? (float)500
|
|
: tmp_ba;\n float tmp_be = tmp_bd / (float)500;\n float2
|
|
tmp_bf = float2(tmp_u, tmp_be);\n SetCustomAttribute_40F00561( /*inout
|
|
*/attributes.ChunkPosition, tmp_bf);\n }\n {\n float3
|
|
tmp_o = sourceAttributes.targetPosition;\n float3 tmp_q = tmp_o
|
|
* tmp_o;\n float tmp_r = tmp_q[2];\n float tmp_s = tmp_q[1];\n
|
|
float tmp_t = tmp_r + tmp_s;\n float tmp_u = tmp_q[0];\n
|
|
float tmp_v = tmp_t + tmp_u;\n float tmp_x = pow(tmp_v, (float)0.5);\n
|
|
float tmp_y = (float)1 / tmp_x;\n float3 tmp_z = float3(tmp_y, tmp_y,
|
|
tmp_y);\n float3 tmp_ba = tmp_o * tmp_z;\n float3 tmp_bc
|
|
= tmp_ba * float3(1.79999995, 1.79999995, 1.79999995);\n float2
|
|
tmp_bf = GeneratePerlinNoise(uniform_c, float3(1, 0.75, 2).x, (int)7, float3(1,
|
|
0.75, 2).y, float3(1, 0.75, 2).z);\n float tmp_bg = tmp_bf[0];\n
|
|
float tmp_bi = tmp_bg - (float)-1;\n float tmp_bk = tmp_bi / (float)2;\n
|
|
float tmp_bl = tmp_bk * uniform_d;\n float tmp_bm = uniform_b +
|
|
tmp_bl;\n float tmp_bn = uniform_a + tmp_bm;\n float3
|
|
tmp_bo = float3(tmp_bn, tmp_bn, tmp_bn);\n float3 tmp_bp = tmp_bc
|
|
* tmp_bo;\n float tmp_bq = attributes.ChunkPosition[0];\n
|
|
float tmp_bs = max(tmp_bq, (float)0);\n float tmp_bt = min(tmp_bs,
|
|
(float)1);\n float tmp_bu = (float)1 - tmp_bt;\n float3
|
|
tmp_bv = float3(tmp_bu, tmp_bu, tmp_bu);\n float3 tmp_bw = tmp_bp
|
|
* tmp_bv;\n float3 tmp_bx = tmp_bw * tmp_bv;\n float3
|
|
tmp_by = tmp_bx * tmp_bv;\n float tmp_ca = tmp_ba[1];\n
|
|
float3 tmp_cc = tmp_o - tmp_bp;\n float3 tmp_cd = float3(0.333330005,
|
|
0.333330005, 0.333330005) * tmp_cc;\n float3 tmp_ce = tmp_bp + tmp_cd;\n
|
|
float3 tmp_ch = GenerateValueCurlNoise(tmp_ce, float3(1, 0.5, 2).x, (int)1,
|
|
float3(1, 0.5, 2).y, float3(1, 0.5, 2).z);\n float3 tmp_cj = tmp_ch
|
|
* float3(5, 5, 5);\n float tmp_ck = tmp_cj[2];\n float
|
|
tmp_cl = tmp_ca * tmp_ck;\n float tmp_cm = tmp_ba[2];\n
|
|
float tmp_cn = tmp_cj[1];\n float tmp_co = tmp_cm * tmp_cn;\n
|
|
float tmp_cp = tmp_cl - tmp_co;\n float tmp_cq = tmp_cj[0];\n
|
|
float tmp_cr = tmp_cm * tmp_cq;\n float tmp_cs = tmp_ba[0];\n
|
|
float tmp_ct = tmp_cs * tmp_ck;\n float tmp_cu = tmp_cr - tmp_ct;\n
|
|
float tmp_cv = tmp_cs * tmp_cn;\n float tmp_cw = tmp_ca * tmp_cq;\n
|
|
float tmp_cx = tmp_cv - tmp_cw;\n float3 tmp_cy = float3(tmp_cp,
|
|
tmp_cu, tmp_cx);\n float3 tmp_cz = tmp_cy + tmp_ce;\n
|
|
float3 tmp_da = float3(3, 3, 3) * tmp_cz;\n float3 tmp_db = tmp_da
|
|
* tmp_bv;\n float3 tmp_dc = tmp_db * tmp_bv;\n float3
|
|
tmp_dd = float3(tmp_bt, tmp_bt, tmp_bt);\n float3 tmp_de = tmp_dc
|
|
* tmp_dd;\n float3 tmp_df = tmp_by + tmp_de;\n float3
|
|
tmp_dh = float3(0.666660011, 0.666660011, 0.666660011) * tmp_cc;\n
|
|
float3 tmp_di = tmp_bp + tmp_dh;\n float3 tmp_dj = GenerateValueCurlNoise(tmp_di,
|
|
float3(1, 0.5, 2).x, (int)1, float3(1, 0.5, 2).y, float3(1, 0.5, 2).z);\n
|
|
float3 tmp_dk = tmp_dj * float3(5, 5, 5);\n float tmp_dl = tmp_dk[2];\n
|
|
float tmp_dm = tmp_ca * tmp_dl;\n float tmp_dn = tmp_dk[1];\n
|
|
float tmp_do = tmp_cm * tmp_dn;\n float tmp_dp = tmp_dm - tmp_do;\n
|
|
float tmp_dq = tmp_dk[0];\n float tmp_dr = tmp_cm * tmp_dq;\n
|
|
float tmp_ds = tmp_cs * tmp_dl;\n float tmp_dt = tmp_dr - tmp_ds;\n
|
|
float tmp_du = tmp_cs * tmp_dn;\n float tmp_dv = tmp_ca * tmp_dq;\n
|
|
float tmp_dw = tmp_du - tmp_dv;\n float3 tmp_dx = float3(tmp_dp,
|
|
tmp_dt, tmp_dw);\n float3 tmp_dy = tmp_dx + tmp_di;\n
|
|
float3 tmp_dz = float3(3, 3, 3) * tmp_dy;\n float3 tmp_ea = tmp_dz
|
|
* tmp_bv;\n float3 tmp_eb = tmp_ea * tmp_dd;\n float3
|
|
tmp_ec = tmp_eb * tmp_dd;\n float3 tmp_ed = tmp_df + tmp_ec;\n
|
|
float3 tmp_ee = tmp_o * tmp_dd;\n float3 tmp_ef = tmp_ee * tmp_dd;\n
|
|
float3 tmp_eg = tmp_ef * tmp_dd;\n float3 tmp_eh = tmp_ed + tmp_eg;\n
|
|
SetAttribute_CAC29747( /*inout */attributes.position, tmp_eh);\n }\n
|
|
{\n float3 tmp_o = sourceAttributes.targetPosition;\n
|
|
float3 tmp_q = tmp_o * tmp_o;\n float tmp_r = tmp_q[2];\n
|
|
float tmp_s = tmp_q[1];\n float tmp_t = tmp_r + tmp_s;\n
|
|
float tmp_u = tmp_q[0];\n float tmp_v = tmp_t + tmp_u;\n
|
|
float tmp_x = pow(tmp_v, (float)0.5);\n float tmp_y = (float)1 /
|
|
tmp_x;\n float3 tmp_z = float3(tmp_y, tmp_y, tmp_y);\n
|
|
float3 tmp_ba = tmp_o * tmp_z;\n float3 tmp_bc = tmp_ba * float3(1.79999995,
|
|
1.79999995, 1.79999995);\n float2 tmp_bf = GeneratePerlinNoise(uniform_c,
|
|
float3(1, 0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n
|
|
float tmp_bg = tmp_bf[0];\n float tmp_bi = tmp_bg - (float)-1;\n
|
|
float tmp_bk = tmp_bi / (float)2;\n float tmp_bl = tmp_bk * uniform_d;\n
|
|
float tmp_bm = uniform_b + tmp_bl;\n float tmp_bn = uniform_a +
|
|
tmp_bm;\n float3 tmp_bo = float3(tmp_bn, tmp_bn, tmp_bn);\n
|
|
float3 tmp_bp = tmp_bc * tmp_bo;\n float tmp_bq = attributes.ChunkPosition[1];\n
|
|
float tmp_bs = max(tmp_bq, (float)0);\n float tmp_bt = min(tmp_bs,
|
|
(float)1);\n float tmp_bu = (float)1 - tmp_bt;\n float3
|
|
tmp_bv = float3(tmp_bu, tmp_bu, tmp_bu);\n float3 tmp_bw = tmp_bp
|
|
* tmp_bv;\n float3 tmp_bx = tmp_bw * tmp_bv;\n float3
|
|
tmp_by = tmp_bx * tmp_bv;\n float tmp_ca = tmp_ba[1];\n
|
|
float3 tmp_cc = tmp_o - tmp_bp;\n float3 tmp_cd = float3(0.333330005,
|
|
0.333330005, 0.333330005) * tmp_cc;\n float3 tmp_ce = tmp_bp + tmp_cd;\n
|
|
float3 tmp_ch = GenerateValueCurlNoise(tmp_ce, float3(1, 0.5, 2).x, (int)1,
|
|
float3(1, 0.5, 2).y, float3(1, 0.5, 2).z);\n float3 tmp_cj = tmp_ch
|
|
* float3(5, 5, 5);\n float tmp_ck = tmp_cj[2];\n float
|
|
tmp_cl = tmp_ca * tmp_ck;\n float tmp_cm = tmp_ba[2];\n
|
|
float tmp_cn = tmp_cj[1];\n float tmp_co = tmp_cm * tmp_cn;\n
|
|
float tmp_cp = tmp_cl - tmp_co;\n float tmp_cq = tmp_cj[0];\n
|
|
float tmp_cr = tmp_cm * tmp_cq;\n float tmp_cs = tmp_ba[0];\n
|
|
float tmp_ct = tmp_cs * tmp_ck;\n float tmp_cu = tmp_cr - tmp_ct;\n
|
|
float tmp_cv = tmp_cs * tmp_cn;\n float tmp_cw = tmp_ca * tmp_cq;\n
|
|
float tmp_cx = tmp_cv - tmp_cw;\n float3 tmp_cy = float3(tmp_cp,
|
|
tmp_cu, tmp_cx);\n float3 tmp_cz = tmp_cy + tmp_ce;\n
|
|
float3 tmp_da = float3(3, 3, 3) * tmp_cz;\n float3 tmp_db = tmp_da
|
|
* tmp_bv;\n float3 tmp_dc = tmp_db * tmp_bv;\n float3
|
|
tmp_dd = float3(tmp_bt, tmp_bt, tmp_bt);\n float3 tmp_de = tmp_dc
|
|
* tmp_dd;\n float3 tmp_df = tmp_by + tmp_de;\n float3
|
|
tmp_dh = float3(0.666660011, 0.666660011, 0.666660011) * tmp_cc;\n
|
|
float3 tmp_di = tmp_bp + tmp_dh;\n float3 tmp_dj = GenerateValueCurlNoise(tmp_di,
|
|
float3(1, 0.5, 2).x, (int)1, float3(1, 0.5, 2).y, float3(1, 0.5, 2).z);\n
|
|
float3 tmp_dk = tmp_dj * float3(5, 5, 5);\n float tmp_dl = tmp_dk[2];\n
|
|
float tmp_dm = tmp_ca * tmp_dl;\n float tmp_dn = tmp_dk[1];\n
|
|
float tmp_do = tmp_cm * tmp_dn;\n float tmp_dp = tmp_dm - tmp_do;\n
|
|
float tmp_dq = tmp_dk[0];\n float tmp_dr = tmp_cm * tmp_dq;\n
|
|
float tmp_ds = tmp_cs * tmp_dl;\n float tmp_dt = tmp_dr - tmp_ds;\n
|
|
float tmp_du = tmp_cs * tmp_dn;\n float tmp_dv = tmp_ca * tmp_dq;\n
|
|
float tmp_dw = tmp_du - tmp_dv;\n float3 tmp_dx = float3(tmp_dp,
|
|
tmp_dt, tmp_dw);\n float3 tmp_dy = tmp_dx + tmp_di;\n
|
|
float3 tmp_dz = float3(3, 3, 3) * tmp_dy;\n float3 tmp_ea = tmp_dz
|
|
* tmp_bv;\n float3 tmp_eb = tmp_ea * tmp_dd;\n float3
|
|
tmp_ec = tmp_eb * tmp_dd;\n float3 tmp_ed = tmp_df + tmp_ec;\n
|
|
float3 tmp_ee = tmp_o * tmp_dd;\n float3 tmp_ef = tmp_ee * tmp_dd;\n
|
|
float3 tmp_eg = tmp_ef * tmp_dd;\n float3 tmp_eh = tmp_ed + tmp_eg;\n
|
|
SetAttribute_2CF4000A( /*inout */attributes.targetPosition, tmp_eh);\n
|
|
}\n {\n SetAttribute_3278B229( /*inout */attributes.size,
|
|
(float)0.100000001);\n }\n \n\r\n\t\t\r\n#if VFX_USE_ALIVE_CURRENT\r\n
|
|
if (attributes.alive)\r\n#endif \r\n {\r\n#if USE_DEAD_LIST\r\n\t
|
|
uint deadIndex = deadListIn.DecrementCounter();\r\n uint index =
|
|
deadListIn[deadIndex];\r\n#else\r\n uint index = particleIndex;\r\n#endif\r\n
|
|
attributeBuffer.Store((index * 0x1 + 0x0) << 2,asuint(attributes.lifetime));\n
|
|
attributeBuffer.Store3((index * 0x10 + 0x1F400) << 2,asuint(attributes.color));\n
|
|
attributeBuffer.Store2((index * 0x10 + 0x1F40C) << 2,asuint(attributes.ChunkPosition));\n
|
|
attributeBuffer.Store3((index * 0x10 + 0x1F404) << 2,asuint(attributes.position));\n
|
|
attributeBuffer.Store3((index * 0x10 + 0x1F408) << 2,asuint(attributes.targetPosition));\n
|
|
attributeBuffer.Store((index * 0x2 + 0x213400) << 2,uint(attributes.alive));\n
|
|
attributeBuffer.Store((index * 0x2 + 0x213401) << 2,asuint(attributes.age));\n
|
|
\n\r\n }\r\n }\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[System 4]Update Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_ALIVE_CURRENT
|
|
1\n#define VFX_USE_AGE_CURRENT 1\n#define VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float deltaTime_a;\n uint3 PADDING_0;\nCBUFFER_END\n\nstruct Attributes\n{\n
|
|
float lifetime;\n bool alive;\n float age;\n};\n\nstruct SourceAttributes\n{\n};\n\n\n\r\n\r\n#define
|
|
USE_DEAD_LIST (VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer
|
|
attributeBuffer;\r\n\r\n#if USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListOut;\r\n#endif\r\n\r\n#if
|
|
VFX_HAS_INDIRECT_DRAW\r\nRWStructuredBuffer<uint> indirectBuffer;\r\n#endif\r\n\r\n#if
|
|
HAS_STRIPS\r\nRWBuffer<uint> stripDataBuffer;\r\n#endif\r\n\r\n#if VFX_USE_STRIPALIVE_CURRENT\r\nBuffer<uint>
|
|
attachedStripDataBuffer;\r\n#endif\r\n\r\nCBUFFER_START(updateParams)\r\n
|
|
uint nbMax;\r\n\tuint dispatchWidth;\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
Age(inout float age, float deltaTime)\n{\n age += deltaTime;\n}\nvoid Reap(float
|
|
age, float lifetime, inout bool alive)\n{\n if(age > lifetime) { alive =
|
|
false; }\n}\n\n\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n\tuint
|
|
id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP + groupId.y * dispatchWidth
|
|
* NB_THREADS_PER_GROUP;\r\n\tuint index = id;\r\n\tif (id < nbMax)\r\n\t{\r\n
|
|
Attributes attributes = (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\r\n\r\n#if VFX_USE_ALIVE_CURRENT\r\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x213400) << 2));\n\t\t\n\r\n\t\tif
|
|
(attributes.alive)\r\n\t\t{\r\n\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x0) << 2));\n\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x213401) << 2));\n\t\t\t\n\r\n\r\n// Initialize built-in needed attributes\r\n#if
|
|
VFX_USE_OLDPOSITION_CURRENT\r\n\t\t\tattributes.oldPosition = attributes.position;\r\n#endif\r\n#if
|
|
HAS_STRIPS\r\n const StripData stripData = GetStripDataFromParticleIndex(index,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n InitStripAttributes(index, attributes,
|
|
stripData);\r\n#endif\r\n\t\t\t\r\n\t\t\tAge( /*inout */attributes.age, deltaTime_a);\n\t\t\tReap(attributes.age,
|
|
attributes.lifetime, /*inout */attributes.alive);\n\t\t\t\n\r\n\r\n\t\t\tif
|
|
(attributes.alive)\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index * 0x2
|
|
+ 0x213401) << 2,asuint(attributes.age));\n\t\t\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\t\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n\r\n#if HAS_STRIPS\t\t\t\r\n\t\t\t\tuint relativeIndexInStrip
|
|
= GetRelativeIndex(index, stripData);\r\n\t\t\t\tInterlockedMin(STRIP_DATA(STRIP_MIN_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n\t\t\t\tInterlockedMax(STRIP_DATA(STRIP_MAX_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n#endif\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x213400) << 2,uint(attributes.alive));\n\t\t\t\t\n\r\n#if USE_DEAD_LIST
|
|
&& !VFX_USE_STRIPALIVE_CURRENT\r\n\t\t\t\tuint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n#endif\r\n\t\t\t}\r\n\t\t}\r\n#if USE_DEAD_LIST && VFX_USE_STRIPALIVE_CURRENT\r\n
|
|
else if (attributes.stripAlive)\r\n {\r\n if (STRIP_DATA_X(attachedStripDataBuffer,
|
|
STRIP_MIN_ALIVE, index) == ~1) // Attached strip is no longer alive, recycle
|
|
the particle \r\n {\r\n uint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n attributes.stripAlive = false;\r\n
|
|
\r\n } \r\n }\r\n#endif\r\n#else\r\n\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x213400) << 2));\n\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x213401) << 2));\n\t\t\n\r\n\t\t\r\n#if
|
|
VFX_USE_OLDPOSITION_CURRENT\r\n\t\tattributes.oldPosition = attributes.position;\r\n#endif\r\n#if
|
|
HAS_STRIPS\r\n const StripData stripData = GetStripDataFromParticleIndex(index,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n InitStripAttributes(index, attributes,
|
|
stripData);\r\n#endif\r\n\t\t\r\n\t\tAge( /*inout */attributes.age, deltaTime_a);\n\t\tReap(attributes.age,
|
|
attributes.lifetime, /*inout */attributes.alive);\n\t\t\n\r\n\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x213400) << 2,uint(attributes.alive));\n\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x213401) << 2,asuint(attributes.age));\n\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n#endif\r\n\t}\r\n}\r\n"
|
|
- compute: 0
|
|
name: '[System 4]Output Particle Line'
|
|
source: "Shader \"Hidden/VFX/ShipCore-OnHit/System 4/Output Particle Line\"\n{\r\n\tSubShader\r\n\t{\t\r\n\t\tTags
|
|
{ \"Queue\"=\"Transparent+0\" \"IgnoreProjector\"=\"True\" \"RenderType\"=\"Transparent\"
|
|
}\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tBlend
|
|
SrcAlpha One \n\t\tZTest LEqual\n\t\tZWrite Off\n\t\tCull Off\n\t\t\n\t\n\t\t\t\n\t\tHLSLINCLUDE\n\t\t\n\t\t#define
|
|
NB_THREADS_PER_GROUP 64\n\t\t#define HAS_ATTRIBUTES 1\n\t\t#define VFX_PASSDEPTH_ACTUAL
|
|
(0)\n\t\t#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n\t\t#define VFX_PASSDEPTH_SELECTION
|
|
(2)\n\t\t#define VFX_USE_LIFETIME_CURRENT 1\n\t\t#define VFX_USE_COLOR_CURRENT
|
|
1\n\t\t#define VFX_USE_CHUNKPOSITION_CURRENT 1\n\t\t#define VFX_USE_POSITION_CURRENT
|
|
1\n\t\t#define VFX_USE_TARGETPOSITION_CURRENT 1\n\t\t#define VFX_USE_ALPHA_CURRENT
|
|
1\n\t\t#define VFX_USE_ALIVE_CURRENT 1\n\t\t#define VFX_USE_AGE_CURRENT 1\n\t\t#define
|
|
VFX_COLORMAPPING_DEFAULT 1\n\t\t#define IS_TRANSPARENT_PARTICLE 1\n\t\t#define
|
|
VFX_BLENDMODE_ADD 1\n\t\t#define VFX_BYPASS_EXPOSURE 1\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t#define
|
|
VFX_LOCAL_SPACE 1\n\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\t\t\n\n\t\tCBUFFER_START(parameters)\n\t\t
|
|
float4 uniform_b;\n\t\t float4 Alpha_d;\n\t\t float3 uniform_a;\n\t\t
|
|
float Color_c;\n\t\t float3 Color_f;\n\t\t float Blend_e;\n\t\t float3
|
|
uniform_c;\n\t\t uint PADDING_0;\n\t\t float3 uniform_d;\n\t\t uint
|
|
PADDING_1;\n\t\tCBUFFER_END\n\t\t\n\t\tstruct Attributes\n\t\t{\n\t\t float
|
|
lifetime;\n\t\t float3 color;\n\t\t float2 ChunkPosition;\n\t\t float3
|
|
position;\n\t\t float3 targetPosition;\n\t\t float alpha;\n\t\t bool
|
|
alive;\n\t\t float age;\n\t\t};\n\t\t\n\t\tstruct SourceAttributes\n\t\t{\n\t\t};\n\t\t\n\t\tTexture3D
|
|
attributeMap_a;\n\t\tSamplerState samplerattributeMap_a;\n\t\tfloat4 attributeMap_a_TexelSize;\n\t\t\n\t\tTexture3D
|
|
attributeMap_b;\n\t\tSamplerState samplerattributeMap_b;\n\t\tfloat4 attributeMap_b_TexelSize;\n\t\t\n\t\t\n\n\t\t\n\t\t#define
|
|
VFX_NEEDS_COLOR_INTERPOLATOR (VFX_USE_COLOR_CURRENT || VFX_USE_ALPHA_CURRENT)\n\t\t#if
|
|
HAS_STRIPS\n\t\t#define VFX_OPTIONAL_INTERPOLATION \n\t\t#else\n\t\t#define
|
|
VFX_OPTIONAL_INTERPOLATION nointerpolation\n\t\t#endif\n\t\t\n\t\tByteAddressBuffer
|
|
attributeBuffer;\t\n\t\t\n\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\tStructuredBuffer<uint>
|
|
indirectBuffer;\t\n\t\t#endif\t\n\t\t\n\t\t#if USE_DEAD_LIST_COUNT\n\t\tByteAddressBuffer
|
|
deadListCount;\n\t\t#endif\n\t\t\n\t\t#if HAS_STRIPS\n\t\tBuffer<uint> stripDataBuffer;\n\t\t#endif\n\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD || USE_MOTION_VECTORS_PASS\n\t\tByteAddressBuffer
|
|
elementToVFXBufferPrevious;\n\t\t#endif\n\t\t\n\t\tCBUFFER_START(outputParams)\n\t\t\tfloat
|
|
nbMax;\n\t\t\tfloat systemSeed;\n\t\tCBUFFER_END\n\t\t\n\t\t// Helper macros
|
|
to always use a valid instanceID\n\t\t#if defined(UNITY_STEREO_INSTANCING_ENABLED)\n\t\t\t#define
|
|
VFX_DECLARE_INSTANCE_ID UNITY_VERTEX_INPUT_INSTANCE_ID\n\t\t\t#define VFX_GET_INSTANCE_ID(i)
|
|
unity_InstanceID\n\t\t#else\n\t\t\t#define VFX_DECLARE_INSTANCE_ID uint
|
|
instanceID : SV_InstanceID;\n\t\t\t#define VFX_GET_INSTANCE_ID(i) i.instanceID\n\t\t#endif\n\t\t\n\t\tENDHLSL\n\t\t\n\r\n\t\tPass\n\t\t{\t\t\n\t\t\tTags
|
|
{ \"LightMode\"=\"SceneSelectionPass\" }\n\t\t\n\t\t\tZWrite On\n\t\t\tBlend
|
|
Off\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#define VFX_PASSDEPTH VFX_PASSDEPTH_SELECTION\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos : SV_POSITION;\n\t\t\t\t#if
|
|
USE_ALPHA_TEST || VFX_USE_ALPHA_CURRENT\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants : TEXCOORD0;\n\t\t\t\t#endif\n\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t\t#define VFX_VARYING_POSCS pos\n\t\t\t#define
|
|
VFX_VARYING_ALPHA builtInInterpolants.y\n\t\t\t#define VFX_VARYING_ALPHATHRESHOLD
|
|
builtInInterpolants.x\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_MOTION_VECTORS\n\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_DEPTH_ONLY\n\t\t\t#endif\n\t\t\t\n\t\t\t#if !(defined(VFX_VARYING_PS_INPUTS)
|
|
&& defined(VFX_VARYING_POSCS))\n\t\t\t#error VFX_VARYING_PS_INPUTS and VFX_VARYING_POSCS
|
|
must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
AttributeFromMap_62C85D1F(inout float3 targetPosition, VFXSampler3D attributeMap,
|
|
float3 SamplePosition, float LOD, float3 valueBias, float3 valueScale) /*attribute:targetPosition
|
|
Composition:Add SampleMode:Sample3DLOD channels:XYZ */\n\t\t\t{\n\t\t\t
|
|
\n\t\t\t float3 value = (float3)attributeMap.t.SampleLevel(attributeMap.s,
|
|
SamplePosition, LOD);\n\t\t\t value = (value + valueBias) * valueScale;\n\t\t\t
|
|
targetPosition += value;\n\t\t\t}\n\t\t\tvoid AttributeFromMap_6F69BFAE(inout
|
|
float3 position, VFXSampler3D attributeMap, float3 SamplePosition, float LOD,
|
|
float3 valueBias, float3 valueScale) /*attribute:position Composition:Add SampleMode:Sample3DLOD
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t \n\t\t\t float3 value = (float3)attributeMap.t.SampleLevel(attributeMap.s,
|
|
SamplePosition, LOD);\n\t\t\t value = (value + valueBias) * valueScale;\n\t\t\t
|
|
position += value;\n\t\t\t}\n\t\t\tvoid AttributeFromCurve_72032A9F(inout float3
|
|
color, inout float alpha, float Color, float SampleTime) /*attribute:color
|
|
Composition:Multiply AlphaComposition:Overwrite SampleMode:Custom Mode:PerComponent
|
|
ColorMode:ColorAndAlpha channels:XYZ */\n\t\t\t{\n\t\t\t float t = SampleTime;\n\t\t\t
|
|
float4 value = 0.0f;\n\t\t\t value = SampleGradient(Color, t);\n\t\t\t
|
|
color *= value.rgb;\n\t\t\t alpha = value.a;\n\t\t\t}\n\t\t\tvoid AttributeFromCurve_7BA3F6A(inout
|
|
float alpha, float age, float lifetime, float4 Alpha) /*attribute:alpha Composition:Overwrite
|
|
AlphaComposition:Overwrite SampleMode:OverLife Mode:PerComponent ColorMode:ColorAndAlpha
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t float t = age / lifetime;\n\t\t\t float
|
|
value = 0.0f;\n\t\t\t value = SampleCurve(Alpha, t);\n\t\t\t alpha =
|
|
value;\n\t\t\t}\n\t\t\tvoid SetAttribute_18B2FD0(inout float3 color, float3
|
|
Color, float Blend) /*attribute:color Composition:Blend Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t color = lerp(color,Color,Blend);\n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_545F0ED(inout float3 color, float3 Color) /*attribute:color Composition:Multiply
|
|
Source:Slot Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t color *= Color;\n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_CE7D5850(inout float3 position, float3 Position, float Blend)
|
|
/*attribute:position Composition:Blend Source:Slot Random:Off channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t position = lerp(position,Position,Blend);\n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_3824434D(inout float3 targetPosition, float3 TargetPosition, float
|
|
Blend) /*attribute:targetPosition Composition:Blend Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t targetPosition = lerp(targetPosition,TargetPosition,Blend);\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\tstruct
|
|
vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#pragma
|
|
vertex vert\n\t\t\tfloat4 ClipOnNearPlane(float4 pos, float4 other)\n\t\t\t{\n\t\t\t\tif
|
|
(pos.w >= _ProjectionParams.y || other.w < _ProjectionParams.y)\n\t\t\t\t\treturn
|
|
pos;\n\t\t\t\t\t\n\t\t\t\t// Project on near plane\n\t\t\t\tfloat ratio = (_ProjectionParams.y
|
|
- pos.w) / (other.w - pos.w);\n\t\t\t\treturn pos + (other - pos) * ratio;\n\t\t\t}\n\t\t\t\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint
|
|
deadCount = 0;\n\t\t\t\t\t\t#if USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount
|
|
= deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif (index >= asuint(nbMax)
|
|
- deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn; //
|
|
cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.color = asfloat(attributeBuffer.Load3((index
|
|
* 0x10 + 0x1F400) << 2));\n\t\t\t\t\t\tattributes.ChunkPosition = asfloat(attributeBuffer.Load2((index
|
|
* 0x10 + 0x1F40C) << 2));\n\t\t\t\t\t\tattributes.position = asfloat(attributeBuffer.Load3((index
|
|
* 0x10 + 0x1F404) << 2));\n\t\t\t\t\t\tattributes.targetPosition = asfloat(attributeBuffer.Load3((index
|
|
* 0x10 + 0x1F408) << 2));\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x213400) << 2));\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x213401) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x213400) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= asfloat(attributeBuffer.Load3((index * 0x10 + 0x1F400) << 2));\n\t\t\t\t\t\tattributes.ChunkPosition
|
|
= asfloat(attributeBuffer.Load2((index * 0x10 + 0x1F40C) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x10 + 0x1F404) << 2));\n\t\t\t\t\t\tattributes.targetPosition
|
|
= asfloat(attributeBuffer.Load3((index * 0x10 + 0x1F408) << 2));\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x213401) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t{\n\t\t\t\t
|
|
float3 tmp_t = attributes.targetPosition + uniform_a;\n\t\t\t\t float3 tmp_v
|
|
= tmp_t * float3(0.200000003, 0.200000003, 0.200000003);\n\t\t\t\t float
|
|
tmp_y = attributes.ChunkPosition[1];\n\t\t\t\t float tmp_z = SampleCurve(uniform_b,tmp_y);\n\t\t\t\t
|
|
float3 tmp_ba = float3(tmp_z, tmp_z, tmp_z);\n\t\t\t\t AttributeFromMap_62C85D1F(
|
|
/*inout */attributes.targetPosition, GetVFXSampler(attributeMap_a, samplerattributeMap_a),
|
|
tmp_v, (float)0, float3(-0.5, -0.5, -0.5), tmp_ba);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t
|
|
float3 tmp_t = attributes.position + uniform_a;\n\t\t\t\t float3 tmp_v =
|
|
tmp_t * float3(0.200000003, 0.200000003, 0.200000003);\n\t\t\t\t float tmp_y
|
|
= attributes.ChunkPosition[0];\n\t\t\t\t float tmp_z = SampleCurve(uniform_b,tmp_y);\n\t\t\t\t
|
|
float3 tmp_ba = float3(tmp_z, tmp_z, tmp_z);\n\t\t\t\t AttributeFromMap_6F69BFAE(
|
|
/*inout */attributes.position, GetVFXSampler(attributeMap_a, samplerattributeMap_a),
|
|
tmp_v, (float)0, float3(-0.5, -0.5, -0.5), tmp_ba);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t
|
|
float tmp_t = attributes.ChunkPosition[0];\n\t\t\t\t AttributeFromCurve_72032A9F(
|
|
/*inout */attributes.color, /*inout */attributes.alpha, Color_c, tmp_t);\n\t\t\t\t}\n\t\t\t\tAttributeFromCurve_7BA3F6A(
|
|
/*inout */attributes.alpha, attributes.age, attributes.lifetime, Alpha_d);\n\t\t\t\t{\n\t\t\t\t
|
|
SetAttribute_18B2FD0( /*inout */attributes.color, float3(248.2742, 9.33845043,
|
|
0), Blend_e);\n\t\t\t\t}\n\t\t\t\tSetAttribute_545F0ED( /*inout */attributes.color,
|
|
Color_f);\n\t\t\t\t{\n\t\t\t\t float3 tmp_v = GeneratePerlinCurlNoise(uniform_c,
|
|
float3(1, 0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t
|
|
float3 tmp_w = tmp_v * uniform_d;\n\t\t\t\t float3 tmp_x = attributes.position
|
|
+ tmp_w;\n\t\t\t\t float2 tmp_z = float2(1, 1) - attributes.ChunkPosition;\n\t\t\t\t
|
|
float tmp_ba = tmp_z[0];\n\t\t\t\t float tmp_bc = max(tmp_ba, (float)0);\n\t\t\t\t
|
|
float tmp_be = min(tmp_bc, (float)1);\n\t\t\t\t SetAttribute_CE7D5850( /*inout
|
|
*/attributes.position, tmp_x, tmp_be);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t float3
|
|
tmp_v = GeneratePerlinCurlNoise(uniform_c, float3(1, 0.75, 2).x, (int)7, float3(1,
|
|
0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t float3 tmp_w = tmp_v * uniform_d;\n\t\t\t\t
|
|
float3 tmp_x = tmp_w + attributes.targetPosition;\n\t\t\t\t float2 tmp_z
|
|
= float2(1, 1) - attributes.ChunkPosition;\n\t\t\t\t float tmp_ba = tmp_z[1];\n\t\t\t\t
|
|
float tmp_bc = max(tmp_ba, (float)0);\n\t\t\t\t float tmp_be = min(tmp_bc,
|
|
(float)1);\n\t\t\t\t SetAttribute_3824434D( /*inout */attributes.targetPosition,
|
|
tmp_x, tmp_be);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\tif (!attributes.alive)\n\t\t\t\t\treturn
|
|
o;\n\t\t\t\n\t\t\t\t#if TARGET_FROM_ATTRIBUTES\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\tfloat4x4
|
|
elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\n\t\t\t\tattributes.position
|
|
= mul(elementToVFX,float4(0,0,0,1)).xyz;\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tattributes.targetPosition
|
|
= mul(elementToVFX,float4(targetOffset,1)).xyz;\n\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\tfloat4
|
|
pos0 = TransformPositionVFXToClip(attributes.position);\n\t\t\t\tfloat4 pos1
|
|
= TransformPositionVFXToClip(attributes.targetPosition);\n\t\t\t\t\n\t\t\t\tpos0
|
|
= ClipOnNearPlane(pos0, pos1);\n\t\t\t\tpos1 = ClipOnNearPlane(pos1, pos0);\n\t\t\t\t\n\t\t\t\tfloat2
|
|
ndcPos0 = pos0.xy / pos0.w;\n\t\t\t\tfloat2 ndcPos1 = pos1.xy / pos1.w;\n\t\t\t\t\n\t\t\t\tfloat2
|
|
dir = ndcPos0 - ndcPos1;\n\t\t\t\tfloat2 normal = normalize(dir.yx * float2(-1,-UNITY_MATRIX_P[1][1]
|
|
/ UNITY_MATRIX_P[0][0]));\n\t\t\t\t\n\t\t\t#if IS_OPAQUE_PARTICLE\n\t\t\t\tconst
|
|
float thicknessMul = 1.0f; // pixel perfect\n\t\t\t#else\n\t\t\t\tconst float
|
|
thicknessMul = 2.0f; // for AA\n\t\t\t#endif\n\t\t\t\tnormal *= thicknessMul
|
|
/ _ScreenParams.xy;\n\t\t\t\t\n\t\t\t\tfloat4 dPos0 = float4(normal * pos0.w,
|
|
0.0f, 0.0f);\n\t\t\t\tfloat4 dPos1 = float4(normal * pos1.w, 0.0f, 0.0f);\n\t\t\t\tfloat4
|
|
vPosArray[4] = { pos0 + dPos0, pos0 - dPos0, pos1 + dPos1, pos1 - dPos1};\n\t\t\t\t\n\t\t\t\t#ifdef
|
|
VFX_VARYING_PIXELOFFSET\n\t\t\t\to.VFX_VARYING_PIXELOFFSET = (id & 1) ? -1.0f
|
|
: 1.0f;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// If ever used we need the position
|
|
in vfx space (we dont take into account the pixel offset)\n\t\t\t\tfloat3 vPos
|
|
= ((id >> 1) & 1) ? attributes.position : attributes.targetPosition;\n\t\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS
|
|
= vPosArray[id & 3];\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if VFX_USE_COLOR_CURRENT
|
|
&& defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR = attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_ALPHA_CURRENT && defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA
|
|
= attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\treturn
|
|
o;\n\t\t\t}\n\t\t\t\n\t\t\t#include \"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t#define
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 0\n\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t#ifndef
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t#define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH
|
|
0\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\tint _ObjectId;\n\t\t\t\t\tint
|
|
_PassValue;\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#pragma fragment frag\n\t\t\t\t\tvoid
|
|
frag(ps_input i\n\t\t\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t
|
|
#ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t // We need the depth color as SV_Target0
|
|
for alpha to coverage\n\t\t\t\t\t , out float4 outDepthColor : SV_Target0\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target1\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
// When no MSAA, the motion vector is always the first buffer\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t #ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t
|
|
, out float4 outDepthColor : SV_Target0\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
, out float4 dummy : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t , out float4 outSelection : SV_Target0\n\t\t\t\t\t#endif\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\t
|
|
#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t
|
|
float alpha = OUTSG.;\n\t\t\t\t\t #else\n\t\t\t\t\t float alpha =
|
|
VFXGetFragmentColor(i).a;\n\t\t\t\t\t\t\t#if VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t\t\t\talpha
|
|
*= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t
|
|
#endif\n\t\t\t\t\t\tVFXClipFragmentColor(alpha,i);\n\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\toutDepthColor = i.VFX_VARYING_POSCS.z;\n\t\t\t\t\t\t\t#if
|
|
VFX_USE_ALPHA_TO_MASK\n\t\t\t\t\t\t\t\toutDepthColor.a = alpha;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat2
|
|
velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w) -
|
|
(i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\t\t\t\tVFXEncodeMotionVector(velocity
|
|
* 0.5f, encodedMotionVector);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\toutMotionVector
|
|
= encodedMotionVector;\n\t\t\t\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t\t\toutSelection
|
|
= float4(_ObjectId, _PassValue, 1.0, 1.0);\n\t\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t\t\t#ifndef WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\t\tdummy
|
|
= (float4)0;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t#error
|
|
VFX_PASSDEPTH undefined \n\t\t\t\t\t\t#endif\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t\t//
|
|
Forward pass\n\t\tPass\n\t\t{\t\t\n\t\t\tTags { \"LightMode\"=\"ForwardOnly\"
|
|
}\n\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#pragma target 4.5\n\t\t\t#pragma multi_compile
|
|
_ DEBUG_DISPLAY\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos
|
|
: SV_POSITION;\n\t\t\t\t#if IS_TRANSPARENT_PARTICLE\n\t\t\t\tnoperspective
|
|
float pixelOffset : TEXCOORD0; // for AA\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_COLOR_INTERPOLATOR\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 color : COLOR0;\n\t\t\t\t#endif\n\t\t\t\t#if USE_SOFT_PARTICLE || USE_ALPHA_TEST
|
|
|| USE_EXPOSURE_WEIGHT\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION float3 builtInInterpolants
|
|
: TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t\tfloat3
|
|
posWS : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\tstruct
|
|
ps_output\n\t\t\t{\n\t\t\t\tfloat4 color : SV_Target0;\n\t\t\t};\n\t\t\n\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t#define VFX_VARYING_POSCS pos\n\t\t#define
|
|
VFX_VARYING_COLOR color.rgb\n\t\t#define VFX_VARYING_ALPHA color.a\n\t\t#define
|
|
VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE builtInInterpolants.x\n\t\t#define
|
|
VFX_VARYING_ALPHATHRESHOLD builtInInterpolants.y\n\t\t#if IS_TRANSPARENT_PARTICLE\n\t\t#define
|
|
VFX_VARYING_PIXELOFFSET pixelOffset\n\t\t#endif\n\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t#define
|
|
VFX_VARYING_POSWS posWS\n\t\t#endif\n\t\t#if USE_EXPOSURE_WEIGHT\n\t\t#define
|
|
VFX_VARYING_EXPOSUREWEIGHT builtInInterpolants.z\n\t\t#endif\n\t\t\n\t\t
|
|
#define SHADERPASS SHADERPASS_FORWARD_UNLIT\n\t\t\t#if !(defined(VFX_VARYING_PS_INPUTS)
|
|
&& defined(VFX_VARYING_POSCS))\n\t\t\t#error VFX_VARYING_PS_INPUTS and VFX_VARYING_POSCS
|
|
must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
AttributeFromMap_62C85D1F(inout float3 targetPosition, VFXSampler3D attributeMap,
|
|
float3 SamplePosition, float LOD, float3 valueBias, float3 valueScale) /*attribute:targetPosition
|
|
Composition:Add SampleMode:Sample3DLOD channels:XYZ */\n\t\t\t{\n\t\t\t
|
|
\n\t\t\t float3 value = (float3)attributeMap.t.SampleLevel(attributeMap.s,
|
|
SamplePosition, LOD);\n\t\t\t value = (value + valueBias) * valueScale;\n\t\t\t
|
|
targetPosition += value;\n\t\t\t}\n\t\t\tvoid AttributeFromMap_6F69BFAE(inout
|
|
float3 position, VFXSampler3D attributeMap, float3 SamplePosition, float LOD,
|
|
float3 valueBias, float3 valueScale) /*attribute:position Composition:Add SampleMode:Sample3DLOD
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t \n\t\t\t float3 value = (float3)attributeMap.t.SampleLevel(attributeMap.s,
|
|
SamplePosition, LOD);\n\t\t\t value = (value + valueBias) * valueScale;\n\t\t\t
|
|
position += value;\n\t\t\t}\n\t\t\tvoid AttributeFromCurve_72032A9F(inout float3
|
|
color, inout float alpha, float Color, float SampleTime) /*attribute:color
|
|
Composition:Multiply AlphaComposition:Overwrite SampleMode:Custom Mode:PerComponent
|
|
ColorMode:ColorAndAlpha channels:XYZ */\n\t\t\t{\n\t\t\t float t = SampleTime;\n\t\t\t
|
|
float4 value = 0.0f;\n\t\t\t value = SampleGradient(Color, t);\n\t\t\t
|
|
color *= value.rgb;\n\t\t\t alpha = value.a;\n\t\t\t}\n\t\t\tvoid AttributeFromCurve_7BA3F6A(inout
|
|
float alpha, float age, float lifetime, float4 Alpha) /*attribute:alpha Composition:Overwrite
|
|
AlphaComposition:Overwrite SampleMode:OverLife Mode:PerComponent ColorMode:ColorAndAlpha
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t float t = age / lifetime;\n\t\t\t float
|
|
value = 0.0f;\n\t\t\t value = SampleCurve(Alpha, t);\n\t\t\t alpha =
|
|
value;\n\t\t\t}\n\t\t\tvoid SetAttribute_18B2FD0(inout float3 color, float3
|
|
Color, float Blend) /*attribute:color Composition:Blend Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t color = lerp(color,Color,Blend);\n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_545F0ED(inout float3 color, float3 Color) /*attribute:color Composition:Multiply
|
|
Source:Slot Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t color *= Color;\n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_CE7D5850(inout float3 position, float3 Position, float Blend)
|
|
/*attribute:position Composition:Blend Source:Slot Random:Off channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t position = lerp(position,Position,Blend);\n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_3824434D(inout float3 targetPosition, float3 TargetPosition, float
|
|
Blend) /*attribute:targetPosition Composition:Blend Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t targetPosition = lerp(targetPosition,TargetPosition,Blend);\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\tstruct
|
|
vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#pragma
|
|
vertex vert\n\t\t\tfloat4 ClipOnNearPlane(float4 pos, float4 other)\n\t\t\t{\n\t\t\t\tif
|
|
(pos.w >= _ProjectionParams.y || other.w < _ProjectionParams.y)\n\t\t\t\t\treturn
|
|
pos;\n\t\t\t\t\t\n\t\t\t\t// Project on near plane\n\t\t\t\tfloat ratio = (_ProjectionParams.y
|
|
- pos.w) / (other.w - pos.w);\n\t\t\t\treturn pos + (other - pos) * ratio;\n\t\t\t}\n\t\t\t\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint
|
|
deadCount = 0;\n\t\t\t\t\t\t#if USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount
|
|
= deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif (index >= asuint(nbMax)
|
|
- deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn; //
|
|
cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.color = asfloat(attributeBuffer.Load3((index
|
|
* 0x10 + 0x1F400) << 2));\n\t\t\t\t\t\tattributes.ChunkPosition = asfloat(attributeBuffer.Load2((index
|
|
* 0x10 + 0x1F40C) << 2));\n\t\t\t\t\t\tattributes.position = asfloat(attributeBuffer.Load3((index
|
|
* 0x10 + 0x1F404) << 2));\n\t\t\t\t\t\tattributes.targetPosition = asfloat(attributeBuffer.Load3((index
|
|
* 0x10 + 0x1F408) << 2));\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x213400) << 2));\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x213401) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x213400) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= asfloat(attributeBuffer.Load3((index * 0x10 + 0x1F400) << 2));\n\t\t\t\t\t\tattributes.ChunkPosition
|
|
= asfloat(attributeBuffer.Load2((index * 0x10 + 0x1F40C) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x10 + 0x1F404) << 2));\n\t\t\t\t\t\tattributes.targetPosition
|
|
= asfloat(attributeBuffer.Load3((index * 0x10 + 0x1F408) << 2));\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x213401) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t{\n\t\t\t\t
|
|
float3 tmp_t = attributes.targetPosition + uniform_a;\n\t\t\t\t float3 tmp_v
|
|
= tmp_t * float3(0.200000003, 0.200000003, 0.200000003);\n\t\t\t\t float
|
|
tmp_y = attributes.ChunkPosition[1];\n\t\t\t\t float tmp_z = SampleCurve(uniform_b,tmp_y);\n\t\t\t\t
|
|
float3 tmp_ba = float3(tmp_z, tmp_z, tmp_z);\n\t\t\t\t AttributeFromMap_62C85D1F(
|
|
/*inout */attributes.targetPosition, GetVFXSampler(attributeMap_a, samplerattributeMap_a),
|
|
tmp_v, (float)0, float3(-0.5, -0.5, -0.5), tmp_ba);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t
|
|
float3 tmp_t = attributes.position + uniform_a;\n\t\t\t\t float3 tmp_v =
|
|
tmp_t * float3(0.200000003, 0.200000003, 0.200000003);\n\t\t\t\t float tmp_y
|
|
= attributes.ChunkPosition[0];\n\t\t\t\t float tmp_z = SampleCurve(uniform_b,tmp_y);\n\t\t\t\t
|
|
float3 tmp_ba = float3(tmp_z, tmp_z, tmp_z);\n\t\t\t\t AttributeFromMap_6F69BFAE(
|
|
/*inout */attributes.position, GetVFXSampler(attributeMap_a, samplerattributeMap_a),
|
|
tmp_v, (float)0, float3(-0.5, -0.5, -0.5), tmp_ba);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t
|
|
float tmp_t = attributes.ChunkPosition[0];\n\t\t\t\t AttributeFromCurve_72032A9F(
|
|
/*inout */attributes.color, /*inout */attributes.alpha, Color_c, tmp_t);\n\t\t\t\t}\n\t\t\t\tAttributeFromCurve_7BA3F6A(
|
|
/*inout */attributes.alpha, attributes.age, attributes.lifetime, Alpha_d);\n\t\t\t\t{\n\t\t\t\t
|
|
SetAttribute_18B2FD0( /*inout */attributes.color, float3(248.2742, 9.33845043,
|
|
0), Blend_e);\n\t\t\t\t}\n\t\t\t\tSetAttribute_545F0ED( /*inout */attributes.color,
|
|
Color_f);\n\t\t\t\t{\n\t\t\t\t float3 tmp_v = GeneratePerlinCurlNoise(uniform_c,
|
|
float3(1, 0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t
|
|
float3 tmp_w = tmp_v * uniform_d;\n\t\t\t\t float3 tmp_x = attributes.position
|
|
+ tmp_w;\n\t\t\t\t float2 tmp_z = float2(1, 1) - attributes.ChunkPosition;\n\t\t\t\t
|
|
float tmp_ba = tmp_z[0];\n\t\t\t\t float tmp_bc = max(tmp_ba, (float)0);\n\t\t\t\t
|
|
float tmp_be = min(tmp_bc, (float)1);\n\t\t\t\t SetAttribute_CE7D5850( /*inout
|
|
*/attributes.position, tmp_x, tmp_be);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t float3
|
|
tmp_v = GeneratePerlinCurlNoise(uniform_c, float3(1, 0.75, 2).x, (int)7, float3(1,
|
|
0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t float3 tmp_w = tmp_v * uniform_d;\n\t\t\t\t
|
|
float3 tmp_x = tmp_w + attributes.targetPosition;\n\t\t\t\t float2 tmp_z
|
|
= float2(1, 1) - attributes.ChunkPosition;\n\t\t\t\t float tmp_ba = tmp_z[1];\n\t\t\t\t
|
|
float tmp_bc = max(tmp_ba, (float)0);\n\t\t\t\t float tmp_be = min(tmp_bc,
|
|
(float)1);\n\t\t\t\t SetAttribute_3824434D( /*inout */attributes.targetPosition,
|
|
tmp_x, tmp_be);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\tif (!attributes.alive)\n\t\t\t\t\treturn
|
|
o;\n\t\t\t\n\t\t\t\t#if TARGET_FROM_ATTRIBUTES\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\tfloat4x4
|
|
elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\n\t\t\t\tattributes.position
|
|
= mul(elementToVFX,float4(0,0,0,1)).xyz;\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tattributes.targetPosition
|
|
= mul(elementToVFX,float4(targetOffset,1)).xyz;\n\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\tfloat4
|
|
pos0 = TransformPositionVFXToClip(attributes.position);\n\t\t\t\tfloat4 pos1
|
|
= TransformPositionVFXToClip(attributes.targetPosition);\n\t\t\t\t\n\t\t\t\tpos0
|
|
= ClipOnNearPlane(pos0, pos1);\n\t\t\t\tpos1 = ClipOnNearPlane(pos1, pos0);\n\t\t\t\t\n\t\t\t\tfloat2
|
|
ndcPos0 = pos0.xy / pos0.w;\n\t\t\t\tfloat2 ndcPos1 = pos1.xy / pos1.w;\n\t\t\t\t\n\t\t\t\tfloat2
|
|
dir = ndcPos0 - ndcPos1;\n\t\t\t\tfloat2 normal = normalize(dir.yx * float2(-1,-UNITY_MATRIX_P[1][1]
|
|
/ UNITY_MATRIX_P[0][0]));\n\t\t\t\t\n\t\t\t#if IS_OPAQUE_PARTICLE\n\t\t\t\tconst
|
|
float thicknessMul = 1.0f; // pixel perfect\n\t\t\t#else\n\t\t\t\tconst float
|
|
thicknessMul = 2.0f; // for AA\n\t\t\t#endif\n\t\t\t\tnormal *= thicknessMul
|
|
/ _ScreenParams.xy;\n\t\t\t\t\n\t\t\t\tfloat4 dPos0 = float4(normal * pos0.w,
|
|
0.0f, 0.0f);\n\t\t\t\tfloat4 dPos1 = float4(normal * pos1.w, 0.0f, 0.0f);\n\t\t\t\tfloat4
|
|
vPosArray[4] = { pos0 + dPos0, pos0 - dPos0, pos1 + dPos1, pos1 - dPos1};\n\t\t\t\t\n\t\t\t\t#ifdef
|
|
VFX_VARYING_PIXELOFFSET\n\t\t\t\to.VFX_VARYING_PIXELOFFSET = (id & 1) ? -1.0f
|
|
: 1.0f;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// If ever used we need the position
|
|
in vfx space (we dont take into account the pixel offset)\n\t\t\t\tfloat3 vPos
|
|
= ((id >> 1) & 1) ? attributes.position : attributes.targetPosition;\n\t\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS
|
|
= vPosArray[id & 3];\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if VFX_USE_COLOR_CURRENT
|
|
&& defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR = attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_ALPHA_CURRENT && defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA
|
|
= attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\treturn
|
|
o;\n\t\t\t}\n\t\t\t\n\t\t\t#include \"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t#pragma
|
|
fragment frag\n\t\t\tps_output frag(ps_input i)\n\t\t\t{\n\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\tps_output
|
|
o = (ps_output)0;\n\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tfloat4
|
|
color = VFXGetFragmentColor(i);\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifndef VFX_TEXTURE_COLOR\n\t\t\t\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR float4(1.0,1.0,1.0,1.0)\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_DEFAULT\n\t\t\t\t\t\t\to.color = color * VFX_TEXTURE_COLOR;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_GRADIENTMAPPED\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\to.color = SampleGradient(gradient,
|
|
VFX_TEXTURE_COLOR.a * color.a) * float4(color.rgb,1.0);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t//
|
|
Line AA\n\t\t\t\t#if IS_TRANSPARENT_PARTICLE\t\n\t\t\t\to.color.a *= 1.0f -
|
|
abs(i.pixelOffset);\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\to.color = VFXApplyPreExposure(o.color,
|
|
i);\n\t\t\t\to.color = VFXApplyFog(o.color,i);\n\t\t\t\tVFXClipFragmentColor(o.color.a,i);\n\t\t\t\to.color.a
|
|
= saturate(o.color.a);\n\t\t o.color = VFXTransformFinalColor(o.color);\n\t\t\t\treturn
|
|
o;\n\t\t\t}\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t}\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[Core Aura]Initialize Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_SIZE_CURRENT 1\n#define VFX_USE_SEED_CURRENT
|
|
1\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_COLOR_CURRENT 1\n#define
|
|
VFX_USE_ANGLEZ_CURRENT 1\n#define VFX_USE_ALIVE_CURRENT 1\n#define VFX_USE_AGE_CURRENT
|
|
1\n#define VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\n\nstruct
|
|
Attributes\n{\n float size;\n uint seed;\n float lifetime;\n float3
|
|
color;\n float angleZ;\n bool alive;\n float age;\n};\n\nstruct SourceAttributes\n{\n};\n\n\n\r\n\r\n#define
|
|
USE_DEAD_LIST (VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer
|
|
attributeBuffer;\r\nByteAddressBuffer sourceAttributeBuffer;\r\n\r\nCBUFFER_START(initParams)\r\n#if
|
|
!VFX_USE_SPAWNER_FROM_GPU\r\n uint nbSpawned;\t\t\t\t\t// Numbers of particle
|
|
spawned\r\n uint spawnIndex;\t\t\t\t// Index of the first particle spawned\r\n
|
|
uint dispatchWidth;\r\n#else\r\n uint offsetInAdditionalOutput;\r\n\tuint
|
|
nbMax;\r\n#endif\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#if USE_DEAD_LIST\r\nRWStructuredBuffer<uint>
|
|
deadListIn;\r\nByteAddressBuffer deadListCount; // This is bad to use a SRV
|
|
to fetch deadList count but Unity API currently prevent from copying to CB\r\n#endif\r\n\r\n#if
|
|
VFX_USE_SPAWNER_FROM_GPU\r\nStructuredBuffer<uint> eventList;\r\nByteAddressBuffer
|
|
inputAdditional;\r\n#endif\r\n\r\n#if HAS_STRIPS\r\nRWBuffer<uint> stripDataBuffer;\r\n#endif\r\n\r\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
SetAttribute_3278B543(inout float size, inout uint seed, float A, float B)
|
|
/*attribute:size Composition:Overwrite Source:Slot Random:Uniform channels:X
|
|
*/\n{\n size = lerp(A,B,RAND);\n}\nvoid SetAttribute_F01429A3(inout float
|
|
lifetime, inout uint seed, float A, float B) /*attribute:lifetime Composition:Overwrite
|
|
Source:Slot Random:Uniform channels:XYZ */\n{\n lifetime = lerp(A,B,RAND);\n}\nvoid
|
|
SetAttribute_FDD071DD(inout float3 color, inout uint seed, float3 A, float3
|
|
B) /*attribute:color Composition:Overwrite Source:Slot Random:Uniform channels:XYZ
|
|
*/\n{\n color = lerp(A,B,RAND);\n}\nvoid SetAttribute_39EE3453(inout float
|
|
size, float Size) /*attribute:size Composition:Multiply Source:Slot Random:Off
|
|
channels:X */\n{\n size *= Size;\n}\nvoid SetAttribute_48A7C211(inout float
|
|
angleZ, inout uint seed, float A, float B) /*attribute:angle Composition:Overwrite
|
|
Source:Slot Random:Uniform channels:Z */\n{\n angleZ = lerp(A.x,B.x,RAND);\n}\n\n\r\n\r\n//
|
|
Due to a bug in HLSL compiler, disable spurious \"unitialized variable\" due
|
|
to mid function return statement\r\n#pragma warning(push)\r\n#pragma warning(disable
|
|
: 4000)\r\n#if HAS_STRIPS\r\nbool GetParticleIndex(inout uint particleIndex,
|
|
uint stripIndex)\r\n{\r\n\tuint relativeIndex;\r\n\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX,
|
|
stripIndex), 1, relativeIndex);\r\n\tif (relativeIndex >= PARTICLE_PER_STRIP_COUNT)
|
|
// strip is full\r\n\t{\r\n\t\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX,
|
|
stripIndex), -1); // Remove previous increment\r\n\t\treturn false;\r\n\t}\r\n\r\n\tparticleIndex
|
|
= stripIndex * PARTICLE_PER_STRIP_COUNT + ((STRIP_DATA(STRIP_FIRST_INDEX, stripIndex)
|
|
+ relativeIndex) % PARTICLE_PER_STRIP_COUNT);\r\n return true;\r\n}\r\n#endif\r\n#pragma
|
|
warning(pop)\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n
|
|
uint id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP;\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
id += groupId.y * dispatchWidth * NB_THREADS_PER_GROUP;\r\n#endif\r\n\r\n#if
|
|
VFX_USE_SPAWNER_FROM_GPU\r\n uint maxThreadId = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 0) << 2);\r\n uint currentSpawnIndex = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 1) << 2) - maxThreadId;\r\n#else\r\n uint maxThreadId = nbSpawned;\r\n
|
|
uint currentSpawnIndex = spawnIndex;\r\n#endif\r\n\r\n#if USE_DEAD_LIST\r\n
|
|
maxThreadId = min(maxThreadId, deadListCount.Load(0x0));\r\n#elif VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
maxThreadId = min(maxThreadId, nbMax); //otherwise, nbSpawned already clamped
|
|
on CPU\r\n#endif\r\n\r\n if (id < maxThreadId)\r\n {\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
int sourceIndex = eventList[id];\r\n#endif\r\n\t\tuint particleIndex = id +
|
|
currentSpawnIndex;\r\n\t\t\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n int
|
|
sourceIndex = 0;\n /*//Loop with 1 iteration generate a wrong IL Assembly
|
|
(and actually, useless code)\n uint currentSumSpawnCount = 0u;\n
|
|
for (sourceIndex=0; sourceIndex<1; sourceIndex++)\n {\n currentSumSpawnCount
|
|
+= uint(asfloat(sourceAttributeBuffer.Load((sourceIndex * 0x1 + 0x0) << 2)));\n
|
|
if (id < currentSumSpawnCount)\n {\n break;\n
|
|
}\n }\n */\n \n\r\n#endif\r\n\r\n\t\tAttributes attributes
|
|
= (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes = (SourceAttributes)0;\r\n\t\t\r\n
|
|
attributes.size = (float)0.100000001;\n attributes.seed = (uint)0;\n
|
|
attributes.lifetime = (float)1;\n attributes.color = float3(1, 1, 1);\n
|
|
attributes.angleZ = (float)0;\n attributes.alive = (bool)true;\n
|
|
attributes.age = (float)0;\n \n\r\n#if VFX_USE_PARTICLEID_CURRENT\r\n
|
|
attributes.particleId = particleIndex;\r\n#endif\r\n#if VFX_USE_SEED_CURRENT\r\n
|
|
attributes.seed = WangHash(particleIndex ^ systemSeed);\r\n#endif\r\n#if VFX_USE_SPAWNINDEX_CURRENT\r\n
|
|
attributes.spawnIndex = id;\r\n#endif\r\n#if HAS_STRIPS\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n\t\t\r\n#else\r\n
|
|
uint stripIndex = sourceIndex;\r\n#endif\r\n\t\tstripIndex = min(stripIndex,
|
|
STRIP_COUNT);\r\n\r\n if (!GetParticleIndex(particleIndex, stripIndex))\r\n
|
|
return;\r\n\r\n const StripData stripData = GetStripDataFromStripIndex(stripIndex,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n\t\tInitStripAttributes(particleIndex, attributes,
|
|
stripData);\r\n\t\t// TODO Change seed to be sure we're deterministic on random
|
|
with strip\r\n#endif\r\n \r\n {\n SetAttribute_3278B543(
|
|
/*inout */attributes.size, /*inout */attributes.seed, (float)4, (float)4.19999981);\n
|
|
}\n {\n SetAttribute_F01429A3( /*inout */attributes.lifetime,
|
|
/*inout */attributes.seed, (float)0.600000024, (float)1);\n }\n
|
|
{\n SetAttribute_FDD071DD( /*inout */attributes.color, /*inout
|
|
*/attributes.seed, float3(0.00784313772, 0.623529434, 0.749019623), float3(0,
|
|
0.0279598106, 0.667539179));\n }\n {\n SetAttribute_39EE3453(
|
|
/*inout */attributes.size, (float)2);\n }\n {\n SetAttribute_48A7C211(
|
|
/*inout */attributes.angleZ, /*inout */attributes.seed, (float)0, (float)360);\n
|
|
}\n \n\r\n\t\t\r\n#if VFX_USE_ALIVE_CURRENT\r\n if (attributes.alive)\r\n#endif
|
|
\r\n {\r\n#if USE_DEAD_LIST\r\n\t uint deadIndex = deadListIn.DecrementCounter();\r\n
|
|
uint index = deadListIn[deadIndex];\r\n#else\r\n uint index = particleIndex;\r\n#endif\r\n
|
|
attributeBuffer.Store((index * 0x8 + 0x3) << 2,asuint(attributes.size));\n
|
|
attributeBuffer.Store((index * 0x1 + 0x100) << 2,asuint(attributes.lifetime));\n
|
|
attributeBuffer.Store3((index * 0x8 + 0x0) << 2,asuint(attributes.color));\n
|
|
attributeBuffer.Store((index * 0x8 + 0x4) << 2,asuint(attributes.angleZ));\n
|
|
attributeBuffer.Store((index * 0x2 + 0x120) << 2,uint(attributes.alive));\n
|
|
attributeBuffer.Store((index * 0x2 + 0x121) << 2,asuint(attributes.age));\n
|
|
\n\r\n }\r\n }\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[Core Aura]Update Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_ALIVE_CURRENT
|
|
1\n#define VFX_USE_AGE_CURRENT 1\n#define VFX_HAS_INDIRECT_DRAW 1\n#define
|
|
VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float deltaTime_a;\n uint3 PADDING_0;\nCBUFFER_END\n\nstruct Attributes\n{\n
|
|
float lifetime;\n bool alive;\n float age;\n};\n\nstruct SourceAttributes\n{\n};\n\n\n\r\n\r\n#define
|
|
USE_DEAD_LIST (VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer
|
|
attributeBuffer;\r\n\r\n#if USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListOut;\r\n#endif\r\n\r\n#if
|
|
VFX_HAS_INDIRECT_DRAW\r\nRWStructuredBuffer<uint> indirectBuffer;\r\n#endif\r\n\r\n#if
|
|
HAS_STRIPS\r\nRWBuffer<uint> stripDataBuffer;\r\n#endif\r\n\r\n#if VFX_USE_STRIPALIVE_CURRENT\r\nBuffer<uint>
|
|
attachedStripDataBuffer;\r\n#endif\r\n\r\nCBUFFER_START(updateParams)\r\n
|
|
uint nbMax;\r\n\tuint dispatchWidth;\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
Age(inout float age, float deltaTime)\n{\n age += deltaTime;\n}\nvoid Reap(float
|
|
age, float lifetime, inout bool alive)\n{\n if(age > lifetime) { alive =
|
|
false; }\n}\n\n\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n\tuint
|
|
id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP + groupId.y * dispatchWidth
|
|
* NB_THREADS_PER_GROUP;\r\n\tuint index = id;\r\n\tif (id < nbMax)\r\n\t{\r\n
|
|
Attributes attributes = (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\r\n\r\n#if VFX_USE_ALIVE_CURRENT\r\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x120) << 2));\n\t\t\n\r\n\t\tif (attributes.alive)\r\n\t\t{\r\n\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x100) << 2));\n\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x121) << 2));\n\t\t\t\n\r\n\r\n//
|
|
Initialize built-in needed attributes\r\n#if VFX_USE_OLDPOSITION_CURRENT\r\n\t\t\tattributes.oldPosition
|
|
= attributes.position;\r\n#endif\r\n#if HAS_STRIPS\r\n const StripData
|
|
stripData = GetStripDataFromParticleIndex(index, PARTICLE_PER_STRIP_COUNT);\r\n
|
|
InitStripAttributes(index, attributes, stripData);\r\n#endif\r\n\t\t\t\r\n\t\t\tAge(
|
|
/*inout */attributes.age, deltaTime_a);\n\t\t\tReap(attributes.age, attributes.lifetime,
|
|
/*inout */attributes.alive);\n\t\t\t\n\r\n\r\n\t\t\tif (attributes.alive)\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x121) << 2,asuint(attributes.age));\n\t\t\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\t\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n\r\n#if HAS_STRIPS\t\t\t\r\n\t\t\t\tuint relativeIndexInStrip
|
|
= GetRelativeIndex(index, stripData);\r\n\t\t\t\tInterlockedMin(STRIP_DATA(STRIP_MIN_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n\t\t\t\tInterlockedMax(STRIP_DATA(STRIP_MAX_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n#endif\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x120) << 2,uint(attributes.alive));\n\t\t\t\t\n\r\n#if USE_DEAD_LIST
|
|
&& !VFX_USE_STRIPALIVE_CURRENT\r\n\t\t\t\tuint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n#endif\r\n\t\t\t}\r\n\t\t}\r\n#if USE_DEAD_LIST && VFX_USE_STRIPALIVE_CURRENT\r\n
|
|
else if (attributes.stripAlive)\r\n {\r\n if (STRIP_DATA_X(attachedStripDataBuffer,
|
|
STRIP_MIN_ALIVE, index) == ~1) // Attached strip is no longer alive, recycle
|
|
the particle \r\n {\r\n uint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n attributes.stripAlive = false;\r\n
|
|
\r\n } \r\n }\r\n#endif\r\n#else\r\n\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x100) << 2));\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x120) << 2));\n\t\tattributes.age =
|
|
asfloat(attributeBuffer.Load((index * 0x2 + 0x121) << 2));\n\t\t\n\r\n\t\t\r\n#if
|
|
VFX_USE_OLDPOSITION_CURRENT\r\n\t\tattributes.oldPosition = attributes.position;\r\n#endif\r\n#if
|
|
HAS_STRIPS\r\n const StripData stripData = GetStripDataFromParticleIndex(index,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n InitStripAttributes(index, attributes,
|
|
stripData);\r\n#endif\r\n\t\t\r\n\t\tAge( /*inout */attributes.age, deltaTime_a);\n\t\tReap(attributes.age,
|
|
attributes.lifetime, /*inout */attributes.alive);\n\t\t\n\r\n\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x120) << 2,uint(attributes.alive));\n\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x121) << 2,asuint(attributes.age));\n\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n#endif\r\n\t}\r\n}\r\n"
|
|
- compute: 0
|
|
name: '[Core Aura]Output Particle Quad'
|
|
source: "Shader \"Hidden/VFX/ShipCore-NucleusCore/Core Aura/Output Particle Quad\"\n{\r\n\tSubShader\r\n\t{\t\r\n\t\tCull
|
|
Off\r\n\t\t\r\n\t\tTags { \"Queue\"=\"Transparent+0\" \"IgnoreProjector\"=\"True\"
|
|
\"RenderType\"=\"Transparent\" }\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tBlend
|
|
SrcAlpha OneMinusSrcAlpha \n\t\tZTest LEqual\n\t\tZWrite Off\n\t\tCull Off\n\t\t\n\t\n\t\t\t\n\t\tHLSLINCLUDE\n\t\t\n\t\t#define
|
|
NB_THREADS_PER_GROUP 64\n\t\t#define HAS_ATTRIBUTES 1\n\t\t#define VFX_PASSDEPTH_ACTUAL
|
|
(0)\n\t\t#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n\t\t#define VFX_PASSDEPTH_SELECTION
|
|
(2)\n\t\t#define VFX_USE_SIZE_CURRENT 1\n\t\t#define VFX_USE_LIFETIME_CURRENT
|
|
1\n\t\t#define VFX_USE_COLOR_CURRENT 1\n\t\t#define VFX_USE_ANGLEZ_CURRENT
|
|
1\n\t\t#define VFX_USE_POSITION_CURRENT 1\n\t\t#define VFX_USE_ALPHA_CURRENT
|
|
1\n\t\t#define VFX_USE_ALIVE_CURRENT 1\n\t\t#define VFX_USE_AXISX_CURRENT 1\n\t\t#define
|
|
VFX_USE_AXISY_CURRENT 1\n\t\t#define VFX_USE_AXISZ_CURRENT 1\n\t\t#define VFX_USE_ANGLEX_CURRENT
|
|
1\n\t\t#define VFX_USE_ANGLEY_CURRENT 1\n\t\t#define VFX_USE_PIVOTX_CURRENT
|
|
1\n\t\t#define VFX_USE_PIVOTY_CURRENT 1\n\t\t#define VFX_USE_PIVOTZ_CURRENT
|
|
1\n\t\t#define VFX_USE_SCALEX_CURRENT 1\n\t\t#define VFX_USE_SCALEY_CURRENT
|
|
1\n\t\t#define VFX_USE_SCALEZ_CURRENT 1\n\t\t#define VFX_USE_AGE_CURRENT 1\n\t\t#define
|
|
VFX_COLORMAPPING_DEFAULT 1\n\t\t#define IS_TRANSPARENT_PARTICLE 1\n\t\t#define
|
|
VFX_BLENDMODE_ALPHA 1\n\t\t#define USE_CAST_SHADOWS_PASS 1\n\t\t#define VFX_HAS_INDIRECT_DRAW
|
|
1\n\t\t#define VFX_BYPASS_EXPOSURE 1\n\t\t#define USE_DEAD_LIST_COUNT 1\n\t\t#define
|
|
VFX_PRIMITIVE_QUAD 1\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t#define
|
|
VFX_LOCAL_SPACE 1\n\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\t\t\n\n\t\tCBUFFER_START(parameters)\n\t\t
|
|
float4 Size_b;\n\t\t float3 uniform_f;\n\t\t float uniform_a;\n\t\t
|
|
float3 Color_f;\n\t\t float uniform_b;\n\t\t float3 uniform_g;\n\t\t
|
|
float uniform_c;\n\t\t float3 uniform_h;\n\t\t float uniform_d;\n\t\t
|
|
float uniform_e;\n\t\t float Color_e;\n\t\t uint2 PADDING_0;\n\t\tCBUFFER_END\n\t\t\n\t\tstruct
|
|
Attributes\n\t\t{\n\t\t float size;\n\t\t float lifetime;\n\t\t float3
|
|
color;\n\t\t float angleZ;\n\t\t float3 position;\n\t\t float alpha;\n\t\t
|
|
bool alive;\n\t\t float3 axisX;\n\t\t float3 axisY;\n\t\t float3 axisZ;\n\t\t
|
|
float angleX;\n\t\t float angleY;\n\t\t float pivotX;\n\t\t float
|
|
pivotY;\n\t\t float pivotZ;\n\t\t float scaleX;\n\t\t float scaleY;\n\t\t
|
|
float scaleZ;\n\t\t float age;\n\t\t};\n\t\t\n\t\tstruct SourceAttributes\n\t\t{\n\t\t};\n\t\t\n\t\tTexture2D
|
|
mainTexture;\n\t\tSamplerState samplermainTexture;\n\t\tfloat4 mainTexture_TexelSize;\n\t\t\n\t\t\n\n\t\t\n\t\t#define
|
|
VFX_NEEDS_COLOR_INTERPOLATOR (VFX_USE_COLOR_CURRENT || VFX_USE_ALPHA_CURRENT)\n\t\t#if
|
|
HAS_STRIPS\n\t\t#define VFX_OPTIONAL_INTERPOLATION \n\t\t#else\n\t\t#define
|
|
VFX_OPTIONAL_INTERPOLATION nointerpolation\n\t\t#endif\n\t\t\n\t\tByteAddressBuffer
|
|
attributeBuffer;\t\n\t\t\n\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\tStructuredBuffer<uint>
|
|
indirectBuffer;\t\n\t\t#endif\t\n\t\t\n\t\t#if USE_DEAD_LIST_COUNT\n\t\tByteAddressBuffer
|
|
deadListCount;\n\t\t#endif\n\t\t\n\t\t#if HAS_STRIPS\n\t\tBuffer<uint> stripDataBuffer;\n\t\t#endif\n\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD || USE_MOTION_VECTORS_PASS\n\t\tByteAddressBuffer
|
|
elementToVFXBufferPrevious;\n\t\t#endif\n\t\t\n\t\tCBUFFER_START(outputParams)\n\t\t\tfloat
|
|
nbMax;\n\t\t\tfloat systemSeed;\n\t\tCBUFFER_END\n\t\t\n\t\t// Helper macros
|
|
to always use a valid instanceID\n\t\t#if defined(UNITY_STEREO_INSTANCING_ENABLED)\n\t\t\t#define
|
|
VFX_DECLARE_INSTANCE_ID UNITY_VERTEX_INPUT_INSTANCE_ID\n\t\t\t#define VFX_GET_INSTANCE_ID(i)
|
|
unity_InstanceID\n\t\t#else\n\t\t\t#define VFX_DECLARE_INSTANCE_ID uint
|
|
instanceID : SV_InstanceID;\n\t\t\t#define VFX_GET_INSTANCE_ID(i) i.instanceID\n\t\t#endif\n\t\t\n\t\tENDHLSL\n\t\t\n\r\n\t\tPass\n\t\t{\t\t\n\t\t\tTags
|
|
{ \"LightMode\"=\"SceneSelectionPass\" }\n\t\t\n\t\t\tZWrite On\n\t\t\tBlend
|
|
Off\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#define VFX_PASSDEPTH VFX_PASSDEPTH_SELECTION\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos : SV_POSITION;\n\t\t\t\t#if
|
|
USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if USE_ALPHA_TEST || USE_FLIPBOOK_INTERPOLATION
|
|
|| VFX_USE_ALPHA_CURRENT\n\t\t\t\t// x: alpha threshold\n\t\t\t\t// y: frame
|
|
blending factor\n\t\t\t\t// z: alpha\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION float3
|
|
builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\tfloat4 cPosPrevious :
|
|
TEXCOORD3;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD4;\n\t\t\t\t#endif\n\t\t\t
|
|
\n\t\t\t #if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t float3 posWS : TEXCOORD5;\n\t\t\t
|
|
#endif\n\t\t\t \n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t\t#define VFX_VARYING_POSCS pos\n\t\t\t#define
|
|
VFX_VARYING_ALPHA builtInInterpolants.z\n\t\t\t#define VFX_VARYING_ALPHATHRESHOLD
|
|
builtInInterpolants.x\n\t\t\t#define VFX_VARYING_FRAMEBLEND builtInInterpolants.y\n\t\t\t#define
|
|
VFX_VARYING_MOTIONVECTORSCALE builtInInterpolants2.xy\n\t\t\t#define VFX_VARYING_UV
|
|
uv\n\t\t\t\n\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t#define VFX_VARYING_POSWS
|
|
posWS\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_MOTION_VECTORS\n\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_DEPTH_ONLY\n\t\t\t#endif\n\t\t\t\n\t\t\t#if !(defined(VFX_VARYING_PS_INPUTS)
|
|
&& defined(VFX_VARYING_POSCS))\n\t\t\t#error VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS
|
|
and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
Orient_4(inout float3 axisX, inout float3 axisY, inout float3 axisZ) /*mode:FaceCameraPlane
|
|
axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t float3x3 viewRot = GetVFXToViewRotMatrix();\n\t\t\t
|
|
axisX = viewRot[0].xyz;\n\t\t\t axisY = viewRot[1].xyz;\n\t\t\t #if VFX_LOCAL_SPACE
|
|
// Need to remove potential scale in local transform\n\t\t\t axisX = normalize(axisX);\n\t\t\t
|
|
axisY = normalize(axisY);\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
#else\n\t\t\t axisZ = -viewRot[2].xyz;\n\t\t\t #endif\n\t\t\t \n\t\t\t}\n\t\t\tvoid
|
|
AttributeFromCurve_7DF18695(inout float size, float age, float lifetime, float4
|
|
Size) /*attribute:size Composition:Multiply AlphaComposition:Overwrite SampleMode:OverLife
|
|
Mode:PerComponent ColorMode:ColorAndAlpha channels:X */\n\t\t\t{\n\t\t\t
|
|
float t = age / lifetime;\n\t\t\t float value = 0.0f;\n\t\t\t value =
|
|
SampleCurve(Size, t);\n\t\t\t size *= value;\n\t\t\t}\n\t\t\tvoid SetAttribute_39EE3453(inout
|
|
float size, float Size) /*attribute:size Composition:Multiply Source:Slot Random:Off
|
|
channels:X */\n\t\t\t{\n\t\t\t size *= Size;\n\t\t\t}\n\t\t\tvoid SetAttribute_FDD06EC7(inout
|
|
float3 color, float3 Color) /*attribute:color Composition:Overwrite Source:Slot
|
|
Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t color = Color;\n\t\t\t}\n\t\t\tvoid
|
|
AttributeFromCurve_EFB359F9(inout float3 color, inout float alpha, float age,
|
|
float lifetime, float Color) /*attribute:color Composition:Multiply AlphaComposition:Multiply
|
|
SampleMode:OverLife Mode:PerComponent ColorMode:ColorAndAlpha channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t float t = age / lifetime;\n\t\t\t float4 value =
|
|
0.0f;\n\t\t\t value = SampleGradient(Color, t);\n\t\t\t color *= value.rgb;\n\t\t\t
|
|
alpha *= value.a;\n\t\t\t}\n\t\t\tvoid SetAttribute_545F0ED(inout float3 color,
|
|
float3 Color) /*attribute:color Composition:Multiply Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t color *= Color;\n\t\t\t}\n\t\t\tvoid SetAttribute_C707D62A(inout
|
|
float3 position, float3 Position) /*attribute:position Composition:Add Source:Slot
|
|
Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t position += Position;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if
|
|
defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error VFX_PRIMITIVE_QUAD
|
|
must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\n\n\t\t\t\treturn attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3
|
|
GetStripTangent(float3 currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x100) << 2));\n\t\t\t\t\t\tattributes.color = asfloat(attributeBuffer.Load3((index
|
|
* 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.angleZ = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x4) << 2));\n\t\t\t\t\t\tattributes.position = float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x120) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x121) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x120) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x100) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.angleZ
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x4) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x121) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\tOrient_4(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ);\n\t\t\t\tAttributeFromCurve_7DF18695(
|
|
/*inout */attributes.size, attributes.age, attributes.lifetime, Size_b);\n\t\t\t\t{\n\t\t\t\t
|
|
float2 tmp_bi = GeneratePerlinNoise(uniform_d, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t float tmp_bj = tmp_bi[0];\n\t\t\t\t
|
|
float tmp_bl = tmp_bj - (float)-1;\n\t\t\t\t float tmp_bn = tmp_bl / (float)2;\n\t\t\t\t
|
|
float tmp_bo = tmp_bn * uniform_e;\n\t\t\t\t float tmp_bp = uniform_c +
|
|
tmp_bo;\n\t\t\t\t float tmp_bq = uniform_b + tmp_bp;\n\t\t\t\t float
|
|
tmp_br = uniform_a * tmp_bq;\n\t\t\t\t SetAttribute_39EE3453( /*inout */attributes.size,
|
|
tmp_br);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t float3 tmp_bh = float3(32.4000015,
|
|
0, 0) - attributes.color;\n\t\t\t\t float3 tmp_bi = uniform_f * tmp_bh;\n\t\t\t\t
|
|
float3 tmp_bj = attributes.color + tmp_bi;\n\t\t\t\t SetAttribute_FDD06EC7(
|
|
/*inout */attributes.color, tmp_bj);\n\t\t\t\t}\n\t\t\t\tAttributeFromCurve_EFB359F9(
|
|
/*inout */attributes.color, /*inout */attributes.alpha, attributes.age, attributes.lifetime,
|
|
Color_e);\n\t\t\t\tSetAttribute_545F0ED( /*inout */attributes.color, Color_f);\n\t\t\t\t{\n\t\t\t\t
|
|
float3 tmp_bi = GeneratePerlinCurlNoise(uniform_g, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t float3 tmp_bj = tmp_bi
|
|
* uniform_h;\n\t\t\t\t SetAttribute_C707D62A( /*inout */attributes.position,
|
|
tmp_bj);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if !HAS_STRIPS\n\t\t\t\tif
|
|
(!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\tfloat
|
|
alphaThreshold = (float)0;\n\t\t\t\t\t\t{\n\t\t\t\t\t\t \n\t\t\t\t\t\t
|
|
alphaThreshold = (float)0.5;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#define
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 1\n\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t#ifndef
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t#define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH
|
|
0\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\tint _ObjectId;\n\t\t\t\t\tint
|
|
_PassValue;\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#pragma fragment frag\n\t\t\t\t\tvoid
|
|
frag(ps_input i\n\t\t\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t
|
|
#ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t // We need the depth color as SV_Target0
|
|
for alpha to coverage\n\t\t\t\t\t , out float4 outDepthColor : SV_Target0\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target1\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
// When no MSAA, the motion vector is always the first buffer\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t #ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t
|
|
, out float4 outDepthColor : SV_Target0\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
, out float4 dummy : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t , out float4 outSelection : SV_Target0\n\t\t\t\t\t#endif\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\t
|
|
#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t
|
|
float alpha = OUTSG.;\n\t\t\t\t\t #else\n\t\t\t\t\t float alpha =
|
|
VFXGetFragmentColor(i).a;\n\t\t\t\t\t\t\t#if VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t\t\t\talpha
|
|
*= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t
|
|
#endif\n\t\t\t\t\t\tVFXClipFragmentColor(alpha,i);\n\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\toutDepthColor = i.VFX_VARYING_POSCS.z;\n\t\t\t\t\t\t\t#if
|
|
VFX_USE_ALPHA_TO_MASK\n\t\t\t\t\t\t\t\toutDepthColor.a = alpha;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat2
|
|
velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w) -
|
|
(i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\t\t\t\tVFXEncodeMotionVector(velocity
|
|
* 0.5f, encodedMotionVector);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\toutMotionVector
|
|
= encodedMotionVector;\n\t\t\t\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t\t\toutSelection
|
|
= float4(_ObjectId, _PassValue, 1.0, 1.0);\n\t\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t\t\t#ifndef WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\t\tdummy
|
|
= (float4)0;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t#error
|
|
VFX_PASSDEPTH undefined \n\t\t\t\t\t\t#endif\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\n\t\t\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t\t\r\n\t\t//
|
|
Forward pass\n\t\tPass\n\t\t{\t\t\n\t\t\tTags { \"LightMode\"=\"ForwardOnly\"
|
|
}\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#pragma target 4.5\n\t\t\t#pragma multi_compile
|
|
_ DEBUG_DISPLAY\n\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos :
|
|
SV_POSITION;\n\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_COLOR_INTERPOLATOR\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 color : COLOR0;\n\t\t\t\t#endif\n\t\t\t\t#if USE_SOFT_PARTICLE || USE_ALPHA_TEST
|
|
|| USE_FLIPBOOK_INTERPOLATION || USE_EXPOSURE_WEIGHT || WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t//
|
|
x: inverse soft particles fade distance\n\t\t\t\t// y: alpha threshold\n\t\t\t\t//
|
|
z: frame blending factor\n\t\t\t\t// w: exposure weight\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t\tfloat3
|
|
posWS : TEXCOORD3;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
cPosPrevious : TEXCOORD4;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD5;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t\t\tfloat3 normal : TEXCOORD6;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t\t\tfloat3 tangent : TEXCOORD7;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t
|
|
\n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\tstruct
|
|
ps_output\n\t\t\t{\n\t\t\t\tfloat4 color : SV_Target0;\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
outMotionVector : SV_Target1;\n\t\t#endif\n\t\t\t};\n\t\t\n\t\t#define VFX_VARYING_PS_INPUTS
|
|
ps_input\n\t\t#define VFX_VARYING_POSCS pos\n\t\t#define VFX_VARYING_COLOR
|
|
color.rgb\n\t\t#define VFX_VARYING_ALPHA color.a\n\t\t#define VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
builtInInterpolants.x\n\t\t#define VFX_VARYING_ALPHATHRESHOLD builtInInterpolants.y\n\t\t#define
|
|
VFX_VARYING_FRAMEBLEND builtInInterpolants.z\n\t\t#define VFX_VARYING_MOTIONVECTORSCALE
|
|
builtInInterpolants2.xy\n\t\t#define VFX_VARYING_UV uv\n\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t#define
|
|
VFX_VARYING_POSWS posWS\n\t\t#endif\n\t\t#if USE_EXPOSURE_WEIGHT\n\t\t#define
|
|
VFX_VARYING_EXPOSUREWEIGHT builtInInterpolants.w\n\t\t#endif\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t#endif\n\t\t\n\t\t#define SHADERPASS SHADERPASS_FORWARD_UNLIT\n\t\t\t\n\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t#define VFX_VARYING_NORMAL normal\n\t\t#endif\n\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t#define VFX_VARYING_TANGENT tangent\n\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
!(defined(VFX_VARYING_PS_INPUTS) && defined(VFX_VARYING_POSCS))\n\t\t\t#error
|
|
VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
Orient_4(inout float3 axisX, inout float3 axisY, inout float3 axisZ) /*mode:FaceCameraPlane
|
|
axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t float3x3 viewRot = GetVFXToViewRotMatrix();\n\t\t\t
|
|
axisX = viewRot[0].xyz;\n\t\t\t axisY = viewRot[1].xyz;\n\t\t\t #if VFX_LOCAL_SPACE
|
|
// Need to remove potential scale in local transform\n\t\t\t axisX = normalize(axisX);\n\t\t\t
|
|
axisY = normalize(axisY);\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
#else\n\t\t\t axisZ = -viewRot[2].xyz;\n\t\t\t #endif\n\t\t\t \n\t\t\t}\n\t\t\tvoid
|
|
AttributeFromCurve_7DF18695(inout float size, float age, float lifetime, float4
|
|
Size) /*attribute:size Composition:Multiply AlphaComposition:Overwrite SampleMode:OverLife
|
|
Mode:PerComponent ColorMode:ColorAndAlpha channels:X */\n\t\t\t{\n\t\t\t
|
|
float t = age / lifetime;\n\t\t\t float value = 0.0f;\n\t\t\t value =
|
|
SampleCurve(Size, t);\n\t\t\t size *= value;\n\t\t\t}\n\t\t\tvoid SetAttribute_39EE3453(inout
|
|
float size, float Size) /*attribute:size Composition:Multiply Source:Slot Random:Off
|
|
channels:X */\n\t\t\t{\n\t\t\t size *= Size;\n\t\t\t}\n\t\t\tvoid SetAttribute_FDD06EC7(inout
|
|
float3 color, float3 Color) /*attribute:color Composition:Overwrite Source:Slot
|
|
Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t color = Color;\n\t\t\t}\n\t\t\tvoid
|
|
AttributeFromCurve_EFB359F9(inout float3 color, inout float alpha, float age,
|
|
float lifetime, float Color) /*attribute:color Composition:Multiply AlphaComposition:Multiply
|
|
SampleMode:OverLife Mode:PerComponent ColorMode:ColorAndAlpha channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t float t = age / lifetime;\n\t\t\t float4 value =
|
|
0.0f;\n\t\t\t value = SampleGradient(Color, t);\n\t\t\t color *= value.rgb;\n\t\t\t
|
|
alpha *= value.a;\n\t\t\t}\n\t\t\tvoid SetAttribute_545F0ED(inout float3 color,
|
|
float3 Color) /*attribute:color Composition:Multiply Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t color *= Color;\n\t\t\t}\n\t\t\tvoid SetAttribute_C707D62A(inout
|
|
float3 position, float3 Position) /*attribute:position Composition:Add Source:Slot
|
|
Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t position += Position;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if
|
|
defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error VFX_PRIMITIVE_QUAD
|
|
must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\n\n\t\t\t\treturn attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3
|
|
GetStripTangent(float3 currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x100) << 2));\n\t\t\t\t\t\tattributes.color = asfloat(attributeBuffer.Load3((index
|
|
* 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.angleZ = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x4) << 2));\n\t\t\t\t\t\tattributes.position = float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x120) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x121) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x120) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x100) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.angleZ
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x4) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x121) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\tOrient_4(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ);\n\t\t\t\tAttributeFromCurve_7DF18695(
|
|
/*inout */attributes.size, attributes.age, attributes.lifetime, Size_b);\n\t\t\t\t{\n\t\t\t\t
|
|
float2 tmp_bi = GeneratePerlinNoise(uniform_d, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t float tmp_bj = tmp_bi[0];\n\t\t\t\t
|
|
float tmp_bl = tmp_bj - (float)-1;\n\t\t\t\t float tmp_bn = tmp_bl / (float)2;\n\t\t\t\t
|
|
float tmp_bo = tmp_bn * uniform_e;\n\t\t\t\t float tmp_bp = uniform_c +
|
|
tmp_bo;\n\t\t\t\t float tmp_bq = uniform_b + tmp_bp;\n\t\t\t\t float
|
|
tmp_br = uniform_a * tmp_bq;\n\t\t\t\t SetAttribute_39EE3453( /*inout */attributes.size,
|
|
tmp_br);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t float3 tmp_bh = float3(32.4000015,
|
|
0, 0) - attributes.color;\n\t\t\t\t float3 tmp_bi = uniform_f * tmp_bh;\n\t\t\t\t
|
|
float3 tmp_bj = attributes.color + tmp_bi;\n\t\t\t\t SetAttribute_FDD06EC7(
|
|
/*inout */attributes.color, tmp_bj);\n\t\t\t\t}\n\t\t\t\tAttributeFromCurve_EFB359F9(
|
|
/*inout */attributes.color, /*inout */attributes.alpha, attributes.age, attributes.lifetime,
|
|
Color_e);\n\t\t\t\tSetAttribute_545F0ED( /*inout */attributes.color, Color_f);\n\t\t\t\t{\n\t\t\t\t
|
|
float3 tmp_bi = GeneratePerlinCurlNoise(uniform_g, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t float3 tmp_bj = tmp_bi
|
|
* uniform_h;\n\t\t\t\t SetAttribute_C707D62A( /*inout */attributes.position,
|
|
tmp_bj);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if !HAS_STRIPS\n\t\t\t\tif
|
|
(!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\tfloat
|
|
alphaThreshold = (float)0;\n\t\t\t\t\t\t{\n\t\t\t\t\t\t \n\t\t\t\t\t\t
|
|
alphaThreshold = (float)0.5;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t\t\n\t\t#endif\n\t\t\t\t\n\t\t\t#pragma fragment frag\n\t\t\tps_output
|
|
frag(ps_input i)\n\t\t\t{\n\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\tps_output
|
|
o = (ps_output)0;\n\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\n\t\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\t\t\t\t#if USE_DOUBLE_SIDED\n\t\t\t\t\t\t\tconst
|
|
float faceMul = frontFace ? 1.0f : -1.0f;\n\t\t\t\t\t\t\t#else\n\t\t\t\t\t\t\tconst
|
|
float faceMul = 1.0f;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3
|
|
normalWS = i.VFX_VARYING_NORMAL * faceMul;\n\t\t\t\t\t\t\tconst VFXUVData uvData
|
|
= GetUVData(i);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_TANGENT\n\t\t\t\t\t\t\tfloat3
|
|
tangentWS = i.VFX_VARYING_TANGENT;\n\t\t\t\t\t\t\tfloat3 bitangentWS = cross(i.VFX_VARYING_TANGENT,i.VFX_VARYING_NORMAL);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_BENTFACTORS) && USE_NORMAL_BENDING\t\n\t\t\t\t\t\t\tfloat3
|
|
bentFactors = float3(i.VFX_VARYING_BENTFACTORS.xy,sqrt(1.0f - dot(i.VFX_VARYING_BENTFACTORS,i.VFX_VARYING_BENTFACTORS)));\n\t\t\t\t\t\t\tnormalWS
|
|
= tangentWS * bentFactors.x + bitangentWS * bentFactors.y + normalWS * bentFactors.z;\n\t\t\t\t\t\t\ttangentWS
|
|
= normalize(cross(normalWS,bitangentWS));\n\t\t\t\t\t\t\tbitangentWS = cross(tangentWS,normalWS);\n\t\t\t\t\t\t\ttangentWS
|
|
*= faceMul;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3x3 tbn
|
|
= float3x3(tangentWS,bitangentWS,normalWS);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
USE_NORMAL_MAP\n\t\t\t\t\t\t\tfloat3 n = SampleNormalMap(VFX_SAMPLER(normalMap),uvData);\n\t\t\t\t\t\t\tfloat
|
|
normalScale = 1.0f;\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_NORMALSCALE\n\t\t\t\t\t\t\tnormalScale
|
|
= i.VFX_VARYING_NORMALSCALE;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\tnormalWS
|
|
= normalize(lerp(normalWS,mul(n,tbn),normalScale));\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t \n\t\t \n\t\t \n\t\t \n\t\t
|
|
#if HAS_SHADERGRAPH_PARAM_COLOR\n\t\t o.color.rgb = OUTSG..rgb;\n\t\t
|
|
#endif\n\t\t \n\t\t #if HAS_SHADERGRAPH_PARAM_ALPHA \n\t\t
|
|
o.color.a = OUTSG.;\n\t\t #endif\n\t\t#else\n\t\t\t\n\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR VFXGetTextureColor(VFX_SAMPLER(mainTexture),i)\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tfloat4
|
|
color = VFXGetFragmentColor(i);\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifndef VFX_TEXTURE_COLOR\n\t\t\t\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR float4(1.0,1.0,1.0,1.0)\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_DEFAULT\n\t\t\t\t\t\t\to.color = color * VFX_TEXTURE_COLOR;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_GRADIENTMAPPED\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\to.color = SampleGradient(gradient,
|
|
VFX_TEXTURE_COLOR.a * color.a) * float4(color.rgb,1.0);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\to.color
|
|
= VFXApplyPreExposure(o.color, i);\n\t\t#endif\n\t\t\n\t\t\t\to.color = VFXApplyFog(o.color,i);\n\t\t\t\tVFXClipFragmentColor(o.color.a,i);\n\t\t\t\to.color.a
|
|
= saturate(o.color.a);\n\t\t\t\to.color = VFXTransformFinalColor(o.color);\n\t\t\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t\n\t\t\t\t\t\tfloat2 velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w)
|
|
- (i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\tVFXEncodeMotionVector(velocity * 0.5f,
|
|
encodedMotionVector);\n\t\t\t\t\t\t\n\t\t\t\to.outMotionVector = encodedMotionVector;\n\t\t
|
|
o.outMotionVector.a = o.color.a < i.VFX_VARYING_ALPHATHRESHOLD ? 0.0f : 1.0f;
|
|
//Independant clipping for motion vector pass\n\t\t#endif\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t//
|
|
Shadow pass\n\t\tPass\n\t\t{\t\t\n\t\t\tTags { \"LightMode\"=\"ShadowCaster\"
|
|
}\n\t\t\n\t\t\tZWrite On\n\t\t\tBlend Off\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t#if !USE_ALPHA_TEST && IS_TRANSPARENT_PARTICLE\n\t\t\t#define
|
|
USE_ALPHA_TEST 1\n\t\t\t#endif\n\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4
|
|
pos : SV_POSITION;\n\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4
|
|
uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2 uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
USE_ALPHA_TEST || USE_FLIPBOOK_INTERPOLATION || VFX_USE_ALPHA_CURRENT\n\t\t\t\t//
|
|
x: alpha threshold\n\t\t\t\t// y: frame blending factor\n\t\t\t\t// z: alpha\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float3 builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\n\t\t\t\t#if
|
|
VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t\tfloat3 posWS : TEXCOORD4;\n\t\t\t\t#endif\n\t\t\n\t\t\t\t\n\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\n\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t#define VFX_VARYING_POSCS pos\n\t\t#define
|
|
VFX_VARYING_ALPHA builtInInterpolants.z\n\t\t#define VFX_VARYING_ALPHATHRESHOLD
|
|
builtInInterpolants.x\n\t\t#define VFX_VARYING_FRAMEBLEND builtInInterpolants.y\n\t\t#define
|
|
VFX_VARYING_MOTIONVECTORSCALE builtInInterpolants2.xy\n\t\t#define VFX_VARYING_UV
|
|
uv\n\t\t\t\t\n\t\t\n\t\t\n\t\t\t#define SHADERPASS SHADERPASS_SHADOWS\t\n\t\t\t#if
|
|
!(defined(VFX_VARYING_PS_INPUTS) && defined(VFX_VARYING_POSCS))\n\t\t\t#error
|
|
VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
Orient_4(inout float3 axisX, inout float3 axisY, inout float3 axisZ) /*mode:FaceCameraPlane
|
|
axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t float3x3 viewRot = GetVFXToViewRotMatrix();\n\t\t\t
|
|
axisX = viewRot[0].xyz;\n\t\t\t axisY = viewRot[1].xyz;\n\t\t\t #if VFX_LOCAL_SPACE
|
|
// Need to remove potential scale in local transform\n\t\t\t axisX = normalize(axisX);\n\t\t\t
|
|
axisY = normalize(axisY);\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
#else\n\t\t\t axisZ = -viewRot[2].xyz;\n\t\t\t #endif\n\t\t\t \n\t\t\t}\n\t\t\tvoid
|
|
AttributeFromCurve_7DF18695(inout float size, float age, float lifetime, float4
|
|
Size) /*attribute:size Composition:Multiply AlphaComposition:Overwrite SampleMode:OverLife
|
|
Mode:PerComponent ColorMode:ColorAndAlpha channels:X */\n\t\t\t{\n\t\t\t
|
|
float t = age / lifetime;\n\t\t\t float value = 0.0f;\n\t\t\t value =
|
|
SampleCurve(Size, t);\n\t\t\t size *= value;\n\t\t\t}\n\t\t\tvoid SetAttribute_39EE3453(inout
|
|
float size, float Size) /*attribute:size Composition:Multiply Source:Slot Random:Off
|
|
channels:X */\n\t\t\t{\n\t\t\t size *= Size;\n\t\t\t}\n\t\t\tvoid SetAttribute_FDD06EC7(inout
|
|
float3 color, float3 Color) /*attribute:color Composition:Overwrite Source:Slot
|
|
Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t color = Color;\n\t\t\t}\n\t\t\tvoid
|
|
AttributeFromCurve_EFB359F9(inout float3 color, inout float alpha, float age,
|
|
float lifetime, float Color) /*attribute:color Composition:Multiply AlphaComposition:Multiply
|
|
SampleMode:OverLife Mode:PerComponent ColorMode:ColorAndAlpha channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t float t = age / lifetime;\n\t\t\t float4 value =
|
|
0.0f;\n\t\t\t value = SampleGradient(Color, t);\n\t\t\t color *= value.rgb;\n\t\t\t
|
|
alpha *= value.a;\n\t\t\t}\n\t\t\tvoid SetAttribute_545F0ED(inout float3 color,
|
|
float3 Color) /*attribute:color Composition:Multiply Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t color *= Color;\n\t\t\t}\n\t\t\tvoid SetAttribute_C707D62A(inout
|
|
float3 position, float3 Position) /*attribute:position Composition:Add Source:Slot
|
|
Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t position += Position;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if
|
|
defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error VFX_PRIMITIVE_QUAD
|
|
must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\n\n\t\t\t\treturn attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3
|
|
GetStripTangent(float3 currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x100) << 2));\n\t\t\t\t\t\tattributes.color = asfloat(attributeBuffer.Load3((index
|
|
* 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.angleZ = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x4) << 2));\n\t\t\t\t\t\tattributes.position = float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x120) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x121) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x120) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x100) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.angleZ
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x4) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x121) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\tOrient_4(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ);\n\t\t\t\tAttributeFromCurve_7DF18695(
|
|
/*inout */attributes.size, attributes.age, attributes.lifetime, Size_b);\n\t\t\t\t{\n\t\t\t\t
|
|
float2 tmp_bi = GeneratePerlinNoise(uniform_d, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t float tmp_bj = tmp_bi[0];\n\t\t\t\t
|
|
float tmp_bl = tmp_bj - (float)-1;\n\t\t\t\t float tmp_bn = tmp_bl / (float)2;\n\t\t\t\t
|
|
float tmp_bo = tmp_bn * uniform_e;\n\t\t\t\t float tmp_bp = uniform_c +
|
|
tmp_bo;\n\t\t\t\t float tmp_bq = uniform_b + tmp_bp;\n\t\t\t\t float
|
|
tmp_br = uniform_a * tmp_bq;\n\t\t\t\t SetAttribute_39EE3453( /*inout */attributes.size,
|
|
tmp_br);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t float3 tmp_bh = float3(32.4000015,
|
|
0, 0) - attributes.color;\n\t\t\t\t float3 tmp_bi = uniform_f * tmp_bh;\n\t\t\t\t
|
|
float3 tmp_bj = attributes.color + tmp_bi;\n\t\t\t\t SetAttribute_FDD06EC7(
|
|
/*inout */attributes.color, tmp_bj);\n\t\t\t\t}\n\t\t\t\tAttributeFromCurve_EFB359F9(
|
|
/*inout */attributes.color, /*inout */attributes.alpha, attributes.age, attributes.lifetime,
|
|
Color_e);\n\t\t\t\tSetAttribute_545F0ED( /*inout */attributes.color, Color_f);\n\t\t\t\t{\n\t\t\t\t
|
|
float3 tmp_bi = GeneratePerlinCurlNoise(uniform_g, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t float3 tmp_bj = tmp_bi
|
|
* uniform_h;\n\t\t\t\t SetAttribute_C707D62A( /*inout */attributes.position,
|
|
tmp_bj);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if !HAS_STRIPS\n\t\t\t\tif
|
|
(!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\tfloat
|
|
alphaThreshold = (float)0;\n\t\t\t\t\t\t{\n\t\t\t\t\t\t \n\t\t\t\t\t\t
|
|
alphaThreshold = (float)0.5;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
posWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\tVFXApplyShadowBias(o.VFX_VARYING_POSCS,
|
|
posWS, normalWS);\n\t\t\t\t\t\t\n\t\t\t \n\t\t\t \n\t\t\t\n\t\t\t\treturn
|
|
o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t#pragma
|
|
fragment frag\n\t\t\tfloat frag(ps_input i) : SV_TARGET\n\t\t\t{\n\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t#ifdef
|
|
VFX_SHADERGRAPH\n\t\t\t\t\t\n\t\t\n\t\t\t\t\t\n\t\t\n\t\t\t\t\tfloat alpha
|
|
= OUTSG.;\n\t\t\t\t#else\n\t\t\t\t\tfloat alpha = VFXGetFragmentColor(i).a;\n\t\t\t\t\talpha
|
|
*= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a;\n\t\t\t\t#endif\n\t\t\t\tVFXClipFragmentColor(alpha,i);\n\t\t\n\t\t#ifndef
|
|
USE_ALPHA_TEST\n\t\t\t\tclip(alpha - 1e-5);\n\t\t#endif\n\t\t\n\t\t\t\treturn
|
|
0;\n\t\t\t}\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t}\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[Core Rays]Initialize Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_POSITION_CURRENT 1\n#define VFX_USE_SEED_CURRENT
|
|
1\n#define VFX_USE_DIRECTION_CURRENT 1\n#define VFX_USE_VELOCITY_CURRENT 1\n#define
|
|
VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_SIZE_CURRENT 1\n#define VFX_USE_ALIVE_CURRENT
|
|
1\n#define VFX_USE_AGE_CURRENT 1\n#define VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float ArcSphere_sphere_radius_a;\n uint3 PADDING_0;\nCBUFFER_END\n\nstruct
|
|
Attributes\n{\n float3 position;\n uint seed;\n float3 direction;\n
|
|
float3 velocity;\n float lifetime;\n float size;\n bool alive;\n
|
|
float age;\n};\n\nstruct SourceAttributes\n{\n};\n\n\n\r\n\r\n#define USE_DEAD_LIST
|
|
(VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer attributeBuffer;\r\nByteAddressBuffer
|
|
sourceAttributeBuffer;\r\n\r\nCBUFFER_START(initParams)\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
uint nbSpawned;\t\t\t\t\t// Numbers of particle spawned\r\n uint spawnIndex;\t\t\t\t//
|
|
Index of the first particle spawned\r\n uint dispatchWidth;\r\n#else\r\n
|
|
uint offsetInAdditionalOutput;\r\n\tuint nbMax;\r\n#endif\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#if
|
|
USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListIn;\r\nByteAddressBuffer
|
|
deadListCount; // This is bad to use a SRV to fetch deadList count but Unity
|
|
API currently prevent from copying to CB\r\n#endif\r\n\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\nStructuredBuffer<uint>
|
|
eventList;\r\nByteAddressBuffer inputAdditional;\r\n#endif\r\n\r\n#if HAS_STRIPS\r\nRWBuffer<uint>
|
|
stripDataBuffer;\r\n#endif\r\n\r\n#include \"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
PositionSphere_0(inout float3 position, inout uint seed, inout float3 direction,
|
|
float3 ArcSphere_sphere_center, float ArcSphere_sphere_radius, float ArcSphere_arc,
|
|
float volumeFactor) /*positionMode:Surface spawnMode:Random */\n{\n float
|
|
cosPhi = 2.0f * RAND - 1.0f;float theta = ArcSphere_arc * RAND;\n float
|
|
rNorm = pow(volumeFactor + (1 - volumeFactor) * RAND, 1.0f / 3.0f);\n \n
|
|
float2 sincosTheta;\n sincos(theta, sincosTheta.x, sincosTheta.y);\n
|
|
sincosTheta *= sqrt(1.0f - cosPhi * cosPhi);\n \n direction = float3(sincosTheta,
|
|
cosPhi);\n position += direction * (rNorm * ArcSphere_sphere_radius) + ArcSphere_sphere_center;\n
|
|
\n}\nvoid VelocitySpherical_18C(inout float3 velocity, inout float3 direction,
|
|
inout uint seed, float3 position, float3 center, float MinSpeed, float MaxSpeed,
|
|
float DirectionBlend) /*composition:Add speedMode:Random */\n{\n float3
|
|
sphereDirection = VFXSafeNormalize(position - center);\n float speed = lerp(MinSpeed,MaxSpeed,RAND);\n
|
|
direction = VFXSafeNormalize(lerp(direction, sphereDirection, DirectionBlend));\n
|
|
velocity += direction * speed;\n}\nvoid SetAttribute_F0142B34(inout float lifetime,
|
|
inout uint seed, float A, float B) /*attribute:lifetime Composition:Overwrite
|
|
Source:Slot Random:PerComponent channels:XYZ */\n{\n lifetime = lerp(A,B,RAND);\n}\nvoid
|
|
SetAttribute_3278B09C(inout float size, inout uint seed, float A, float B)
|
|
/*attribute:size Composition:Overwrite Source:Slot Random:PerComponent channels:X
|
|
*/\n{\n size = lerp(A,B,RAND);\n}\n\n\r\n\r\n// Due to a bug in HLSL compiler,
|
|
disable spurious \"unitialized variable\" due to mid function return statement\r\n#pragma
|
|
warning(push)\r\n#pragma warning(disable : 4000)\r\n#if HAS_STRIPS\r\nbool
|
|
GetParticleIndex(inout uint particleIndex, uint stripIndex)\r\n{\r\n\tuint
|
|
relativeIndex;\r\n\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX, stripIndex),
|
|
1, relativeIndex);\r\n\tif (relativeIndex >= PARTICLE_PER_STRIP_COUNT) // strip
|
|
is full\r\n\t{\r\n\t\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX, stripIndex),
|
|
-1); // Remove previous increment\r\n\t\treturn false;\r\n\t}\r\n\r\n\tparticleIndex
|
|
= stripIndex * PARTICLE_PER_STRIP_COUNT + ((STRIP_DATA(STRIP_FIRST_INDEX, stripIndex)
|
|
+ relativeIndex) % PARTICLE_PER_STRIP_COUNT);\r\n return true;\r\n}\r\n#endif\r\n#pragma
|
|
warning(pop)\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n
|
|
uint id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP;\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
id += groupId.y * dispatchWidth * NB_THREADS_PER_GROUP;\r\n#endif\r\n\r\n#if
|
|
VFX_USE_SPAWNER_FROM_GPU\r\n uint maxThreadId = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 0) << 2);\r\n uint currentSpawnIndex = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 1) << 2) - maxThreadId;\r\n#else\r\n uint maxThreadId = nbSpawned;\r\n
|
|
uint currentSpawnIndex = spawnIndex;\r\n#endif\r\n\r\n#if USE_DEAD_LIST\r\n
|
|
maxThreadId = min(maxThreadId, deadListCount.Load(0x0));\r\n#elif VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
maxThreadId = min(maxThreadId, nbMax); //otherwise, nbSpawned already clamped
|
|
on CPU\r\n#endif\r\n\r\n if (id < maxThreadId)\r\n {\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
int sourceIndex = eventList[id];\r\n#endif\r\n\t\tuint particleIndex = id +
|
|
currentSpawnIndex;\r\n\t\t\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n int
|
|
sourceIndex = 0;\n /*//Loop with 1 iteration generate a wrong IL Assembly
|
|
(and actually, useless code)\n uint currentSumSpawnCount = 0u;\n
|
|
for (sourceIndex=0; sourceIndex<1; sourceIndex++)\n {\n currentSumSpawnCount
|
|
+= uint(asfloat(sourceAttributeBuffer.Load((sourceIndex * 0x1 + 0x0) << 2)));\n
|
|
if (id < currentSumSpawnCount)\n {\n break;\n
|
|
}\n }\n */\n \n\r\n#endif\r\n\r\n\t\tAttributes attributes
|
|
= (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes = (SourceAttributes)0;\r\n\t\t\r\n
|
|
attributes.position = float3(0, 0, 0);\n attributes.seed = (uint)0;\n
|
|
attributes.direction = float3(0, 0, 1);\n attributes.velocity = float3(0,
|
|
0, 0);\n attributes.lifetime = (float)1;\n attributes.size =
|
|
(float)0.100000001;\n attributes.alive = (bool)true;\n attributes.age
|
|
= (float)0;\n \n\r\n#if VFX_USE_PARTICLEID_CURRENT\r\n attributes.particleId
|
|
= particleIndex;\r\n#endif\r\n#if VFX_USE_SEED_CURRENT\r\n attributes.seed
|
|
= WangHash(particleIndex ^ systemSeed);\r\n#endif\r\n#if VFX_USE_SPAWNINDEX_CURRENT\r\n
|
|
attributes.spawnIndex = id;\r\n#endif\r\n#if HAS_STRIPS\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n\t\t\r\n#else\r\n
|
|
uint stripIndex = sourceIndex;\r\n#endif\r\n\t\tstripIndex = min(stripIndex,
|
|
STRIP_COUNT);\r\n\r\n if (!GetParticleIndex(particleIndex, stripIndex))\r\n
|
|
return;\r\n\r\n const StripData stripData = GetStripDataFromStripIndex(stripIndex,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n\t\tInitStripAttributes(particleIndex, attributes,
|
|
stripData);\r\n\t\t// TODO Change seed to be sure we're deterministic on random
|
|
with strip\r\n#endif\r\n \r\n {\n PositionSphere_0(
|
|
/*inout */attributes.position, /*inout */attributes.seed, /*inout */attributes.direction,
|
|
float3(0, 0, 0), ArcSphere_sphere_radius_a, (float)6.28318548, (float)1);\n
|
|
}\n {\n VelocitySpherical_18C( /*inout */attributes.velocity,
|
|
/*inout */attributes.direction, /*inout */attributes.seed, attributes.position,
|
|
float3(0, 0, 0), (float)15, (float)22, (float)1);\n }\n {\n
|
|
SetAttribute_F0142B34( /*inout */attributes.lifetime, /*inout */attributes.seed,
|
|
(float)0.100000001, (float)0.300000012);\n }\n {\n
|
|
SetAttribute_3278B09C( /*inout */attributes.size, /*inout */attributes.seed,
|
|
(float)0.5, (float)1);\n }\n \n\r\n\t\t\r\n#if VFX_USE_ALIVE_CURRENT\r\n
|
|
if (attributes.alive)\r\n#endif \r\n {\r\n#if USE_DEAD_LIST\r\n\t
|
|
uint deadIndex = deadListIn.DecrementCounter();\r\n uint index =
|
|
deadListIn[deadIndex];\r\n#else\r\n uint index = particleIndex;\r\n#endif\r\n
|
|
attributeBuffer.Store3((index * 0x8 + 0x0) << 2,asuint(attributes.position));\n
|
|
attributeBuffer.Store3((index * 0x4 + 0x2800) << 2,asuint(attributes.velocity));\n
|
|
attributeBuffer.Store((index * 0x1 + 0x3C00) << 2,asuint(attributes.lifetime));\n
|
|
attributeBuffer.Store((index * 0x1 + 0x4100) << 2,asuint(attributes.size));\n
|
|
attributeBuffer.Store((index * 0x8 + 0x3) << 2,uint(attributes.alive));\n
|
|
attributeBuffer.Store((index * 0x8 + 0x4) << 2,asuint(attributes.age));\n
|
|
\n\r\n }\r\n }\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[Core Rays]Update Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_POSITION_CURRENT 1\n#define VFX_USE_VELOCITY_CURRENT
|
|
1\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_MASS_CURRENT 1\n#define
|
|
VFX_USE_ALIVE_CURRENT 1\n#define VFX_USE_AGE_CURRENT 1\n#define VFX_LOCAL_SPACE
|
|
1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float deltaTime_a;\n uint3 PADDING_0;\nCBUFFER_END\n\nstruct Attributes\n{\n
|
|
float3 position;\n float3 velocity;\n float lifetime;\n float mass;\n
|
|
bool alive;\n float age;\n};\n\nstruct SourceAttributes\n{\n};\n\n\n\r\n\r\n#define
|
|
USE_DEAD_LIST (VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer
|
|
attributeBuffer;\r\n\r\n#if USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListOut;\r\n#endif\r\n\r\n#if
|
|
VFX_HAS_INDIRECT_DRAW\r\nRWStructuredBuffer<uint> indirectBuffer;\r\n#endif\r\n\r\n#if
|
|
HAS_STRIPS\r\nRWBuffer<uint> stripDataBuffer;\r\n#endif\r\n\r\n#if VFX_USE_STRIPALIVE_CURRENT\r\nBuffer<uint>
|
|
attachedStripDataBuffer;\r\n#endif\r\n\r\nCBUFFER_START(updateParams)\r\n
|
|
uint nbMax;\r\n\tuint dispatchWidth;\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
Turbulence_18D(float3 position, inout float3 velocity, float mass, float4x4
|
|
InvFieldTransform, float4x4 FieldTransform, float Intensity, float Drag, float
|
|
frequency, int octaves, float roughness, float lacunarity, float deltaTime)
|
|
/*Mode:Relative NoiseType:Value */\n{\n float3 vectorFieldCoord = mul(InvFieldTransform,
|
|
float4(position,1.0f)).xyz;\n \n float3 value = GenerateValueCurlNoise(vectorFieldCoord
|
|
+ 0.5f, frequency, octaves, roughness, lacunarity);\n value = mul(FieldTransform,float4(value,0.0f)).xyz
|
|
* Intensity;\n \n velocity += (value - velocity) * min(1.0f,Drag * deltaTime
|
|
/ mass);\n}\nvoid EulerIntegration(inout float3 position, float3 velocity,
|
|
float deltaTime)\n{\n position += velocity * deltaTime;\n}\nvoid Age(inout
|
|
float age, float deltaTime)\n{\n age += deltaTime;\n}\nvoid Reap(float age,
|
|
float lifetime, inout bool alive)\n{\n if(age > lifetime) { alive = false;
|
|
}\n}\n\n\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n\tuint
|
|
id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP + groupId.y * dispatchWidth
|
|
* NB_THREADS_PER_GROUP;\r\n\tuint index = id;\r\n\tif (id < nbMax)\r\n\t{\r\n
|
|
Attributes attributes = (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\r\n\r\n#if VFX_USE_ALIVE_CURRENT\r\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x8 + 0x3) << 2));\n\t\t\n\r\n\t\tif (attributes.alive)\r\n\t\t{\r\n\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x0) << 2));\n\t\t\tattributes.velocity
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x2800) << 2));\n\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x3C00) << 2));\n\t\t\tattributes.mass
|
|
= (float)1;\n\t\t\tattributes.age = asfloat(attributeBuffer.Load((index * 0x8
|
|
+ 0x4) << 2));\n\t\t\t\n\r\n\r\n// Initialize built-in needed attributes\r\n#if
|
|
VFX_USE_OLDPOSITION_CURRENT\r\n\t\t\tattributes.oldPosition = attributes.position;\r\n#endif\r\n#if
|
|
HAS_STRIPS\r\n const StripData stripData = GetStripDataFromParticleIndex(index,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n InitStripAttributes(index, attributes,
|
|
stripData);\r\n#endif\r\n\t\t\t\r\n\t\t\t{\n\t\t\t Turbulence_18D(attributes.position,
|
|
/*inout */attributes.velocity, attributes.mass, float4x4(2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,1),
|
|
float4x4(0.5,0,0,0,0,0.5,0,0,0,0,0.5,0,0,0,0,1), (float)15, (float)5, (float)1.5,
|
|
(int)1, (float)1, (float)2, deltaTime_a);\n\t\t\t}\n\t\t\tEulerIntegration(
|
|
/*inout */attributes.position, attributes.velocity, deltaTime_a);\n\t\t\tAge(
|
|
/*inout */attributes.age, deltaTime_a);\n\t\t\tReap(attributes.age, attributes.lifetime,
|
|
/*inout */attributes.alive);\n\t\t\t\n\r\n\r\n\t\t\tif (attributes.alive)\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store3((index
|
|
* 0x8 + 0x0) << 2,asuint(attributes.position));\n\t\t\t\tattributeBuffer.Store3((index
|
|
* 0x4 + 0x2800) << 2,asuint(attributes.velocity));\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x8 + 0x4) << 2,asuint(attributes.age));\n\t\t\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\t\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n\r\n#if HAS_STRIPS\t\t\t\r\n\t\t\t\tuint relativeIndexInStrip
|
|
= GetRelativeIndex(index, stripData);\r\n\t\t\t\tInterlockedMin(STRIP_DATA(STRIP_MIN_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n\t\t\t\tInterlockedMax(STRIP_DATA(STRIP_MAX_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n#endif\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x8 + 0x3) << 2,uint(attributes.alive));\n\t\t\t\t\n\r\n#if USE_DEAD_LIST
|
|
&& !VFX_USE_STRIPALIVE_CURRENT\r\n\t\t\t\tuint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n#endif\r\n\t\t\t}\r\n\t\t}\r\n#if USE_DEAD_LIST && VFX_USE_STRIPALIVE_CURRENT\r\n
|
|
else if (attributes.stripAlive)\r\n {\r\n if (STRIP_DATA_X(attachedStripDataBuffer,
|
|
STRIP_MIN_ALIVE, index) == ~1) // Attached strip is no longer alive, recycle
|
|
the particle \r\n {\r\n uint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n attributes.stripAlive = false;\r\n
|
|
\r\n } \r\n }\r\n#endif\r\n#else\r\n\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x0) << 2));\n\t\tattributes.velocity
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x2800) << 2));\n\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x3C00) << 2));\n\t\tattributes.mass
|
|
= (float)1;\n\t\tattributes.alive = (attributeBuffer.Load((index * 0x8 + 0x3)
|
|
<< 2));\n\t\tattributes.age = asfloat(attributeBuffer.Load((index * 0x8 + 0x4)
|
|
<< 2));\n\t\t\n\r\n\t\t\r\n#if VFX_USE_OLDPOSITION_CURRENT\r\n\t\tattributes.oldPosition
|
|
= attributes.position;\r\n#endif\r\n#if HAS_STRIPS\r\n const StripData
|
|
stripData = GetStripDataFromParticleIndex(index, PARTICLE_PER_STRIP_COUNT);\r\n
|
|
InitStripAttributes(index, attributes, stripData);\r\n#endif\r\n\t\t\r\n\t\t{\n\t\t
|
|
Turbulence_18D(attributes.position, /*inout */attributes.velocity, attributes.mass,
|
|
float4x4(2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,1), float4x4(0.5,0,0,0,0,0.5,0,0,0,0,0.5,0,0,0,0,1),
|
|
(float)15, (float)5, (float)1.5, (int)1, (float)1, (float)2, deltaTime_a);\n\t\t}\n\t\tEulerIntegration(
|
|
/*inout */attributes.position, attributes.velocity, deltaTime_a);\n\t\tAge(
|
|
/*inout */attributes.age, deltaTime_a);\n\t\tReap(attributes.age, attributes.lifetime,
|
|
/*inout */attributes.alive);\n\t\t\n\r\n\t\tattributeBuffer.Store3((index *
|
|
0x8 + 0x0) << 2,asuint(attributes.position));\n\t\tattributeBuffer.Store3((index
|
|
* 0x4 + 0x2800) << 2,asuint(attributes.velocity));\n\t\tattributeBuffer.Store((index
|
|
* 0x8 + 0x3) << 2,uint(attributes.alive));\n\t\tattributeBuffer.Store((index
|
|
* 0x8 + 0x4) << 2,asuint(attributes.age));\n\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n#endif\r\n\t}\r\n}\r\n"
|
|
- compute: 0
|
|
name: '[Core Rays]Output Particle Quad'
|
|
source: "Shader \"Hidden/VFX/ShipCore-NucleusCore/Core Rays/Output Particle Quad\"\n{\r\n\tSubShader\r\n\t{\t\r\n\t\tCull
|
|
Off\r\n\t\t\r\n\t\tTags { \"Queue\"=\"Transparent+0\" \"IgnoreProjector\"=\"True\"
|
|
\"RenderType\"=\"Transparent\" }\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tBlend
|
|
SrcAlpha One \n\t\tZTest LEqual\n\t\tZWrite Off\n\t\tCull Off\n\t\t\n\t\n\t\t\t\n\t\tHLSLINCLUDE\n\t\t\n\t\t#define
|
|
NB_THREADS_PER_GROUP 64\n\t\t#define HAS_ATTRIBUTES 1\n\t\t#define VFX_PASSDEPTH_ACTUAL
|
|
(0)\n\t\t#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n\t\t#define VFX_PASSDEPTH_SELECTION
|
|
(2)\n\t\t#define VFX_USE_POSITION_CURRENT 1\n\t\t#define VFX_USE_LIFETIME_CURRENT
|
|
1\n\t\t#define VFX_USE_SIZE_CURRENT 1\n\t\t#define VFX_USE_COLOR_CURRENT 1\n\t\t#define
|
|
VFX_USE_ALPHA_CURRENT 1\n\t\t#define VFX_USE_ALIVE_CURRENT 1\n\t\t#define VFX_USE_AXISX_CURRENT
|
|
1\n\t\t#define VFX_USE_AXISY_CURRENT 1\n\t\t#define VFX_USE_AXISZ_CURRENT 1\n\t\t#define
|
|
VFX_USE_ANGLEX_CURRENT 1\n\t\t#define VFX_USE_ANGLEY_CURRENT 1\n\t\t#define
|
|
VFX_USE_ANGLEZ_CURRENT 1\n\t\t#define VFX_USE_PIVOTX_CURRENT 1\n\t\t#define
|
|
VFX_USE_PIVOTY_CURRENT 1\n\t\t#define VFX_USE_PIVOTZ_CURRENT 1\n\t\t#define
|
|
VFX_USE_SCALEX_CURRENT 1\n\t\t#define VFX_USE_SCALEY_CURRENT 1\n\t\t#define
|
|
VFX_USE_SCALEZ_CURRENT 1\n\t\t#define VFX_USE_AGE_CURRENT 1\n\t\t#define VFX_COLORMAPPING_DEFAULT
|
|
1\n\t\t#define IS_TRANSPARENT_PARTICLE 1\n\t\t#define USE_SOFT_PARTICLE 1\n\t\t#define
|
|
VFX_BLENDMODE_ADD 1\n\t\t#define VFX_BYPASS_EXPOSURE 1\n\t\t#define VFX_PRIMITIVE_QUAD
|
|
1\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t#define
|
|
VFX_LOCAL_SPACE 1\n\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\t\t\n\n\t\tCBUFFER_START(parameters)\n\t\t
|
|
float4 Size_b;\n\t\t float3 uniform_a;\n\t\t uint PADDING_0;\n\t\t
|
|
float3 uniform_b;\n\t\t uint PADDING_1;\n\t\tCBUFFER_END\n\t\t\n\t\tstruct
|
|
Attributes\n\t\t{\n\t\t float3 position;\n\t\t float lifetime;\n\t\t
|
|
float size;\n\t\t float3 color;\n\t\t float alpha;\n\t\t bool alive;\n\t\t
|
|
float3 axisX;\n\t\t float3 axisY;\n\t\t float3 axisZ;\n\t\t float
|
|
angleX;\n\t\t float angleY;\n\t\t float angleZ;\n\t\t float pivotX;\n\t\t
|
|
float pivotY;\n\t\t float pivotZ;\n\t\t float scaleX;\n\t\t float
|
|
scaleY;\n\t\t float scaleZ;\n\t\t float age;\n\t\t};\n\t\t\n\t\tstruct
|
|
SourceAttributes\n\t\t{\n\t\t};\n\t\t\n\t\tTexture2D mainTexture;\n\t\tSamplerState
|
|
samplermainTexture;\n\t\tfloat4 mainTexture_TexelSize;\n\t\t\n\t\t\n\n\t\t\n\t\t#define
|
|
VFX_NEEDS_COLOR_INTERPOLATOR (VFX_USE_COLOR_CURRENT || VFX_USE_ALPHA_CURRENT)\n\t\t#if
|
|
HAS_STRIPS\n\t\t#define VFX_OPTIONAL_INTERPOLATION \n\t\t#else\n\t\t#define
|
|
VFX_OPTIONAL_INTERPOLATION nointerpolation\n\t\t#endif\n\t\t\n\t\tByteAddressBuffer
|
|
attributeBuffer;\t\n\t\t\n\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\tStructuredBuffer<uint>
|
|
indirectBuffer;\t\n\t\t#endif\t\n\t\t\n\t\t#if USE_DEAD_LIST_COUNT\n\t\tByteAddressBuffer
|
|
deadListCount;\n\t\t#endif\n\t\t\n\t\t#if HAS_STRIPS\n\t\tBuffer<uint> stripDataBuffer;\n\t\t#endif\n\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD || USE_MOTION_VECTORS_PASS\n\t\tByteAddressBuffer
|
|
elementToVFXBufferPrevious;\n\t\t#endif\n\t\t\n\t\tCBUFFER_START(outputParams)\n\t\t\tfloat
|
|
nbMax;\n\t\t\tfloat systemSeed;\n\t\tCBUFFER_END\n\t\t\n\t\t// Helper macros
|
|
to always use a valid instanceID\n\t\t#if defined(UNITY_STEREO_INSTANCING_ENABLED)\n\t\t\t#define
|
|
VFX_DECLARE_INSTANCE_ID UNITY_VERTEX_INPUT_INSTANCE_ID\n\t\t\t#define VFX_GET_INSTANCE_ID(i)
|
|
unity_InstanceID\n\t\t#else\n\t\t\t#define VFX_DECLARE_INSTANCE_ID uint
|
|
instanceID : SV_InstanceID;\n\t\t\t#define VFX_GET_INSTANCE_ID(i) i.instanceID\n\t\t#endif\n\t\t\n\t\tENDHLSL\n\t\t\n\r\n\t\tPass\n\t\t{\t\t\n\t\t\tTags
|
|
{ \"LightMode\"=\"SceneSelectionPass\" }\n\t\t\n\t\t\tZWrite On\n\t\t\tBlend
|
|
Off\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#define VFX_PASSDEPTH VFX_PASSDEPTH_SELECTION\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos : SV_POSITION;\n\t\t\t\t#if
|
|
USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if USE_ALPHA_TEST || USE_FLIPBOOK_INTERPOLATION
|
|
|| VFX_USE_ALPHA_CURRENT\n\t\t\t\t// x: alpha threshold\n\t\t\t\t// y: frame
|
|
blending factor\n\t\t\t\t// z: alpha\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION float3
|
|
builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\tfloat4 cPosPrevious :
|
|
TEXCOORD3;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD4;\n\t\t\t\t#endif\n\t\t\t
|
|
\n\t\t\t #if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t float3 posWS : TEXCOORD5;\n\t\t\t
|
|
#endif\n\t\t\t \n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t\t#define VFX_VARYING_POSCS pos\n\t\t\t#define
|
|
VFX_VARYING_ALPHA builtInInterpolants.z\n\t\t\t#define VFX_VARYING_ALPHATHRESHOLD
|
|
builtInInterpolants.x\n\t\t\t#define VFX_VARYING_FRAMEBLEND builtInInterpolants.y\n\t\t\t#define
|
|
VFX_VARYING_MOTIONVECTORSCALE builtInInterpolants2.xy\n\t\t\t#define VFX_VARYING_UV
|
|
uv\n\t\t\t\n\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t#define VFX_VARYING_POSWS
|
|
posWS\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_MOTION_VECTORS\n\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_DEPTH_ONLY\n\t\t\t#endif\n\t\t\t\n\t\t\t#if !(defined(VFX_VARYING_PS_INPUTS)
|
|
&& defined(VFX_VARYING_POSCS))\n\t\t\t#error VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS
|
|
and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
SetAttribute_FDD06EC7(inout float3 color, float3 Color) /*attribute:color Composition:Overwrite
|
|
Source:Slot Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t color = Color;\n\t\t\t}\n\t\t\tvoid
|
|
AttributeFromCurve_7DF18695(inout float size, float age, float lifetime, float4
|
|
Size) /*attribute:size Composition:Multiply AlphaComposition:Overwrite SampleMode:OverLife
|
|
Mode:PerComponent ColorMode:ColorAndAlpha channels:X */\n\t\t\t{\n\t\t\t
|
|
float t = age / lifetime;\n\t\t\t float value = 0.0f;\n\t\t\t value =
|
|
SampleCurve(Size, t);\n\t\t\t size *= value;\n\t\t\t}\n\t\t\tvoid ConnectTarget_0(inout
|
|
float3 axisX, inout float3 axisY, inout float3 axisZ, inout float3 position,
|
|
inout float pivotY, float size, inout float scaleY, float3 TargetPosition,
|
|
float PivotShift) /*Orientation:Camera */\n\t\t\t{\n\t\t\t \n\t\t\t axisY
|
|
= TargetPosition-position;\n\t\t\t float len = length(axisY);\n\t\t\t
|
|
scaleY = len / size;\n\t\t\t axisY /= len;\n\t\t\t axisZ = position -
|
|
GetViewVFXPosition();\n\t\t\t axisX = normalize(cross(axisY,axisZ));\n\t\t\t
|
|
axisZ = cross(axisX,axisY);\n\t\t\t \n\t\t\t position = lerp(position,
|
|
TargetPosition, PivotShift);\n\t\t\t pivotY = PivotShift - 0.5;\n\t\t\t
|
|
\n\t\t\t}\n\t\t\tvoid SetAttribute_C707D62A(inout float3 position, float3 Position)
|
|
/*attribute:position Composition:Add Source:Slot Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t
|
|
position += Position;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if defined(HAS_STRIPS)
|
|
&& !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error VFX_PRIMITIVE_QUAD must be defined
|
|
when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x0) << 2));\n\t\t\t\t\n\n\t\t\t\treturn
|
|
attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3 GetStripTangent(float3
|
|
currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.position = asfloat(attributeBuffer.Load3((index
|
|
* 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x3C00) << 2));\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x4100) << 2));\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x4) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x8 + 0x3) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x3C00) << 2));\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x4100) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x4) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t{\n\t\t\t\t
|
|
SetAttribute_FDD06EC7( /*inout */attributes.color, float3(2.52425838, 3.30234385,
|
|
4.26666689));\n\t\t\t\t}\n\t\t\t\tAttributeFromCurve_7DF18695( /*inout */attributes.size,
|
|
attributes.age, attributes.lifetime, Size_b);\n\t\t\t\t{\n\t\t\t\t ConnectTarget_0(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ,
|
|
/*inout */attributes.position, /*inout */attributes.pivotY, attributes.size,
|
|
/*inout */attributes.scaleY, float3(0, 0, 0), (float)1);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t
|
|
float3 tmp_bd = GeneratePerlinCurlNoise(uniform_a, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t float3 tmp_be = tmp_bd
|
|
* uniform_b;\n\t\t\t\t SetAttribute_C707D62A( /*inout */attributes.position,
|
|
tmp_be);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if !HAS_STRIPS\n\t\t\t\tif
|
|
(!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\tfloat invSoftParticlesFadeDistance
|
|
= (float)0;\n\t\t\t\t\t\t{\n\t\t\t\t\t\t \n\t\t\t\t\t\t invSoftParticlesFadeDistance
|
|
= (float)0.200000003;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#define
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 1\n\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t#ifndef
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t#define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH
|
|
0\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\tint _ObjectId;\n\t\t\t\t\tint
|
|
_PassValue;\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#pragma fragment frag\n\t\t\t\t\tvoid
|
|
frag(ps_input i\n\t\t\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t
|
|
#ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t // We need the depth color as SV_Target0
|
|
for alpha to coverage\n\t\t\t\t\t , out float4 outDepthColor : SV_Target0\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target1\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
// When no MSAA, the motion vector is always the first buffer\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t #ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t
|
|
, out float4 outDepthColor : SV_Target0\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
, out float4 dummy : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t , out float4 outSelection : SV_Target0\n\t\t\t\t\t#endif\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\t
|
|
#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t
|
|
float alpha = OUTSG.;\n\t\t\t\t\t #else\n\t\t\t\t\t float alpha =
|
|
VFXGetFragmentColor(i).a;\n\t\t\t\t\t\t\t#if VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t\t\t\talpha
|
|
*= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t
|
|
#endif\n\t\t\t\t\t\tVFXClipFragmentColor(alpha,i);\n\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\toutDepthColor = i.VFX_VARYING_POSCS.z;\n\t\t\t\t\t\t\t#if
|
|
VFX_USE_ALPHA_TO_MASK\n\t\t\t\t\t\t\t\toutDepthColor.a = alpha;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat2
|
|
velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w) -
|
|
(i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\t\t\t\tVFXEncodeMotionVector(velocity
|
|
* 0.5f, encodedMotionVector);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\toutMotionVector
|
|
= encodedMotionVector;\n\t\t\t\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t\t\toutSelection
|
|
= float4(_ObjectId, _PassValue, 1.0, 1.0);\n\t\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t\t\t#ifndef WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\t\tdummy
|
|
= (float4)0;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t#error
|
|
VFX_PASSDEPTH undefined \n\t\t\t\t\t\t#endif\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\n\t\t\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t\t\r\n\t\t//
|
|
Forward pass\n\t\tPass\n\t\t{\t\t\n\t\t\tTags { \"LightMode\"=\"ForwardOnly\"
|
|
}\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#pragma target 4.5\n\t\t\t#pragma multi_compile
|
|
_ DEBUG_DISPLAY\n\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos :
|
|
SV_POSITION;\n\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_COLOR_INTERPOLATOR\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 color : COLOR0;\n\t\t\t\t#endif\n\t\t\t\t#if USE_SOFT_PARTICLE || USE_ALPHA_TEST
|
|
|| USE_FLIPBOOK_INTERPOLATION || USE_EXPOSURE_WEIGHT || WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t//
|
|
x: inverse soft particles fade distance\n\t\t\t\t// y: alpha threshold\n\t\t\t\t//
|
|
z: frame blending factor\n\t\t\t\t// w: exposure weight\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t\tfloat3
|
|
posWS : TEXCOORD3;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
cPosPrevious : TEXCOORD4;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD5;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t\t\tfloat3 normal : TEXCOORD6;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t\t\tfloat3 tangent : TEXCOORD7;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t
|
|
\n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\tstruct
|
|
ps_output\n\t\t\t{\n\t\t\t\tfloat4 color : SV_Target0;\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
outMotionVector : SV_Target1;\n\t\t#endif\n\t\t\t};\n\t\t\n\t\t#define VFX_VARYING_PS_INPUTS
|
|
ps_input\n\t\t#define VFX_VARYING_POSCS pos\n\t\t#define VFX_VARYING_COLOR
|
|
color.rgb\n\t\t#define VFX_VARYING_ALPHA color.a\n\t\t#define VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
builtInInterpolants.x\n\t\t#define VFX_VARYING_ALPHATHRESHOLD builtInInterpolants.y\n\t\t#define
|
|
VFX_VARYING_FRAMEBLEND builtInInterpolants.z\n\t\t#define VFX_VARYING_MOTIONVECTORSCALE
|
|
builtInInterpolants2.xy\n\t\t#define VFX_VARYING_UV uv\n\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t#define
|
|
VFX_VARYING_POSWS posWS\n\t\t#endif\n\t\t#if USE_EXPOSURE_WEIGHT\n\t\t#define
|
|
VFX_VARYING_EXPOSUREWEIGHT builtInInterpolants.w\n\t\t#endif\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t#endif\n\t\t\n\t\t#define SHADERPASS SHADERPASS_FORWARD_UNLIT\n\t\t\t\n\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t#define VFX_VARYING_NORMAL normal\n\t\t#endif\n\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t#define VFX_VARYING_TANGENT tangent\n\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
!(defined(VFX_VARYING_PS_INPUTS) && defined(VFX_VARYING_POSCS))\n\t\t\t#error
|
|
VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
SetAttribute_FDD06EC7(inout float3 color, float3 Color) /*attribute:color Composition:Overwrite
|
|
Source:Slot Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t color = Color;\n\t\t\t}\n\t\t\tvoid
|
|
AttributeFromCurve_7DF18695(inout float size, float age, float lifetime, float4
|
|
Size) /*attribute:size Composition:Multiply AlphaComposition:Overwrite SampleMode:OverLife
|
|
Mode:PerComponent ColorMode:ColorAndAlpha channels:X */\n\t\t\t{\n\t\t\t
|
|
float t = age / lifetime;\n\t\t\t float value = 0.0f;\n\t\t\t value =
|
|
SampleCurve(Size, t);\n\t\t\t size *= value;\n\t\t\t}\n\t\t\tvoid ConnectTarget_0(inout
|
|
float3 axisX, inout float3 axisY, inout float3 axisZ, inout float3 position,
|
|
inout float pivotY, float size, inout float scaleY, float3 TargetPosition,
|
|
float PivotShift) /*Orientation:Camera */\n\t\t\t{\n\t\t\t \n\t\t\t axisY
|
|
= TargetPosition-position;\n\t\t\t float len = length(axisY);\n\t\t\t
|
|
scaleY = len / size;\n\t\t\t axisY /= len;\n\t\t\t axisZ = position -
|
|
GetViewVFXPosition();\n\t\t\t axisX = normalize(cross(axisY,axisZ));\n\t\t\t
|
|
axisZ = cross(axisX,axisY);\n\t\t\t \n\t\t\t position = lerp(position,
|
|
TargetPosition, PivotShift);\n\t\t\t pivotY = PivotShift - 0.5;\n\t\t\t
|
|
\n\t\t\t}\n\t\t\tvoid SetAttribute_C707D62A(inout float3 position, float3 Position)
|
|
/*attribute:position Composition:Add Source:Slot Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t
|
|
position += Position;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if defined(HAS_STRIPS)
|
|
&& !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error VFX_PRIMITIVE_QUAD must be defined
|
|
when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x0) << 2));\n\t\t\t\t\n\n\t\t\t\treturn
|
|
attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3 GetStripTangent(float3
|
|
currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.position = asfloat(attributeBuffer.Load3((index
|
|
* 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x3C00) << 2));\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x4100) << 2));\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x4) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x8 + 0x3) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x3C00) << 2));\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x4100) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x4) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t{\n\t\t\t\t
|
|
SetAttribute_FDD06EC7( /*inout */attributes.color, float3(2.52425838, 3.30234385,
|
|
4.26666689));\n\t\t\t\t}\n\t\t\t\tAttributeFromCurve_7DF18695( /*inout */attributes.size,
|
|
attributes.age, attributes.lifetime, Size_b);\n\t\t\t\t{\n\t\t\t\t ConnectTarget_0(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ,
|
|
/*inout */attributes.position, /*inout */attributes.pivotY, attributes.size,
|
|
/*inout */attributes.scaleY, float3(0, 0, 0), (float)1);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t
|
|
float3 tmp_bd = GeneratePerlinCurlNoise(uniform_a, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t float3 tmp_be = tmp_bd
|
|
* uniform_b;\n\t\t\t\t SetAttribute_C707D62A( /*inout */attributes.position,
|
|
tmp_be);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if !HAS_STRIPS\n\t\t\t\tif
|
|
(!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\tfloat invSoftParticlesFadeDistance
|
|
= (float)0;\n\t\t\t\t\t\t{\n\t\t\t\t\t\t \n\t\t\t\t\t\t invSoftParticlesFadeDistance
|
|
= (float)0.200000003;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t\t\n\t\t#endif\n\t\t\t\t\n\t\t\t#pragma fragment frag\n\t\t\tps_output
|
|
frag(ps_input i)\n\t\t\t{\n\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\tps_output
|
|
o = (ps_output)0;\n\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\n\t\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\t\t\t\t#if USE_DOUBLE_SIDED\n\t\t\t\t\t\t\tconst
|
|
float faceMul = frontFace ? 1.0f : -1.0f;\n\t\t\t\t\t\t\t#else\n\t\t\t\t\t\t\tconst
|
|
float faceMul = 1.0f;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3
|
|
normalWS = i.VFX_VARYING_NORMAL * faceMul;\n\t\t\t\t\t\t\tconst VFXUVData uvData
|
|
= GetUVData(i);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_TANGENT\n\t\t\t\t\t\t\tfloat3
|
|
tangentWS = i.VFX_VARYING_TANGENT;\n\t\t\t\t\t\t\tfloat3 bitangentWS = cross(i.VFX_VARYING_TANGENT,i.VFX_VARYING_NORMAL);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_BENTFACTORS) && USE_NORMAL_BENDING\t\n\t\t\t\t\t\t\tfloat3
|
|
bentFactors = float3(i.VFX_VARYING_BENTFACTORS.xy,sqrt(1.0f - dot(i.VFX_VARYING_BENTFACTORS,i.VFX_VARYING_BENTFACTORS)));\n\t\t\t\t\t\t\tnormalWS
|
|
= tangentWS * bentFactors.x + bitangentWS * bentFactors.y + normalWS * bentFactors.z;\n\t\t\t\t\t\t\ttangentWS
|
|
= normalize(cross(normalWS,bitangentWS));\n\t\t\t\t\t\t\tbitangentWS = cross(tangentWS,normalWS);\n\t\t\t\t\t\t\ttangentWS
|
|
*= faceMul;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3x3 tbn
|
|
= float3x3(tangentWS,bitangentWS,normalWS);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
USE_NORMAL_MAP\n\t\t\t\t\t\t\tfloat3 n = SampleNormalMap(VFX_SAMPLER(normalMap),uvData);\n\t\t\t\t\t\t\tfloat
|
|
normalScale = 1.0f;\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_NORMALSCALE\n\t\t\t\t\t\t\tnormalScale
|
|
= i.VFX_VARYING_NORMALSCALE;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\tnormalWS
|
|
= normalize(lerp(normalWS,mul(n,tbn),normalScale));\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t \n\t\t \n\t\t \n\t\t \n\t\t
|
|
#if HAS_SHADERGRAPH_PARAM_COLOR\n\t\t o.color.rgb = OUTSG..rgb;\n\t\t
|
|
#endif\n\t\t \n\t\t #if HAS_SHADERGRAPH_PARAM_ALPHA \n\t\t
|
|
o.color.a = OUTSG.;\n\t\t #endif\n\t\t#else\n\t\t\t\n\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR VFXGetTextureColor(VFX_SAMPLER(mainTexture),i)\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tfloat4
|
|
color = VFXGetFragmentColor(i);\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifndef VFX_TEXTURE_COLOR\n\t\t\t\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR float4(1.0,1.0,1.0,1.0)\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_DEFAULT\n\t\t\t\t\t\t\to.color = color * VFX_TEXTURE_COLOR;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_GRADIENTMAPPED\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\to.color = SampleGradient(gradient,
|
|
VFX_TEXTURE_COLOR.a * color.a) * float4(color.rgb,1.0);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\to.color
|
|
= VFXApplyPreExposure(o.color, i);\n\t\t#endif\n\t\t\n\t\t\t\to.color = VFXApplyFog(o.color,i);\n\t\t\t\tVFXClipFragmentColor(o.color.a,i);\n\t\t\t\to.color.a
|
|
= saturate(o.color.a);\n\t\t\t\to.color = VFXTransformFinalColor(o.color);\n\t\t\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t\n\t\t\t\t\t\tfloat2 velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w)
|
|
- (i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\tVFXEncodeMotionVector(velocity * 0.5f,
|
|
encodedMotionVector);\n\t\t\t\t\t\t\n\t\t\t\to.outMotionVector = encodedMotionVector;\n\t\t
|
|
o.outMotionVector.a = o.color.a < i.VFX_VARYING_ALPHATHRESHOLD ? 0.0f : 1.0f;
|
|
//Independant clipping for motion vector pass\n\t\t#endif\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t}\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[Core Glow]Initialize Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_ALIVE_CURRENT
|
|
1\n#define VFX_USE_AGE_CURRENT 1\n#define VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\n\nstruct
|
|
Attributes\n{\n float lifetime;\n bool alive;\n float age;\n};\n\nstruct
|
|
SourceAttributes\n{\n};\n\n\n\r\n\r\n#define USE_DEAD_LIST (VFX_USE_ALIVE_CURRENT
|
|
&& !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer attributeBuffer;\r\nByteAddressBuffer
|
|
sourceAttributeBuffer;\r\n\r\nCBUFFER_START(initParams)\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
uint nbSpawned;\t\t\t\t\t// Numbers of particle spawned\r\n uint spawnIndex;\t\t\t\t//
|
|
Index of the first particle spawned\r\n uint dispatchWidth;\r\n#else\r\n
|
|
uint offsetInAdditionalOutput;\r\n\tuint nbMax;\r\n#endif\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#if
|
|
USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListIn;\r\nByteAddressBuffer
|
|
deadListCount; // This is bad to use a SRV to fetch deadList count but Unity
|
|
API currently prevent from copying to CB\r\n#endif\r\n\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\nStructuredBuffer<uint>
|
|
eventList;\r\nByteAddressBuffer inputAdditional;\r\n#endif\r\n\r\n#if HAS_STRIPS\r\nRWBuffer<uint>
|
|
stripDataBuffer;\r\n#endif\r\n\r\n#include \"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
SetAttribute_F0142CB9(inout float lifetime, float Lifetime) /*attribute:lifetime
|
|
Composition:Overwrite Source:Slot Random:Off channels:XYZ */\n{\n lifetime
|
|
= Lifetime;\n}\n\n\r\n\r\n// Due to a bug in HLSL compiler, disable spurious
|
|
\"unitialized variable\" due to mid function return statement\r\n#pragma warning(push)\r\n#pragma
|
|
warning(disable : 4000)\r\n#if HAS_STRIPS\r\nbool GetParticleIndex(inout uint
|
|
particleIndex, uint stripIndex)\r\n{\r\n\tuint relativeIndex;\r\n\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX,
|
|
stripIndex), 1, relativeIndex);\r\n\tif (relativeIndex >= PARTICLE_PER_STRIP_COUNT)
|
|
// strip is full\r\n\t{\r\n\t\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX,
|
|
stripIndex), -1); // Remove previous increment\r\n\t\treturn false;\r\n\t}\r\n\r\n\tparticleIndex
|
|
= stripIndex * PARTICLE_PER_STRIP_COUNT + ((STRIP_DATA(STRIP_FIRST_INDEX, stripIndex)
|
|
+ relativeIndex) % PARTICLE_PER_STRIP_COUNT);\r\n return true;\r\n}\r\n#endif\r\n#pragma
|
|
warning(pop)\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n
|
|
uint id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP;\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
id += groupId.y * dispatchWidth * NB_THREADS_PER_GROUP;\r\n#endif\r\n\r\n#if
|
|
VFX_USE_SPAWNER_FROM_GPU\r\n uint maxThreadId = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 0) << 2);\r\n uint currentSpawnIndex = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 1) << 2) - maxThreadId;\r\n#else\r\n uint maxThreadId = nbSpawned;\r\n
|
|
uint currentSpawnIndex = spawnIndex;\r\n#endif\r\n\r\n#if USE_DEAD_LIST\r\n
|
|
maxThreadId = min(maxThreadId, deadListCount.Load(0x0));\r\n#elif VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
maxThreadId = min(maxThreadId, nbMax); //otherwise, nbSpawned already clamped
|
|
on CPU\r\n#endif\r\n\r\n if (id < maxThreadId)\r\n {\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
int sourceIndex = eventList[id];\r\n#endif\r\n\t\tuint particleIndex = id +
|
|
currentSpawnIndex;\r\n\t\t\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n int
|
|
sourceIndex = 0;\n /*//Loop with 1 iteration generate a wrong IL Assembly
|
|
(and actually, useless code)\n uint currentSumSpawnCount = 0u;\n
|
|
for (sourceIndex=0; sourceIndex<1; sourceIndex++)\n {\n currentSumSpawnCount
|
|
+= uint(asfloat(sourceAttributeBuffer.Load((sourceIndex * 0x1 + 0x0) << 2)));\n
|
|
if (id < currentSumSpawnCount)\n {\n break;\n
|
|
}\n }\n */\n \n\r\n#endif\r\n\r\n\t\tAttributes attributes
|
|
= (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes = (SourceAttributes)0;\r\n\t\t\r\n
|
|
attributes.lifetime = (float)1;\n attributes.alive = (bool)true;\n
|
|
attributes.age = (float)0;\n \n\r\n#if VFX_USE_PARTICLEID_CURRENT\r\n
|
|
attributes.particleId = particleIndex;\r\n#endif\r\n#if VFX_USE_SEED_CURRENT\r\n
|
|
attributes.seed = WangHash(particleIndex ^ systemSeed);\r\n#endif\r\n#if VFX_USE_SPAWNINDEX_CURRENT\r\n
|
|
attributes.spawnIndex = id;\r\n#endif\r\n#if HAS_STRIPS\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n\t\t\r\n#else\r\n
|
|
uint stripIndex = sourceIndex;\r\n#endif\r\n\t\tstripIndex = min(stripIndex,
|
|
STRIP_COUNT);\r\n\r\n if (!GetParticleIndex(particleIndex, stripIndex))\r\n
|
|
return;\r\n\r\n const StripData stripData = GetStripDataFromStripIndex(stripIndex,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n\t\tInitStripAttributes(particleIndex, attributes,
|
|
stripData);\r\n\t\t// TODO Change seed to be sure we're deterministic on random
|
|
with strip\r\n#endif\r\n \r\n {\n SetAttribute_F0142CB9(
|
|
/*inout */attributes.lifetime, (float)0.200000003);\n }\n \n\r\n\t\t\r\n#if
|
|
VFX_USE_ALIVE_CURRENT\r\n if (attributes.alive)\r\n#endif \r\n
|
|
{\r\n#if USE_DEAD_LIST\r\n\t uint deadIndex = deadListIn.DecrementCounter();\r\n
|
|
uint index = deadListIn[deadIndex];\r\n#else\r\n uint index = particleIndex;\r\n#endif\r\n
|
|
attributeBuffer.Store((index * 0x1 + 0x0) << 2,asuint(attributes.lifetime));\n
|
|
attributeBuffer.Store((index * 0x2 + 0x20) << 2,uint(attributes.alive));\n
|
|
attributeBuffer.Store((index * 0x2 + 0x21) << 2,asuint(attributes.age));\n
|
|
\n\r\n }\r\n }\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[Core Glow]Update Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_ALIVE_CURRENT
|
|
1\n#define VFX_USE_AGE_CURRENT 1\n#define VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float deltaTime_a;\n uint3 PADDING_0;\nCBUFFER_END\n\nstruct Attributes\n{\n
|
|
float lifetime;\n bool alive;\n float age;\n};\n\nstruct SourceAttributes\n{\n};\n\n\n\r\n\r\n#define
|
|
USE_DEAD_LIST (VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer
|
|
attributeBuffer;\r\n\r\n#if USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListOut;\r\n#endif\r\n\r\n#if
|
|
VFX_HAS_INDIRECT_DRAW\r\nRWStructuredBuffer<uint> indirectBuffer;\r\n#endif\r\n\r\n#if
|
|
HAS_STRIPS\r\nRWBuffer<uint> stripDataBuffer;\r\n#endif\r\n\r\n#if VFX_USE_STRIPALIVE_CURRENT\r\nBuffer<uint>
|
|
attachedStripDataBuffer;\r\n#endif\r\n\r\nCBUFFER_START(updateParams)\r\n
|
|
uint nbMax;\r\n\tuint dispatchWidth;\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
Age(inout float age, float deltaTime)\n{\n age += deltaTime;\n}\nvoid Reap(float
|
|
age, float lifetime, inout bool alive)\n{\n if(age > lifetime) { alive =
|
|
false; }\n}\n\n\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n\tuint
|
|
id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP + groupId.y * dispatchWidth
|
|
* NB_THREADS_PER_GROUP;\r\n\tuint index = id;\r\n\tif (id < nbMax)\r\n\t{\r\n
|
|
Attributes attributes = (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\r\n\r\n#if VFX_USE_ALIVE_CURRENT\r\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x20) << 2));\n\t\t\n\r\n\t\tif (attributes.alive)\r\n\t\t{\r\n\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x21) << 2));\n\t\t\t\n\r\n\r\n//
|
|
Initialize built-in needed attributes\r\n#if VFX_USE_OLDPOSITION_CURRENT\r\n\t\t\tattributes.oldPosition
|
|
= attributes.position;\r\n#endif\r\n#if HAS_STRIPS\r\n const StripData
|
|
stripData = GetStripDataFromParticleIndex(index, PARTICLE_PER_STRIP_COUNT);\r\n
|
|
InitStripAttributes(index, attributes, stripData);\r\n#endif\r\n\t\t\t\r\n\t\t\tAge(
|
|
/*inout */attributes.age, deltaTime_a);\n\t\t\tReap(attributes.age, attributes.lifetime,
|
|
/*inout */attributes.alive);\n\t\t\t\n\r\n\r\n\t\t\tif (attributes.alive)\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x21) << 2,asuint(attributes.age));\n\t\t\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\t\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n\r\n#if HAS_STRIPS\t\t\t\r\n\t\t\t\tuint relativeIndexInStrip
|
|
= GetRelativeIndex(index, stripData);\r\n\t\t\t\tInterlockedMin(STRIP_DATA(STRIP_MIN_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n\t\t\t\tInterlockedMax(STRIP_DATA(STRIP_MAX_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n#endif\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x20) << 2,uint(attributes.alive));\n\t\t\t\t\n\r\n#if USE_DEAD_LIST
|
|
&& !VFX_USE_STRIPALIVE_CURRENT\r\n\t\t\t\tuint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n#endif\r\n\t\t\t}\r\n\t\t}\r\n#if USE_DEAD_LIST && VFX_USE_STRIPALIVE_CURRENT\r\n
|
|
else if (attributes.stripAlive)\r\n {\r\n if (STRIP_DATA_X(attachedStripDataBuffer,
|
|
STRIP_MIN_ALIVE, index) == ~1) // Attached strip is no longer alive, recycle
|
|
the particle \r\n {\r\n uint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n attributes.stripAlive = false;\r\n
|
|
\r\n } \r\n }\r\n#endif\r\n#else\r\n\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x20) << 2));\n\t\tattributes.age =
|
|
asfloat(attributeBuffer.Load((index * 0x2 + 0x21) << 2));\n\t\t\n\r\n\t\t\r\n#if
|
|
VFX_USE_OLDPOSITION_CURRENT\r\n\t\tattributes.oldPosition = attributes.position;\r\n#endif\r\n#if
|
|
HAS_STRIPS\r\n const StripData stripData = GetStripDataFromParticleIndex(index,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n InitStripAttributes(index, attributes,
|
|
stripData);\r\n#endif\r\n\t\t\r\n\t\tAge( /*inout */attributes.age, deltaTime_a);\n\t\tReap(attributes.age,
|
|
attributes.lifetime, /*inout */attributes.alive);\n\t\t\n\r\n\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x20) << 2,uint(attributes.alive));\n\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x21) << 2,asuint(attributes.age));\n\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n#endif\r\n\t}\r\n}\r\n"
|
|
- compute: 0
|
|
name: '[Core Glow]Output Particle Quad'
|
|
source: "Shader \"Hidden/VFX/ShipCore-NucleusCore/Core Glow/Output Particle Quad\"\n{\r\n\tSubShader\r\n\t{\t\r\n\t\tCull
|
|
Off\r\n\t\t\r\n\t\tTags { \"Queue\"=\"Transparent+0\" \"IgnoreProjector\"=\"True\"
|
|
\"RenderType\"=\"Transparent\" }\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tBlend
|
|
SrcAlpha One \n\t\tZTest LEqual\n\t\tZWrite Off\n\t\tCull Off\n\t\t\n\t\n\t\t\t\n\t\tHLSLINCLUDE\n\t\t\n\t\t#define
|
|
NB_THREADS_PER_GROUP 64\n\t\t#define HAS_ATTRIBUTES 1\n\t\t#define VFX_PASSDEPTH_ACTUAL
|
|
(0)\n\t\t#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n\t\t#define VFX_PASSDEPTH_SELECTION
|
|
(2)\n\t\t#define VFX_USE_LIFETIME_CURRENT 1\n\t\t#define VFX_USE_POSITION_CURRENT
|
|
1\n\t\t#define VFX_USE_COLOR_CURRENT 1\n\t\t#define VFX_USE_ALPHA_CURRENT 1\n\t\t#define
|
|
VFX_USE_ALIVE_CURRENT 1\n\t\t#define VFX_USE_AXISX_CURRENT 1\n\t\t#define VFX_USE_AXISY_CURRENT
|
|
1\n\t\t#define VFX_USE_AXISZ_CURRENT 1\n\t\t#define VFX_USE_ANGLEX_CURRENT
|
|
1\n\t\t#define VFX_USE_ANGLEY_CURRENT 1\n\t\t#define VFX_USE_ANGLEZ_CURRENT
|
|
1\n\t\t#define VFX_USE_PIVOTX_CURRENT 1\n\t\t#define VFX_USE_PIVOTY_CURRENT
|
|
1\n\t\t#define VFX_USE_PIVOTZ_CURRENT 1\n\t\t#define VFX_USE_SIZE_CURRENT 1\n\t\t#define
|
|
VFX_USE_SCALEX_CURRENT 1\n\t\t#define VFX_USE_SCALEY_CURRENT 1\n\t\t#define
|
|
VFX_USE_SCALEZ_CURRENT 1\n\t\t#define VFX_USE_AGE_CURRENT 1\n\t\t#define VFX_COLORMAPPING_DEFAULT
|
|
1\n\t\t#define IS_TRANSPARENT_PARTICLE 1\n\t\t#define VFX_BLENDMODE_ADD 1\n\t\t#define
|
|
VFX_BYPASS_EXPOSURE 1\n\t\t#define VFX_PRIMITIVE_QUAD 1\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t#define
|
|
VFX_LOCAL_SPACE 1\n\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\t\t\n\n\t\tCBUFFER_START(parameters)\n\t\t
|
|
float3 Color_b;\n\t\t float Color_a;\n\t\t float3 uniform_a;\n\t\t
|
|
float uniform_c;\n\t\t float3 uniform_b;\n\t\t float uniform_d;\n\t\t
|
|
float uniform_e;\n\t\t float uniform_f;\n\t\t uint2 PADDING_0;\n\t\tCBUFFER_END\n\t\t\n\t\tstruct
|
|
Attributes\n\t\t{\n\t\t float lifetime;\n\t\t float3 position;\n\t\t
|
|
float3 color;\n\t\t float alpha;\n\t\t bool alive;\n\t\t float3 axisX;\n\t\t
|
|
float3 axisY;\n\t\t float3 axisZ;\n\t\t float angleX;\n\t\t float
|
|
angleY;\n\t\t float angleZ;\n\t\t float pivotX;\n\t\t float pivotY;\n\t\t
|
|
float pivotZ;\n\t\t float size;\n\t\t float scaleX;\n\t\t float scaleY;\n\t\t
|
|
float scaleZ;\n\t\t float age;\n\t\t};\n\t\t\n\t\tstruct SourceAttributes\n\t\t{\n\t\t};\n\t\t\n\t\tTexture2D
|
|
mainTexture;\n\t\tSamplerState samplermainTexture;\n\t\tfloat4 mainTexture_TexelSize;\n\t\t\n\t\t\n\n\t\t\n\t\t#define
|
|
VFX_NEEDS_COLOR_INTERPOLATOR (VFX_USE_COLOR_CURRENT || VFX_USE_ALPHA_CURRENT)\n\t\t#if
|
|
HAS_STRIPS\n\t\t#define VFX_OPTIONAL_INTERPOLATION \n\t\t#else\n\t\t#define
|
|
VFX_OPTIONAL_INTERPOLATION nointerpolation\n\t\t#endif\n\t\t\n\t\tByteAddressBuffer
|
|
attributeBuffer;\t\n\t\t\n\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\tStructuredBuffer<uint>
|
|
indirectBuffer;\t\n\t\t#endif\t\n\t\t\n\t\t#if USE_DEAD_LIST_COUNT\n\t\tByteAddressBuffer
|
|
deadListCount;\n\t\t#endif\n\t\t\n\t\t#if HAS_STRIPS\n\t\tBuffer<uint> stripDataBuffer;\n\t\t#endif\n\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD || USE_MOTION_VECTORS_PASS\n\t\tByteAddressBuffer
|
|
elementToVFXBufferPrevious;\n\t\t#endif\n\t\t\n\t\tCBUFFER_START(outputParams)\n\t\t\tfloat
|
|
nbMax;\n\t\t\tfloat systemSeed;\n\t\tCBUFFER_END\n\t\t\n\t\t// Helper macros
|
|
to always use a valid instanceID\n\t\t#if defined(UNITY_STEREO_INSTANCING_ENABLED)\n\t\t\t#define
|
|
VFX_DECLARE_INSTANCE_ID UNITY_VERTEX_INPUT_INSTANCE_ID\n\t\t\t#define VFX_GET_INSTANCE_ID(i)
|
|
unity_InstanceID\n\t\t#else\n\t\t\t#define VFX_DECLARE_INSTANCE_ID uint
|
|
instanceID : SV_InstanceID;\n\t\t\t#define VFX_GET_INSTANCE_ID(i) i.instanceID\n\t\t#endif\n\t\t\n\t\tENDHLSL\n\t\t\n\r\n\t\tPass\n\t\t{\t\t\n\t\t\tTags
|
|
{ \"LightMode\"=\"SceneSelectionPass\" }\n\t\t\n\t\t\tZWrite On\n\t\t\tBlend
|
|
Off\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#define VFX_PASSDEPTH VFX_PASSDEPTH_SELECTION\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos : SV_POSITION;\n\t\t\t\t#if
|
|
USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if USE_ALPHA_TEST || USE_FLIPBOOK_INTERPOLATION
|
|
|| VFX_USE_ALPHA_CURRENT\n\t\t\t\t// x: alpha threshold\n\t\t\t\t// y: frame
|
|
blending factor\n\t\t\t\t// z: alpha\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION float3
|
|
builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\tfloat4 cPosPrevious :
|
|
TEXCOORD3;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD4;\n\t\t\t\t#endif\n\t\t\t
|
|
\n\t\t\t #if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t float3 posWS : TEXCOORD5;\n\t\t\t
|
|
#endif\n\t\t\t \n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t\t#define VFX_VARYING_POSCS pos\n\t\t\t#define
|
|
VFX_VARYING_ALPHA builtInInterpolants.z\n\t\t\t#define VFX_VARYING_ALPHATHRESHOLD
|
|
builtInInterpolants.x\n\t\t\t#define VFX_VARYING_FRAMEBLEND builtInInterpolants.y\n\t\t\t#define
|
|
VFX_VARYING_MOTIONVECTORSCALE builtInInterpolants2.xy\n\t\t\t#define VFX_VARYING_UV
|
|
uv\n\t\t\t\n\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t#define VFX_VARYING_POSWS
|
|
posWS\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_MOTION_VECTORS\n\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_DEPTH_ONLY\n\t\t\t#endif\n\t\t\t\n\t\t\t#if !(defined(VFX_VARYING_PS_INPUTS)
|
|
&& defined(VFX_VARYING_POSCS))\n\t\t\t#error VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS
|
|
and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
AttributeFromCurve_48A86161(inout float3 color, inout float alpha, float age,
|
|
float lifetime, float Color) /*attribute:color Composition:Overwrite AlphaComposition:Overwrite
|
|
SampleMode:OverLife Mode:PerComponent ColorMode:ColorAndAlpha channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t float t = age / lifetime;\n\t\t\t float4 value =
|
|
0.0f;\n\t\t\t value = SampleGradient(Color, t);\n\t\t\t color = value.rgb;\n\t\t\t
|
|
alpha = value.a;\n\t\t\t}\n\t\t\tvoid SetAttribute_545F0ED(inout float3 color,
|
|
float3 Color) /*attribute:color Composition:Multiply Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t color *= Color;\n\t\t\t}\n\t\t\tvoid Orient_4(inout
|
|
float3 axisX, inout float3 axisY, inout float3 axisZ) /*mode:FaceCameraPlane
|
|
axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t float3x3 viewRot = GetVFXToViewRotMatrix();\n\t\t\t
|
|
axisX = viewRot[0].xyz;\n\t\t\t axisY = viewRot[1].xyz;\n\t\t\t #if VFX_LOCAL_SPACE
|
|
// Need to remove potential scale in local transform\n\t\t\t axisX = normalize(axisX);\n\t\t\t
|
|
axisY = normalize(axisY);\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
#else\n\t\t\t axisZ = -viewRot[2].xyz;\n\t\t\t #endif\n\t\t\t \n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_C707D62A(inout float3 position, float3 Position) /*attribute:position
|
|
Composition:Add Source:Slot Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t
|
|
position += Position;\n\t\t\t}\n\t\t\tvoid SetAttribute_3278B22F(inout float
|
|
size, float Size) /*attribute:size Composition:Overwrite Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t size = Size;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if
|
|
defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error VFX_PRIMITIVE_QUAD
|
|
must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\n\n\t\t\t\treturn attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3
|
|
GetStripTangent(float3 currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.position = float3(0, 0, 0);\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x20) << 2));\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.size = (float)0.100000001;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x21) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x20) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.size
|
|
= (float)0.100000001;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x21) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\tAttributeFromCurve_48A86161(
|
|
/*inout */attributes.color, /*inout */attributes.alpha, attributes.age, attributes.lifetime,
|
|
Color_a);\n\t\t\t\tSetAttribute_545F0ED( /*inout */attributes.color, Color_b);\n\t\t\t\tOrient_4(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ);\n\t\t\t\t{\n\t\t\t\t
|
|
float3 tmp_be = GeneratePerlinCurlNoise(uniform_a, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t float3 tmp_bf = tmp_be
|
|
* uniform_b;\n\t\t\t\t SetAttribute_C707D62A( /*inout */attributes.position,
|
|
tmp_bf);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t float2 tmp_bf = GeneratePerlinNoise(uniform_e,
|
|
float3(1, 0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t
|
|
float tmp_bg = tmp_bf[0];\n\t\t\t\t float tmp_bi = tmp_bg - (float)-1;\n\t\t\t\t
|
|
float tmp_bk = tmp_bi / (float)2;\n\t\t\t\t float tmp_bl = tmp_bk * uniform_f;\n\t\t\t\t
|
|
float tmp_bm = uniform_d + tmp_bl;\n\t\t\t\t float tmp_bn = uniform_c +
|
|
tmp_bm;\n\t\t\t\t float tmp_bo = (float)4 * tmp_bn;\n\t\t\t\t SetAttribute_3278B22F(
|
|
/*inout */attributes.size, tmp_bo);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\tif (!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#define
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 1\n\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t#ifndef
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t#define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH
|
|
0\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\tint _ObjectId;\n\t\t\t\t\tint
|
|
_PassValue;\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#pragma fragment frag\n\t\t\t\t\tvoid
|
|
frag(ps_input i\n\t\t\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t
|
|
#ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t // We need the depth color as SV_Target0
|
|
for alpha to coverage\n\t\t\t\t\t , out float4 outDepthColor : SV_Target0\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target1\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
// When no MSAA, the motion vector is always the first buffer\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t #ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t
|
|
, out float4 outDepthColor : SV_Target0\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
, out float4 dummy : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t , out float4 outSelection : SV_Target0\n\t\t\t\t\t#endif\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\t
|
|
#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t
|
|
float alpha = OUTSG.;\n\t\t\t\t\t #else\n\t\t\t\t\t float alpha =
|
|
VFXGetFragmentColor(i).a;\n\t\t\t\t\t\t\t#if VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t\t\t\talpha
|
|
*= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t
|
|
#endif\n\t\t\t\t\t\tVFXClipFragmentColor(alpha,i);\n\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\toutDepthColor = i.VFX_VARYING_POSCS.z;\n\t\t\t\t\t\t\t#if
|
|
VFX_USE_ALPHA_TO_MASK\n\t\t\t\t\t\t\t\toutDepthColor.a = alpha;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat2
|
|
velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w) -
|
|
(i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\t\t\t\tVFXEncodeMotionVector(velocity
|
|
* 0.5f, encodedMotionVector);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\toutMotionVector
|
|
= encodedMotionVector;\n\t\t\t\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t\t\toutSelection
|
|
= float4(_ObjectId, _PassValue, 1.0, 1.0);\n\t\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t\t\t#ifndef WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\t\tdummy
|
|
= (float4)0;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t#error
|
|
VFX_PASSDEPTH undefined \n\t\t\t\t\t\t#endif\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\n\t\t\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t\t\r\n\t\t//
|
|
Forward pass\n\t\tPass\n\t\t{\t\t\n\t\t\tTags { \"LightMode\"=\"ForwardOnly\"
|
|
}\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#pragma target 4.5\n\t\t\t#pragma multi_compile
|
|
_ DEBUG_DISPLAY\n\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos :
|
|
SV_POSITION;\n\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_COLOR_INTERPOLATOR\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 color : COLOR0;\n\t\t\t\t#endif\n\t\t\t\t#if USE_SOFT_PARTICLE || USE_ALPHA_TEST
|
|
|| USE_FLIPBOOK_INTERPOLATION || USE_EXPOSURE_WEIGHT || WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t//
|
|
x: inverse soft particles fade distance\n\t\t\t\t// y: alpha threshold\n\t\t\t\t//
|
|
z: frame blending factor\n\t\t\t\t// w: exposure weight\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t\tfloat3
|
|
posWS : TEXCOORD3;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
cPosPrevious : TEXCOORD4;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD5;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t\t\tfloat3 normal : TEXCOORD6;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t\t\tfloat3 tangent : TEXCOORD7;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t
|
|
\n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\tstruct
|
|
ps_output\n\t\t\t{\n\t\t\t\tfloat4 color : SV_Target0;\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
outMotionVector : SV_Target1;\n\t\t#endif\n\t\t\t};\n\t\t\n\t\t#define VFX_VARYING_PS_INPUTS
|
|
ps_input\n\t\t#define VFX_VARYING_POSCS pos\n\t\t#define VFX_VARYING_COLOR
|
|
color.rgb\n\t\t#define VFX_VARYING_ALPHA color.a\n\t\t#define VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
builtInInterpolants.x\n\t\t#define VFX_VARYING_ALPHATHRESHOLD builtInInterpolants.y\n\t\t#define
|
|
VFX_VARYING_FRAMEBLEND builtInInterpolants.z\n\t\t#define VFX_VARYING_MOTIONVECTORSCALE
|
|
builtInInterpolants2.xy\n\t\t#define VFX_VARYING_UV uv\n\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t#define
|
|
VFX_VARYING_POSWS posWS\n\t\t#endif\n\t\t#if USE_EXPOSURE_WEIGHT\n\t\t#define
|
|
VFX_VARYING_EXPOSUREWEIGHT builtInInterpolants.w\n\t\t#endif\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t#endif\n\t\t\n\t\t#define SHADERPASS SHADERPASS_FORWARD_UNLIT\n\t\t\t\n\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t#define VFX_VARYING_NORMAL normal\n\t\t#endif\n\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t#define VFX_VARYING_TANGENT tangent\n\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
!(defined(VFX_VARYING_PS_INPUTS) && defined(VFX_VARYING_POSCS))\n\t\t\t#error
|
|
VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
AttributeFromCurve_48A86161(inout float3 color, inout float alpha, float age,
|
|
float lifetime, float Color) /*attribute:color Composition:Overwrite AlphaComposition:Overwrite
|
|
SampleMode:OverLife Mode:PerComponent ColorMode:ColorAndAlpha channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t float t = age / lifetime;\n\t\t\t float4 value =
|
|
0.0f;\n\t\t\t value = SampleGradient(Color, t);\n\t\t\t color = value.rgb;\n\t\t\t
|
|
alpha = value.a;\n\t\t\t}\n\t\t\tvoid SetAttribute_545F0ED(inout float3 color,
|
|
float3 Color) /*attribute:color Composition:Multiply Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t color *= Color;\n\t\t\t}\n\t\t\tvoid Orient_4(inout
|
|
float3 axisX, inout float3 axisY, inout float3 axisZ) /*mode:FaceCameraPlane
|
|
axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t float3x3 viewRot = GetVFXToViewRotMatrix();\n\t\t\t
|
|
axisX = viewRot[0].xyz;\n\t\t\t axisY = viewRot[1].xyz;\n\t\t\t #if VFX_LOCAL_SPACE
|
|
// Need to remove potential scale in local transform\n\t\t\t axisX = normalize(axisX);\n\t\t\t
|
|
axisY = normalize(axisY);\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
#else\n\t\t\t axisZ = -viewRot[2].xyz;\n\t\t\t #endif\n\t\t\t \n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_C707D62A(inout float3 position, float3 Position) /*attribute:position
|
|
Composition:Add Source:Slot Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t
|
|
position += Position;\n\t\t\t}\n\t\t\tvoid SetAttribute_3278B22F(inout float
|
|
size, float Size) /*attribute:size Composition:Overwrite Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t size = Size;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if
|
|
defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error VFX_PRIMITIVE_QUAD
|
|
must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\n\n\t\t\t\treturn attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3
|
|
GetStripTangent(float3 currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.position = float3(0, 0, 0);\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x20) << 2));\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.size = (float)0.100000001;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x21) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x20) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x0) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.size
|
|
= (float)0.100000001;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x21) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\tAttributeFromCurve_48A86161(
|
|
/*inout */attributes.color, /*inout */attributes.alpha, attributes.age, attributes.lifetime,
|
|
Color_a);\n\t\t\t\tSetAttribute_545F0ED( /*inout */attributes.color, Color_b);\n\t\t\t\tOrient_4(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ);\n\t\t\t\t{\n\t\t\t\t
|
|
float3 tmp_be = GeneratePerlinCurlNoise(uniform_a, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t float3 tmp_bf = tmp_be
|
|
* uniform_b;\n\t\t\t\t SetAttribute_C707D62A( /*inout */attributes.position,
|
|
tmp_bf);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t float2 tmp_bf = GeneratePerlinNoise(uniform_e,
|
|
float3(1, 0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t
|
|
float tmp_bg = tmp_bf[0];\n\t\t\t\t float tmp_bi = tmp_bg - (float)-1;\n\t\t\t\t
|
|
float tmp_bk = tmp_bi / (float)2;\n\t\t\t\t float tmp_bl = tmp_bk * uniform_f;\n\t\t\t\t
|
|
float tmp_bm = uniform_d + tmp_bl;\n\t\t\t\t float tmp_bn = uniform_c +
|
|
tmp_bm;\n\t\t\t\t float tmp_bo = (float)4 * tmp_bn;\n\t\t\t\t SetAttribute_3278B22F(
|
|
/*inout */attributes.size, tmp_bo);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\tif (!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t\t\n\t\t#endif\n\t\t\t\t\n\t\t\t#pragma fragment frag\n\t\t\tps_output
|
|
frag(ps_input i)\n\t\t\t{\n\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\tps_output
|
|
o = (ps_output)0;\n\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\n\t\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\t\t\t\t#if USE_DOUBLE_SIDED\n\t\t\t\t\t\t\tconst
|
|
float faceMul = frontFace ? 1.0f : -1.0f;\n\t\t\t\t\t\t\t#else\n\t\t\t\t\t\t\tconst
|
|
float faceMul = 1.0f;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3
|
|
normalWS = i.VFX_VARYING_NORMAL * faceMul;\n\t\t\t\t\t\t\tconst VFXUVData uvData
|
|
= GetUVData(i);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_TANGENT\n\t\t\t\t\t\t\tfloat3
|
|
tangentWS = i.VFX_VARYING_TANGENT;\n\t\t\t\t\t\t\tfloat3 bitangentWS = cross(i.VFX_VARYING_TANGENT,i.VFX_VARYING_NORMAL);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_BENTFACTORS) && USE_NORMAL_BENDING\t\n\t\t\t\t\t\t\tfloat3
|
|
bentFactors = float3(i.VFX_VARYING_BENTFACTORS.xy,sqrt(1.0f - dot(i.VFX_VARYING_BENTFACTORS,i.VFX_VARYING_BENTFACTORS)));\n\t\t\t\t\t\t\tnormalWS
|
|
= tangentWS * bentFactors.x + bitangentWS * bentFactors.y + normalWS * bentFactors.z;\n\t\t\t\t\t\t\ttangentWS
|
|
= normalize(cross(normalWS,bitangentWS));\n\t\t\t\t\t\t\tbitangentWS = cross(tangentWS,normalWS);\n\t\t\t\t\t\t\ttangentWS
|
|
*= faceMul;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3x3 tbn
|
|
= float3x3(tangentWS,bitangentWS,normalWS);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
USE_NORMAL_MAP\n\t\t\t\t\t\t\tfloat3 n = SampleNormalMap(VFX_SAMPLER(normalMap),uvData);\n\t\t\t\t\t\t\tfloat
|
|
normalScale = 1.0f;\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_NORMALSCALE\n\t\t\t\t\t\t\tnormalScale
|
|
= i.VFX_VARYING_NORMALSCALE;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\tnormalWS
|
|
= normalize(lerp(normalWS,mul(n,tbn),normalScale));\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t \n\t\t \n\t\t \n\t\t \n\t\t
|
|
#if HAS_SHADERGRAPH_PARAM_COLOR\n\t\t o.color.rgb = OUTSG..rgb;\n\t\t
|
|
#endif\n\t\t \n\t\t #if HAS_SHADERGRAPH_PARAM_ALPHA \n\t\t
|
|
o.color.a = OUTSG.;\n\t\t #endif\n\t\t#else\n\t\t\t\n\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR VFXGetTextureColor(VFX_SAMPLER(mainTexture),i)\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tfloat4
|
|
color = VFXGetFragmentColor(i);\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifndef VFX_TEXTURE_COLOR\n\t\t\t\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR float4(1.0,1.0,1.0,1.0)\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_DEFAULT\n\t\t\t\t\t\t\to.color = color * VFX_TEXTURE_COLOR;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_GRADIENTMAPPED\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\to.color = SampleGradient(gradient,
|
|
VFX_TEXTURE_COLOR.a * color.a) * float4(color.rgb,1.0);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\to.color
|
|
= VFXApplyPreExposure(o.color, i);\n\t\t#endif\n\t\t\n\t\t\t\to.color = VFXApplyFog(o.color,i);\n\t\t\t\tVFXClipFragmentColor(o.color.a,i);\n\t\t\t\to.color.a
|
|
= saturate(o.color.a);\n\t\t\t\to.color = VFXTransformFinalColor(o.color);\n\t\t\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t\n\t\t\t\t\t\tfloat2 velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w)
|
|
- (i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\tVFXEncodeMotionVector(velocity * 0.5f,
|
|
encodedMotionVector);\n\t\t\t\t\t\t\n\t\t\t\to.outMotionVector = encodedMotionVector;\n\t\t
|
|
o.outMotionVector.a = o.color.a < i.VFX_VARYING_ALPHATHRESHOLD ? 0.0f : 1.0f;
|
|
//Independant clipping for motion vector pass\n\t\t#endif\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t}\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[Core Chunks]Initialize Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_SCALEX_CURRENT 1\n#define VFX_USE_SCALEY_CURRENT
|
|
1\n#define VFX_USE_SCALEZ_CURRENT 1\n#define VFX_USE_SEED_CURRENT 1\n#define
|
|
VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_POSITION_CURRENT 1\n#define VFX_USE_DIRECTION_CURRENT
|
|
1\n#define VFX_USE_ALIVE_CURRENT 1\n#define VFX_USE_AGE_CURRENT 1\n#define
|
|
VFX_USE_PARTICLEID_CURRENT 1\n#define VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float ArcSphere_sphere_radius_c;\n uint3 PADDING_0;\nCBUFFER_END\n\nstruct
|
|
Attributes\n{\n float scaleX;\n float scaleY;\n float scaleZ;\n
|
|
uint seed;\n float lifetime;\n float3 position;\n float3 direction;\n
|
|
bool alive;\n float age;\n uint particleId;\n};\n\nstruct SourceAttributes\n{\n};\n\n\n\r\n\r\n#define
|
|
USE_DEAD_LIST (VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer
|
|
attributeBuffer;\r\nByteAddressBuffer sourceAttributeBuffer;\r\n\r\nCBUFFER_START(initParams)\r\n#if
|
|
!VFX_USE_SPAWNER_FROM_GPU\r\n uint nbSpawned;\t\t\t\t\t// Numbers of particle
|
|
spawned\r\n uint spawnIndex;\t\t\t\t// Index of the first particle spawned\r\n
|
|
uint dispatchWidth;\r\n#else\r\n uint offsetInAdditionalOutput;\r\n\tuint
|
|
nbMax;\r\n#endif\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#if USE_DEAD_LIST\r\nRWStructuredBuffer<uint>
|
|
deadListIn;\r\nByteAddressBuffer deadListCount; // This is bad to use a SRV
|
|
to fetch deadList count but Unity API currently prevent from copying to CB\r\n#endif\r\n\r\n#if
|
|
VFX_USE_SPAWNER_FROM_GPU\r\nStructuredBuffer<uint> eventList;\r\nByteAddressBuffer
|
|
inputAdditional;\r\n#endif\r\n\r\n#if HAS_STRIPS\r\nRWBuffer<uint> stripDataBuffer;\r\n#endif\r\n\r\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
SetAttribute_D51517D7(inout float scaleX, inout float scaleY, inout float scaleZ,
|
|
inout uint seed, float3 A, float3 B) /*attribute:scale Composition:Overwrite
|
|
Source:Slot Random:PerComponent channels:XYZ */\n{\n scaleX = lerp(A.x,B.x,RAND);\n
|
|
scaleY = lerp(A.y,B.y,RAND);\n scaleZ = lerp(A.z,B.z,RAND);\n}\nvoid SetAttribute_F01429A3(inout
|
|
float lifetime, inout uint seed, float A, float B) /*attribute:lifetime Composition:Overwrite
|
|
Source:Slot Random:Uniform channels:XYZ */\n{\n lifetime = lerp(A,B,RAND);\n}\nvoid
|
|
PositionSphere_0(inout float3 position, inout uint seed, inout float3 direction,
|
|
float3 ArcSphere_sphere_center, float ArcSphere_sphere_radius, float ArcSphere_arc,
|
|
float volumeFactor) /*positionMode:Surface spawnMode:Random */\n{\n float
|
|
cosPhi = 2.0f * RAND - 1.0f;float theta = ArcSphere_arc * RAND;\n float
|
|
rNorm = pow(volumeFactor + (1 - volumeFactor) * RAND, 1.0f / 3.0f);\n \n
|
|
float2 sincosTheta;\n sincos(theta, sincosTheta.x, sincosTheta.y);\n
|
|
sincosTheta *= sqrt(1.0f - cosPhi * cosPhi);\n \n direction = float3(sincosTheta,
|
|
cosPhi);\n position += direction * (rNorm * ArcSphere_sphere_radius) + ArcSphere_sphere_center;\n
|
|
\n}\n\n\r\n\r\n// Due to a bug in HLSL compiler, disable spurious \"unitialized
|
|
variable\" due to mid function return statement\r\n#pragma warning(push)\r\n#pragma
|
|
warning(disable : 4000)\r\n#if HAS_STRIPS\r\nbool GetParticleIndex(inout uint
|
|
particleIndex, uint stripIndex)\r\n{\r\n\tuint relativeIndex;\r\n\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX,
|
|
stripIndex), 1, relativeIndex);\r\n\tif (relativeIndex >= PARTICLE_PER_STRIP_COUNT)
|
|
// strip is full\r\n\t{\r\n\t\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX,
|
|
stripIndex), -1); // Remove previous increment\r\n\t\treturn false;\r\n\t}\r\n\r\n\tparticleIndex
|
|
= stripIndex * PARTICLE_PER_STRIP_COUNT + ((STRIP_DATA(STRIP_FIRST_INDEX, stripIndex)
|
|
+ relativeIndex) % PARTICLE_PER_STRIP_COUNT);\r\n return true;\r\n}\r\n#endif\r\n#pragma
|
|
warning(pop)\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n
|
|
uint id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP;\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
id += groupId.y * dispatchWidth * NB_THREADS_PER_GROUP;\r\n#endif\r\n\r\n#if
|
|
VFX_USE_SPAWNER_FROM_GPU\r\n uint maxThreadId = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 0) << 2);\r\n uint currentSpawnIndex = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 1) << 2) - maxThreadId;\r\n#else\r\n uint maxThreadId = nbSpawned;\r\n
|
|
uint currentSpawnIndex = spawnIndex;\r\n#endif\r\n\r\n#if USE_DEAD_LIST\r\n
|
|
maxThreadId = min(maxThreadId, deadListCount.Load(0x0));\r\n#elif VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
maxThreadId = min(maxThreadId, nbMax); //otherwise, nbSpawned already clamped
|
|
on CPU\r\n#endif\r\n\r\n if (id < maxThreadId)\r\n {\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
int sourceIndex = eventList[id];\r\n#endif\r\n\t\tuint particleIndex = id +
|
|
currentSpawnIndex;\r\n\t\t\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n int
|
|
sourceIndex = 0;\n /*//Loop with 1 iteration generate a wrong IL Assembly
|
|
(and actually, useless code)\n uint currentSumSpawnCount = 0u;\n
|
|
for (sourceIndex=0; sourceIndex<1; sourceIndex++)\n {\n currentSumSpawnCount
|
|
+= uint(asfloat(sourceAttributeBuffer.Load((sourceIndex * 0x1 + 0x0) << 2)));\n
|
|
if (id < currentSumSpawnCount)\n {\n break;\n
|
|
}\n }\n */\n \n\r\n#endif\r\n\r\n\t\tAttributes attributes
|
|
= (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes = (SourceAttributes)0;\r\n\t\t\r\n
|
|
attributes.scaleX = (float)1;\n attributes.scaleY = (float)1;\n
|
|
attributes.scaleZ = (float)1;\n attributes.seed = (uint)0;\n
|
|
attributes.lifetime = (float)1;\n attributes.position = float3(0, 0,
|
|
0);\n attributes.direction = float3(0, 0, 1);\n attributes.alive
|
|
= (bool)true;\n attributes.age = (float)0;\n attributes.particleId
|
|
= (uint)0;\n \n\r\n#if VFX_USE_PARTICLEID_CURRENT\r\n attributes.particleId
|
|
= particleIndex;\r\n#endif\r\n#if VFX_USE_SEED_CURRENT\r\n attributes.seed
|
|
= WangHash(particleIndex ^ systemSeed);\r\n#endif\r\n#if VFX_USE_SPAWNINDEX_CURRENT\r\n
|
|
attributes.spawnIndex = id;\r\n#endif\r\n#if HAS_STRIPS\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n\t\t\r\n#else\r\n
|
|
uint stripIndex = sourceIndex;\r\n#endif\r\n\t\tstripIndex = min(stripIndex,
|
|
STRIP_COUNT);\r\n\r\n if (!GetParticleIndex(particleIndex, stripIndex))\r\n
|
|
return;\r\n\r\n const StripData stripData = GetStripDataFromStripIndex(stripIndex,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n\t\tInitStripAttributes(particleIndex, attributes,
|
|
stripData);\r\n\t\t// TODO Change seed to be sure we're deterministic on random
|
|
with strip\r\n#endif\r\n \r\n {\n SetAttribute_D51517D7(
|
|
/*inout */attributes.scaleX, /*inout */attributes.scaleY, /*inout */attributes.scaleZ,
|
|
/*inout */attributes.seed, float3(3, 3, 7), float3(8, 8, 8));\n }\n
|
|
{\n SetAttribute_F01429A3( /*inout */attributes.lifetime, /*inout
|
|
*/attributes.seed, (float)0.5, (float)6);\n }\n {\n
|
|
PositionSphere_0( /*inout */attributes.position, /*inout */attributes.seed,
|
|
/*inout */attributes.direction, float3(0, 0, 0), ArcSphere_sphere_radius_c,
|
|
(float)6.28318548, (float)1);\n }\n \n\r\n\t\t\r\n#if VFX_USE_ALIVE_CURRENT\r\n
|
|
if (attributes.alive)\r\n#endif \r\n {\r\n#if USE_DEAD_LIST\r\n\t
|
|
uint deadIndex = deadListIn.DecrementCounter();\r\n uint index =
|
|
deadListIn[deadIndex];\r\n#else\r\n uint index = particleIndex;\r\n#endif\r\n
|
|
attributeBuffer.Store((index * 0x8 + 0x3) << 2,asuint(attributes.scaleX));\n
|
|
attributeBuffer.Store((index * 0x8 + 0x4) << 2,asuint(attributes.scaleY));\n
|
|
attributeBuffer.Store((index * 0x8 + 0x5) << 2,asuint(attributes.scaleZ));\n
|
|
attributeBuffer.Store((index * 0x1 + 0x3000) << 2,asuint(attributes.lifetime));\n
|
|
attributeBuffer.Store3((index * 0x8 + 0x0) << 2,asuint(attributes.position));\n
|
|
attributeBuffer.Store((index * 0x2 + 0x3600) << 2,uint(attributes.alive));\n
|
|
attributeBuffer.Store((index * 0x2 + 0x3601) << 2,asuint(attributes.age));\n
|
|
attributeBuffer.Store((index * 0x8 + 0x6) << 2,asuint(attributes.particleId));\n
|
|
\n\r\n }\r\n }\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[Core Chunks]Update Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_ALIVE_CURRENT
|
|
1\n#define VFX_USE_AGE_CURRENT 1\n#define VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float deltaTime_a;\n uint3 PADDING_0;\nCBUFFER_END\n\nstruct Attributes\n{\n
|
|
float lifetime;\n bool alive;\n float age;\n};\n\nstruct SourceAttributes\n{\n};\n\n\n\r\n\r\n#define
|
|
USE_DEAD_LIST (VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer
|
|
attributeBuffer;\r\n\r\n#if USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListOut;\r\n#endif\r\n\r\n#if
|
|
VFX_HAS_INDIRECT_DRAW\r\nRWStructuredBuffer<uint> indirectBuffer;\r\n#endif\r\n\r\n#if
|
|
HAS_STRIPS\r\nRWBuffer<uint> stripDataBuffer;\r\n#endif\r\n\r\n#if VFX_USE_STRIPALIVE_CURRENT\r\nBuffer<uint>
|
|
attachedStripDataBuffer;\r\n#endif\r\n\r\nCBUFFER_START(updateParams)\r\n
|
|
uint nbMax;\r\n\tuint dispatchWidth;\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
Age(inout float age, float deltaTime)\n{\n age += deltaTime;\n}\nvoid Reap(float
|
|
age, float lifetime, inout bool alive)\n{\n if(age > lifetime) { alive =
|
|
false; }\n}\n\n\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n\tuint
|
|
id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP + groupId.y * dispatchWidth
|
|
* NB_THREADS_PER_GROUP;\r\n\tuint index = id;\r\n\tif (id < nbMax)\r\n\t{\r\n
|
|
Attributes attributes = (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\r\n\r\n#if VFX_USE_ALIVE_CURRENT\r\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x3600) << 2));\n\t\t\n\r\n\t\tif (attributes.alive)\r\n\t\t{\r\n\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x3000) << 2));\n\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x3601) << 2));\n\t\t\t\n\r\n\r\n//
|
|
Initialize built-in needed attributes\r\n#if VFX_USE_OLDPOSITION_CURRENT\r\n\t\t\tattributes.oldPosition
|
|
= attributes.position;\r\n#endif\r\n#if HAS_STRIPS\r\n const StripData
|
|
stripData = GetStripDataFromParticleIndex(index, PARTICLE_PER_STRIP_COUNT);\r\n
|
|
InitStripAttributes(index, attributes, stripData);\r\n#endif\r\n\t\t\t\r\n\t\t\tAge(
|
|
/*inout */attributes.age, deltaTime_a);\n\t\t\tReap(attributes.age, attributes.lifetime,
|
|
/*inout */attributes.alive);\n\t\t\t\n\r\n\r\n\t\t\tif (attributes.alive)\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x3601) << 2,asuint(attributes.age));\n\t\t\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\t\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n\r\n#if HAS_STRIPS\t\t\t\r\n\t\t\t\tuint relativeIndexInStrip
|
|
= GetRelativeIndex(index, stripData);\r\n\t\t\t\tInterlockedMin(STRIP_DATA(STRIP_MIN_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n\t\t\t\tInterlockedMax(STRIP_DATA(STRIP_MAX_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n#endif\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x3600) << 2,uint(attributes.alive));\n\t\t\t\t\n\r\n#if USE_DEAD_LIST
|
|
&& !VFX_USE_STRIPALIVE_CURRENT\r\n\t\t\t\tuint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n#endif\r\n\t\t\t}\r\n\t\t}\r\n#if USE_DEAD_LIST && VFX_USE_STRIPALIVE_CURRENT\r\n
|
|
else if (attributes.stripAlive)\r\n {\r\n if (STRIP_DATA_X(attachedStripDataBuffer,
|
|
STRIP_MIN_ALIVE, index) == ~1) // Attached strip is no longer alive, recycle
|
|
the particle \r\n {\r\n uint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n attributes.stripAlive = false;\r\n
|
|
\r\n } \r\n }\r\n#endif\r\n#else\r\n\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x3000) << 2));\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x3600) << 2));\n\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x3601) << 2));\n\t\t\n\r\n\t\t\r\n#if
|
|
VFX_USE_OLDPOSITION_CURRENT\r\n\t\tattributes.oldPosition = attributes.position;\r\n#endif\r\n#if
|
|
HAS_STRIPS\r\n const StripData stripData = GetStripDataFromParticleIndex(index,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n InitStripAttributes(index, attributes,
|
|
stripData);\r\n#endif\r\n\t\t\r\n\t\tAge( /*inout */attributes.age, deltaTime_a);\n\t\tReap(attributes.age,
|
|
attributes.lifetime, /*inout */attributes.alive);\n\t\t\n\r\n\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x3600) << 2,uint(attributes.alive));\n\t\tattributeBuffer.Store((index
|
|
* 0x2 + 0x3601) << 2,asuint(attributes.age));\n\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n#endif\r\n\t}\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[Black Core Swarm]Initialize Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_SIZE_CURRENT 1\n#define VFX_USE_SEED_CURRENT
|
|
1\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_COLOR_CURRENT 1\n#define
|
|
VFX_USE_POSITION_CURRENT 1\n#define VFX_USE_DIRECTION_CURRENT 1\n#define VFX_USE_VELOCITY_CURRENT
|
|
1\n#define VFX_USE_AGE_CURRENT 1\n#define VFX_USE_ALIVE_CURRENT 1\n#define
|
|
VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float ArcTorus_majorRadius_d;\n float r_d;\n uint2 PADDING_0;\nCBUFFER_END\n\nstruct
|
|
Attributes\n{\n float size;\n uint seed;\n float lifetime;\n float3
|
|
color;\n float3 position;\n float3 direction;\n float3 velocity;\n
|
|
float age;\n bool alive;\n};\n\nstruct SourceAttributes\n{\n};\n\n\n\r\n\r\n#define
|
|
USE_DEAD_LIST (VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer
|
|
attributeBuffer;\r\nByteAddressBuffer sourceAttributeBuffer;\r\n\r\nCBUFFER_START(initParams)\r\n#if
|
|
!VFX_USE_SPAWNER_FROM_GPU\r\n uint nbSpawned;\t\t\t\t\t// Numbers of particle
|
|
spawned\r\n uint spawnIndex;\t\t\t\t// Index of the first particle spawned\r\n
|
|
uint dispatchWidth;\r\n#else\r\n uint offsetInAdditionalOutput;\r\n\tuint
|
|
nbMax;\r\n#endif\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#if USE_DEAD_LIST\r\nRWStructuredBuffer<uint>
|
|
deadListIn;\r\nByteAddressBuffer deadListCount; // This is bad to use a SRV
|
|
to fetch deadList count but Unity API currently prevent from copying to CB\r\n#endif\r\n\r\n#if
|
|
VFX_USE_SPAWNER_FROM_GPU\r\nStructuredBuffer<uint> eventList;\r\nByteAddressBuffer
|
|
inputAdditional;\r\n#endif\r\n\r\n#if HAS_STRIPS\r\nRWBuffer<uint> stripDataBuffer;\r\n#endif\r\n\r\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
SetAttribute_3278B543(inout float size, inout uint seed, float A, float B)
|
|
/*attribute:size Composition:Overwrite Source:Slot Random:Uniform channels:X
|
|
*/\n{\n size = lerp(A,B,RAND);\n}\nvoid SetAttribute_F01429A3(inout float
|
|
lifetime, inout uint seed, float A, float B) /*attribute:lifetime Composition:Overwrite
|
|
Source:Slot Random:Uniform channels:XYZ */\n{\n lifetime = lerp(A,B,RAND);\n}\nvoid
|
|
SetAttribute_FDD06EC7(inout float3 color, float3 Color) /*attribute:color Composition:Overwrite
|
|
Source:Slot Random:Off channels:XYZ */\n{\n color = Color;\n}\nvoid PositionTorus_0(inout
|
|
float3 position, inout uint seed, inout float3 direction, float3 ArcTorus_center,
|
|
float ArcTorus_majorRadius, float ArcTorus_minorRadius, float ArcTorus_arc,
|
|
float volumeFactor, float r) /*positionMode:Surface spawnMode:Random */\n{\n
|
|
float3 u = RAND3;float arc = ArcTorus_arc;\n float R = sqrt(volumeFactor
|
|
+ (1.0f - volumeFactor) * u.z);\n \n float sinTheta,cosTheta;\n sincos(u.x
|
|
* UNITY_TWO_PI,sinTheta,cosTheta);\n \n float2 s1_1 = R * r * float2(cosTheta,
|
|
sinTheta) + float2(1,0);\n float2 s1_2 = R * r * float2(-cosTheta, sinTheta)
|
|
+ float2(1,0);\n float w = s1_1.x / (s1_1.x + s1_2.x);\n \n float3
|
|
t;\n float phi;\n if (u.y < w)\n {\n phi = arc * u.y / w;\n
|
|
t = float3(s1_1.x, 0, s1_1.y);\n }\n else\n {\n phi = arc *
|
|
(u.y - w) / (1.0f - w);\n t = float3(s1_2.x, 0, s1_2.y);\n }\n
|
|
\n float s,c;\n sincos(phi,c,s);\n float3 t2 = float3(c * t.x - s
|
|
* t.y,c * t.y + s * t.x,t.z);\n \n position += ArcTorus_center + ArcTorus_majorRadius
|
|
* t2;\n direction = t2;\n \n}\nvoid SetAttribute_CAC29747(inout float3
|
|
position, float3 Position) /*attribute:position Composition:Overwrite Source:Slot
|
|
Random:Off channels:XYZ */\n{\n position = Position;\n}\nvoid SetAttribute_C707D62A(inout
|
|
float3 position, float3 Position) /*attribute:position Composition:Add Source:Slot
|
|
Random:Off channels:XYZ */\n{\n position += Position;\n}\n\n\r\n\r\n// Due
|
|
to a bug in HLSL compiler, disable spurious \"unitialized variable\" due to
|
|
mid function return statement\r\n#pragma warning(push)\r\n#pragma warning(disable
|
|
: 4000)\r\n#if HAS_STRIPS\r\nbool GetParticleIndex(inout uint particleIndex,
|
|
uint stripIndex)\r\n{\r\n\tuint relativeIndex;\r\n\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX,
|
|
stripIndex), 1, relativeIndex);\r\n\tif (relativeIndex >= PARTICLE_PER_STRIP_COUNT)
|
|
// strip is full\r\n\t{\r\n\t\tInterlockedAdd(STRIP_DATA(STRIP_NEXT_INDEX,
|
|
stripIndex), -1); // Remove previous increment\r\n\t\treturn false;\r\n\t}\r\n\r\n\tparticleIndex
|
|
= stripIndex * PARTICLE_PER_STRIP_COUNT + ((STRIP_DATA(STRIP_FIRST_INDEX, stripIndex)
|
|
+ relativeIndex) % PARTICLE_PER_STRIP_COUNT);\r\n return true;\r\n}\r\n#endif\r\n#pragma
|
|
warning(pop)\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n
|
|
uint id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP;\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
id += groupId.y * dispatchWidth * NB_THREADS_PER_GROUP;\r\n#endif\r\n\r\n#if
|
|
VFX_USE_SPAWNER_FROM_GPU\r\n uint maxThreadId = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 0) << 2);\r\n uint currentSpawnIndex = inputAdditional.Load((offsetInAdditionalOutput
|
|
* 2 + 1) << 2) - maxThreadId;\r\n#else\r\n uint maxThreadId = nbSpawned;\r\n
|
|
uint currentSpawnIndex = spawnIndex;\r\n#endif\r\n\r\n#if USE_DEAD_LIST\r\n
|
|
maxThreadId = min(maxThreadId, deadListCount.Load(0x0));\r\n#elif VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
maxThreadId = min(maxThreadId, nbMax); //otherwise, nbSpawned already clamped
|
|
on CPU\r\n#endif\r\n\r\n if (id < maxThreadId)\r\n {\r\n#if VFX_USE_SPAWNER_FROM_GPU\r\n
|
|
int sourceIndex = eventList[id];\r\n#endif\r\n\t\tuint particleIndex = id +
|
|
currentSpawnIndex;\r\n\t\t\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n int
|
|
sourceIndex = 0;\n /*//Loop with 1 iteration generate a wrong IL Assembly
|
|
(and actually, useless code)\n uint currentSumSpawnCount = 0u;\n
|
|
for (sourceIndex=0; sourceIndex<1; sourceIndex++)\n {\n currentSumSpawnCount
|
|
+= uint(asfloat(sourceAttributeBuffer.Load((sourceIndex * 0x1 + 0x0) << 2)));\n
|
|
if (id < currentSumSpawnCount)\n {\n break;\n
|
|
}\n }\n */\n \n\r\n#endif\r\n\r\n\t\tAttributes attributes
|
|
= (Attributes)0;\r\n\t\tSourceAttributes sourceAttributes = (SourceAttributes)0;\r\n\t\t\r\n
|
|
attributes.size = (float)0.100000001;\n attributes.seed = (uint)0;\n
|
|
attributes.lifetime = (float)1;\n attributes.color = float3(1, 1, 1);\n
|
|
attributes.position = float3(0, 0, 0);\n attributes.direction = float3(0,
|
|
0, 1);\n attributes.velocity = float3(0, 0, 0);\n attributes.age
|
|
= (float)0;\n attributes.alive = (bool)true;\n \n\r\n#if VFX_USE_PARTICLEID_CURRENT\r\n
|
|
attributes.particleId = particleIndex;\r\n#endif\r\n#if VFX_USE_SEED_CURRENT\r\n
|
|
attributes.seed = WangHash(particleIndex ^ systemSeed);\r\n#endif\r\n#if VFX_USE_SPAWNINDEX_CURRENT\r\n
|
|
attributes.spawnIndex = id;\r\n#endif\r\n#if HAS_STRIPS\r\n#if !VFX_USE_SPAWNER_FROM_GPU\r\n\t\t\r\n#else\r\n
|
|
uint stripIndex = sourceIndex;\r\n#endif\r\n\t\tstripIndex = min(stripIndex,
|
|
STRIP_COUNT);\r\n\r\n if (!GetParticleIndex(particleIndex, stripIndex))\r\n
|
|
return;\r\n\r\n const StripData stripData = GetStripDataFromStripIndex(stripIndex,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n\t\tInitStripAttributes(particleIndex, attributes,
|
|
stripData);\r\n\t\t// TODO Change seed to be sure we're deterministic on random
|
|
with strip\r\n#endif\r\n \r\n {\n SetAttribute_3278B543(
|
|
/*inout */attributes.size, /*inout */attributes.seed, (float)0.0700000003,
|
|
(float)0.0900000036);\n }\n {\n SetAttribute_F01429A3(
|
|
/*inout */attributes.lifetime, /*inout */attributes.seed, (float)0.600000024,
|
|
(float)1);\n }\n {\n SetAttribute_FDD06EC7( /*inout
|
|
*/attributes.color, float3(0, 0, 0));\n }\n {\n PositionTorus_0(
|
|
/*inout */attributes.position, /*inout */attributes.seed, /*inout */attributes.direction,
|
|
float3(0, 0, 0), ArcTorus_majorRadius_d, (float)0.100000001, (float)6.28318548,
|
|
(float)1, r_d);\n }\n {\n float3 tmp_ba = mul(float4x4(7.15255766E-08,0,1.19999993,0,0,1.20000005,0,0,-1.19999993,0,7.15255766E-08,0,0,0,0,1),
|
|
float4(attributes.position, 1.0)).xyz;\n SetAttribute_CAC29747(
|
|
/*inout */attributes.position, tmp_ba);\n }\n {\n
|
|
SetAttribute_C707D62A( /*inout */attributes.position, float3(0, 0, 0));\n
|
|
}\n \n\r\n\t\t\r\n#if VFX_USE_ALIVE_CURRENT\r\n if (attributes.alive)\r\n#endif
|
|
\r\n {\r\n#if USE_DEAD_LIST\r\n\t uint deadIndex = deadListIn.DecrementCounter();\r\n
|
|
uint index = deadListIn[deadIndex];\r\n#else\r\n uint index = particleIndex;\r\n#endif\r\n
|
|
attributeBuffer.Store((index * 0x4 + 0x3) << 2,asuint(attributes.size));\n
|
|
attributeBuffer.Store((index * 0x1 + 0x7D000) << 2,asuint(attributes.lifetime));\n
|
|
attributeBuffer.Store3((index * 0x4 + 0x0) << 2,asuint(attributes.color));\n
|
|
attributeBuffer.Store3((index * 0x4 + 0x9C400) << 2,asuint(attributes.position));\n
|
|
attributeBuffer.Store3((index * 0x4 + 0x119400) << 2,asuint(attributes.velocity));\n
|
|
attributeBuffer.Store((index * 0x4 + 0x119403) << 2,asuint(attributes.age));\n
|
|
attributeBuffer.Store((index * 0x4 + 0x9C403) << 2,uint(attributes.alive));\n
|
|
\n\r\n }\r\n }\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[Black Core Swarm]Update Particle'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_LIFETIME_CURRENT 1\n#define VFX_USE_POSITION_CURRENT
|
|
1\n#define VFX_USE_VELOCITY_CURRENT 1\n#define VFX_USE_MASS_CURRENT 1\n#define
|
|
VFX_USE_AGE_CURRENT 1\n#define VFX_USE_ALIVE_CURRENT 1\n#define VFX_HAS_INDIRECT_DRAW
|
|
1\n#define VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float4x4 InvFieldTransform_a;\n float4x4 FieldTransform_a;\n float3 uniform_a;\n
|
|
float Intensity_a;\n float3 uniform_b;\n float Drag_a;\n float deltaTime_a;\n
|
|
float uniform_c;\n float uniform_d;\n float uniform_e;\n float uniform_f;\n
|
|
uint3 PADDING_0;\nCBUFFER_END\n\nstruct Attributes\n{\n float lifetime;\n
|
|
float3 position;\n float3 velocity;\n float mass;\n float age;\n
|
|
bool alive;\n};\n\nstruct SourceAttributes\n{\n};\n\nTexture3D VectorField_a;\nSamplerState
|
|
samplerVectorField_a;\nfloat4 VectorField_a_TexelSize;\n\n\n\r\n\r\n#define
|
|
USE_DEAD_LIST (VFX_USE_ALIVE_CURRENT && !HAS_STRIPS)\r\n\r\nRWByteAddressBuffer
|
|
attributeBuffer;\r\n\r\n#if USE_DEAD_LIST\r\nRWStructuredBuffer<uint> deadListOut;\r\n#endif\r\n\r\n#if
|
|
VFX_HAS_INDIRECT_DRAW\r\nRWStructuredBuffer<uint> indirectBuffer;\r\n#endif\r\n\r\n#if
|
|
HAS_STRIPS\r\nRWBuffer<uint> stripDataBuffer;\r\n#endif\r\n\r\n#if VFX_USE_STRIPALIVE_CURRENT\r\nBuffer<uint>
|
|
attachedStripDataBuffer;\r\n#endif\r\n\r\nCBUFFER_START(updateParams)\r\n
|
|
uint nbMax;\r\n\tuint dispatchWidth;\r\n\tuint systemSeed;\r\nCBUFFER_END\r\n\r\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nvoid
|
|
VectorFieldForce_267A9(inout float3 velocity, float mass, float3 position,
|
|
VFXSampler3D VectorField, float4x4 InvFieldTransform, float4x4 FieldTransform,
|
|
float Intensity, float Drag, float deltaTime) /*DataEncoding:UnsignedNormalized
|
|
Mode:Relative ClosedField:False ConserveMagnitude:False */\n{\n float3 vectorFieldCoord
|
|
= mul(InvFieldTransform, float4(position,1.0f)).xyz;\n \n float3 value
|
|
= SampleTexture(VectorField, vectorFieldCoord + 0.5f).xyz * 2.0f - 1.0f;\n
|
|
value = mul(FieldTransform,float4(value,0.0f)).xyz;\n \n velocity +=
|
|
((value * Intensity) - velocity) * min(1.0f,Drag * deltaTime / mass);\n}\nvoid
|
|
ConformToSphere(inout float3 velocity, float3 position, float mass, float3
|
|
Sphere_center, float Sphere_radius, float attractionSpeed, float attractionForce,
|
|
float stickDistance, float stickForce, float deltaTime)\n{\n \n float3
|
|
dir = Sphere_center - position;\n float distToCenter = length(dir);\n
|
|
float distToSurface = distToCenter - Sphere_radius;\n dir /= max(VFX_FLT_MIN,distToCenter);
|
|
// safe normalize\n float spdNormal = dot(dir,velocity);\n float ratio
|
|
= smoothstep(0.0,stickDistance * 2.0,abs(distToSurface));\n float tgtSpeed
|
|
= sign(distToSurface) * attractionSpeed * ratio;\n float deltaSpeed = tgtSpeed
|
|
- spdNormal;\n velocity += sign(deltaSpeed) * min(abs(deltaSpeed),deltaTime
|
|
* lerp(stickForce,attractionForce,ratio)) * dir / mass;\n}\nvoid CollisionSphere_0(inout
|
|
float3 position, inout float3 velocity, inout float age, float lifetime, float3
|
|
Sphere_center, float Sphere_radius, float Bounce, float Friction, float LifetimeLoss,
|
|
float deltaTime, float colliderSign, float radius) /*mode:Solid radiusMode:None
|
|
roughSurface:False */\n{\n \n float3 nextPos = position + velocity *
|
|
deltaTime;\n float3 dir = nextPos - Sphere_center;\n float sqrLength
|
|
= dot(dir, dir);\n float totalRadius = Sphere_radius + colliderSign * radius;\n
|
|
if (colliderSign * sqrLength <= colliderSign * totalRadius * totalRadius)\n
|
|
{\n float dist = sqrt(sqrLength);\n float3 n = colliderSign *
|
|
dir / dist;\n position -= n * (dist - totalRadius) * colliderSign;\n
|
|
\n float projVelocity = dot(n, velocity);\n \n float3 normalVelocity
|
|
= projVelocity * n;\n float3 tangentVelocity = velocity - normalVelocity;\n
|
|
\n if (projVelocity < 0)\n velocity -= ((1 + Bounce) * projVelocity)
|
|
* n;\n velocity -= Friction * tangentVelocity;\n \n age +=
|
|
(LifetimeLoss * lifetime);\n \n }\n}\nvoid EulerIntegration(inout float3
|
|
position, float3 velocity, float deltaTime)\n{\n position += velocity *
|
|
deltaTime;\n}\nvoid Age(inout float age, float deltaTime)\n{\n age += deltaTime;\n}\nvoid
|
|
Reap(float age, float lifetime, inout bool alive)\n{\n if(age > lifetime)
|
|
{ alive = false; }\n}\n\n\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid
|
|
CSMain(uint3 groupId : SV_GroupID,\r\n uint3 groupThreadId
|
|
: SV_GroupThreadID)\r\n{\r\n\tuint id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP
|
|
+ groupId.y * dispatchWidth * NB_THREADS_PER_GROUP;\r\n\tuint index = id;\r\n\tif
|
|
(id < nbMax)\r\n\t{\r\n Attributes attributes = (Attributes)0;\r\n\t\tSourceAttributes
|
|
sourceAttributes = (SourceAttributes)0;\r\n\r\n#if VFX_USE_ALIVE_CURRENT\r\n\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x4 + 0x9C403) << 2));\n\t\t\n\r\n\t\tif (attributes.alive)\r\n\t\t{\r\n\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x7D000) << 2));\n\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x9C400) << 2));\n\t\t\tattributes.velocity
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x119400) << 2));\n\t\t\tattributes.mass
|
|
= (float)1;\n\t\t\tattributes.age = asfloat(attributeBuffer.Load((index * 0x4
|
|
+ 0x119403) << 2));\n\t\t\t\n\r\n\r\n// Initialize built-in needed attributes\r\n#if
|
|
VFX_USE_OLDPOSITION_CURRENT\r\n\t\t\tattributes.oldPosition = attributes.position;\r\n#endif\r\n#if
|
|
HAS_STRIPS\r\n const StripData stripData = GetStripDataFromParticleIndex(index,
|
|
PARTICLE_PER_STRIP_COUNT);\r\n InitStripAttributes(index, attributes,
|
|
stripData);\r\n#endif\r\n\t\t\t\r\n\t\t\tVectorFieldForce_267A9( /*inout */attributes.velocity,
|
|
attributes.mass, attributes.position, GetVFXSampler(VectorField_a, samplerVectorField_a),
|
|
InvFieldTransform_a, FieldTransform_a, Intensity_a, Drag_a, deltaTime_a);\n\t\t\t{\n\t\t\t
|
|
float3 tmp_bl = GeneratePerlinCurlNoise(uniform_a, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t float3 tmp_bm = tmp_bl
|
|
* uniform_b;\n\t\t\t float2 tmp_bn = GeneratePerlinNoise(uniform_e, float3(1,
|
|
0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t
|
|
float tmp_bo = tmp_bn[0];\n\t\t\t float tmp_bq = tmp_bo - (float)-1;\n\t\t\t
|
|
float tmp_bs = tmp_bq / (float)2;\n\t\t\t float tmp_bt = tmp_bs * uniform_f;\n\t\t\t
|
|
float tmp_bu = uniform_d + tmp_bt;\n\t\t\t float tmp_bv = uniform_c + tmp_bu;\n\t\t\t
|
|
float tmp_bx = tmp_bv * (float)1.79999995;\n\t\t\t ConformToSphere( /*inout
|
|
*/attributes.velocity, attributes.position, attributes.mass, tmp_bm, tmp_bx,
|
|
(float)5, (float)20, (float)0.100000001, (float)50, deltaTime_a);\n\t\t\t}\n\t\t\t{\n\t\t\t
|
|
float3 tmp_bl = GeneratePerlinCurlNoise(uniform_a, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t float3 tmp_bm = tmp_bl
|
|
* uniform_b;\n\t\t\t float2 tmp_bn = GeneratePerlinNoise(uniform_e, float3(1,
|
|
0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t
|
|
float tmp_bo = tmp_bn[0];\n\t\t\t float tmp_bq = tmp_bo - (float)-1;\n\t\t\t
|
|
float tmp_bs = tmp_bq / (float)2;\n\t\t\t float tmp_bt = tmp_bs * uniform_f;\n\t\t\t
|
|
float tmp_bu = uniform_d + tmp_bt;\n\t\t\t float tmp_bv = uniform_c + tmp_bu;\n\t\t\t
|
|
float tmp_bx = tmp_bv * (float)1.79999995;\n\t\t\t CollisionSphere_0( /*inout
|
|
*/attributes.position, /*inout */attributes.velocity, /*inout */attributes.age,
|
|
attributes.lifetime, tmp_bm, tmp_bx, (float)0.100000001, (float)0, (float)0,
|
|
deltaTime_a, (float)1, (float)0);\n\t\t\t}\n\t\t\tEulerIntegration( /*inout
|
|
*/attributes.position, attributes.velocity, deltaTime_a);\n\t\t\tAge( /*inout
|
|
*/attributes.age, deltaTime_a);\n\t\t\tReap(attributes.age, attributes.lifetime,
|
|
/*inout */attributes.alive);\n\t\t\t\n\r\n\r\n\t\t\tif (attributes.alive)\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store3((index
|
|
* 0x4 + 0x9C400) << 2,asuint(attributes.position));\n\t\t\t\tattributeBuffer.Store3((index
|
|
* 0x4 + 0x119400) << 2,asuint(attributes.velocity));\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x4 + 0x119403) << 2,asuint(attributes.age));\n\t\t\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\t\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n\r\n#if HAS_STRIPS\t\t\t\r\n\t\t\t\tuint relativeIndexInStrip
|
|
= GetRelativeIndex(index, stripData);\r\n\t\t\t\tInterlockedMin(STRIP_DATA(STRIP_MIN_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n\t\t\t\tInterlockedMax(STRIP_DATA(STRIP_MAX_ALIVE,
|
|
stripData.stripIndex), relativeIndexInStrip);\r\n#endif\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tattributeBuffer.Store((index
|
|
* 0x4 + 0x9C403) << 2,uint(attributes.alive));\n\t\t\t\t\n\r\n#if USE_DEAD_LIST
|
|
&& !VFX_USE_STRIPALIVE_CURRENT\r\n\t\t\t\tuint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n#endif\r\n\t\t\t}\r\n\t\t}\r\n#if USE_DEAD_LIST && VFX_USE_STRIPALIVE_CURRENT\r\n
|
|
else if (attributes.stripAlive)\r\n {\r\n if (STRIP_DATA_X(attachedStripDataBuffer,
|
|
STRIP_MIN_ALIVE, index) == ~1) // Attached strip is no longer alive, recycle
|
|
the particle \r\n {\r\n uint deadIndex = deadListOut.IncrementCounter();\r\n\t\t\t\tdeadListOut[deadIndex]
|
|
= index;\r\n attributes.stripAlive = false;\r\n
|
|
\r\n } \r\n }\r\n#endif\r\n#else\r\n\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x7D000) << 2));\n\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x9C400) << 2));\n\t\tattributes.velocity
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x119400) << 2));\n\t\tattributes.mass
|
|
= (float)1;\n\t\tattributes.age = asfloat(attributeBuffer.Load((index * 0x4
|
|
+ 0x119403) << 2));\n\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x4 + 0x9C403) << 2));\n\t\t\n\r\n\t\t\r\n#if VFX_USE_OLDPOSITION_CURRENT\r\n\t\tattributes.oldPosition
|
|
= attributes.position;\r\n#endif\r\n#if HAS_STRIPS\r\n const StripData
|
|
stripData = GetStripDataFromParticleIndex(index, PARTICLE_PER_STRIP_COUNT);\r\n
|
|
InitStripAttributes(index, attributes, stripData);\r\n#endif\r\n\t\t\r\n\t\tVectorFieldForce_267A9(
|
|
/*inout */attributes.velocity, attributes.mass, attributes.position, GetVFXSampler(VectorField_a,
|
|
samplerVectorField_a), InvFieldTransform_a, FieldTransform_a, Intensity_a,
|
|
Drag_a, deltaTime_a);\n\t\t{\n\t\t float3 tmp_bl = GeneratePerlinCurlNoise(uniform_a,
|
|
float3(1, 0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t
|
|
float3 tmp_bm = tmp_bl * uniform_b;\n\t\t float2 tmp_bn = GeneratePerlinNoise(uniform_e,
|
|
float3(1, 0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t
|
|
float tmp_bo = tmp_bn[0];\n\t\t float tmp_bq = tmp_bo - (float)-1;\n\t\t
|
|
float tmp_bs = tmp_bq / (float)2;\n\t\t float tmp_bt = tmp_bs * uniform_f;\n\t\t
|
|
float tmp_bu = uniform_d + tmp_bt;\n\t\t float tmp_bv = uniform_c + tmp_bu;\n\t\t
|
|
float tmp_bx = tmp_bv * (float)1.79999995;\n\t\t ConformToSphere( /*inout
|
|
*/attributes.velocity, attributes.position, attributes.mass, tmp_bm, tmp_bx,
|
|
(float)5, (float)20, (float)0.100000001, (float)50, deltaTime_a);\n\t\t}\n\t\t{\n\t\t
|
|
float3 tmp_bl = GeneratePerlinCurlNoise(uniform_a, float3(1, 0.75, 2).x, (int)7,
|
|
float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t float3 tmp_bm = tmp_bl
|
|
* uniform_b;\n\t\t float2 tmp_bn = GeneratePerlinNoise(uniform_e, float3(1,
|
|
0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t float
|
|
tmp_bo = tmp_bn[0];\n\t\t float tmp_bq = tmp_bo - (float)-1;\n\t\t float
|
|
tmp_bs = tmp_bq / (float)2;\n\t\t float tmp_bt = tmp_bs * uniform_f;\n\t\t
|
|
float tmp_bu = uniform_d + tmp_bt;\n\t\t float tmp_bv = uniform_c + tmp_bu;\n\t\t
|
|
float tmp_bx = tmp_bv * (float)1.79999995;\n\t\t CollisionSphere_0( /*inout
|
|
*/attributes.position, /*inout */attributes.velocity, /*inout */attributes.age,
|
|
attributes.lifetime, tmp_bm, tmp_bx, (float)0.100000001, (float)0, (float)0,
|
|
deltaTime_a, (float)1, (float)0);\n\t\t}\n\t\tEulerIntegration( /*inout */attributes.position,
|
|
attributes.velocity, deltaTime_a);\n\t\tAge( /*inout */attributes.age, deltaTime_a);\n\t\tReap(attributes.age,
|
|
attributes.lifetime, /*inout */attributes.alive);\n\t\t\n\r\n\t\tattributeBuffer.Store3((index
|
|
* 0x4 + 0x9C400) << 2,asuint(attributes.position));\n\t\tattributeBuffer.Store3((index
|
|
* 0x4 + 0x119400) << 2,asuint(attributes.velocity));\n\t\tattributeBuffer.Store((index
|
|
* 0x4 + 0x119403) << 2,asuint(attributes.age));\n\t\tattributeBuffer.Store((index
|
|
* 0x4 + 0x9C403) << 2,uint(attributes.alive));\n\t\t\n\r\n#if VFX_HAS_INDIRECT_DRAW\r\n
|
|
uint indirectIndex = indirectBuffer.IncrementCounter();\r\n\t\tindirectBuffer[indirectIndex]
|
|
= index;\r\n#endif\r\n#endif\r\n\t}\r\n}\r\n"
|
|
- compute: 0
|
|
name: '[Black Core Swarm]Output Particle Quad'
|
|
source: "Shader \"Hidden/VFX/ShipCore-NucleusCore/Black Core Swarm/Output Particle
|
|
Quad\"\n{\r\n\tSubShader\r\n\t{\t\r\n\t\tCull Off\r\n\t\t\r\n\t\tTags { \"Queue\"=\"Transparent+400\"
|
|
\"IgnoreProjector\"=\"True\" \"RenderType\"=\"Transparent\" }\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tBlend
|
|
SrcAlpha OneMinusSrcAlpha , Zero OneMinusSrcAlpha\n\t\tZTest LEqual\n\t\tZWrite
|
|
Off\n\t\tCull Off\n\t\t\n\t\n\t\t\t\n\t\tHLSLINCLUDE\n\t\t\n\t\t#define NB_THREADS_PER_GROUP
|
|
64\n\t\t#define HAS_ATTRIBUTES 1\n\t\t#define VFX_PASSDEPTH_ACTUAL (0)\n\t\t#define
|
|
VFX_PASSDEPTH_MOTION_VECTOR (1)\n\t\t#define VFX_PASSDEPTH_SELECTION (2)\n\t\t#define
|
|
VFX_USE_SIZE_CURRENT 1\n\t\t#define VFX_USE_COLOR_CURRENT 1\n\t\t#define VFX_USE_POSITION_CURRENT
|
|
1\n\t\t#define VFX_USE_ALPHA_CURRENT 1\n\t\t#define VFX_USE_ALIVE_CURRENT 1\n\t\t#define
|
|
VFX_USE_AXISX_CURRENT 1\n\t\t#define VFX_USE_AXISY_CURRENT 1\n\t\t#define VFX_USE_AXISZ_CURRENT
|
|
1\n\t\t#define VFX_USE_ANGLEX_CURRENT 1\n\t\t#define VFX_USE_ANGLEY_CURRENT
|
|
1\n\t\t#define VFX_USE_ANGLEZ_CURRENT 1\n\t\t#define VFX_USE_PIVOTX_CURRENT
|
|
1\n\t\t#define VFX_USE_PIVOTY_CURRENT 1\n\t\t#define VFX_USE_PIVOTZ_CURRENT
|
|
1\n\t\t#define VFX_USE_SCALEX_CURRENT 1\n\t\t#define VFX_USE_SCALEY_CURRENT
|
|
1\n\t\t#define VFX_USE_SCALEZ_CURRENT 1\n\t\t#define VFX_COLORMAPPING_GRADIENTMAPPED
|
|
1\n\t\t#define IS_TRANSPARENT_PARTICLE 1\n\t\t#define VFX_BLENDMODE_ALPHA 1\n\t\t#define
|
|
VFX_HAS_INDIRECT_DRAW 1\n\t\t#define VFX_BYPASS_EXPOSURE 1\n\t\t#define USE_DEAD_LIST_COUNT
|
|
1\n\t\t#define VFX_PRIMITIVE_QUAD 1\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t#define
|
|
VFX_LOCAL_SPACE 1\n\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\t\t\n\n\t\tCBUFFER_START(parameters)\n\t\t
|
|
float gradient;\n\t\t uint3 PADDING_0;\n\t\tCBUFFER_END\n\t\t\n\t\tstruct
|
|
Attributes\n\t\t{\n\t\t float size;\n\t\t float3 color;\n\t\t float3
|
|
position;\n\t\t float alpha;\n\t\t bool alive;\n\t\t float3 axisX;\n\t\t
|
|
float3 axisY;\n\t\t float3 axisZ;\n\t\t float angleX;\n\t\t float
|
|
angleY;\n\t\t float angleZ;\n\t\t float pivotX;\n\t\t float pivotY;\n\t\t
|
|
float pivotZ;\n\t\t float scaleX;\n\t\t float scaleY;\n\t\t float
|
|
scaleZ;\n\t\t};\n\t\t\n\t\tstruct SourceAttributes\n\t\t{\n\t\t};\n\t\t\n\t\tTexture2D
|
|
mainTexture;\n\t\tSamplerState samplermainTexture;\n\t\tfloat4 mainTexture_TexelSize;\n\t\t\n\t\t\n\n\t\t\n\t\t#define
|
|
VFX_NEEDS_COLOR_INTERPOLATOR (VFX_USE_COLOR_CURRENT || VFX_USE_ALPHA_CURRENT)\n\t\t#if
|
|
HAS_STRIPS\n\t\t#define VFX_OPTIONAL_INTERPOLATION \n\t\t#else\n\t\t#define
|
|
VFX_OPTIONAL_INTERPOLATION nointerpolation\n\t\t#endif\n\t\t\n\t\tByteAddressBuffer
|
|
attributeBuffer;\t\n\t\t\n\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\tStructuredBuffer<uint>
|
|
indirectBuffer;\t\n\t\t#endif\t\n\t\t\n\t\t#if USE_DEAD_LIST_COUNT\n\t\tByteAddressBuffer
|
|
deadListCount;\n\t\t#endif\n\t\t\n\t\t#if HAS_STRIPS\n\t\tBuffer<uint> stripDataBuffer;\n\t\t#endif\n\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD || USE_MOTION_VECTORS_PASS\n\t\tByteAddressBuffer
|
|
elementToVFXBufferPrevious;\n\t\t#endif\n\t\t\n\t\tCBUFFER_START(outputParams)\n\t\t\tfloat
|
|
nbMax;\n\t\t\tfloat systemSeed;\n\t\tCBUFFER_END\n\t\t\n\t\t// Helper macros
|
|
to always use a valid instanceID\n\t\t#if defined(UNITY_STEREO_INSTANCING_ENABLED)\n\t\t\t#define
|
|
VFX_DECLARE_INSTANCE_ID UNITY_VERTEX_INPUT_INSTANCE_ID\n\t\t\t#define VFX_GET_INSTANCE_ID(i)
|
|
unity_InstanceID\n\t\t#else\n\t\t\t#define VFX_DECLARE_INSTANCE_ID uint
|
|
instanceID : SV_InstanceID;\n\t\t\t#define VFX_GET_INSTANCE_ID(i) i.instanceID\n\t\t#endif\n\t\t\n\t\tENDHLSL\n\t\t\n\r\n\t\tPass\n\t\t{\t\t\n\t\t\tTags
|
|
{ \"LightMode\"=\"SceneSelectionPass\" }\n\t\t\n\t\t\tZWrite On\n\t\t\tBlend
|
|
Off\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#define VFX_PASSDEPTH VFX_PASSDEPTH_SELECTION\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos : SV_POSITION;\n\t\t\t\t#if
|
|
USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if USE_ALPHA_TEST || USE_FLIPBOOK_INTERPOLATION
|
|
|| VFX_USE_ALPHA_CURRENT\n\t\t\t\t// x: alpha threshold\n\t\t\t\t// y: frame
|
|
blending factor\n\t\t\t\t// z: alpha\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION float3
|
|
builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\tfloat4 cPosPrevious :
|
|
TEXCOORD3;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD4;\n\t\t\t\t#endif\n\t\t\t
|
|
\n\t\t\t #if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t float3 posWS : TEXCOORD5;\n\t\t\t
|
|
#endif\n\t\t\t \n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t\t#define VFX_VARYING_POSCS pos\n\t\t\t#define
|
|
VFX_VARYING_ALPHA builtInInterpolants.z\n\t\t\t#define VFX_VARYING_ALPHATHRESHOLD
|
|
builtInInterpolants.x\n\t\t\t#define VFX_VARYING_FRAMEBLEND builtInInterpolants.y\n\t\t\t#define
|
|
VFX_VARYING_MOTIONVECTORSCALE builtInInterpolants2.xy\n\t\t\t#define VFX_VARYING_UV
|
|
uv\n\t\t\t\n\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t#define VFX_VARYING_POSWS
|
|
posWS\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_MOTION_VECTORS\n\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_DEPTH_ONLY\n\t\t\t#endif\n\t\t\t\n\t\t\t#if !(defined(VFX_VARYING_PS_INPUTS)
|
|
&& defined(VFX_VARYING_POSCS))\n\t\t\t#error VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS
|
|
and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
Orient_189(inout float3 axisX, inout float3 axisY, inout float3 axisZ, float3
|
|
position) /*mode:FaceCameraPosition axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t
|
|
if (unity_OrthoParams.w == 1.0f) // Face plane for ortho\n\t\t\t {\n\t\t\t
|
|
float3x3 viewRot = GetVFXToViewRotMatrix();\n\t\t\t axisX = viewRot[0].xyz;\n\t\t\t
|
|
axisY = viewRot[1].xyz;\n\t\t\t #if VFX_LOCAL_SPACE // Need to remove
|
|
potential scale in local transform\n\t\t\t axisX = normalize(axisX);\n\t\t\t
|
|
axisY = normalize(axisY);\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
#else\n\t\t\t axisZ = -viewRot[2].xyz;\n\t\t\t #endif\n\t\t\t
|
|
}\n\t\t\t else\n\t\t\t {\n\t\t\t axisZ = normalize(position -
|
|
GetViewVFXPosition());\n\t\t\t axisX = normalize(cross(GetVFXToViewRotMatrix()[1].xyz,axisZ));\n\t\t\t
|
|
axisY = cross(axisZ,axisX);\n\t\t\t }\n\t\t\t \n\t\t\t}\n\t\t\tvoid SetAttribute_CEEAF35C(inout
|
|
float alpha, float Alpha) /*attribute:alpha Composition:Overwrite Source:Slot
|
|
Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t alpha = Alpha;\n\t\t\t}\n\t\t\tvoid
|
|
SubpixelAA(float3 position, inout float alpha, float size, inout float scaleX,
|
|
inout float scaleY)\n\t\t\t{\n\t\t\t \n\t\t\t float2 localSize = size
|
|
* float2(scaleX, scaleY);\n\t\t\t float clipPosW = TransformPositionVFXToClip(position).w;\n\t\t\t
|
|
float minSize = clipPosW / (0.5f * min(UNITY_MATRIX_P[0][0] * _ScreenParams.x,-UNITY_MATRIX_P[1][1]
|
|
* _ScreenParams.y)); // max size in one pixel\n\t\t\t float2 clampedSize
|
|
= max(localSize,minSize);\n\t\t\t float fade = (localSize.x * localSize.y)
|
|
/ (clampedSize.x * clampedSize.y);\n\t\t\t alpha *= fade;\n\t\t\t localSize
|
|
= clampedSize;\n\t\t\t scaleX = localSize.x / size;\n\t\t\t scaleY =
|
|
localSize.y / size;\n\t\t\t}\n\t\t\tvoid CameraFade_18F(float3 position, inout
|
|
float alpha, inout bool alive, float FadedDistance, float InvFadeDistance)
|
|
/*cullWhenFaded:True fadeMode:Alpha */\n\t\t\t{\n\t\t\t \n\t\t\t float
|
|
clipPosW = TransformPositionVFXToClip(position).w;\n\t\t\t float fade =
|
|
saturate((clipPosW - FadedDistance) * InvFadeDistance);\n\t\t\t alpha *=
|
|
fade;\n\t\t\t if(fade == 0.0) alive=false;\n\t\t\t}\n\t\t\tvoid SetAttribute_FDD06EC7(inout
|
|
float3 color, float3 Color) /*attribute:color Composition:Overwrite Source:Slot
|
|
Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t color = Color;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if
|
|
defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error VFX_PRIMITIVE_QUAD
|
|
must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x9C400) << 2));\n\t\t\t\t\n\n\t\t\t\treturn
|
|
attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3 GetStripTangent(float3
|
|
currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x4 + 0x3) << 2));\n\t\t\t\t\t\tattributes.color = asfloat(attributeBuffer.Load3((index
|
|
* 0x4 + 0x0) << 2));\n\t\t\t\t\t\tattributes.position = asfloat(attributeBuffer.Load3((index
|
|
* 0x4 + 0x9C400) << 2));\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x4 + 0x9C403) << 2));\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x4 + 0x9C403) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x4 + 0x3) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x0) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x9C400) << 2));\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\tOrient_189(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ,
|
|
attributes.position);\n\t\t\t\t{\n\t\t\t\t SetAttribute_CEEAF35C( /*inout
|
|
*/attributes.alpha, (float)3);\n\t\t\t\t}\n\t\t\t\tSubpixelAA(attributes.position,
|
|
/*inout */attributes.alpha, attributes.size, /*inout */attributes.scaleX,
|
|
/*inout */attributes.scaleY);\n\t\t\t\t{\n\t\t\t\t CameraFade_18F(attributes.position,
|
|
/*inout */attributes.alpha, /*inout */attributes.alive, (float)40, (float)-0.0333333351);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t
|
|
SetAttribute_FDD06EC7( /*inout */attributes.color, float3(0, 0, 0));\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\tif (!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#define
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 1\n\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t#ifndef
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t#define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH
|
|
0\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\tint _ObjectId;\n\t\t\t\t\tint
|
|
_PassValue;\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#pragma fragment frag\n\t\t\t\t\tvoid
|
|
frag(ps_input i\n\t\t\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t
|
|
#ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t // We need the depth color as SV_Target0
|
|
for alpha to coverage\n\t\t\t\t\t , out float4 outDepthColor : SV_Target0\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target1\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
// When no MSAA, the motion vector is always the first buffer\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t #ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t
|
|
, out float4 outDepthColor : SV_Target0\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
, out float4 dummy : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t , out float4 outSelection : SV_Target0\n\t\t\t\t\t#endif\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\t
|
|
#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t
|
|
float alpha = OUTSG.;\n\t\t\t\t\t #else\n\t\t\t\t\t float alpha =
|
|
VFXGetFragmentColor(i).a;\n\t\t\t\t\t\t\t#if VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t\t\t\talpha
|
|
*= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t
|
|
#endif\n\t\t\t\t\t\tVFXClipFragmentColor(alpha,i);\n\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\toutDepthColor = i.VFX_VARYING_POSCS.z;\n\t\t\t\t\t\t\t#if
|
|
VFX_USE_ALPHA_TO_MASK\n\t\t\t\t\t\t\t\toutDepthColor.a = alpha;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat2
|
|
velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w) -
|
|
(i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\t\t\t\tVFXEncodeMotionVector(velocity
|
|
* 0.5f, encodedMotionVector);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\toutMotionVector
|
|
= encodedMotionVector;\n\t\t\t\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t\t\toutSelection
|
|
= float4(_ObjectId, _PassValue, 1.0, 1.0);\n\t\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t\t\t#ifndef WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\t\tdummy
|
|
= (float4)0;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t#error
|
|
VFX_PASSDEPTH undefined \n\t\t\t\t\t\t#endif\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\n\t\t\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t\t\r\n\t\t//
|
|
Forward pass\n\t\tPass\n\t\t{\t\t\n\t\t\tTags { \"LightMode\"=\"ForwardOnly\"
|
|
}\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#pragma target 4.5\n\t\t\t#pragma multi_compile
|
|
_ DEBUG_DISPLAY\n\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos :
|
|
SV_POSITION;\n\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_COLOR_INTERPOLATOR\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 color : COLOR0;\n\t\t\t\t#endif\n\t\t\t\t#if USE_SOFT_PARTICLE || USE_ALPHA_TEST
|
|
|| USE_FLIPBOOK_INTERPOLATION || USE_EXPOSURE_WEIGHT || WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t//
|
|
x: inverse soft particles fade distance\n\t\t\t\t// y: alpha threshold\n\t\t\t\t//
|
|
z: frame blending factor\n\t\t\t\t// w: exposure weight\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float4 builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tVFX_OPTIONAL_INTERPOLATION
|
|
float2 builtInInterpolants2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t\tfloat3
|
|
posWS : TEXCOORD3;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
cPosPrevious : TEXCOORD4;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD5;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t\t\tfloat3 normal : TEXCOORD6;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t\t\tfloat3 tangent : TEXCOORD7;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t
|
|
\n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\tstruct
|
|
ps_output\n\t\t\t{\n\t\t\t\tfloat4 color : SV_Target0;\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
outMotionVector : SV_Target1;\n\t\t#endif\n\t\t\t};\n\t\t\n\t\t#define VFX_VARYING_PS_INPUTS
|
|
ps_input\n\t\t#define VFX_VARYING_POSCS pos\n\t\t#define VFX_VARYING_COLOR
|
|
color.rgb\n\t\t#define VFX_VARYING_ALPHA color.a\n\t\t#define VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
builtInInterpolants.x\n\t\t#define VFX_VARYING_ALPHATHRESHOLD builtInInterpolants.y\n\t\t#define
|
|
VFX_VARYING_FRAMEBLEND builtInInterpolants.z\n\t\t#define VFX_VARYING_MOTIONVECTORSCALE
|
|
builtInInterpolants2.xy\n\t\t#define VFX_VARYING_UV uv\n\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t#define
|
|
VFX_VARYING_POSWS posWS\n\t\t#endif\n\t\t#if USE_EXPOSURE_WEIGHT\n\t\t#define
|
|
VFX_VARYING_EXPOSUREWEIGHT builtInInterpolants.w\n\t\t#endif\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t#endif\n\t\t\n\t\t#define SHADERPASS SHADERPASS_FORWARD_UNLIT\n\t\t\t\n\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t#define VFX_VARYING_NORMAL normal\n\t\t#endif\n\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t#define VFX_VARYING_TANGENT tangent\n\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
!(defined(VFX_VARYING_PS_INPUTS) && defined(VFX_VARYING_POSCS))\n\t\t\t#error
|
|
VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
Orient_189(inout float3 axisX, inout float3 axisY, inout float3 axisZ, float3
|
|
position) /*mode:FaceCameraPosition axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t
|
|
if (unity_OrthoParams.w == 1.0f) // Face plane for ortho\n\t\t\t {\n\t\t\t
|
|
float3x3 viewRot = GetVFXToViewRotMatrix();\n\t\t\t axisX = viewRot[0].xyz;\n\t\t\t
|
|
axisY = viewRot[1].xyz;\n\t\t\t #if VFX_LOCAL_SPACE // Need to remove
|
|
potential scale in local transform\n\t\t\t axisX = normalize(axisX);\n\t\t\t
|
|
axisY = normalize(axisY);\n\t\t\t axisZ = cross(axisX,axisY);\n\t\t\t
|
|
#else\n\t\t\t axisZ = -viewRot[2].xyz;\n\t\t\t #endif\n\t\t\t
|
|
}\n\t\t\t else\n\t\t\t {\n\t\t\t axisZ = normalize(position -
|
|
GetViewVFXPosition());\n\t\t\t axisX = normalize(cross(GetVFXToViewRotMatrix()[1].xyz,axisZ));\n\t\t\t
|
|
axisY = cross(axisZ,axisX);\n\t\t\t }\n\t\t\t \n\t\t\t}\n\t\t\tvoid SetAttribute_CEEAF35C(inout
|
|
float alpha, float Alpha) /*attribute:alpha Composition:Overwrite Source:Slot
|
|
Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t alpha = Alpha;\n\t\t\t}\n\t\t\tvoid
|
|
SubpixelAA(float3 position, inout float alpha, float size, inout float scaleX,
|
|
inout float scaleY)\n\t\t\t{\n\t\t\t \n\t\t\t float2 localSize = size
|
|
* float2(scaleX, scaleY);\n\t\t\t float clipPosW = TransformPositionVFXToClip(position).w;\n\t\t\t
|
|
float minSize = clipPosW / (0.5f * min(UNITY_MATRIX_P[0][0] * _ScreenParams.x,-UNITY_MATRIX_P[1][1]
|
|
* _ScreenParams.y)); // max size in one pixel\n\t\t\t float2 clampedSize
|
|
= max(localSize,minSize);\n\t\t\t float fade = (localSize.x * localSize.y)
|
|
/ (clampedSize.x * clampedSize.y);\n\t\t\t alpha *= fade;\n\t\t\t localSize
|
|
= clampedSize;\n\t\t\t scaleX = localSize.x / size;\n\t\t\t scaleY =
|
|
localSize.y / size;\n\t\t\t}\n\t\t\tvoid CameraFade_18F(float3 position, inout
|
|
float alpha, inout bool alive, float FadedDistance, float InvFadeDistance)
|
|
/*cullWhenFaded:True fadeMode:Alpha */\n\t\t\t{\n\t\t\t \n\t\t\t float
|
|
clipPosW = TransformPositionVFXToClip(position).w;\n\t\t\t float fade =
|
|
saturate((clipPosW - FadedDistance) * InvFadeDistance);\n\t\t\t alpha *=
|
|
fade;\n\t\t\t if(fade == 0.0) alive=false;\n\t\t\t}\n\t\t\tvoid SetAttribute_FDD06EC7(inout
|
|
float3 color, float3 Color) /*attribute:color Composition:Overwrite Source:Slot
|
|
Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t color = Color;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\t#if
|
|
defined(HAS_STRIPS) && !defined(VFX_PRIMITIVE_QUAD)\n\t\t\t#error VFX_PRIMITIVE_QUAD
|
|
must be defined when HAS_STRIPS is.\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct vs_input\n\t\t\t{\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t#define PARTICLE_IN_EDGE (id & 1)\n\t\t\t\n\t\t\tfloat3 GetParticlePosition(uint
|
|
index)\n\t\t\t{\n\t\t\t\tstruct Attributes attributes = (Attributes)0;\n\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x9C400) << 2));\n\t\t\t\t\n\n\t\t\t\treturn
|
|
attributes.position;\n\t\t\t}\n\t\t\t\n\t\t\tfloat3 GetStripTangent(float3
|
|
currentPos, uint relativeIndex, const StripData stripData)\n\t\t\t{\n\t\t\t\tfloat3
|
|
prevTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex > 0)\n\t\t\t\t{\n\t\t\t\t\tuint
|
|
prevIndex = GetParticleIndex(relativeIndex - 1,stripData);\n\t\t\t\t\tprevTangent
|
|
= normalize(currentPos - GetParticlePosition(prevIndex));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfloat3
|
|
nextTangent = (float3)0.0f;\n\t\t\t\tif (relativeIndex < stripData.nextIndex
|
|
- 1)\n\t\t\t\t{\n\t\t\t\t\tuint nextIndex = GetParticleIndex(relativeIndex
|
|
+ 1,stripData);\n\t\t\t\t\tnextTangent = normalize(GetParticlePosition(nextIndex)
|
|
- currentPos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn normalize(prevTangent +
|
|
nextTangent);\n\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\t#pragma vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS
|
|
vert(uint id : SV_VertexID, vs_input i)\n\t\t\t{\n\t\t\t\tVFX_VARYING_PS_INPUTS
|
|
o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\tuint index = id / 3;\n\t\t\t#elif VFX_PRIMITIVE_QUAD\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tid += VFX_GET_INSTANCE_ID(i) * 8192;\n\t\t\t\tconst uint
|
|
vertexPerStripCount = (PARTICLE_PER_STRIP_COUNT - 1) << 2;\n\t\t\t\tconst StripData
|
|
stripData = GetStripDataFromStripIndex(id / vertexPerStripCount, PARTICLE_PER_STRIP_COUNT);\n\t\t\t\tuint
|
|
currentIndex = ((id % vertexPerStripCount) >> 2) + (id & 1); // relative index
|
|
of particle\n\t\t\t\t\n\t\t\t\tuint maxEdgeIndex = currentIndex - PARTICLE_IN_EDGE
|
|
+ 1;\n\t\t\t\tif (maxEdgeIndex >= stripData.nextIndex)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\tuint
|
|
index = GetParticleIndex(currentIndex, stripData);\n\t\t\t#else\n\t\t\t\tuint
|
|
index = (id >> 2) + VFX_GET_INSTANCE_ID(i) * 2048;\n\t\t\t#endif\n\t\t\t#elif
|
|
VFX_PRIMITIVE_OCTAGON\n\t\t\t\tuint index = (id >> 3) + VFX_GET_INSTANCE_ID(i)
|
|
* 1024;\n\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount = 0;\n\t\t\t\t\t\t#if
|
|
USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.size = asfloat(attributeBuffer.Load((index
|
|
* 0x4 + 0x3) << 2));\n\t\t\t\t\t\tattributes.color = asfloat(attributeBuffer.Load3((index
|
|
* 0x4 + 0x0) << 2));\n\t\t\t\t\t\tattributes.position = asfloat(attributeBuffer.Load3((index
|
|
* 0x4 + 0x9C400) << 2));\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x4 + 0x9C403) << 2));\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.scaleX = (float)1;\n\t\t\t\t\t\tattributes.scaleY
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleZ = (float)1;\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x4 + 0x9C403) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.size
|
|
= asfloat(attributeBuffer.Load((index * 0x4 + 0x3) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x0) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x4 + 0x9C400) << 2));\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.scaleX
|
|
= (float)1;\n\t\t\t\t\t\tattributes.scaleY = (float)1;\n\t\t\t\t\t\tattributes.scaleZ
|
|
= (float)1;\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\tOrient_189(
|
|
/*inout */attributes.axisX, /*inout */attributes.axisY, /*inout */attributes.axisZ,
|
|
attributes.position);\n\t\t\t\t{\n\t\t\t\t SetAttribute_CEEAF35C( /*inout
|
|
*/attributes.alpha, (float)3);\n\t\t\t\t}\n\t\t\t\tSubpixelAA(attributes.position,
|
|
/*inout */attributes.alpha, attributes.size, /*inout */attributes.scaleX,
|
|
/*inout */attributes.scaleY);\n\t\t\t\t{\n\t\t\t\t CameraFade_18F(attributes.position,
|
|
/*inout */attributes.alpha, /*inout */attributes.alive, (float)40, (float)-0.0333333351);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t
|
|
SetAttribute_FDD06EC7( /*inout */attributes.color, float3(0, 0, 0));\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\tif (!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
VFX_PRIMITIVE_QUAD\n\t\t\t\n\t\t\t#if HAS_STRIPS\n\t\t\t#if VFX_STRIPS_UV_STRECHED\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= (float)(currentIndex) / (stripData.nextIndex - 1);\n\t\t\t#elif VFX_STRIPS_UV_PER_SEGMENT\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= PARTICLE_IN_EDGE;\n\t\t\t#else\n\t\t\t\t\n\t\t\t o.VFX_VARYING_UV.x =
|
|
texCoord;\n\t\t\t#endif\n\t\t\t\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2)
|
|
>> 1);\n\t\t\t\tconst float2 vOffsets = float2(0.0f,o.VFX_VARYING_UV.y - 0.5f);\n\t\t\t\t\n\t\t\t#if
|
|
VFX_STRIPS_SWAP_UV\n\t\t\t\to.VFX_VARYING_UV.xy = float2(1.0f - o.VFX_VARYING_UV.y,
|
|
o.VFX_VARYING_UV.x);\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t// Orient strips along
|
|
their tangents\n\t\t\t\tattributes.axisX = GetStripTangent(attributes.position,
|
|
currentIndex, stripData);\n\t\t\t#if !VFX_STRIPS_ORIENT_CUSTOM\n\t\t\t\tattributes.axisZ
|
|
= attributes.position - GetViewVFXPosition();\n\t\t\t#endif\n\t\t\t\tattributes.axisY
|
|
= normalize(cross(attributes.axisZ, attributes.axisX));\n\t\t\t\tattributes.axisZ
|
|
= normalize(cross(attributes.axisX, attributes.axisY));\n\t\t\t\t\n\t\t\t#else\n\t\t\t\to.VFX_VARYING_UV.x
|
|
= float(id & 1);\n\t\t\t\to.VFX_VARYING_UV.y = float((id & 2) >> 1);\n\t\t\t\tconst
|
|
float2 vOffsets = o.VFX_VARYING_UV.xy - 0.5f;\n\t\t\t#endif\n\t\t\t\t\n\t\t\t#elif
|
|
VFX_PRIMITIVE_TRIANGLE\n\t\t\t\n\t\t\t\tconst float2 kOffsets[] = {\n\t\t\t\t\tfloat2(-0.5f,
|
|
\t-0.288675129413604736328125f),\n\t\t\t\t\tfloat2(0.0f, \t0.57735025882720947265625f),\n\t\t\t\t\tfloat2(0.5f,\t-0.288675129413604736328125f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst
|
|
float kUVScale = 0.866025388240814208984375f;\n\t\t\t\t\n\t\t\t\tconst float2
|
|
vOffsets = kOffsets[id % 3];\n\t\t\t\to.VFX_VARYING_UV.xy = (vOffsets * kUVScale)
|
|
+ 0.5f;\n\t\t\t\t\n\t\t\t#elif VFX_PRIMITIVE_OCTAGON\t\n\t\t\t\t\n\t\t\t\tconst
|
|
float2 kUvs[8] = \n\t\t\t\t{\n\t\t\t\t\tfloat2(-0.5f,\t0.0f),\n\t\t\t\t\tfloat2(-0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.0f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.5f),\n\t\t\t\t\tfloat2(0.5f,\t0.0f),\n\t\t\t\t\tfloat2(0.5f,\t-0.5f),\n\t\t\t\t\tfloat2(0.0f,\t-0.5f),\n\t\t\t\t\tfloat2(-0.5f,\t-0.5f),\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tcropFactor
|
|
= id & 1 ? 1.0f - cropFactor : 1.0f;\n\t\t\t\tconst float2 vOffsets = kUvs[id
|
|
& 7] * cropFactor;\n\t\t\t\to.VFX_VARYING_UV.xy = vOffsets + 0.5f;\n\t\t\t\t\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t#if
|
|
HAS_STRIPS\n\t\t\t\tsize3 += size3 < 0.0f ? -VFX_EPSILON : VFX_EPSILON; //
|
|
Add an epsilon so that size is never 0 for strips\n\t\t\t#endif\n\t\t\t\t\n\t\t\t\tconst
|
|
float4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = float3(vOffsets, 0.0f);\n\t\t\t\tfloat3 vPos = mul(elementToVFX,float4(inputVertexPosition,
|
|
1.0f)).xyz;\n\t\t\t\n\t\t\t\to.VFX_VARYING_POSCS = TransformPositionVFXToClip(vPos);\n\t\t\t
|
|
\n\t\t\t float3 vPosWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\n\t\t\t
|
|
#ifdef VFX_VARYING_POSWS\n\t\t\t o.VFX_VARYING_POSWS = vPosWS;\n\t\t\t
|
|
#endif\n\t\t\t\n\t\t\t\tfloat3 normalWS = normalize(TransformDirectionVFXToWorld(normalize(-transpose(elementToVFX)[2].xyz)));\n\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\tfloat normalFlip = (size3.x * size3.y * size3.z)
|
|
< 0 ? -1 : 1;\n\t\t\t\to.VFX_VARYING_NORMAL = normalFlip * normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = normalize(TransformDirectionVFXToWorld(normalize(transpose(elementToVFX)[0].xyz)));\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_BENTFACTORS\n\t\t\t\t\n\t\t\t\t#if HAS_STRIPS\n\t\t\t\t#define
|
|
BENT_FACTOR_MULTIPLIER 2.0f\n\t\t\t\t#else\n\t\t\t\t#define BENT_FACTOR_MULTIPLIER
|
|
1.41421353816986083984375f\n\t\t\t\t#endif\n\t\t\t\to.VFX_VARYING_BENTFACTORS
|
|
= vOffsets * normalBendingFactor * BENT_FACTOR_MULTIPLIER;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t\t\n\t\t#endif\n\t\t\t\t\n\t\t\t#pragma fragment frag\n\t\t\tps_output
|
|
frag(ps_input i)\n\t\t\t{\n\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\tps_output
|
|
o = (ps_output)0;\n\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\n\t\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\t\t\t\t#if USE_DOUBLE_SIDED\n\t\t\t\t\t\t\tconst
|
|
float faceMul = frontFace ? 1.0f : -1.0f;\n\t\t\t\t\t\t\t#else\n\t\t\t\t\t\t\tconst
|
|
float faceMul = 1.0f;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3
|
|
normalWS = i.VFX_VARYING_NORMAL * faceMul;\n\t\t\t\t\t\t\tconst VFXUVData uvData
|
|
= GetUVData(i);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_TANGENT\n\t\t\t\t\t\t\tfloat3
|
|
tangentWS = i.VFX_VARYING_TANGENT;\n\t\t\t\t\t\t\tfloat3 bitangentWS = cross(i.VFX_VARYING_TANGENT,i.VFX_VARYING_NORMAL);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_BENTFACTORS) && USE_NORMAL_BENDING\t\n\t\t\t\t\t\t\tfloat3
|
|
bentFactors = float3(i.VFX_VARYING_BENTFACTORS.xy,sqrt(1.0f - dot(i.VFX_VARYING_BENTFACTORS,i.VFX_VARYING_BENTFACTORS)));\n\t\t\t\t\t\t\tnormalWS
|
|
= tangentWS * bentFactors.x + bitangentWS * bentFactors.y + normalWS * bentFactors.z;\n\t\t\t\t\t\t\ttangentWS
|
|
= normalize(cross(normalWS,bitangentWS));\n\t\t\t\t\t\t\tbitangentWS = cross(tangentWS,normalWS);\n\t\t\t\t\t\t\ttangentWS
|
|
*= faceMul;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3x3 tbn
|
|
= float3x3(tangentWS,bitangentWS,normalWS);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
USE_NORMAL_MAP\n\t\t\t\t\t\t\tfloat3 n = SampleNormalMap(VFX_SAMPLER(normalMap),uvData);\n\t\t\t\t\t\t\tfloat
|
|
normalScale = 1.0f;\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_NORMALSCALE\n\t\t\t\t\t\t\tnormalScale
|
|
= i.VFX_VARYING_NORMALSCALE;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\tnormalWS
|
|
= normalize(lerp(normalWS,mul(n,tbn),normalScale));\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t#if
|
|
VFX_SHADERGRAPH\n\t\t \n\t\t \n\t\t \n\t\t \n\t\t
|
|
#if HAS_SHADERGRAPH_PARAM_COLOR\n\t\t o.color.rgb = OUTSG..rgb;\n\t\t
|
|
#endif\n\t\t \n\t\t #if HAS_SHADERGRAPH_PARAM_ALPHA \n\t\t
|
|
o.color.a = OUTSG.;\n\t\t #endif\n\t\t#else\n\t\t\t\n\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR VFXGetTextureColor(VFX_SAMPLER(mainTexture),i)\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tfloat4
|
|
color = VFXGetFragmentColor(i);\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifndef VFX_TEXTURE_COLOR\n\t\t\t\t\t\t\t#define
|
|
VFX_TEXTURE_COLOR float4(1.0,1.0,1.0,1.0)\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_DEFAULT\n\t\t\t\t\t\t\to.color = color * VFX_TEXTURE_COLOR;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_COLORMAPPING_GRADIENTMAPPED\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\to.color = SampleGradient(gradient,
|
|
VFX_TEXTURE_COLOR.a * color.a) * float4(color.rgb,1.0);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\to.color
|
|
= VFXApplyPreExposure(o.color, i);\n\t\t#endif\n\t\t\n\t\t\t\to.color = VFXApplyFog(o.color,i);\n\t\t\t\tVFXClipFragmentColor(o.color.a,i);\n\t\t\t\to.color.a
|
|
= saturate(o.color.a);\n\t\t\t\to.color = VFXTransformFinalColor(o.color);\n\t\t\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t\n\t\t\t\t\t\tfloat2 velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w)
|
|
- (i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\tVFXEncodeMotionVector(velocity * 0.5f,
|
|
encodedMotionVector);\n\t\t\t\t\t\t\n\t\t\t\to.outMotionVector = encodedMotionVector;\n\t\t
|
|
o.outMotionVector.a = o.color.a < i.VFX_VARYING_ALPHATHRESHOLD ? 0.0f : 1.0f;
|
|
//Independant clipping for motion vector pass\n\t\t#endif\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t}\r\n}\r\n"
|
|
- compute: 0
|
|
name: '[Core Chunks]Output Particle Mesh'
|
|
source: "Shader \"Hidden/VFX/ShipCore-NucleusCore/Core Chunks/Output Particle
|
|
Mesh\"\n{\r\n\tSubShader\r\n\t{\r\n\t\tTags { \"Queue\"=\"Geometry+0\" \"IgnoreProjector\"=\"False\"
|
|
\"RenderType\"=\"Opaque\" }\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tZTest
|
|
LEqual\n\t\tZWrite On\n\t\tCull Back\n\t\t\n\t\n\t\t\t\n\t\tHLSLINCLUDE\n\t\t\n\t\t#define
|
|
NB_THREADS_PER_GROUP 64\n\t\t#define HAS_ATTRIBUTES 1\n\t\t#define VFX_PASSDEPTH_ACTUAL
|
|
(0)\n\t\t#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n\t\t#define VFX_PASSDEPTH_SELECTION
|
|
(2)\n\t\t#define VFX_USE_SCALEX_CURRENT 1\n\t\t#define VFX_USE_SCALEY_CURRENT
|
|
1\n\t\t#define VFX_USE_SCALEZ_CURRENT 1\n\t\t#define VFX_USE_LIFETIME_CURRENT
|
|
1\n\t\t#define VFX_USE_POSITION_CURRENT 1\n\t\t#define VFX_USE_COLOR_CURRENT
|
|
1\n\t\t#define VFX_USE_ALPHA_CURRENT 1\n\t\t#define VFX_USE_ALIVE_CURRENT 1\n\t\t#define
|
|
VFX_USE_AXISX_CURRENT 1\n\t\t#define VFX_USE_AXISY_CURRENT 1\n\t\t#define VFX_USE_AXISZ_CURRENT
|
|
1\n\t\t#define VFX_USE_ANGLEX_CURRENT 1\n\t\t#define VFX_USE_ANGLEY_CURRENT
|
|
1\n\t\t#define VFX_USE_ANGLEZ_CURRENT 1\n\t\t#define VFX_USE_PIVOTX_CURRENT
|
|
1\n\t\t#define VFX_USE_PIVOTY_CURRENT 1\n\t\t#define VFX_USE_PIVOTZ_CURRENT
|
|
1\n\t\t#define VFX_USE_SIZE_CURRENT 1\n\t\t#define VFX_USE_AGE_CURRENT 1\n\t\t#define
|
|
VFX_USE_PARTICLEID_CURRENT 1\n\t\t#define VFX_COLORMAPPING_DEFAULT 1\n\t\t#define
|
|
IS_OPAQUE_PARTICLE 1\n\t\t#define USE_CAST_SHADOWS_PASS 1\n\t\t#define VFX_BYPASS_EXPOSURE
|
|
1\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t#define
|
|
VFX_LOCAL_SPACE 1\n\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\t\t\n\n\t\tCBUFFER_START(parameters)\n\t\t
|
|
float4 uniform_a;\n\t\t float4 Scale_x_e;\n\t\t float4 Scale_y_e;\n\t\t
|
|
float4 Scale_z_e;\n\t\t float3 SamplePosition_c;\n\t\t float uniform_b;\n\t\t
|
|
float3 valueScale_c;\n\t\t float uniform_c;\n\t\t float3 Scale_f;\n\t\t
|
|
float uniform_d;\n\t\t float3 uniform_e;\n\t\t uint PADDING_0;\n\t\t
|
|
float3 uniform_f;\n\t\t uint PADDING_1;\n\t\tCBUFFER_END\n\t\t\n\t\tstruct
|
|
Attributes\n\t\t{\n\t\t float scaleX;\n\t\t float scaleY;\n\t\t float
|
|
scaleZ;\n\t\t float lifetime;\n\t\t float3 position;\n\t\t float3
|
|
color;\n\t\t float alpha;\n\t\t bool alive;\n\t\t float3 axisX;\n\t\t
|
|
float3 axisY;\n\t\t float3 axisZ;\n\t\t float angleX;\n\t\t float
|
|
angleY;\n\t\t float angleZ;\n\t\t float pivotX;\n\t\t float pivotY;\n\t\t
|
|
float pivotZ;\n\t\t float size;\n\t\t float age;\n\t\t uint particleId;\n\t\t};\n\t\t\n\t\tstruct
|
|
SourceAttributes\n\t\t{\n\t\t};\n\t\t\n\t\tTexture3D attributeMap_c;\n\t\tSamplerState
|
|
samplerattributeMap_c;\n\t\tfloat4 attributeMap_c_TexelSize;\n\t\t\n\t\tTexture2D
|
|
mainTexture;\n\t\tSamplerState samplermainTexture;\n\t\tfloat4 mainTexture_TexelSize;\n\t\t\n\t\t\n\n\t\t\n\t\t#define
|
|
VFX_NEEDS_COLOR_INTERPOLATOR (VFX_USE_COLOR_CURRENT || VFX_USE_ALPHA_CURRENT)\n\t\t#if
|
|
HAS_STRIPS\n\t\t#define VFX_OPTIONAL_INTERPOLATION \n\t\t#else\n\t\t#define
|
|
VFX_OPTIONAL_INTERPOLATION nointerpolation\n\t\t#endif\n\t\t\n\t\tByteAddressBuffer
|
|
attributeBuffer;\t\n\t\t\n\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\tStructuredBuffer<uint>
|
|
indirectBuffer;\t\n\t\t#endif\t\n\t\t\n\t\t#if USE_DEAD_LIST_COUNT\n\t\tByteAddressBuffer
|
|
deadListCount;\n\t\t#endif\n\t\t\n\t\t#if HAS_STRIPS\n\t\tBuffer<uint> stripDataBuffer;\n\t\t#endif\n\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD || USE_MOTION_VECTORS_PASS\n\t\tByteAddressBuffer
|
|
elementToVFXBufferPrevious;\n\t\t#endif\n\t\t\n\t\tCBUFFER_START(outputParams)\n\t\t\tfloat
|
|
nbMax;\n\t\t\tfloat systemSeed;\n\t\tCBUFFER_END\n\t\t\n\t\t// Helper macros
|
|
to always use a valid instanceID\n\t\t#if defined(UNITY_STEREO_INSTANCING_ENABLED)\n\t\t\t#define
|
|
VFX_DECLARE_INSTANCE_ID UNITY_VERTEX_INPUT_INSTANCE_ID\n\t\t\t#define VFX_GET_INSTANCE_ID(i)
|
|
unity_InstanceID\n\t\t#else\n\t\t\t#define VFX_DECLARE_INSTANCE_ID uint
|
|
instanceID : SV_InstanceID;\n\t\t\t#define VFX_GET_INSTANCE_ID(i) i.instanceID\n\t\t#endif\n\t\t\n\t\tENDHLSL\n\t\t\n\r\n\t\tPass\n\t\t{\t\t\n\t\t\tTags
|
|
{ \"LightMode\"=\"SceneSelectionPass\" }\n\t\t\n\t\t\tZWrite On\n\t\t\tBlend
|
|
Off\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#define VFX_PASSDEPTH VFX_PASSDEPTH_SELECTION\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos : SV_POSITION;\n\t\t\t\t#if
|
|
USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t
|
|
float4 uv1 : TEXCOORD1;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t
|
|
float4 uv2 : TEXCOORD2;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t
|
|
float4 uv3 : TEXCOORD3;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t
|
|
float4 vertexColor : COLOR;\n\t\t\t #endif\n\t\t\t\t#if USE_ALPHA_TEST ||
|
|
USE_FLIPBOOK_INTERPOLATION || VFX_USE_ALPHA_CURRENT\n\t\t\t\t// x: alpha threshold\n\t\t\t\t//
|
|
y: frame blending factor\n\t\t\t\t// z: alpha\n\t\t\t\tnointerpolation float3
|
|
builtInInterpolants : TEXCOORD4;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tnointerpolation
|
|
float2 builtInInterpolants2 : TEXCOORD5;\n\t\t\t\t#endif\n\t\t\t \n\t\t\t
|
|
#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t\tfloat3 posWS : TEXCOORD8;\n\t\t\t
|
|
#endif\n\t\t\t\t\n\t\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\tfloat4
|
|
cPosPrevious : TEXCOORD6;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD7;\n\t\t\t\t#endif\n\t\t\t
|
|
\n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t\t#define VFX_VARYING_POSCS pos\n\t\t\t#define
|
|
VFX_VARYING_ALPHA builtInInterpolants.z\n\t\t\t#define VFX_VARYING_ALPHATHRESHOLD
|
|
builtInInterpolants.x\n\t\t\t#define VFX_VARYING_FRAMEBLEND builtInInterpolants.y\n\t\t\t#define
|
|
VFX_VARYING_MOTIONVECTORSCALE builtInInterpolants2.xy\n\t\t\t#define VFX_VARYING_UV
|
|
uv\n\t\t\t\n\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t#define VFX_VARYING_POSWS
|
|
posWS\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_MOTION_VECTORS\n\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_DEPTH_ONLY\n\t\t\t#endif\n\t\t\t\n\t\t\t#if !(defined(VFX_VARYING_PS_INPUTS)
|
|
&& defined(VFX_VARYING_POSCS))\n\t\t\t#error VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS
|
|
and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
SetAttribute_69998A5D(inout float pivotX, inout float pivotY, inout float pivotZ,
|
|
float3 Pivot) /*attribute:pivot Composition:Add Source:Slot Random:Off channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t pivotX += Pivot.x;\n\t\t\t pivotY += Pivot.y;\n\t\t\t
|
|
pivotZ += Pivot.z;\n\t\t\t}\n\t\t\tvoid SetAttribute_FDD06EC7(inout float3
|
|
color, float3 Color) /*attribute:color Composition:Overwrite Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t color = Color;\n\t\t\t}\n\t\t\tvoid AttributeFromMap_6F69BFAE(inout
|
|
float3 position, VFXSampler3D attributeMap, float3 SamplePosition, float LOD,
|
|
float3 valueBias, float3 valueScale) /*attribute:position Composition:Add SampleMode:Sample3DLOD
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t \n\t\t\t float3 value = (float3)attributeMap.t.SampleLevel(attributeMap.s,
|
|
SamplePosition, LOD);\n\t\t\t value = (value + valueBias) * valueScale;\n\t\t\t
|
|
position += value;\n\t\t\t}\n\t\t\tvoid SetAttribute_3278B22F(inout float size,
|
|
float Size) /*attribute:size Composition:Overwrite Source:Slot Random:Off channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t size = Size;\n\t\t\t}\n\t\t\tvoid AttributeFromCurve_8BB145A6(inout
|
|
float scaleX, inout float scaleY, inout float scaleZ, float age, float lifetime,
|
|
float4 Scale_x, float4 Scale_y, float4 Scale_z) /*attribute:scale Composition:Multiply
|
|
AlphaComposition:Overwrite SampleMode:OverLife Mode:PerComponent ColorMode:ColorAndAlpha
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t float t = age / lifetime;\n\t\t\t float3
|
|
value = 0.0f;\n\t\t\t value[0] = SampleCurve(Scale_x, t);\n\t\t\t value[1]
|
|
= SampleCurve(Scale_y, t);\n\t\t\t value[2] = SampleCurve(Scale_z, t);\n\t\t\t
|
|
scaleX *= value.x;\n\t\t\t scaleY *= value.y;\n\t\t\t scaleZ *= value.z;\n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_DC8A9868(inout float scaleX, inout float scaleY, inout float scaleZ,
|
|
float3 Scale) /*attribute:scale Composition:Multiply Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t scaleX *= Scale.x;\n\t\t\t scaleY *=
|
|
Scale.y;\n\t\t\t scaleZ *= Scale.z;\n\t\t\t}\n\t\t\tvoid Orient_31E(inout
|
|
float3 axisX, inout float3 axisY, inout float3 axisZ, float3 position, float3
|
|
Position) /*mode:LookAtPosition axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t
|
|
axisZ = normalize(position - Position);\n\t\t\t axisX = normalize(cross(GetVFXToViewRotMatrix()[1].xyz,axisZ));\n\t\t\t
|
|
axisY = cross(axisZ,axisX);\n\t\t\t \n\t\t\t}\n\t\t\tvoid SetAttribute_C707D62A(inout
|
|
float3 position, float3 Position) /*attribute:position Composition:Add Source:Slot
|
|
Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t position += Position;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\tstruct
|
|
vs_input\n\t\t\t{\n\t\t\t\tfloat3 pos : POSITION;\n\t\t\t\tfloat2 uv : TEXCOORD0;\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t float4 uv1 : TEXCOORD1;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t float4 uv2 : TEXCOORD2;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t float4 uv3 : TEXCOORD3;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t float4 vertexColor : COLOR;\n\t\t\t
|
|
#endif\n\t\t\t\tfloat3 normal : NORMAL;\n\t\t\t\t#if defined(VFX_VARYING_TANGENT)
|
|
|| SHADERGRAPH_HAS_NORMAL\n\t\t\t\tfloat4 tangent : TANGENT;\n\t\t\t\t#endif\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#pragma
|
|
vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS vert(vs_input i)\n\t\t\t{\n\t\t\t
|
|
VFX_VARYING_PS_INPUTS o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t\tuint
|
|
index = VFX_GET_INSTANCE_ID(i);\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount
|
|
= 0;\n\t\t\t\t\t\t#if USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.scaleX = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.scaleY = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x4) << 2));\n\t\t\t\t\t\tattributes.scaleZ = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x5) << 2));\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x3000) << 2));\n\t\t\t\t\t\tattributes.position = asfloat(attributeBuffer.Load3((index
|
|
* 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x3600) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.size
|
|
= (float)0.100000001;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x3601) << 2));\n\t\t\t\t\t\tattributes.particleId = (attributeBuffer.Load((index
|
|
* 0x8 + 0x6) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x3600) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.scaleX
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.scaleY
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x4) << 2));\n\t\t\t\t\t\tattributes.scaleZ
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x5) << 2));\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x3000) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.size = (float)0.100000001;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x3601) << 2));\n\t\t\t\t\t\tattributes.particleId
|
|
= (attributeBuffer.Load((index * 0x8 + 0x6) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t{\n\t\t\t\t
|
|
uint tmp_bl = attributes.particleId ^ asuint(uniform_b);\n\t\t\t\t float
|
|
tmp_bm = FixedRand(tmp_bl);\n\t\t\t\t float tmp_bn = tmp_bm + uniform_c;\n\t\t\t\t
|
|
float tmp_bo = SampleCurve(uniform_a,tmp_bn);\n\t\t\t\t float tmp_bq = tmp_bo
|
|
* (float)0.100000001;\n\t\t\t\t bool tmp_bs = tmp_bm > (float)0.899999976;\n\t\t\t\t
|
|
float tmp_bv = tmp_bs ? (float)1.5 : (float)1;\n\t\t\t\t float tmp_bw =
|
|
tmp_bq * tmp_bv;\n\t\t\t\t float tmp_bx = tmp_bw * uniform_d;\n\t\t\t\t
|
|
float3 tmp_by = float3((float)0, (float)0, tmp_bx);\n\t\t\t\t SetAttribute_69998A5D(
|
|
/*inout */attributes.pivotX, /*inout */attributes.pivotY, /*inout */attributes.pivotZ,
|
|
tmp_by);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t SetAttribute_FDD06EC7( /*inout
|
|
*/attributes.color, float3(0, 0, 0));\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t AttributeFromMap_6F69BFAE(
|
|
/*inout */attributes.position, GetVFXSampler(attributeMap_c, samplerattributeMap_c),
|
|
SamplePosition_c, (float)0, float3(-0.5, -0.5, -0.5), valueScale_c);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t
|
|
SetAttribute_3278B22F( /*inout */attributes.size, (float)0.5);\n\t\t\t\t}\n\t\t\t\tAttributeFromCurve_8BB145A6(
|
|
/*inout */attributes.scaleX, /*inout */attributes.scaleY, /*inout */attributes.scaleZ,
|
|
attributes.age, attributes.lifetime, Scale_x_e, Scale_y_e, Scale_z_e);\n\t\t\t\tSetAttribute_DC8A9868(
|
|
/*inout */attributes.scaleX, /*inout */attributes.scaleY, /*inout */attributes.scaleZ,
|
|
Scale_f);\n\t\t\t\t{\n\t\t\t\t Orient_31E( /*inout */attributes.axisX,
|
|
/*inout */attributes.axisY, /*inout */attributes.axisZ, attributes.position,
|
|
float3(0, 0, 0));\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t float3 tmp_bm = GeneratePerlinCurlNoise(uniform_e,
|
|
float3(1, 0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t
|
|
float3 tmp_bn = tmp_bm * uniform_f;\n\t\t\t\t SetAttribute_C707D62A( /*inout
|
|
*/attributes.position, tmp_bn);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\tif
|
|
(!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\to.VFX_VARYING_UV.xy
|
|
= i.uv;\n\t\t\t \n\t\t\t #if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t o.uv1
|
|
= i.uv1;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t
|
|
o.uv2 = i.uv2;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t
|
|
o.uv3 = i.uv3;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t
|
|
o.vertexColor = i.vertexColor;\n\t\t\t #endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = i.pos;\n\t\t\t\tfloat4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
vPos = mul(elementToVFX,float4(inputVertexPosition,1.0f)).xyz;\n\t\t\t\tfloat4
|
|
csPos = TransformPositionVFXToClip(vPos);\n\t\t\t\to.VFX_VARYING_POSCS = csPos;\n\t\t\t\t\n\t\t\t\tfloat3
|
|
normalWS = normalize(TransformDirectionVFXToWorld(mul((float3x3)elementToVFX,
|
|
i.normal)));\n\t\t\t\t#ifdef VFX_VARYING_NORMAL // TODO Should use inverse
|
|
transpose\n\t\t\t\to.VFX_VARYING_NORMAL = normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = float4(normalize(TransformDirectionVFXToWorld(mul((float3x3)elementToVFX,i.tangent.xyz))),i.tangent.w);\n\t\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#define
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 1\n\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t#ifndef
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t#define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH
|
|
0\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\tint _ObjectId;\n\t\t\t\t\tint
|
|
_PassValue;\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#pragma fragment frag\n\t\t\t\t\tvoid
|
|
frag(ps_input i\n\t\t\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t
|
|
#ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t // We need the depth color as SV_Target0
|
|
for alpha to coverage\n\t\t\t\t\t , out float4 outDepthColor : SV_Target0\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target1\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
// When no MSAA, the motion vector is always the first buffer\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t #ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t
|
|
, out float4 outDepthColor : SV_Target0\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
, out float4 dummy : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t , out float4 outSelection : SV_Target0\n\t\t\t\t\t#endif\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\t
|
|
#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t
|
|
float alpha = OUTSG.;\n\t\t\t\t\t #else\n\t\t\t\t\t float alpha =
|
|
VFXGetFragmentColor(i).a;\n\t\t\t\t\t\t\t#if VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t\t\t\talpha
|
|
*= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t
|
|
#endif\n\t\t\t\t\t\tVFXClipFragmentColor(alpha,i);\n\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\toutDepthColor = i.VFX_VARYING_POSCS.z;\n\t\t\t\t\t\t\t#if
|
|
VFX_USE_ALPHA_TO_MASK\n\t\t\t\t\t\t\t\toutDepthColor.a = alpha;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat2
|
|
velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w) -
|
|
(i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\t\t\t\tVFXEncodeMotionVector(velocity
|
|
* 0.5f, encodedMotionVector);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\toutMotionVector
|
|
= encodedMotionVector;\n\t\t\t\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t\t\toutSelection
|
|
= float4(_ObjectId, _PassValue, 1.0, 1.0);\n\t\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t\t\t#ifndef WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\t\tdummy
|
|
= (float4)0;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t#error
|
|
VFX_PASSDEPTH undefined \n\t\t\t\t\t\t#endif\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t//
|
|
Depth pass\n\t\tPass\n\t\t{\t\t\n\t\t\tTags { \"LightMode\"=\"DepthForwardOnly\"
|
|
}\n\t\t\n\t\t\tZWrite On\n\t\t\tBlend Off\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#define
|
|
VFX_PASSDEPTH VFX_PASSDEPTH_ACTUAL\n\t\t\t#pragma multi_compile _ WRITE_MSAA_DEPTH\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos : SV_POSITION;\n\t\t\t\t#if
|
|
USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2
|
|
uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t
|
|
float4 uv1 : TEXCOORD1;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t
|
|
float4 uv2 : TEXCOORD2;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t
|
|
float4 uv3 : TEXCOORD3;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t
|
|
float4 vertexColor : COLOR;\n\t\t\t #endif\n\t\t\t\t#if USE_ALPHA_TEST ||
|
|
USE_FLIPBOOK_INTERPOLATION || VFX_USE_ALPHA_CURRENT\n\t\t\t\t// x: alpha threshold\n\t\t\t\t//
|
|
y: frame blending factor\n\t\t\t\t// z: alpha\n\t\t\t\tnointerpolation float3
|
|
builtInInterpolants : TEXCOORD4;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tnointerpolation
|
|
float2 builtInInterpolants2 : TEXCOORD5;\n\t\t\t\t#endif\n\t\t\t \n\t\t\t
|
|
#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t\tfloat3 posWS : TEXCOORD8;\n\t\t\t
|
|
#endif\n\t\t\t\t\n\t\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\tfloat4
|
|
cPosPrevious : TEXCOORD6;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD7;\n\t\t\t\t#endif\n\t\t\t
|
|
\n\t\t\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t\t#define VFX_VARYING_POSCS pos\n\t\t\t#define
|
|
VFX_VARYING_ALPHA builtInInterpolants.z\n\t\t\t#define VFX_VARYING_ALPHATHRESHOLD
|
|
builtInInterpolants.x\n\t\t\t#define VFX_VARYING_FRAMEBLEND builtInInterpolants.y\n\t\t\t#define
|
|
VFX_VARYING_MOTIONVECTORSCALE builtInInterpolants2.xy\n\t\t\t#define VFX_VARYING_UV
|
|
uv\n\t\t\t\n\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t#define VFX_VARYING_POSWS
|
|
posWS\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t\t#endif\n\t\t\t\n\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_MOTION_VECTORS\n\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t#define
|
|
SHADERPASS SHADERPASS_DEPTH_ONLY\n\t\t\t#endif\n\t\t\t\n\t\t\t#if !(defined(VFX_VARYING_PS_INPUTS)
|
|
&& defined(VFX_VARYING_POSCS))\n\t\t\t#error VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS
|
|
and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
SetAttribute_69998A5D(inout float pivotX, inout float pivotY, inout float pivotZ,
|
|
float3 Pivot) /*attribute:pivot Composition:Add Source:Slot Random:Off channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t pivotX += Pivot.x;\n\t\t\t pivotY += Pivot.y;\n\t\t\t
|
|
pivotZ += Pivot.z;\n\t\t\t}\n\t\t\tvoid SetAttribute_FDD06EC7(inout float3
|
|
color, float3 Color) /*attribute:color Composition:Overwrite Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t color = Color;\n\t\t\t}\n\t\t\tvoid AttributeFromMap_6F69BFAE(inout
|
|
float3 position, VFXSampler3D attributeMap, float3 SamplePosition, float LOD,
|
|
float3 valueBias, float3 valueScale) /*attribute:position Composition:Add SampleMode:Sample3DLOD
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t \n\t\t\t float3 value = (float3)attributeMap.t.SampleLevel(attributeMap.s,
|
|
SamplePosition, LOD);\n\t\t\t value = (value + valueBias) * valueScale;\n\t\t\t
|
|
position += value;\n\t\t\t}\n\t\t\tvoid SetAttribute_3278B22F(inout float size,
|
|
float Size) /*attribute:size Composition:Overwrite Source:Slot Random:Off channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t size = Size;\n\t\t\t}\n\t\t\tvoid AttributeFromCurve_8BB145A6(inout
|
|
float scaleX, inout float scaleY, inout float scaleZ, float age, float lifetime,
|
|
float4 Scale_x, float4 Scale_y, float4 Scale_z) /*attribute:scale Composition:Multiply
|
|
AlphaComposition:Overwrite SampleMode:OverLife Mode:PerComponent ColorMode:ColorAndAlpha
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t float t = age / lifetime;\n\t\t\t float3
|
|
value = 0.0f;\n\t\t\t value[0] = SampleCurve(Scale_x, t);\n\t\t\t value[1]
|
|
= SampleCurve(Scale_y, t);\n\t\t\t value[2] = SampleCurve(Scale_z, t);\n\t\t\t
|
|
scaleX *= value.x;\n\t\t\t scaleY *= value.y;\n\t\t\t scaleZ *= value.z;\n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_DC8A9868(inout float scaleX, inout float scaleY, inout float scaleZ,
|
|
float3 Scale) /*attribute:scale Composition:Multiply Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t scaleX *= Scale.x;\n\t\t\t scaleY *=
|
|
Scale.y;\n\t\t\t scaleZ *= Scale.z;\n\t\t\t}\n\t\t\tvoid Orient_31E(inout
|
|
float3 axisX, inout float3 axisY, inout float3 axisZ, float3 position, float3
|
|
Position) /*mode:LookAtPosition axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t
|
|
axisZ = normalize(position - Position);\n\t\t\t axisX = normalize(cross(GetVFXToViewRotMatrix()[1].xyz,axisZ));\n\t\t\t
|
|
axisY = cross(axisZ,axisX);\n\t\t\t \n\t\t\t}\n\t\t\tvoid SetAttribute_C707D62A(inout
|
|
float3 position, float3 Position) /*attribute:position Composition:Add Source:Slot
|
|
Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t position += Position;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\tstruct
|
|
vs_input\n\t\t\t{\n\t\t\t\tfloat3 pos : POSITION;\n\t\t\t\tfloat2 uv : TEXCOORD0;\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t float4 uv1 : TEXCOORD1;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t float4 uv2 : TEXCOORD2;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t float4 uv3 : TEXCOORD3;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t float4 vertexColor : COLOR;\n\t\t\t
|
|
#endif\n\t\t\t\tfloat3 normal : NORMAL;\n\t\t\t\t#if defined(VFX_VARYING_TANGENT)
|
|
|| SHADERGRAPH_HAS_NORMAL\n\t\t\t\tfloat4 tangent : TANGENT;\n\t\t\t\t#endif\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#pragma
|
|
vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS vert(vs_input i)\n\t\t\t{\n\t\t\t
|
|
VFX_VARYING_PS_INPUTS o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t\tuint
|
|
index = VFX_GET_INSTANCE_ID(i);\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount
|
|
= 0;\n\t\t\t\t\t\t#if USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.scaleX = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.scaleY = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x4) << 2));\n\t\t\t\t\t\tattributes.scaleZ = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x5) << 2));\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x3000) << 2));\n\t\t\t\t\t\tattributes.position = asfloat(attributeBuffer.Load3((index
|
|
* 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x3600) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.size
|
|
= (float)0.100000001;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x3601) << 2));\n\t\t\t\t\t\tattributes.particleId = (attributeBuffer.Load((index
|
|
* 0x8 + 0x6) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x3600) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.scaleX
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.scaleY
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x4) << 2));\n\t\t\t\t\t\tattributes.scaleZ
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x5) << 2));\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x3000) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.size = (float)0.100000001;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x3601) << 2));\n\t\t\t\t\t\tattributes.particleId
|
|
= (attributeBuffer.Load((index * 0x8 + 0x6) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t{\n\t\t\t\t
|
|
uint tmp_bl = attributes.particleId ^ asuint(uniform_b);\n\t\t\t\t float
|
|
tmp_bm = FixedRand(tmp_bl);\n\t\t\t\t float tmp_bn = tmp_bm + uniform_c;\n\t\t\t\t
|
|
float tmp_bo = SampleCurve(uniform_a,tmp_bn);\n\t\t\t\t float tmp_bq = tmp_bo
|
|
* (float)0.100000001;\n\t\t\t\t bool tmp_bs = tmp_bm > (float)0.899999976;\n\t\t\t\t
|
|
float tmp_bv = tmp_bs ? (float)1.5 : (float)1;\n\t\t\t\t float tmp_bw =
|
|
tmp_bq * tmp_bv;\n\t\t\t\t float tmp_bx = tmp_bw * uniform_d;\n\t\t\t\t
|
|
float3 tmp_by = float3((float)0, (float)0, tmp_bx);\n\t\t\t\t SetAttribute_69998A5D(
|
|
/*inout */attributes.pivotX, /*inout */attributes.pivotY, /*inout */attributes.pivotZ,
|
|
tmp_by);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t SetAttribute_FDD06EC7( /*inout
|
|
*/attributes.color, float3(0, 0, 0));\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t AttributeFromMap_6F69BFAE(
|
|
/*inout */attributes.position, GetVFXSampler(attributeMap_c, samplerattributeMap_c),
|
|
SamplePosition_c, (float)0, float3(-0.5, -0.5, -0.5), valueScale_c);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t
|
|
SetAttribute_3278B22F( /*inout */attributes.size, (float)0.5);\n\t\t\t\t}\n\t\t\t\tAttributeFromCurve_8BB145A6(
|
|
/*inout */attributes.scaleX, /*inout */attributes.scaleY, /*inout */attributes.scaleZ,
|
|
attributes.age, attributes.lifetime, Scale_x_e, Scale_y_e, Scale_z_e);\n\t\t\t\tSetAttribute_DC8A9868(
|
|
/*inout */attributes.scaleX, /*inout */attributes.scaleY, /*inout */attributes.scaleZ,
|
|
Scale_f);\n\t\t\t\t{\n\t\t\t\t Orient_31E( /*inout */attributes.axisX,
|
|
/*inout */attributes.axisY, /*inout */attributes.axisZ, attributes.position,
|
|
float3(0, 0, 0));\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t float3 tmp_bm = GeneratePerlinCurlNoise(uniform_e,
|
|
float3(1, 0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t
|
|
float3 tmp_bn = tmp_bm * uniform_f;\n\t\t\t\t SetAttribute_C707D62A( /*inout
|
|
*/attributes.position, tmp_bn);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\tif
|
|
(!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\to.VFX_VARYING_UV.xy
|
|
= i.uv;\n\t\t\t \n\t\t\t #if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t o.uv1
|
|
= i.uv1;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t
|
|
o.uv2 = i.uv2;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t
|
|
o.uv3 = i.uv3;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t
|
|
o.vertexColor = i.vertexColor;\n\t\t\t #endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = i.pos;\n\t\t\t\tfloat4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
vPos = mul(elementToVFX,float4(inputVertexPosition,1.0f)).xyz;\n\t\t\t\tfloat4
|
|
csPos = TransformPositionVFXToClip(vPos);\n\t\t\t\to.VFX_VARYING_POSCS = csPos;\n\t\t\t\t\n\t\t\t\tfloat3
|
|
normalWS = normalize(TransformDirectionVFXToWorld(mul((float3x3)elementToVFX,
|
|
i.normal)));\n\t\t\t\t#ifdef VFX_VARYING_NORMAL // TODO Should use inverse
|
|
transpose\n\t\t\t\to.VFX_VARYING_NORMAL = normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = float4(normalize(TransformDirectionVFXToWorld(mul((float3x3)elementToVFX,i.tangent.xyz))),i.tangent.w);\n\t\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#define
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 1\n\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t#ifndef
|
|
VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t#define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH
|
|
0\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\tint _ObjectId;\n\t\t\t\t\tint
|
|
_PassValue;\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t#pragma fragment frag\n\t\t\t\t\tvoid
|
|
frag(ps_input i\n\t\t\t\t\t#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t
|
|
#ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t // We need the depth color as SV_Target0
|
|
for alpha to coverage\n\t\t\t\t\t , out float4 outDepthColor : SV_Target0\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target1\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
// When no MSAA, the motion vector is always the first buffer\n\t\t\t\t\t
|
|
, out float4 outMotionVector : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t #ifdef WRITE_MSAA_DEPTH\n\t\t\t\t\t
|
|
, out float4 outDepthColor : SV_Target0\n\t\t\t\t\t #else\n\t\t\t\t\t
|
|
, out float4 dummy : SV_Target0\n\t\t\t\t\t #endif\n\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t , out float4 outSelection : SV_Target0\n\t\t\t\t\t#endif\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\t
|
|
#ifdef VFX_SHADERGRAPH\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t
|
|
float alpha = OUTSG.;\n\t\t\t\t\t #else\n\t\t\t\t\t float alpha =
|
|
VFXGetFragmentColor(i).a;\n\t\t\t\t\t\t\t#if VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH\n\t\t\t\t\t\t\t\talpha
|
|
*= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t
|
|
#endif\n\t\t\t\t\t\tVFXClipFragmentColor(alpha,i);\n\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\toutDepthColor = i.VFX_VARYING_POSCS.z;\n\t\t\t\t\t\t\t#if
|
|
VFX_USE_ALPHA_TO_MASK\n\t\t\t\t\t\t\t\toutDepthColor.a = alpha;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfloat2
|
|
velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w) -
|
|
(i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\t\t\t\tVFXEncodeMotionVector(velocity
|
|
* 0.5f, encodedMotionVector);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\toutMotionVector
|
|
= encodedMotionVector;\n\t\t\t\t\t\t#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION\n\t\t\t\t\t\t\toutSelection
|
|
= float4(_ObjectId, _PassValue, 1.0, 1.0);\n\t\t\t\t\t\t#elif VFX_PASSDEPTH
|
|
== VFX_PASSDEPTH_ACTUAL\n\t\t\t\t\t\t\t#ifndef WRITE_MSAA_DEPTH\n\t\t\t\t\t\t\t\tdummy
|
|
= (float4)0;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t#error
|
|
VFX_PASSDEPTH undefined \n\t\t\t\t\t\t#endif\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t\r\n\t\t//
|
|
Forward pass\n\t\tPass\n\t\t{\t\t\n\t\t\tTags { \"LightMode\"=\"ForwardOnly\"
|
|
}\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#pragma target 4.5\n\t\t\t#pragma multi_compile
|
|
_ DEBUG_DISPLAY\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4 pos
|
|
: SV_POSITION;\n\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4 uv :
|
|
TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2 uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
VFX_SHADERGRAPH_HAS_UV1\n\t\t\t\tfloat4 uv1 : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
VFX_SHADERGRAPH_HAS_UV2\n\t\t\t\tfloat4 uv2 : TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
VFX_SHADERGRAPH_HAS_UV3\n\t\t\t\tfloat4 uv3 : TEXCOORD3;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t\tfloat4 vertexColor : COLOR1;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
VFX_NEEDS_COLOR_INTERPOLATOR\n\t\t\t\tnointerpolation float4 color : COLOR0;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
USE_SOFT_PARTICLE || USE_ALPHA_TEST || USE_FLIPBOOK_INTERPOLATION || USE_EXPOSURE_WEIGHT
|
|
|| WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t// x: inverse soft particles fade
|
|
distance\n\t\t\t\t// y: alpha threshold\n\t\t\t\t// z: frame blending factor\n\t\t\t\t//
|
|
w: exposure weight\n\t\t\t\tnointerpolation float4 builtInInterpolants : TEXCOORD1;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t// x: motion vectors scale X\n\t\t\t\t//
|
|
y: motion vectors scale Y\n\t\t\t\tnointerpolation float2 builtInInterpolants2
|
|
: TEXCOORD2;\n\t\t\t\t#endif\n\t\t\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t\tfloat3
|
|
posWS : TEXCOORD4;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
cPosPrevious : TEXCOORD5;\n\t\t\t\tfloat4 cPosNonJiterred : TEXCOORD6;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t\t\tfloat3 normal : TEXCOORD7;\n\t\t\t\t#endif\n\t\t\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t\t\tfloat4 tangent : TEXCOORD8;\n\t\t\t\t#endif\n\t\t\t\t\n\t\t
|
|
\n\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\t\n\t\t\tstruct
|
|
ps_output\n\t\t\t{\n\t\t\t\tfloat4 color : SV_Target0;\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\tfloat4
|
|
outMotionVector : SV_Target1;\n\t\t#endif\n\t\t\t};\n\t\t\n\t\t#define VFX_VARYING_PS_INPUTS
|
|
ps_input\n\t\t#define VFX_VARYING_POSCS pos\n\t\t#define VFX_VARYING_COLOR
|
|
color.rgb\n\t\t#define VFX_VARYING_ALPHA color.a\n\t\t#define VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
builtInInterpolants.x\n\t\t#define VFX_VARYING_ALPHATHRESHOLD builtInInterpolants.y\n\t\t#define
|
|
VFX_VARYING_FRAMEBLEND builtInInterpolants.z\n\t\t#define VFX_VARYING_MOTIONVECTORSCALE
|
|
builtInInterpolants2.xy\n\t\t#define VFX_VARYING_UV uv\n\t\t#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t#define
|
|
VFX_VARYING_POSWS posWS\n\t\t#endif\n\t\t#if USE_EXPOSURE_WEIGHT\n\t\t#define
|
|
VFX_VARYING_EXPOSUREWEIGHT builtInInterpolants.w\n\t\t#endif\n\t\t#if WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t#define
|
|
VFX_VARYING_VELOCITY_CPOS cPosNonJiterred\n\t\t#define VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
cPosPrevious\n\t\t#endif\n\t\t\n\t\t#define SHADERPASS SHADERPASS_FORWARD_UNLIT\n\t\t\n\t\t#if
|
|
SHADERGRAPH_NEEDS_NORMAL_FORWARD\n\t\t#define VFX_VARYING_NORMAL normal\n\t\t#endif\n\t\t#if
|
|
SHADERGRAPH_NEEDS_TANGENT_FORWARD\n\t\t#define VFX_VARYING_TANGENT tangent\n\t\t#endif\n\t\t\t\t\n\t\t\t#if
|
|
!(defined(VFX_VARYING_PS_INPUTS) && defined(VFX_VARYING_POSCS))\n\t\t\t#error
|
|
VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
SetAttribute_69998A5D(inout float pivotX, inout float pivotY, inout float pivotZ,
|
|
float3 Pivot) /*attribute:pivot Composition:Add Source:Slot Random:Off channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t pivotX += Pivot.x;\n\t\t\t pivotY += Pivot.y;\n\t\t\t
|
|
pivotZ += Pivot.z;\n\t\t\t}\n\t\t\tvoid SetAttribute_FDD06EC7(inout float3
|
|
color, float3 Color) /*attribute:color Composition:Overwrite Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t color = Color;\n\t\t\t}\n\t\t\tvoid AttributeFromMap_6F69BFAE(inout
|
|
float3 position, VFXSampler3D attributeMap, float3 SamplePosition, float LOD,
|
|
float3 valueBias, float3 valueScale) /*attribute:position Composition:Add SampleMode:Sample3DLOD
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t \n\t\t\t float3 value = (float3)attributeMap.t.SampleLevel(attributeMap.s,
|
|
SamplePosition, LOD);\n\t\t\t value = (value + valueBias) * valueScale;\n\t\t\t
|
|
position += value;\n\t\t\t}\n\t\t\tvoid SetAttribute_3278B22F(inout float size,
|
|
float Size) /*attribute:size Composition:Overwrite Source:Slot Random:Off channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t size = Size;\n\t\t\t}\n\t\t\tvoid AttributeFromCurve_8BB145A6(inout
|
|
float scaleX, inout float scaleY, inout float scaleZ, float age, float lifetime,
|
|
float4 Scale_x, float4 Scale_y, float4 Scale_z) /*attribute:scale Composition:Multiply
|
|
AlphaComposition:Overwrite SampleMode:OverLife Mode:PerComponent ColorMode:ColorAndAlpha
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t float t = age / lifetime;\n\t\t\t float3
|
|
value = 0.0f;\n\t\t\t value[0] = SampleCurve(Scale_x, t);\n\t\t\t value[1]
|
|
= SampleCurve(Scale_y, t);\n\t\t\t value[2] = SampleCurve(Scale_z, t);\n\t\t\t
|
|
scaleX *= value.x;\n\t\t\t scaleY *= value.y;\n\t\t\t scaleZ *= value.z;\n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_DC8A9868(inout float scaleX, inout float scaleY, inout float scaleZ,
|
|
float3 Scale) /*attribute:scale Composition:Multiply Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t scaleX *= Scale.x;\n\t\t\t scaleY *=
|
|
Scale.y;\n\t\t\t scaleZ *= Scale.z;\n\t\t\t}\n\t\t\tvoid Orient_31E(inout
|
|
float3 axisX, inout float3 axisY, inout float3 axisZ, float3 position, float3
|
|
Position) /*mode:LookAtPosition axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t
|
|
axisZ = normalize(position - Position);\n\t\t\t axisX = normalize(cross(GetVFXToViewRotMatrix()[1].xyz,axisZ));\n\t\t\t
|
|
axisY = cross(axisZ,axisX);\n\t\t\t \n\t\t\t}\n\t\t\tvoid SetAttribute_C707D62A(inout
|
|
float3 position, float3 Position) /*attribute:position Composition:Add Source:Slot
|
|
Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t position += Position;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\tstruct
|
|
vs_input\n\t\t\t{\n\t\t\t\tfloat3 pos : POSITION;\n\t\t\t\tfloat2 uv : TEXCOORD0;\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t float4 uv1 : TEXCOORD1;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t float4 uv2 : TEXCOORD2;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t float4 uv3 : TEXCOORD3;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t float4 vertexColor : COLOR;\n\t\t\t
|
|
#endif\n\t\t\t\tfloat3 normal : NORMAL;\n\t\t\t\t#if defined(VFX_VARYING_TANGENT)
|
|
|| SHADERGRAPH_HAS_NORMAL\n\t\t\t\tfloat4 tangent : TANGENT;\n\t\t\t\t#endif\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#pragma
|
|
vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS vert(vs_input i)\n\t\t\t{\n\t\t\t
|
|
VFX_VARYING_PS_INPUTS o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t\tuint
|
|
index = VFX_GET_INSTANCE_ID(i);\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount
|
|
= 0;\n\t\t\t\t\t\t#if USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.scaleX = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.scaleY = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x4) << 2));\n\t\t\t\t\t\tattributes.scaleZ = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x5) << 2));\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x3000) << 2));\n\t\t\t\t\t\tattributes.position = asfloat(attributeBuffer.Load3((index
|
|
* 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x3600) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.size
|
|
= (float)0.100000001;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x3601) << 2));\n\t\t\t\t\t\tattributes.particleId = (attributeBuffer.Load((index
|
|
* 0x8 + 0x6) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x3600) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.scaleX
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.scaleY
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x4) << 2));\n\t\t\t\t\t\tattributes.scaleZ
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x5) << 2));\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x3000) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.size = (float)0.100000001;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x3601) << 2));\n\t\t\t\t\t\tattributes.particleId
|
|
= (attributeBuffer.Load((index * 0x8 + 0x6) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t{\n\t\t\t\t
|
|
uint tmp_bl = attributes.particleId ^ asuint(uniform_b);\n\t\t\t\t float
|
|
tmp_bm = FixedRand(tmp_bl);\n\t\t\t\t float tmp_bn = tmp_bm + uniform_c;\n\t\t\t\t
|
|
float tmp_bo = SampleCurve(uniform_a,tmp_bn);\n\t\t\t\t float tmp_bq = tmp_bo
|
|
* (float)0.100000001;\n\t\t\t\t bool tmp_bs = tmp_bm > (float)0.899999976;\n\t\t\t\t
|
|
float tmp_bv = tmp_bs ? (float)1.5 : (float)1;\n\t\t\t\t float tmp_bw =
|
|
tmp_bq * tmp_bv;\n\t\t\t\t float tmp_bx = tmp_bw * uniform_d;\n\t\t\t\t
|
|
float3 tmp_by = float3((float)0, (float)0, tmp_bx);\n\t\t\t\t SetAttribute_69998A5D(
|
|
/*inout */attributes.pivotX, /*inout */attributes.pivotY, /*inout */attributes.pivotZ,
|
|
tmp_by);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t SetAttribute_FDD06EC7( /*inout
|
|
*/attributes.color, float3(0, 0, 0));\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t AttributeFromMap_6F69BFAE(
|
|
/*inout */attributes.position, GetVFXSampler(attributeMap_c, samplerattributeMap_c),
|
|
SamplePosition_c, (float)0, float3(-0.5, -0.5, -0.5), valueScale_c);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t
|
|
SetAttribute_3278B22F( /*inout */attributes.size, (float)0.5);\n\t\t\t\t}\n\t\t\t\tAttributeFromCurve_8BB145A6(
|
|
/*inout */attributes.scaleX, /*inout */attributes.scaleY, /*inout */attributes.scaleZ,
|
|
attributes.age, attributes.lifetime, Scale_x_e, Scale_y_e, Scale_z_e);\n\t\t\t\tSetAttribute_DC8A9868(
|
|
/*inout */attributes.scaleX, /*inout */attributes.scaleY, /*inout */attributes.scaleZ,
|
|
Scale_f);\n\t\t\t\t{\n\t\t\t\t Orient_31E( /*inout */attributes.axisX,
|
|
/*inout */attributes.axisY, /*inout */attributes.axisZ, attributes.position,
|
|
float3(0, 0, 0));\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t float3 tmp_bm = GeneratePerlinCurlNoise(uniform_e,
|
|
float3(1, 0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t
|
|
float3 tmp_bn = tmp_bm * uniform_f;\n\t\t\t\t SetAttribute_C707D62A( /*inout
|
|
*/attributes.position, tmp_bn);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\tif
|
|
(!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\to.VFX_VARYING_UV.xy
|
|
= i.uv;\n\t\t\t \n\t\t\t #if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t o.uv1
|
|
= i.uv1;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t
|
|
o.uv2 = i.uv2;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t
|
|
o.uv3 = i.uv3;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t
|
|
o.vertexColor = i.vertexColor;\n\t\t\t #endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = i.pos;\n\t\t\t\tfloat4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
vPos = mul(elementToVFX,float4(inputVertexPosition,1.0f)).xyz;\n\t\t\t\tfloat4
|
|
csPos = TransformPositionVFXToClip(vPos);\n\t\t\t\to.VFX_VARYING_POSCS = csPos;\n\t\t\t\t\n\t\t\t\tfloat3
|
|
normalWS = normalize(TransformDirectionVFXToWorld(mul((float3x3)elementToVFX,
|
|
i.normal)));\n\t\t\t\t#ifdef VFX_VARYING_NORMAL // TODO Should use inverse
|
|
transpose\n\t\t\t\to.VFX_VARYING_NORMAL = normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = float4(normalize(TransformDirectionVFXToWorld(mul((float3x3)elementToVFX,i.tangent.xyz))),i.tangent.w);\n\t\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
|
|
\n\t\t\t \n\t\t\t\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\t#pragma
|
|
fragment frag\n\t\t\tps_output frag(ps_input i)\n\t\t\t{\n\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\tps_output
|
|
o = (ps_output)0;\n\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t\n\t\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_NORMAL\n\t\t\t\t\t\t\t#if USE_DOUBLE_SIDED\n\t\t\t\t\t\t\tconst
|
|
float faceMul = frontFace ? 1.0f : -1.0f;\n\t\t\t\t\t\t\t#else\n\t\t\t\t\t\t\tconst
|
|
float faceMul = 1.0f;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat3
|
|
normalWS = normalize(i.VFX_VARYING_NORMAL * faceMul);\n\t\t\t\t\t\t\tconst
|
|
VFXUVData uvData = GetUVData(i);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_TANGENT\n\t\t\t\t\t\t\tfloat3
|
|
tangentWS = normalize(i.VFX_VARYING_TANGENT.xyz);\n\t\t\t\t\t\t\tfloat3 bitangentWS
|
|
= cross(normalWS,tangentWS) * (i.VFX_VARYING_TANGENT.w * faceMul);\n\t\t\t\t\t\t\tfloat3x3
|
|
tbn = float3x3(tangentWS,bitangentWS,normalWS);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t#if
|
|
USE_NORMAL_MAP\n\t\t\t\t\t\t\tfloat3 n = SampleNormalMap(VFX_SAMPLER(normalMap),uvData);\n\t\t\t\t\t\t\tfloat
|
|
normalScale = 1.0f;\n\t\t\t\t\t\t\t#ifdef VFX_VARYING_NORMALSCALE\n\t\t\t\t\t\t\tnormalScale
|
|
= i.VFX_VARYING_NORMALSCALE;\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\tnormalWS
|
|
= normalize(lerp(normalWS,mul(n,tbn),normalScale));\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t
|
|
#if VFX_SHADERGRAPH \n\t\t \n\t\t \n\t\t
|
|
\n\t\t #if HAS_SHADERGRAPH_PARAM_COLOR\n\t\t o.color.rgb
|
|
= OUTSG..rgb;\n\t\t #endif\n\t\t \n\t\t #if
|
|
HAS_SHADERGRAPH_PARAM_ALPHA \n\t\t o.color.a = OUTSG.;\n\t\t
|
|
#endif\n\t\t #else\n\t\t #define VFX_TEXTURE_COLOR VFXGetTextureColor(VFX_SAMPLER(mainTexture),i)\n\t\t
|
|
\n\t\t \t\t\n\t\t \t\tfloat4 color = VFXGetFragmentColor(i);\n\t\t
|
|
\t\t\n\t\t \t\t#ifndef VFX_TEXTURE_COLOR\n\t\t \t\t\t#define
|
|
VFX_TEXTURE_COLOR float4(1.0,1.0,1.0,1.0)\n\t\t \t\t#endif\n\t\t
|
|
\t\t\n\t\t \t\t#if VFX_COLORMAPPING_DEFAULT\n\t\t \t\t\to.color
|
|
= color * VFX_TEXTURE_COLOR;\n\t\t \t\t#endif\n\t\t \t\t\n\t\t
|
|
\t\t#if VFX_COLORMAPPING_GRADIENTMAPPED\n\t\t \t\t\t\n\t\t
|
|
\t\t\to.color = SampleGradient(gradient, VFX_TEXTURE_COLOR.a * color.a) * float4(color.rgb,1.0);\n\t\t
|
|
\t\t#endif\n\t\t \t\t\n\t\t \t\t\n\t\t #endif\n\t\t\n\t\t\t\to.color
|
|
= VFXApplyPreExposure(o.color, i);\n\t\t\t\to.color = VFXApplyFog(o.color,i);\n\t\t\t\tVFXClipFragmentColor(o.color.a,i);\n\t\t\t\to.color.a
|
|
= saturate(o.color.a);\n\t\t\t\to.color = VFXTransformFinalColor(o.color);\n\t\t\t\t\n\t\t#if
|
|
WRITE_MOTION_VECTOR_IN_FORWARD\n\t\t\t\t\n\t\t\t\t\t\tfloat2 velocity = (i.VFX_VARYING_VELOCITY_CPOS.xy/i.VFX_VARYING_VELOCITY_CPOS.w)
|
|
- (i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.xy/i.VFX_VARYING_VELOCITY_CPOS_PREVIOUS.w);\n\t\t\t\t\t\t#if
|
|
UNITY_UV_STARTS_AT_TOP\n\t\t\t\t\t\t\tvelocity.y = -velocity.y;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\tfloat4
|
|
encodedMotionVector = 0.0f;\n\t\t\t\t\t\tVFXEncodeMotionVector(velocity * 0.5f,
|
|
encodedMotionVector);\n\t\t\t\t\t\t\n\t\t\t\to.outMotionVector = encodedMotionVector;\n\t\t\t\to.outMotionVector.a
|
|
= o.color.a < i.VFX_VARYING_ALPHATHRESHOLD ? 0.0f : 1.0f; //Independant clipping
|
|
for motion vector pass\n\t\t#endif\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t\t//
|
|
Shadow pass\n\t\tPass\n\t\t{\t\t\n\t\t\tTags { \"LightMode\"=\"ShadowCaster\"
|
|
}\n\t\t\n\t\t\tZWrite On\n\t\t\tBlend Off\n\t\t\t\n\t\t\tHLSLPROGRAM\n\t\t\t#pragma
|
|
target 4.5\n\t\t\t#if !USE_ALPHA_TEST && IS_TRANSPARENT_PARTICLE\n\t\t\t#define
|
|
USE_ALPHA_TEST 1\n\t\t\t#endif\n\t\t\t\n\t\t\tstruct ps_input\n\t\t\t{\n\t\t\t\tfloat4
|
|
pos : SV_POSITION;\n\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION\n\t\t\t\tfloat4
|
|
uv : TEXCOORD0;\n\t\t\t\t#else\n\t\t\t\tfloat2 uv : TEXCOORD0;\t\n\t\t\t\t#endif\n\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV1\n\t\t float4 uv1 : TEXCOORD1;\n\t\t
|
|
#endif\n\t\t #if VFX_SHADERGRAPH_HAS_UV2\n\t\t float4 uv2 : TEXCOORD2;\n\t\t
|
|
#endif\n\t\t #if VFX_SHADERGRAPH_HAS_UV3\n\t\t float4 uv3 : TEXCOORD3;\n\t\t
|
|
#endif\n\t\t #if VFX_SHADERGRAPH_HAS_COLOR\n\t\t float4 vertexColor
|
|
: COLOR1;\n\t\t #endif\n\t\t\t\t#if USE_ALPHA_TEST || USE_FLIPBOOK_INTERPOLATION
|
|
|| VFX_USE_ALPHA_CURRENT\n\t\t\t\t// x: alpha threshold\n\t\t\t\t// y: frame
|
|
blending factor\n\t\t\t\t// z: alpha\n\t\t\t\tnointerpolation float3 builtInInterpolants
|
|
: TEXCOORD4;\n\t\t\t\t#endif\n\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS\n\t\t\t\t//
|
|
x: motion vectors scale X\n\t\t\t\t// y: motion vectors scale Y\n\t\t\t\tnointerpolation
|
|
float2 builtInInterpolants2 : TEXCOORD5;\n\t\t\t\t#endif\n\t\t \n\t\t
|
|
#if VFX_NEEDS_POSWS_INTERPOLATOR\n\t\t\t\tfloat3 posWS : TEXCOORD6;\n\t\t\t\t#endif\n\t\t
|
|
\n\t\t \n\t\t\n\t\t\t\tUNITY_VERTEX_OUTPUT_STEREO\n\t\t\t};\n\t\t\n\t\t#define
|
|
VFX_VARYING_PS_INPUTS ps_input\n\t\t#define VFX_VARYING_POSCS pos\n\t\t#define
|
|
VFX_VARYING_ALPHA builtInInterpolants.z\n\t\t#define VFX_VARYING_ALPHATHRESHOLD
|
|
builtInInterpolants.x\n\t\t#define VFX_VARYING_FRAMEBLEND builtInInterpolants.y\n\t\t#define
|
|
VFX_VARYING_MOTIONVECTORSCALE builtInInterpolants2.xy\n\t\t#define VFX_VARYING_UV
|
|
uv\n\t\t\t\t\n\t\t\n\t\t\n\t\t\t#define SHADERPASS SHADERPASS_SHADOWS\n\t\t\t#if
|
|
!(defined(VFX_VARYING_PS_INPUTS) && defined(VFX_VARYING_POSCS))\n\t\t\t#error
|
|
VFX_VARYING_PS_INPUTS, VFX_VARYING_POSCS and VFX_VARYING_UV must be defined.\n\t\t\t#endif\n\t\t\t\n\t\t\t#include
|
|
\"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXCommon.hlsl\"\n\t\t\t#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\t\t\t\n\n\t\t\tvoid
|
|
SetAttribute_69998A5D(inout float pivotX, inout float pivotY, inout float pivotZ,
|
|
float3 Pivot) /*attribute:pivot Composition:Add Source:Slot Random:Off channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t pivotX += Pivot.x;\n\t\t\t pivotY += Pivot.y;\n\t\t\t
|
|
pivotZ += Pivot.z;\n\t\t\t}\n\t\t\tvoid SetAttribute_FDD06EC7(inout float3
|
|
color, float3 Color) /*attribute:color Composition:Overwrite Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t color = Color;\n\t\t\t}\n\t\t\tvoid AttributeFromMap_6F69BFAE(inout
|
|
float3 position, VFXSampler3D attributeMap, float3 SamplePosition, float LOD,
|
|
float3 valueBias, float3 valueScale) /*attribute:position Composition:Add SampleMode:Sample3DLOD
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t \n\t\t\t float3 value = (float3)attributeMap.t.SampleLevel(attributeMap.s,
|
|
SamplePosition, LOD);\n\t\t\t value = (value + valueBias) * valueScale;\n\t\t\t
|
|
position += value;\n\t\t\t}\n\t\t\tvoid SetAttribute_3278B22F(inout float size,
|
|
float Size) /*attribute:size Composition:Overwrite Source:Slot Random:Off channels:XYZ
|
|
*/\n\t\t\t{\n\t\t\t size = Size;\n\t\t\t}\n\t\t\tvoid AttributeFromCurve_8BB145A6(inout
|
|
float scaleX, inout float scaleY, inout float scaleZ, float age, float lifetime,
|
|
float4 Scale_x, float4 Scale_y, float4 Scale_z) /*attribute:scale Composition:Multiply
|
|
AlphaComposition:Overwrite SampleMode:OverLife Mode:PerComponent ColorMode:ColorAndAlpha
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t float t = age / lifetime;\n\t\t\t float3
|
|
value = 0.0f;\n\t\t\t value[0] = SampleCurve(Scale_x, t);\n\t\t\t value[1]
|
|
= SampleCurve(Scale_y, t);\n\t\t\t value[2] = SampleCurve(Scale_z, t);\n\t\t\t
|
|
scaleX *= value.x;\n\t\t\t scaleY *= value.y;\n\t\t\t scaleZ *= value.z;\n\t\t\t}\n\t\t\tvoid
|
|
SetAttribute_DC8A9868(inout float scaleX, inout float scaleY, inout float scaleZ,
|
|
float3 Scale) /*attribute:scale Composition:Multiply Source:Slot Random:Off
|
|
channels:XYZ */\n\t\t\t{\n\t\t\t scaleX *= Scale.x;\n\t\t\t scaleY *=
|
|
Scale.y;\n\t\t\t scaleZ *= Scale.z;\n\t\t\t}\n\t\t\tvoid Orient_31E(inout
|
|
float3 axisX, inout float3 axisY, inout float3 axisZ, float3 position, float3
|
|
Position) /*mode:LookAtPosition axes:ZY */\n\t\t\t{\n\t\t\t \n\t\t\t
|
|
axisZ = normalize(position - Position);\n\t\t\t axisX = normalize(cross(GetVFXToViewRotMatrix()[1].xyz,axisZ));\n\t\t\t
|
|
axisY = cross(axisZ,axisX);\n\t\t\t \n\t\t\t}\n\t\t\tvoid SetAttribute_C707D62A(inout
|
|
float3 position, float3 Position) /*attribute:position Composition:Add Source:Slot
|
|
Random:Off channels:XYZ */\n\t\t\t{\n\t\t\t position += Position;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t\tstruct
|
|
vs_input\n\t\t\t{\n\t\t\t\tfloat3 pos : POSITION;\n\t\t\t\tfloat2 uv : TEXCOORD0;\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t float4 uv1 : TEXCOORD1;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t float4 uv2 : TEXCOORD2;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t float4 uv3 : TEXCOORD3;\n\t\t\t #endif\n\t\t\t
|
|
#if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t float4 vertexColor : COLOR;\n\t\t\t
|
|
#endif\n\t\t\t\tfloat3 normal : NORMAL;\n\t\t\t\t#if defined(VFX_VARYING_TANGENT)
|
|
|| SHADERGRAPH_HAS_NORMAL\n\t\t\t\tfloat4 tangent : TANGENT;\n\t\t\t\t#endif\n\t\t\t\tVFX_DECLARE_INSTANCE_ID\n\t\t\t};\n\t\t\t\n\t\t\t#pragma
|
|
vertex vert\n\t\t\tVFX_VARYING_PS_INPUTS vert(vs_input i)\n\t\t\t{\n\t\t\t
|
|
VFX_VARYING_PS_INPUTS o = (VFX_VARYING_PS_INPUTS)0;\n\t\t\t\n\t\t\t\tUNITY_SETUP_INSTANCE_ID(i);\n\t\t\t\tUNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);\n\t\t\t\n\t\t\t\tuint
|
|
index = VFX_GET_INSTANCE_ID(i);\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tuint deadCount
|
|
= 0;\n\t\t\t\t\t\t#if USE_DEAD_LIST_COUNT\n\t\t\t\t\t\tdeadCount = deadListCount.Load(0);\n\t\t\t\t\t\t#endif\t\n\t\t\t\t\t\tif
|
|
(index >= asuint(nbMax) - deadCount)\n\t\t\t\t\t\t#if USE_GEOMETRY_SHADER\n\t\t\t\t\t\t\treturn;
|
|
// cull\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\treturn o; // cull\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\tAttributes
|
|
attributes = (Attributes)0;\n\t\t\t\t\t\tSourceAttributes sourceAttributes
|
|
= (SourceAttributes)0;\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if VFX_HAS_INDIRECT_DRAW\n\t\t\t\t\t\tindex
|
|
= indirectBuffer[index];\n\t\t\t\t\t\tattributes.scaleX = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.scaleY = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x4) << 2));\n\t\t\t\t\t\tattributes.scaleZ = asfloat(attributeBuffer.Load((index
|
|
* 0x8 + 0x5) << 2));\n\t\t\t\t\t\tattributes.lifetime = asfloat(attributeBuffer.Load((index
|
|
* 0x1 + 0x3000) << 2));\n\t\t\t\t\t\tattributes.position = asfloat(attributeBuffer.Load3((index
|
|
* 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.color = float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha
|
|
= (float)1;\n\t\t\t\t\t\tattributes.alive = (attributeBuffer.Load((index *
|
|
0x2 + 0x3600) << 2));\n\t\t\t\t\t\tattributes.axisX = float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY
|
|
= float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ = float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleY = (float)0;\n\t\t\t\t\t\tattributes.angleZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotX = (float)0;\n\t\t\t\t\t\tattributes.pivotY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotZ = (float)0;\n\t\t\t\t\t\tattributes.size
|
|
= (float)0.100000001;\n\t\t\t\t\t\tattributes.age = asfloat(attributeBuffer.Load((index
|
|
* 0x2 + 0x3601) << 2));\n\t\t\t\t\t\tattributes.particleId = (attributeBuffer.Load((index
|
|
* 0x8 + 0x6) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#else\n\t\t\t\t\t\tattributes.alive
|
|
= (attributeBuffer.Load((index * 0x2 + 0x3600) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
!HAS_STRIPS\n\t\t\t\t\t\tif (!attributes.alive)\n\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tattributes.scaleX
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x3) << 2));\n\t\t\t\t\t\tattributes.scaleY
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x4) << 2));\n\t\t\t\t\t\tattributes.scaleZ
|
|
= asfloat(attributeBuffer.Load((index * 0x8 + 0x5) << 2));\n\t\t\t\t\t\tattributes.lifetime
|
|
= asfloat(attributeBuffer.Load((index * 0x1 + 0x3000) << 2));\n\t\t\t\t\t\tattributes.position
|
|
= asfloat(attributeBuffer.Load3((index * 0x8 + 0x0) << 2));\n\t\t\t\t\t\tattributes.color
|
|
= float3(1, 1, 1);\n\t\t\t\t\t\tattributes.alpha = (float)1;\n\t\t\t\t\t\tattributes.axisX
|
|
= float3(1, 0, 0);\n\t\t\t\t\t\tattributes.axisY = float3(0, 1, 0);\n\t\t\t\t\t\tattributes.axisZ
|
|
= float3(0, 0, 1);\n\t\t\t\t\t\tattributes.angleX = (float)0;\n\t\t\t\t\t\tattributes.angleY
|
|
= (float)0;\n\t\t\t\t\t\tattributes.angleZ = (float)0;\n\t\t\t\t\t\tattributes.pivotX
|
|
= (float)0;\n\t\t\t\t\t\tattributes.pivotY = (float)0;\n\t\t\t\t\t\tattributes.pivotZ
|
|
= (float)0;\n\t\t\t\t\t\tattributes.size = (float)0.100000001;\n\t\t\t\t\t\tattributes.age
|
|
= asfloat(attributeBuffer.Load((index * 0x2 + 0x3601) << 2));\n\t\t\t\t\t\tattributes.particleId
|
|
= (attributeBuffer.Load((index * 0x8 + 0x6) << 2));\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//
|
|
Initialize built-in needed attributes\n\t\t\t\t\t\t#if HAS_STRIPS\n\t\t\t\t\t\tInitStripAttributes(index,
|
|
attributes, stripData);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t{\n\t\t\t\t
|
|
uint tmp_bl = attributes.particleId ^ asuint(uniform_b);\n\t\t\t\t float
|
|
tmp_bm = FixedRand(tmp_bl);\n\t\t\t\t float tmp_bn = tmp_bm + uniform_c;\n\t\t\t\t
|
|
float tmp_bo = SampleCurve(uniform_a,tmp_bn);\n\t\t\t\t float tmp_bq = tmp_bo
|
|
* (float)0.100000001;\n\t\t\t\t bool tmp_bs = tmp_bm > (float)0.899999976;\n\t\t\t\t
|
|
float tmp_bv = tmp_bs ? (float)1.5 : (float)1;\n\t\t\t\t float tmp_bw =
|
|
tmp_bq * tmp_bv;\n\t\t\t\t float tmp_bx = tmp_bw * uniform_d;\n\t\t\t\t
|
|
float3 tmp_by = float3((float)0, (float)0, tmp_bx);\n\t\t\t\t SetAttribute_69998A5D(
|
|
/*inout */attributes.pivotX, /*inout */attributes.pivotY, /*inout */attributes.pivotZ,
|
|
tmp_by);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t SetAttribute_FDD06EC7( /*inout
|
|
*/attributes.color, float3(0, 0, 0));\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t AttributeFromMap_6F69BFAE(
|
|
/*inout */attributes.position, GetVFXSampler(attributeMap_c, samplerattributeMap_c),
|
|
SamplePosition_c, (float)0, float3(-0.5, -0.5, -0.5), valueScale_c);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t
|
|
SetAttribute_3278B22F( /*inout */attributes.size, (float)0.5);\n\t\t\t\t}\n\t\t\t\tAttributeFromCurve_8BB145A6(
|
|
/*inout */attributes.scaleX, /*inout */attributes.scaleY, /*inout */attributes.scaleZ,
|
|
attributes.age, attributes.lifetime, Scale_x_e, Scale_y_e, Scale_z_e);\n\t\t\t\tSetAttribute_DC8A9868(
|
|
/*inout */attributes.scaleX, /*inout */attributes.scaleY, /*inout */attributes.scaleZ,
|
|
Scale_f);\n\t\t\t\t{\n\t\t\t\t Orient_31E( /*inout */attributes.axisX,
|
|
/*inout */attributes.axisY, /*inout */attributes.axisZ, attributes.position,
|
|
float3(0, 0, 0));\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t float3 tmp_bm = GeneratePerlinCurlNoise(uniform_e,
|
|
float3(1, 0.75, 2).x, (int)7, float3(1, 0.75, 2).y, float3(1, 0.75, 2).z);\n\t\t\t\t
|
|
float3 tmp_bn = tmp_bm * uniform_f;\n\t\t\t\t SetAttribute_C707D62A( /*inout
|
|
*/attributes.position, tmp_bn);\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\tif
|
|
(!attributes.alive)\n\t\t\t\t\treturn o;\n\t\t\t\t\n\t\t\t\to.VFX_VARYING_UV.xy
|
|
= i.uv;\n\t\t\t \n\t\t\t #if VFX_SHADERGRAPH_HAS_UV1\n\t\t\t o.uv1
|
|
= i.uv1;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV2\n\t\t\t
|
|
o.uv2 = i.uv2;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_UV3\n\t\t\t
|
|
o.uv3 = i.uv3;\n\t\t\t #endif\n\t\t\t #if VFX_SHADERGRAPH_HAS_COLOR\n\t\t\t
|
|
o.vertexColor = i.vertexColor;\n\t\t\t #endif\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
size3 = float3(attributes.size,attributes.size,attributes.size);\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEX_CURRENT\n\t\t\t\t\t\tsize3.x *= attributes.scaleX;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEY_CURRENT\n\t\t\t\t\t\tsize3.y *= attributes.scaleY;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if
|
|
VFX_USE_SCALEZ_CURRENT\n\t\t\t\t\t\tsize3.z *= attributes.scaleZ;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tfloat3
|
|
inputVertexPosition = i.pos;\n\t\t\t\tfloat4x4 elementToVFX = GetElementToVFXMatrix(\n\t\t\t\t\tattributes.axisX,\n\t\t\t\t\tattributes.axisY,\n\t\t\t\t\tattributes.axisZ,\n\t\t\t\t\tfloat3(attributes.angleX,attributes.angleY,attributes.angleZ),\n\t\t\t\t\tfloat3(attributes.pivotX,attributes.pivotY,attributes.pivotZ),\n\t\t\t\t\tsize3,\n\t\t\t\t\tattributes.position);\n\t\t\t\t\t\n\t\t\t\tfloat3
|
|
vPos = mul(elementToVFX,float4(inputVertexPosition,1.0f)).xyz;\n\t\t\t\tfloat4
|
|
csPos = TransformPositionVFXToClip(vPos);\n\t\t\t\to.VFX_VARYING_POSCS = csPos;\n\t\t\t\t\n\t\t\t\tfloat3
|
|
normalWS = normalize(TransformDirectionVFXToWorld(mul((float3x3)elementToVFX,
|
|
i.normal)));\n\t\t\t\t#ifdef VFX_VARYING_NORMAL // TODO Should use inverse
|
|
transpose\n\t\t\t\to.VFX_VARYING_NORMAL = normalWS;\n\t\t\t\t#endif\n\t\t\t\t#ifdef
|
|
VFX_VARYING_TANGENT\n\t\t\t\to.VFX_VARYING_TANGENT = float4(normalize(TransformDirectionVFXToWorld(mul((float3x3)elementToVFX,i.tangent.xyz))),i.tangent.w);\n\t\t\t\t#endif\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_VELOCITY_CPOS) && defined(VFX_VARYING_VELOCITY_CPOS_PREVIOUS)\n\t\t\t\t\t\tfloat4x4
|
|
previousElementToVFX = (float4x4)0;\n\t\t\t\t\t\tpreviousElementToVFX[3] =
|
|
float4(0,0,0,1);\n\t\t\t\t\t\t\n\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\tfor (int
|
|
itIndexMatrixRow = 0; itIndexMatrixRow < 3; ++itIndexMatrixRow)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUNITY_UNROLL\n\t\t\t\t\t\t\tfor
|
|
(int itIndexMatrixCol = 0; itIndexMatrixCol < 4; ++itIndexMatrixCol)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuint
|
|
itIndexMatrix = itIndexMatrixCol * 4 + itIndexMatrixRow;\n\t\t\t\t\t\t\t\tuint
|
|
read = elementToVFXBufferPrevious.Load((index * 16 + itIndexMatrix) << 2);\n\t\t\t\t\t\t\t\tpreviousElementToVFX[itIndexMatrixRow][itIndexMatrixCol]
|
|
= asfloat(read);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tuint
|
|
previousFrameIndex = elementToVFXBufferPrevious.Load((index * 16 + 15) << 2);\n\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= o.VFX_VARYING_VELOCITY_CPOS_PREVIOUS = float4(0.0f, 0.0f, 0.0f, 1.0f);\n\t\t\t\t\t\tif
|
|
(asuint(currentFrameIndex) - previousFrameIndex == 1u)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat3
|
|
oldvPos = mul(previousElementToVFX,float4(inputVertexPosition, 1.0f)).xyz;\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS_PREVIOUS
|
|
= TransformPositionVFXToPreviousClip(oldvPos);\n\t\t\t\t\t\t\to.VFX_VARYING_VELOCITY_CPOS
|
|
= TransformPositionVFXToNonJitteredClip(vPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
VFX_USE_COLOR_CURRENT && defined(VFX_VARYING_COLOR)\n\t\t\t\t\t\to.VFX_VARYING_COLOR
|
|
= attributes.color;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#if VFX_USE_ALPHA_CURRENT
|
|
&& defined(VFX_VARYING_ALPHA) \n\t\t\t\t\t\to.VFX_VARYING_ALPHA = attributes.alpha;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#ifdef
|
|
VFX_VARYING_EXPOSUREWEIGHT\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_EXPOSUREWEIGHT
|
|
= exposureWeight;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_SOFT_PARTICLE
|
|
&& defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE
|
|
= invSoftParticlesFadeDistance;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
(USE_ALPHA_TEST || WRITE_MOTION_VECTOR_IN_FORWARD) && (!VFX_SHADERGRAPH ||
|
|
!HAS_SHADERGRAPH_PARAM_ALPHATHRESHOLD) && defined(VFX_VARYING_ALPHATHRESHOLD)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_ALPHATHRESHOLD
|
|
= alphaThreshold;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if USE_UV_SCALE_BIAS\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined (VFX_VARYING_UV)\n\t\t\t\t\t\to.VFX_VARYING_UV.xy = o.VFX_VARYING_UV.xy
|
|
* uvScale + uvBias;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t#if
|
|
defined(VFX_VARYING_POSWS)\n\t\t\t\t\t\to.VFX_VARYING_POSWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t#if
|
|
USE_FLIPBOOK && defined(VFX_VARYING_UV)\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tVFXUVData
|
|
uvData = GetUVData(flipBookSize, invFlipBookSize, o.VFX_VARYING_UV.xy, attributes.texIndex);\n\t\t\t\t\t\to.VFX_VARYING_UV.xy
|
|
= uvData.uvs.xy;\n\t\t\t\t\t\t#if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_UV)
|
|
&& defined (VFX_VARYING_FRAMEBLEND)\n\t\t\t\t\t\to.VFX_VARYING_UV.zw = uvData.uvs.zw;\n\t\t\t\t\t\to.VFX_VARYING_FRAMEBLEND
|
|
= uvData.blend;\n\t\t\t\t\t\t#if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)\n\t\t\t\t\t\t\n\t\t\t\t\t\to.VFX_VARYING_MOTIONVECTORSCALE
|
|
= motionVectorScale * invFlipBookSize;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\tfloat3
|
|
posWS = TransformPositionVFXToWorld(vPos);\n\t\t\t\t\t\tVFXApplyShadowBias(o.VFX_VARYING_POSCS,
|
|
posWS, normalWS);\n\t\t\t\t\t\t\n\t\t\t \n\t\t\t \n\t\t\t\t\n\t\t\t\treturn
|
|
o;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t#include \"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\"\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\t#pragma
|
|
fragment frag\n\t\t\tfloat frag(ps_input i) : SV_TARGET\n\t\t\t{\n\t\t\t\tUNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);\n\t\t\t\tVFXTransformPSInputs(i);\n\t\t\t\t#ifdef
|
|
VFX_SHADERGRAPH\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\n\t\t\t\t\tfloat alpha = OUTSG.;\n\t\t\t\t#else\n\t\t\t\t\tfloat
|
|
alpha = VFXGetFragmentColor(i).a;\n\t\t\t\t\talpha *= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a;\n\t\t\t\t#endif\n\t\t\t\tVFXClipFragmentColor(alpha,i);\n\t\t\t\treturn
|
|
0;\n\t\t\t}\n\t\t\tENDHLSL\n\t\t}\n\t\t\n\r\n\t}\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[System 2]CameraSort'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_POSITION_CURRENT 1\n#define USE_DEAD_LIST_COUNT
|
|
1\n#define VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float4x4 localToWorld;\nCBUFFER_END\n\nstruct Attributes\n{\n float3 position;\n};\n\nstruct
|
|
SourceAttributes\n{\n};\n\n\n\r\n#include \"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nCBUFFER_START(params)\r\n
|
|
uint nbMax;\r\n uint dispatchWidth;\r\nCBUFFER_END\r\n\r\nCBUFFER_START(cameraParams)\r\n
|
|
float3 cameraPosition;\r\nCBUFFER_END\r\n\r\nByteAddressBuffer attributeBuffer;\r\nStructuredBuffer<uint>
|
|
inputBuffer;\r\n\r\n#if USE_DEAD_LIST_COUNT\r\nByteAddressBuffer deadListCount;\r\n#endif\r\n\r\nstruct
|
|
Kvp\r\n{\r\n\tfloat sortKey;\r\n\tuint index;\r\n};\r\n\r\nRWStructuredBuffer<Kvp>
|
|
outputBuffer;\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n\tuint
|
|
threshold = nbMax;\r\n#if USE_DEAD_LIST_COUNT\r\n\tthreshold -= deadListCount.Load(0);\r\n#endif\r\n\tuint
|
|
id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP + groupId.y * dispatchWidth
|
|
* NB_THREADS_PER_GROUP;\r\n\tif (id < threshold)\r\n\t{\r\n\t\tuint index =
|
|
inputBuffer[id];\r\n\t\t\r\n\t\tAttributes attributes = (Attributes)0;\r\n\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\n\r\n\t\t\r\n#if VFX_LOCAL_SPACE\r\n\t\tfloat3 wPos
|
|
= mul(localToWorld,float4(attributes.position,1.0f)).xyz;\r\n#else\r\n\t\tfloat3
|
|
wPos = attributes.position;\r\n#endif\r\n\t\tfloat3 camToPos = wPos - cameraPosition;\r\n\t\t\r\n\t\tKvp
|
|
kvp;\r\n\t\tkvp.sortKey = dot(camToPos,camToPos); // sqr distance to the camera\r\n\t\tkvp.index
|
|
= index;\r\n\r\n\t\toutputBuffer[id] = kvp;\r\n\t}\r\n}\r\n"
|
|
- compute: 1
|
|
name: '[Core Aura]CameraSort'
|
|
source: "#pragma kernel CSMain\r\n#define NB_THREADS_PER_GROUP 64\n#define HAS_ATTRIBUTES
|
|
1\n#define VFX_PASSDEPTH_ACTUAL (0)\n#define VFX_PASSDEPTH_MOTION_VECTOR (1)\n#define
|
|
VFX_PASSDEPTH_SELECTION (2)\n#define VFX_USE_POSITION_CURRENT 1\n#define USE_DEAD_LIST_COUNT
|
|
1\n#define VFX_LOCAL_SPACE 1\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXDefines.hlsl\"\n\n\r\nCBUFFER_START(parameters)\n
|
|
float4x4 localToWorld;\nCBUFFER_END\n\nstruct Attributes\n{\n float3 position;\n};\n\nstruct
|
|
SourceAttributes\n{\n};\n\n\n\r\n#include \"Packages/com.unity.visualeffectgraph/Shaders/Common/VFXCommonCompute.hlsl\"\n#include
|
|
\"Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl\"\n\n\r\n\r\nCBUFFER_START(params)\r\n
|
|
uint nbMax;\r\n uint dispatchWidth;\r\nCBUFFER_END\r\n\r\nCBUFFER_START(cameraParams)\r\n
|
|
float3 cameraPosition;\r\nCBUFFER_END\r\n\r\nByteAddressBuffer attributeBuffer;\r\nStructuredBuffer<uint>
|
|
inputBuffer;\r\n\r\n#if USE_DEAD_LIST_COUNT\r\nByteAddressBuffer deadListCount;\r\n#endif\r\n\r\nstruct
|
|
Kvp\r\n{\r\n\tfloat sortKey;\r\n\tuint index;\r\n};\r\n\r\nRWStructuredBuffer<Kvp>
|
|
outputBuffer;\r\n\r\n[numthreads(NB_THREADS_PER_GROUP,1,1)]\r\nvoid CSMain(uint3
|
|
groupId : SV_GroupID,\r\n uint3 groupThreadId : SV_GroupThreadID)\r\n{\r\n\tuint
|
|
threshold = nbMax;\r\n#if USE_DEAD_LIST_COUNT\r\n\tthreshold -= deadListCount.Load(0);\r\n#endif\r\n\tuint
|
|
id = groupThreadId.x + groupId.x * NB_THREADS_PER_GROUP + groupId.y * dispatchWidth
|
|
* NB_THREADS_PER_GROUP;\r\n\tif (id < threshold)\r\n\t{\r\n\t\tuint index =
|
|
inputBuffer[id];\r\n\t\t\r\n\t\tAttributes attributes = (Attributes)0;\r\n\t\tattributes.position
|
|
= float3(0, 0, 0);\n\t\t\n\r\n\t\t\r\n#if VFX_LOCAL_SPACE\r\n\t\tfloat3 wPos
|
|
= mul(localToWorld,float4(attributes.position,1.0f)).xyz;\r\n#else\r\n\t\tfloat3
|
|
wPos = attributes.position;\r\n#endif\r\n\t\tfloat3 camToPos = wPos - cameraPosition;\r\n\t\t\r\n\t\tKvp
|
|
kvp;\r\n\t\tkvp.sortKey = dot(camToPos,camToPos); // sqr distance to the camera\r\n\t\tkvp.index
|
|
= index;\r\n\r\n\t\toutputBuffer[id] = kvp;\r\n\t}\r\n}\r\n"
|
|
m_Infos:
|
|
m_Expressions:
|
|
m_Expressions:
|
|
- op: 1
|
|
valueIndex: 0
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 7
|
|
valueIndex: 3
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 4
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 5
|
|
- op: 1
|
|
valueIndex: 5
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 6
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 1
|
|
valueIndex: 7
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 49
|
|
valueIndex: 8
|
|
data[0]: 4
|
|
data[1]: 3
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 26
|
|
valueIndex: 9
|
|
data[0]: 5
|
|
data[1]: 6
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 10
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 11
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 12
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 29
|
|
valueIndex: 13
|
|
data[0]: 7
|
|
data[1]: 6
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 14
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 49
|
|
valueIndex: 15
|
|
data[0]: 12
|
|
data[1]: 3
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 16
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 19
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 22
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 25
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 28
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 5
|
|
- op: 1
|
|
valueIndex: 29
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 9
|
|
valueIndex: 32
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 76
|
|
valueIndex: 48
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 64
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 67
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 38
|
|
valueIndex: 68
|
|
data[0]: 21
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 71
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 6
|
|
- op: 42
|
|
valueIndex: 72
|
|
data[0]: 20
|
|
data[1]: 22
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 75
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 6
|
|
- op: 8
|
|
valueIndex: 76
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 62
|
|
valueIndex: 77
|
|
data[0]: 27
|
|
data[1]: 28
|
|
data[2]: -1
|
|
data[3]: 6
|
|
- op: 29
|
|
valueIndex: 78
|
|
data[0]: 24
|
|
data[1]: 26
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 81
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 6
|
|
- op: 1
|
|
valueIndex: 82
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 31
|
|
valueIndex: 83
|
|
data[0]: 32
|
|
data[1]: 23
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 84
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 26
|
|
valueIndex: 87
|
|
data[0]: 30
|
|
data[1]: 30
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 90
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 91
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 5
|
|
valueIndex: 92
|
|
data[0]: 35
|
|
data[1]: -1
|
|
data[2]: 1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 93
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 26
|
|
valueIndex: 94
|
|
data[0]: 1
|
|
data[1]: 36
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 31
|
|
valueIndex: 95
|
|
data[0]: 3
|
|
data[1]: 23
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 5
|
|
valueIndex: 96
|
|
data[0]: 35
|
|
data[1]: -1
|
|
data[2]: 2
|
|
data[3]: 3
|
|
- op: 30
|
|
valueIndex: 97
|
|
data[0]: 33
|
|
data[1]: 10
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 98
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 5
|
|
valueIndex: 99
|
|
data[0]: 35
|
|
data[1]: -1
|
|
data[2]: 0
|
|
data[3]: 3
|
|
- op: 28
|
|
valueIndex: 100
|
|
data[0]: 42
|
|
data[1]: 38
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 27
|
|
valueIndex: 101
|
|
data[0]: 1
|
|
data[1]: 37
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 102
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 103
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 56
|
|
valueIndex: 104
|
|
data[0]: 44
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 0
|
|
- op: 26
|
|
valueIndex: 108
|
|
data[0]: 43
|
|
data[1]: 39
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 109
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 1
|
|
valueIndex: 110
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 30
|
|
valueIndex: 111
|
|
data[0]: 41
|
|
data[1]: 10
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 112
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 113
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 49
|
|
valueIndex: 114
|
|
data[0]: 52
|
|
data[1]: 32
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 49
|
|
valueIndex: 115
|
|
data[0]: 49
|
|
data[1]: 3
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 116
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 49
|
|
valueIndex: 117
|
|
data[0]: 53
|
|
data[1]: 54
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 118
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 119
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 1
|
|
valueIndex: 120
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 28
|
|
valueIndex: 121
|
|
data[0]: 39
|
|
data[1]: 51
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 122
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 23
|
|
valueIndex: 123
|
|
data[0]: 47
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 124
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 125
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 126
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 2
|
|
- op: 28
|
|
valueIndex: 128
|
|
data[0]: 46
|
|
data[1]: 45
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 74
|
|
valueIndex: 129
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 130
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 72
|
|
valueIndex: 131
|
|
data[0]: 70
|
|
data[1]: 23
|
|
data[2]: -1
|
|
data[3]: 5
|
|
- op: 26
|
|
valueIndex: 132
|
|
data[0]: 66
|
|
data[1]: 68
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 133
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 26
|
|
valueIndex: 134
|
|
data[0]: 60
|
|
data[1]: 63
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 72
|
|
valueIndex: 135
|
|
data[0]: 54
|
|
data[1]: 23
|
|
data[2]: -1
|
|
data[3]: 4
|
|
- op: 28
|
|
valueIndex: 136
|
|
data[0]: 58
|
|
data[1]: 57
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 137
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 74
|
|
valueIndex: 138
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 139
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 142
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 3
|
|
valueIndex: 143
|
|
data[0]: 1
|
|
data[1]: 1
|
|
data[2]: 1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 146
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 26
|
|
valueIndex: 147
|
|
data[0]: 1
|
|
data[1]: 64
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 74
|
|
valueIndex: 148
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 22
|
|
valueIndex: 149
|
|
data[0]: 71
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 150
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 26
|
|
valueIndex: 151
|
|
data[0]: 43
|
|
data[1]: 55
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 26
|
|
valueIndex: 152
|
|
data[0]: 43
|
|
data[1]: 67
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 72
|
|
valueIndex: 153
|
|
data[0]: 70
|
|
data[1]: 61
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 154
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 49
|
|
valueIndex: 155
|
|
data[0]: 62
|
|
data[1]: 54
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 26
|
|
valueIndex: 156
|
|
data[0]: 43
|
|
data[1]: 56
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 157
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 158
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 1
|
|
valueIndex: 159
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 160
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 161
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 26
|
|
valueIndex: 162
|
|
data[0]: 43
|
|
data[1]: 72
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 74
|
|
valueIndex: 163
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 164
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 26
|
|
valueIndex: 165
|
|
data[0]: 1
|
|
data[1]: 8
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 28
|
|
valueIndex: 166
|
|
data[0]: 37
|
|
data[1]: 94
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 167
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 49
|
|
valueIndex: 168
|
|
data[0]: 99
|
|
data[1]: 54
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 3
|
|
valueIndex: 169
|
|
data[0]: 43
|
|
data[1]: 43
|
|
data[2]: 43
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 172
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 3
|
|
valueIndex: 173
|
|
data[0]: 80
|
|
data[1]: 80
|
|
data[2]: 80
|
|
data[3]: -1
|
|
- op: 26
|
|
valueIndex: 176
|
|
data[0]: 86
|
|
data[1]: 102
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 28
|
|
valueIndex: 177
|
|
data[0]: 10
|
|
data[1]: 89
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 178
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 3
|
|
valueIndex: 179
|
|
data[0]: 78
|
|
data[1]: 78
|
|
data[2]: 78
|
|
data[3]: -1
|
|
- op: 49
|
|
valueIndex: 182
|
|
data[0]: 84
|
|
data[1]: 54
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 26
|
|
valueIndex: 183
|
|
data[0]: 87
|
|
data[1]: 75
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 184
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 26
|
|
valueIndex: 185
|
|
data[0]: 101
|
|
data[1]: 102
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 3
|
|
valueIndex: 186
|
|
data[0]: 103
|
|
data[1]: 103
|
|
data[2]: 103
|
|
data[3]: -1
|
|
- op: 56
|
|
valueIndex: 189
|
|
data[0]: 92
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 26
|
|
valueIndex: 193
|
|
data[0]: 43
|
|
data[1]: 98
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 74
|
|
valueIndex: 194
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 73
|
|
valueIndex: 195
|
|
data[0]: 77
|
|
data[1]: 10
|
|
data[2]: 23
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 196
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 1
|
|
valueIndex: 197
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 26
|
|
valueIndex: 200
|
|
data[0]: 43
|
|
data[1]: 79
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 28
|
|
valueIndex: 201
|
|
data[0]: 82
|
|
data[1]: 100
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 202
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 1
|
|
valueIndex: 203
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 206
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 207
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 3
|
|
valueIndex: 210
|
|
data[0]: 23
|
|
data[1]: 85
|
|
data[2]: 23
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 213
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 56
|
|
valueIndex: 214
|
|
data[0]: 96
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 2
|
|
- op: 3
|
|
valueIndex: 218
|
|
data[0]: 23
|
|
data[1]: 74
|
|
data[2]: 23
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 221
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 222
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 225
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 26
|
|
valueIndex: 226
|
|
data[0]: 93
|
|
data[1]: 95
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 28
|
|
valueIndex: 227
|
|
data[0]: 8
|
|
data[1]: 76
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 228
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 229
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 83
|
|
valueIndex: 230
|
|
data[0]: 73
|
|
data[1]: 91
|
|
data[2]: -1
|
|
data[3]: 17
|
|
- op: 26
|
|
valueIndex: 231
|
|
data[0]: 43
|
|
data[1]: 97
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 28
|
|
valueIndex: 232
|
|
data[0]: 10
|
|
data[1]: 90
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 233
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 1
|
|
valueIndex: 234
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 1
|
|
valueIndex: 235
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 28
|
|
valueIndex: 236
|
|
data[0]: 135
|
|
data[1]: 143
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 49
|
|
valueIndex: 237
|
|
data[0]: 112
|
|
data[1]: 54
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 28
|
|
valueIndex: 238
|
|
data[0]: 141
|
|
data[1]: 117
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 239
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 26
|
|
valueIndex: 240
|
|
data[0]: 1
|
|
data[1]: 126
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 241
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 14
|
|
- op: 26
|
|
valueIndex: 242
|
|
data[0]: 114
|
|
data[1]: 111
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 243
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 28
|
|
valueIndex: 244
|
|
data[0]: 129
|
|
data[1]: 125
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 245
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 26
|
|
valueIndex: 246
|
|
data[0]: 43
|
|
data[1]: 129
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 34
|
|
valueIndex: 247
|
|
data[0]: 136
|
|
data[1]: 131
|
|
data[2]: 130
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 263
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 12
|
|
- op: 27
|
|
valueIndex: 279
|
|
data[0]: 65
|
|
data[1]: 139
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 31
|
|
valueIndex: 280
|
|
data[0]: 122
|
|
data[1]: 23
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 281
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 14
|
|
- op: 26
|
|
valueIndex: 282
|
|
data[0]: 106
|
|
data[1]: 104
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 26
|
|
valueIndex: 283
|
|
data[0]: 54
|
|
data[1]: 140
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 26
|
|
valueIndex: 284
|
|
data[0]: 43
|
|
data[1]: 105
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 49
|
|
valueIndex: 285
|
|
data[0]: 123
|
|
data[1]: 54
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 286
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 14
|
|
- op: 31
|
|
valueIndex: 287
|
|
data[0]: 43
|
|
data[1]: 23
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 28
|
|
valueIndex: 288
|
|
data[0]: 10
|
|
data[1]: 120
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 289
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 14
|
|
- op: 1
|
|
valueIndex: 290
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 14
|
|
- op: 26
|
|
valueIndex: 291
|
|
data[0]: 109
|
|
data[1]: 124
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 49
|
|
valueIndex: 294
|
|
data[0]: 127
|
|
data[1]: 54
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 295
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 34
|
|
valueIndex: 298
|
|
data[0]: 22
|
|
data[1]: 134
|
|
data[2]: 128
|
|
data[3]: -1
|
|
- op: 26
|
|
valueIndex: 314
|
|
data[0]: 121
|
|
data[1]: 108
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 315
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 28
|
|
valueIndex: 316
|
|
data[0]: 141
|
|
data[1]: 110
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 317
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 14
|
|
- op: 28
|
|
valueIndex: 318
|
|
data[0]: 116
|
|
data[1]: 115
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 319
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 320
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 56
|
|
valueIndex: 323
|
|
data[0]: 137
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 327
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 14
|
|
- op: 1
|
|
valueIndex: 328
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 14
|
|
- op: 1
|
|
valueIndex: 329
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 73
|
|
valueIndex: 330
|
|
data[0]: 142
|
|
data[1]: 138
|
|
data[2]: 23
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 331
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 13
|
|
- op: 56
|
|
valueIndex: 332
|
|
data[0]: 132
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 4
|
|
- op: 1
|
|
valueIndex: 336
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 337
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 31
|
|
valueIndex: 338
|
|
data[0]: 174
|
|
data[1]: 23
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 57
|
|
valueIndex: 339
|
|
data[0]: 168
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 0
|
|
- op: 1
|
|
valueIndex: 340
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 2
|
|
- op: 1
|
|
valueIndex: 342
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 343
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 6
|
|
valueIndex: 344
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 345
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 28
|
|
valueIndex: 346
|
|
data[0]: 79
|
|
data[1]: 158
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 347
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 350
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 2
|
|
- op: 1
|
|
valueIndex: 352
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 57
|
|
valueIndex: 353
|
|
data[0]: 185
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 36
|
|
valueIndex: 354
|
|
data[0]: 159
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 31
|
|
valueIndex: 370
|
|
data[0]: 156
|
|
data[1]: 23
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 371
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 7
|
|
- op: 1
|
|
valueIndex: 372
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 375
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 15
|
|
- op: 3
|
|
valueIndex: 376
|
|
data[0]: 149
|
|
data[1]: 149
|
|
data[2]: 149
|
|
data[3]: -1
|
|
- op: 31
|
|
valueIndex: 379
|
|
data[0]: 188
|
|
data[1]: 23
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 56
|
|
valueIndex: 380
|
|
data[0]: 147
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 5
|
|
- op: 1
|
|
valueIndex: 384
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 15
|
|
- op: 56
|
|
valueIndex: 385
|
|
data[0]: 146
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 6
|
|
- op: 1
|
|
valueIndex: 389
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 56
|
|
valueIndex: 390
|
|
data[0]: 145
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 7
|
|
- op: 1
|
|
valueIndex: 394
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 395
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 396
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 3
|
|
valueIndex: 397
|
|
data[0]: 148
|
|
data[1]: 148
|
|
data[2]: 148
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 400
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 401
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 3
|
|
valueIndex: 402
|
|
data[0]: 152
|
|
data[1]: 152
|
|
data[2]: 152
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 405
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 9
|
|
- op: 36
|
|
valueIndex: 406
|
|
data[0]: 176
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 422
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 2
|
|
- op: 57
|
|
valueIndex: 424
|
|
data[0]: 171
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 2
|
|
- op: 1
|
|
valueIndex: 425
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 2
|
|
- op: 1
|
|
valueIndex: 427
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 430
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 433
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 6
|
|
- op: 1
|
|
valueIndex: 434
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 437
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 438
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 441
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 7
|
|
- op: 1
|
|
valueIndex: 442
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 2
|
|
- op: 1
|
|
valueIndex: 444
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 7
|
|
- op: 1
|
|
valueIndex: 445
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 57
|
|
valueIndex: 446
|
|
data[0]: 180
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 3
|
|
valueIndex: 447
|
|
data[0]: 164
|
|
data[1]: 164
|
|
data[2]: 164
|
|
data[3]: -1
|
|
- op: 57
|
|
valueIndex: 450
|
|
data[0]: 163
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 4
|
|
- op: 28
|
|
valueIndex: 451
|
|
data[0]: 175
|
|
data[1]: 173
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 3
|
|
valueIndex: 454
|
|
data[0]: 150
|
|
data[1]: 181
|
|
data[2]: 179
|
|
data[3]: -1
|
|
- op: 28
|
|
valueIndex: 457
|
|
data[0]: 37
|
|
data[1]: 166
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 28
|
|
valueIndex: 458
|
|
data[0]: 36
|
|
data[1]: 177
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 459
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 7
|
|
- op: 56
|
|
valueIndex: 460
|
|
data[0]: 151
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 8
|
|
- op: 1
|
|
valueIndex: 464
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 467
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 470
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 471
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 57
|
|
valueIndex: 474
|
|
data[0]: 186
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 5
|
|
- op: 3
|
|
valueIndex: 475
|
|
data[0]: 170
|
|
data[1]: 170
|
|
data[2]: 170
|
|
data[3]: -1
|
|
- op: 56
|
|
valueIndex: 478
|
|
data[0]: 189
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 9
|
|
- op: 1
|
|
valueIndex: 482
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 20
|
|
valueIndex: 485
|
|
data[0]: 161
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 57
|
|
valueIndex: 486
|
|
data[0]: 172
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 6
|
|
- op: 1
|
|
valueIndex: 487
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 2
|
|
valueIndex: 488
|
|
data[0]: 162
|
|
data[1]: 162
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 490
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 7
|
|
- op: 30
|
|
valueIndex: 491
|
|
data[0]: 169
|
|
data[1]: 10
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 492
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 56
|
|
valueIndex: 493
|
|
data[0]: 178
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 10
|
|
- op: 28
|
|
valueIndex: 497
|
|
data[0]: 65
|
|
data[1]: 165
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 498
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 1
|
|
- op: 1
|
|
valueIndex: 499
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 502
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 1
|
|
valueIndex: 505
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 7
|
|
- op: 1
|
|
valueIndex: 506
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 2
|
|
- op: 3
|
|
valueIndex: 508
|
|
data[0]: 167
|
|
data[1]: 167
|
|
data[2]: 167
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 511
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 7
|
|
- op: 57
|
|
valueIndex: 512
|
|
data[0]: 153
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 7
|
|
- op: 1
|
|
valueIndex: 513
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 2
|
|
- op: 56
|
|
valueIndex: 515
|
|
data[0]: 157
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 11
|
|
- op: 1
|
|
valueIndex: 519
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 3
|
|
- op: 56
|
|
valueIndex: 522
|
|
data[0]: 187
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 12
|
|
- op: 1
|
|
valueIndex: 526
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 12
|
|
- op: 1
|
|
valueIndex: 542
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 12
|
|
- op: 2
|
|
valueIndex: 558
|
|
data[0]: 1
|
|
data[1]: 23
|
|
data[2]: -1
|
|
data[3]: -1
|
|
- op: 1
|
|
valueIndex: 560
|
|
data[0]: -1
|
|
data[1]: -1
|
|
data[2]: -1
|
|
data[3]: 7
|
|
m_NeedsLocalToWorld: 1
|
|
m_NeedsWorldToLocal: 0
|
|
m_NeededMainCameraBuffers: 0
|
|
m_PropertySheet:
|
|
m_Float:
|
|
m_Array:
|
|
- m_ExpressionIndex: 3
|
|
m_Value: 1
|
|
- m_ExpressionIndex: 5
|
|
m_Value: -1
|
|
- m_ExpressionIndex: 8
|
|
m_Value: 2
|
|
- m_ExpressionIndex: 9
|
|
m_Value: 0.5
|
|
- m_ExpressionIndex: 10
|
|
m_Value: 1
|
|
- m_ExpressionIndex: 23
|
|
m_Value: 0
|
|
- m_ExpressionIndex: 32
|
|
m_Value: 0
|
|
- m_ExpressionIndex: 36
|
|
m_Value: 0.2
|
|
- m_ExpressionIndex: 37
|
|
m_Value: 12
|
|
- m_ExpressionIndex: 39
|
|
m_Value: 15
|
|
- m_ExpressionIndex: 48
|
|
m_Value: 0.9
|
|
- m_ExpressionIndex: 55
|
|
m_Value: 0.20000005
|
|
- m_ExpressionIndex: 56
|
|
m_Value: -12
|
|
- m_ExpressionIndex: 59
|
|
m_Value: 1.5
|
|
- m_ExpressionIndex: 61
|
|
m_Value: 1600
|
|
- m_ExpressionIndex: 63
|
|
m_Value: 1.2
|
|
- m_ExpressionIndex: 65
|
|
m_Value: 0.1
|
|
- m_ExpressionIndex: 67
|
|
m_Value: 3
|
|
- m_ExpressionIndex: 68
|
|
m_Value: 360
|
|
- m_ExpressionIndex: 72
|
|
m_Value: 10
|
|
- m_ExpressionIndex: 75
|
|
m_Value: 20.05049
|
|
- m_ExpressionIndex: 79
|
|
m_Value: 7
|
|
- m_ExpressionIndex: 82
|
|
m_Value: 5
|
|
- m_ExpressionIndex: 88
|
|
m_Value: 500
|
|
- m_ExpressionIndex: 95
|
|
m_Value: 100000
|
|
- m_ExpressionIndex: 97
|
|
m_Value: 0.6
|
|
- m_ExpressionIndex: 98
|
|
m_Value: 99
|
|
- m_ExpressionIndex: 102
|
|
m_Value: 8.84
|
|
- m_ExpressionIndex: 105
|
|
m_Value: 320
|
|
- m_ExpressionIndex: 108
|
|
m_Value: 0.40000004
|
|
- m_ExpressionIndex: 116
|
|
m_Value: -9.361389
|
|
- m_ExpressionIndex: 129
|
|
m_Value: 8
|
|
- m_ExpressionIndex: 135
|
|
m_Value: 0.4
|
|
- m_ExpressionIndex: 140
|
|
m_Value: 1.1999999
|
|
- m_ExpressionIndex: 141
|
|
m_Value: -4.42
|
|
- m_ExpressionIndex: 155
|
|
m_Value: 1.8
|
|
- m_ExpressionIndex: 182
|
|
m_Value: 4
|
|
- m_ExpressionIndex: 191
|
|
m_Value: -0.033333335
|
|
- m_ExpressionIndex: 192
|
|
m_Value: 40
|
|
- m_ExpressionIndex: 196
|
|
m_Value: 0.75
|
|
- m_ExpressionIndex: 197
|
|
m_Value: 50
|
|
- m_ExpressionIndex: 199
|
|
m_Value: 20
|
|
- m_ExpressionIndex: 203
|
|
m_Value: 2000
|
|
- m_ExpressionIndex: 215
|
|
m_Value: 80
|
|
- m_ExpressionIndex: 217
|
|
m_Value: 11
|
|
- m_ExpressionIndex: 218
|
|
m_Value: 3.5
|
|
- m_ExpressionIndex: 219
|
|
m_Value: 6.2831855
|
|
- m_ExpressionIndex: 221
|
|
m_Value: 0.05
|
|
- m_ExpressionIndex: 222
|
|
m_Value: 128
|
|
- m_ExpressionIndex: 233
|
|
m_Value: 0.09
|
|
- m_ExpressionIndex: 238
|
|
m_Value: 0.3
|
|
- m_ExpressionIndex: 250
|
|
m_Value: 4.2
|
|
- m_ExpressionIndex: 258
|
|
m_Value: 22
|
|
- m_ExpressionIndex: 262
|
|
m_Value: 0.07
|
|
- m_ExpressionIndex: 265
|
|
m_Value: 6
|
|
m_Vector2f:
|
|
m_Array:
|
|
- m_ExpressionIndex: 69
|
|
m_Value: {x: 1, y: 1}
|
|
- m_ExpressionIndex: 195
|
|
m_Value: {x: 3, y: 5}
|
|
- m_ExpressionIndex: 202
|
|
m_Value: {x: 500, y: 500}
|
|
- m_ExpressionIndex: 226
|
|
m_Value: {x: 0, y: 0}
|
|
- m_ExpressionIndex: 228
|
|
m_Value: {x: 64000, y: 64000}
|
|
- m_ExpressionIndex: 236
|
|
m_Value: {x: 0.03, y: 0.15}
|
|
- m_ExpressionIndex: 269
|
|
m_Value: {x: 1, y: 3}
|
|
- m_ExpressionIndex: 273
|
|
m_Value: {x: 16, y: 16}
|
|
m_Vector3f:
|
|
m_Array:
|
|
- m_ExpressionIndex: 0
|
|
m_Value: {x: 1, y: 0.75, z: 2}
|
|
- m_ExpressionIndex: 14
|
|
m_Value: {x: 1.8, y: 1.8, z: 1.8}
|
|
- m_ExpressionIndex: 15
|
|
m_Value: {x: 0.33333, y: 0.33333, z: 0.33333}
|
|
- m_ExpressionIndex: 16
|
|
m_Value: {x: 0.66666, y: 0.66666, z: 0.66666}
|
|
- m_ExpressionIndex: 17
|
|
m_Value: {x: 1, y: 0.5, z: 2}
|
|
- m_ExpressionIndex: 19
|
|
m_Value: {x: 5, y: 5, z: 5}
|
|
- m_ExpressionIndex: 22
|
|
m_Value: {x: 0, y: 0, z: 0}
|
|
- m_ExpressionIndex: 34
|
|
m_Value: {x: 3, y: 3, z: 3}
|
|
- m_ExpressionIndex: 81
|
|
m_Value: {x: 32.4, y: 0, z: 0}
|
|
- m_ExpressionIndex: 124
|
|
m_Value: {x: 0.0036325455, y: -0.19980231, z: 0.25098038}
|
|
- m_ExpressionIndex: 128
|
|
m_Value: {x: 7, y: 7, z: 7}
|
|
- m_ExpressionIndex: 130
|
|
m_Value: {x: 4, y: 4, z: 4}
|
|
- m_ExpressionIndex: 136
|
|
m_Value: {x: 8.9, y: 0, z: 0}
|
|
- m_ExpressionIndex: 175
|
|
m_Value: {x: 0, y: 0.19980231, z: 0.7490196}
|
|
- m_ExpressionIndex: 183
|
|
m_Value: {x: 0.2, y: 0.2, z: 0.2}
|
|
- m_ExpressionIndex: 201
|
|
m_Value: {x: 10, y: 10, z: 10}
|
|
- m_ExpressionIndex: 208
|
|
m_Value: {x: 1, y: 1, z: 1}
|
|
- m_ExpressionIndex: 229
|
|
m_Value: {x: 0, y: 1, z: 0}
|
|
- m_ExpressionIndex: 230
|
|
m_Value: {x: 2, y: 3, z: 2}
|
|
- m_ExpressionIndex: 232
|
|
m_Value: {x: 248.2742, y: 9.33845, z: 0}
|
|
- m_ExpressionIndex: 234
|
|
m_Value: {x: 9, y: 5, z: 8}
|
|
- m_ExpressionIndex: 248
|
|
m_Value: {x: 0, y: 0.02795981, z: 0.6675392}
|
|
- m_ExpressionIndex: 249
|
|
m_Value: {x: 0.007843138, y: 0.62352943, z: 0.7490196}
|
|
- m_ExpressionIndex: 251
|
|
m_Value: {x: -0.5, y: -0.5, z: -0.5}
|
|
- m_ExpressionIndex: 255
|
|
m_Value: {x: 0, y: 0, z: 1}
|
|
- m_ExpressionIndex: 266
|
|
m_Value: {x: 8, y: 8, z: 8}
|
|
- m_ExpressionIndex: 267
|
|
m_Value: {x: 3, y: 3, z: 7}
|
|
- m_ExpressionIndex: 275
|
|
m_Value: {x: 2.5242584, y: 3.3023438, z: 4.266667}
|
|
m_Vector4f:
|
|
m_Array: []
|
|
m_Uint:
|
|
m_Array:
|
|
- m_ExpressionIndex: 25
|
|
m_Value: 1
|
|
- m_ExpressionIndex: 27
|
|
m_Value: 0
|
|
- m_ExpressionIndex: 31
|
|
m_Value: 500
|
|
- m_ExpressionIndex: 231
|
|
m_Value: 4294967295
|
|
m_Int:
|
|
m_Array:
|
|
- m_ExpressionIndex: 2
|
|
m_Value: 7
|
|
- m_ExpressionIndex: 18
|
|
m_Value: 1
|
|
m_Matrix4x4f:
|
|
m_Array:
|
|
- m_ExpressionIndex: 160
|
|
m_Value:
|
|
e00: 0.00000007152558
|
|
e01: 0
|
|
e02: 1.1999999
|
|
e03: 0
|
|
e10: 0
|
|
e11: 1.2
|
|
e12: 0
|
|
e13: 0
|
|
e20: -1.1999999
|
|
e21: 0
|
|
e22: 0.00000007152558
|
|
e23: 0
|
|
e30: 0
|
|
e31: 0
|
|
e32: 0
|
|
e33: 1
|
|
- m_ExpressionIndex: 277
|
|
m_Value:
|
|
e00: 0.5
|
|
e01: 0
|
|
e02: 0
|
|
e03: 0
|
|
e10: 0
|
|
e11: 0.5
|
|
e12: 0
|
|
e13: 0
|
|
e20: 0
|
|
e21: 0
|
|
e22: 0.5
|
|
e23: 0
|
|
e30: 0
|
|
e31: 0
|
|
e32: 0
|
|
e33: 1
|
|
- m_ExpressionIndex: 278
|
|
m_Value:
|
|
e00: 2
|
|
e01: -0
|
|
e02: 0
|
|
e03: -0
|
|
e10: -0
|
|
e11: 2
|
|
e12: -0
|
|
e13: -0
|
|
e20: 0
|
|
e21: -0
|
|
e22: 2
|
|
e23: -0
|
|
e30: 0
|
|
e31: 0
|
|
e32: 0
|
|
e33: 1
|
|
m_AnimationCurve:
|
|
m_Array:
|
|
- m_ExpressionIndex: 4
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0
|
|
inSlope: -1.3028046
|
|
outSlope: -1.3028046
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.0097814035
|
|
value: 0.564104
|
|
inSlope: -1.2742734
|
|
outSlope: -1.2742734
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 0.008509964
|
|
inSlope: -0.56108224
|
|
outSlope: -0.56108224
|
|
tangentMode: 34
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 12
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0.025024414
|
|
inSlope: 1.0533068
|
|
outSlope: 1.0533068
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.02280528
|
|
value: 0.34654742
|
|
inSlope: 1.0458804
|
|
outSlope: 1.0458804
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 0.99860764
|
|
inSlope: 0.07660404
|
|
outSlope: 0.07660404
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 44
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0.06718397
|
|
value: 0.012953252
|
|
inSlope: -1.561097
|
|
outSlope: -1.561097
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.17319489
|
|
value: -0.4920807
|
|
inSlope: 2
|
|
outSlope: 2
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.23448764
|
|
value: -0.21146375
|
|
inSlope: 2.2920678
|
|
outSlope: 2.2920678
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.3067703
|
|
value: -0.40269113
|
|
inSlope: 0.90817016
|
|
outSlope: 0.90817016
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.3806697
|
|
value: -0.11189722
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 1
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 49
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0.0032310486
|
|
value: 0
|
|
inSlope: -0.20456505
|
|
outSlope: -0.20456505
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.026951559
|
|
value: 0.4462987
|
|
inSlope: -0.24860205
|
|
outSlope: -0.24860205
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 52
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0
|
|
inSlope: 0.33155805
|
|
outSlope: 0.33155805
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 1.9924853
|
|
inSlope: 2
|
|
outSlope: 2
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 53
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0
|
|
inSlope: 2
|
|
outSlope: 2
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.06793284
|
|
value: 1.1978892
|
|
inSlope: 1.7563772
|
|
outSlope: 1.7563772
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.24894965
|
|
value: 0.43592337
|
|
inSlope: 1.5021007
|
|
outSlope: 1.5021007
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 1
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 62
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.096980914
|
|
value: 1
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 1
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 84
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0
|
|
inSlope: 2
|
|
outSlope: 2
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.06793284
|
|
value: 1.5520457
|
|
inSlope: 1.7563772
|
|
outSlope: 1.7563772
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.24894965
|
|
value: 0.43592337
|
|
inSlope: 1.5021007
|
|
outSlope: 1.5021007
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 1
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 92
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0
|
|
inSlope: 6.388685
|
|
outSlope: 47.45689
|
|
tangentMode: 69
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.19646609
|
|
value: 9.323669
|
|
inSlope: 47.45689
|
|
outSlope: 0
|
|
tangentMode: 69
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.8002311
|
|
value: 9.323669
|
|
inSlope: 0
|
|
outSlope: -49.665718
|
|
tangentMode: 69
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.9883224
|
|
value: -0.018018797
|
|
inSlope: -49.665718
|
|
outSlope: -4.079373
|
|
tangentMode: 69
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 96
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 13.432012
|
|
inSlope: -12.97699
|
|
outSlope: -12.97699
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1.067426
|
|
value: 6.6903534
|
|
inSlope: -2.5035205
|
|
outSlope: -2.5035205
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 2.4490862
|
|
value: 4.941454
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 99
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 2.9034424
|
|
inSlope: 2
|
|
outSlope: 2
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.06793284
|
|
value: 1.1978892
|
|
inSlope: 1.7563772
|
|
outSlope: 1.7563772
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.24894965
|
|
value: 0.43592337
|
|
inSlope: 1.5021007
|
|
outSlope: 1.5021007
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 1
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 112
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.09479997
|
|
value: 0.68120956
|
|
inSlope: 3.4950821
|
|
outSlope: 3.4950821
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.28134578
|
|
value: 1
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 1
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 123
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 29.216507
|
|
inSlope: -21.805294
|
|
outSlope: -21.805294
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.1367468
|
|
value: 7.9285774
|
|
inSlope: -17.918768
|
|
outSlope: -17.918768
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 1
|
|
inSlope: -0.0523004
|
|
outSlope: -0.0523004
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 127
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.08868501
|
|
value: 101.785416
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 59.346558
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 132
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.25
|
|
value: 4.9489784
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 137
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.25
|
|
value: 9.284998
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 3.5590024
|
|
value: 5.0213594
|
|
inSlope: -3.298775
|
|
outSlope: -3.298775
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 145
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.2
|
|
value: 1
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 65
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.8
|
|
value: 1
|
|
inSlope: 0
|
|
outSlope: -1.3495437
|
|
tangentMode: 5
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 146
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.2
|
|
value: 1
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 65
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.8
|
|
value: 1
|
|
inSlope: 0
|
|
outSlope: -1.3495437
|
|
tangentMode: 5
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 147
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.2
|
|
value: 1
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 65
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.8
|
|
value: 1
|
|
inSlope: 0
|
|
outSlope: -1.3495437
|
|
tangentMode: 5
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 151
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0.2839167
|
|
inSlope: 0
|
|
outSlope: 0.33673078
|
|
tangentMode: 69
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 0.6206475
|
|
inSlope: 0.33673078
|
|
outSlope: 0
|
|
tangentMode: 69
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 157
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 1
|
|
inSlope: 0
|
|
outSlope: -1
|
|
tangentMode: 69
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 0
|
|
inSlope: -1
|
|
outSlope: 0
|
|
tangentMode: 69
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 178
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0.5007682
|
|
value: 0.9982312
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 187
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0.5007682
|
|
value: 0.8577397
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
- m_ExpressionIndex: 189
|
|
m_Value:
|
|
serializedVersion: 2
|
|
m_Curve:
|
|
- serializedVersion: 3
|
|
time: 0
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.090090945
|
|
value: 0.9144974
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 65
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 0.93793947
|
|
value: 0.9144974
|
|
inSlope: 0
|
|
outSlope: -1.3495437
|
|
tangentMode: 5
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
- serializedVersion: 3
|
|
time: 1
|
|
value: 0
|
|
inSlope: 0
|
|
outSlope: 0
|
|
tangentMode: 0
|
|
weightedMode: 0
|
|
inWeight: 0
|
|
outWeight: 0
|
|
m_PreInfinity: 2
|
|
m_PostInfinity: 2
|
|
m_RotationOrder: 4
|
|
m_Gradient:
|
|
m_Array:
|
|
- m_ExpressionIndex: 153
|
|
m_Value:
|
|
serializedVersion: 2
|
|
key0: {r: 0, g: 12.92549, b: 32, a: 0}
|
|
key1: {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
|
key2: {r: 0, g: 0, b: 0, a: 0}
|
|
key3: {r: 0, g: 0, b: 0, a: 0}
|
|
key4: {r: 0, g: 0, b: 0, a: 0}
|
|
key5: {r: 0, g: 0, b: 0, a: 0}
|
|
key6: {r: 0, g: 0, b: 0, a: 0}
|
|
key7: {r: 0, g: 0, b: 0, a: 0}
|
|
ctime0: 0
|
|
ctime1: 65535
|
|
ctime2: 0
|
|
ctime3: 0
|
|
ctime4: 0
|
|
ctime5: 0
|
|
ctime6: 0
|
|
ctime7: 0
|
|
atime0: 0
|
|
atime1: 6554
|
|
atime2: 65535
|
|
atime3: 0
|
|
atime4: 0
|
|
atime5: 0
|
|
atime6: 0
|
|
atime7: 0
|
|
m_Mode: 0
|
|
m_NumColorKeys: 2
|
|
m_NumAlphaKeys: 3
|
|
- m_ExpressionIndex: 163
|
|
m_Value:
|
|
serializedVersion: 2
|
|
key0: {r: 1, g: 1, b: 1, a: 0}
|
|
key1: {r: 1, g: 1, b: 1, a: 0.03137255}
|
|
key2: {r: 0, g: 0, b: 0, a: 0}
|
|
key3: {r: 0, g: 0, b: 0, a: 0}
|
|
key4: {r: 0, g: 0, b: 0, a: 0}
|
|
key5: {r: 0, g: 0, b: 0, a: 0}
|
|
key6: {r: 0, g: 0, b: 0, a: 0}
|
|
key7: {r: 0, g: 0, b: 0, a: 0}
|
|
ctime0: 0
|
|
ctime1: 65535
|
|
ctime2: 0
|
|
ctime3: 0
|
|
ctime4: 0
|
|
ctime5: 0
|
|
ctime6: 0
|
|
ctime7: 0
|
|
atime0: 0
|
|
atime1: 52881
|
|
atime2: 65535
|
|
atime3: 0
|
|
atime4: 0
|
|
atime5: 0
|
|
atime6: 0
|
|
atime7: 0
|
|
m_Mode: 0
|
|
m_NumColorKeys: 2
|
|
m_NumAlphaKeys: 3
|
|
- m_ExpressionIndex: 168
|
|
m_Value:
|
|
serializedVersion: 2
|
|
key0: {r: 0, g: 0, b: 0, a: 0}
|
|
key1: {r: 0, g: 0, b: 0, a: 1}
|
|
key2: {r: 0, g: 0, b: 0, a: 0}
|
|
key3: {r: 0, g: 0, b: 0, a: 0}
|
|
key4: {r: 0, g: 0, b: 0, a: 0}
|
|
key5: {r: 0, g: 0, b: 0, a: 0}
|
|
key6: {r: 0, g: 0, b: 0, a: 0}
|
|
key7: {r: 0, g: 0, b: 0, a: 0}
|
|
ctime0: 0
|
|
ctime1: 65535
|
|
ctime2: 0
|
|
ctime3: 0
|
|
ctime4: 0
|
|
ctime5: 0
|
|
ctime6: 0
|
|
ctime7: 0
|
|
atime0: 0
|
|
atime1: 65535
|
|
atime2: 0
|
|
atime3: 0
|
|
atime4: 0
|
|
atime5: 0
|
|
atime6: 0
|
|
atime7: 0
|
|
m_Mode: 0
|
|
m_NumColorKeys: 2
|
|
m_NumAlphaKeys: 2
|
|
- m_ExpressionIndex: 171
|
|
m_Value:
|
|
serializedVersion: 2
|
|
key0: {r: 0, g: 0, b: 0, a: 1}
|
|
key1: {r: 0.054815024, g: 0.038180854, b: 0.20754719, a: 1}
|
|
key2: {r: 0.2784301, g: 0.18823527, b: 0.81960785, a: 0}
|
|
key3: {r: 0.34845594, g: 0.6161975, b: 1.3431392, a: 0}
|
|
key4: {r: 0.5235183, g: 1.0961432, b: 1.724, a: 0}
|
|
key5: {r: 2.315, g: 2.0287042, b: 1.502932, a: 0}
|
|
key6: {r: 0, g: 0, b: 0, a: 0}
|
|
key7: {r: 0, g: 0, b: 0, a: 0}
|
|
ctime0: 0
|
|
ctime1: 11062
|
|
ctime2: 24722
|
|
ctime3: 36287
|
|
ctime4: 50702
|
|
ctime5: 65535
|
|
ctime6: 0
|
|
ctime7: 0
|
|
atime0: 0
|
|
atime1: 65535
|
|
atime2: 0
|
|
atime3: 0
|
|
atime4: 0
|
|
atime5: 0
|
|
atime6: 0
|
|
atime7: 0
|
|
m_Mode: 0
|
|
m_NumColorKeys: 6
|
|
m_NumAlphaKeys: 2
|
|
- m_ExpressionIndex: 172
|
|
m_Value:
|
|
serializedVersion: 2
|
|
key0: {r: 8.901707, g: 83.140495, b: 106.264145, a: 1}
|
|
key1: {r: 0, g: 4.4088035, b: 8.809244, a: 0.9577465}
|
|
key2: {r: 0, g: 0, b: 0, a: 0}
|
|
key3: {r: 0, g: 0, b: 0, a: 0}
|
|
key4: {r: 0, g: 0, b: 0, a: 0}
|
|
key5: {r: 0, g: 0, b: 0, a: 0}
|
|
key6: {r: 0, g: 0, b: 0, a: 0}
|
|
key7: {r: 0, g: 0, b: 0, a: 0}
|
|
ctime0: 84
|
|
ctime1: 8129
|
|
ctime2: 65535
|
|
ctime3: 0
|
|
ctime4: 0
|
|
ctime5: 0
|
|
ctime6: 0
|
|
ctime7: 0
|
|
atime0: 0
|
|
atime1: 50886
|
|
atime2: 65535
|
|
atime3: 0
|
|
atime4: 0
|
|
atime5: 0
|
|
atime6: 0
|
|
atime7: 0
|
|
m_Mode: 0
|
|
m_NumColorKeys: 3
|
|
m_NumAlphaKeys: 3
|
|
- m_ExpressionIndex: 180
|
|
m_Value:
|
|
serializedVersion: 2
|
|
key0: {r: 0, g: 95.123886, b: 135.58704, a: 1}
|
|
key1: {r: 0, g: 16.690197, b: 23.968628, a: 0}
|
|
key2: {r: 0, g: 16.690197, b: 23.968628, a: 0}
|
|
key3: {r: 0, g: 0, b: 0, a: 0}
|
|
key4: {r: 0, g: 0, b: 0, a: 0}
|
|
key5: {r: 0, g: 0, b: 0, a: 0}
|
|
key6: {r: 0, g: 0, b: 0, a: 0}
|
|
key7: {r: 0, g: 0, b: 0, a: 0}
|
|
ctime0: 17599
|
|
ctime1: 35617
|
|
ctime2: 65535
|
|
ctime3: 0
|
|
ctime4: 0
|
|
ctime5: 0
|
|
ctime6: 0
|
|
ctime7: 0
|
|
atime0: 0
|
|
atime1: 65535
|
|
atime2: 0
|
|
atime3: 0
|
|
atime4: 0
|
|
atime5: 0
|
|
atime6: 0
|
|
atime7: 0
|
|
m_Mode: 0
|
|
m_NumColorKeys: 3
|
|
m_NumAlphaKeys: 2
|
|
- m_ExpressionIndex: 185
|
|
m_Value:
|
|
serializedVersion: 2
|
|
key0: {r: 28.51895, g: 28.51895, b: 28.51895, a: 1}
|
|
key1: {r: 0.83056265, g: 0.83056265, b: 0.83056265, a: 0.9750639}
|
|
key2: {r: 0.5, g: 0.5, b: 0.5, a: 0.8}
|
|
key3: {r: 0, g: 0, b: 0, a: 0}
|
|
key4: {r: 0, g: 0, b: 0, a: 0}
|
|
key5: {r: 0, g: 0, b: 0, a: 0}
|
|
key6: {r: 0, g: 0, b: 0, a: 0}
|
|
key7: {r: 0, g: 0, b: 0, a: 0}
|
|
ctime0: 0
|
|
ctime1: 4609
|
|
ctime2: 65535
|
|
ctime3: 0
|
|
ctime4: 0
|
|
ctime5: 0
|
|
ctime6: 0
|
|
ctime7: 0
|
|
atime0: 0
|
|
atime1: 6453
|
|
atime2: 32432
|
|
atime3: 65535
|
|
atime4: 0
|
|
atime5: 0
|
|
atime6: 0
|
|
atime7: 0
|
|
m_Mode: 0
|
|
m_NumColorKeys: 3
|
|
m_NumAlphaKeys: 4
|
|
- m_ExpressionIndex: 186
|
|
m_Value:
|
|
serializedVersion: 2
|
|
key0: {r: 0, g: 8.70314, b: 11.543748, a: 1}
|
|
key1: {r: 0, g: 18.07059, b: 23.968628, a: 1}
|
|
key2: {r: 11.984314, g: 11.984314, b: 11.984314, a: 0}
|
|
key3: {r: 11.984314, g: 11.984314, b: 11.984314, a: 0}
|
|
key4: {r: 6.5254903, g: 64.752945, b: 95.87451, a: 0}
|
|
key5: {r: 0, g: 0, b: 0, a: 0}
|
|
key6: {r: 0, g: 0, b: 0, a: 0}
|
|
key7: {r: 0, g: 0, b: 0, a: 0}
|
|
ctime0: 18311
|
|
ctime1: 31226
|
|
ctime2: 58018
|
|
ctime3: 61873
|
|
ctime4: 65535
|
|
ctime5: 0
|
|
ctime6: 0
|
|
ctime7: 0
|
|
atime0: 0
|
|
atime1: 52428
|
|
atime2: 0
|
|
atime3: 0
|
|
atime4: 0
|
|
atime5: 0
|
|
atime6: 0
|
|
atime7: 0
|
|
m_Mode: 0
|
|
m_NumColorKeys: 5
|
|
m_NumAlphaKeys: 2
|
|
m_NamedObject:
|
|
m_Array:
|
|
- m_ExpressionIndex: 207
|
|
m_Value: {fileID: 10300, guid: 0000000000000000f000000000000000, type: 0}
|
|
- m_ExpressionIndex: 224
|
|
m_Value: {fileID: 11700000, guid: 08937e3134903c5488be506a2dac71e9, type: 2}
|
|
- m_ExpressionIndex: 235
|
|
m_Value: {fileID: 2800000, guid: cc43be5237899c0499f4792c6477dbec, type: 3}
|
|
- m_ExpressionIndex: 237
|
|
m_Value: {fileID: 2800000, guid: 7d27e4538f7899c4d8b1a4b0712b77e1, type: 3}
|
|
- m_ExpressionIndex: 246
|
|
m_Value: {fileID: 2800000, guid: 3b2e4e5390abe644c9047b94e1376065, type: 3}
|
|
- m_ExpressionIndex: 260
|
|
m_Value: {fileID: 2800000, guid: 49cb5aa34272b034d8b754c65d9cdbfa, type: 3}
|
|
- m_ExpressionIndex: 268
|
|
m_Value: {fileID: 2800000, guid: f1fca8903cd16a94cb202da8ada6e10e, type: 3}
|
|
- m_ExpressionIndex: 271
|
|
m_Value: {fileID: 2800000, guid: 1d8481de16af723418a688958c41224b, type: 3}
|
|
- m_ExpressionIndex: 280
|
|
m_Value: {fileID: 2800000, guid: d168f78b86e42e64c921e9f6add78047, type: 3}
|
|
- m_ExpressionIndex: 209
|
|
m_Value: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
|
|
- m_ExpressionIndex: 213
|
|
m_Value: {fileID: 4300000, guid: 02733929114fc7a44a05dd584308cab3, type: 3}
|
|
m_Bool:
|
|
m_Array: []
|
|
m_ExposedExpressions:
|
|
- nameId: Hit
|
|
index: 32
|
|
- nameId: Power
|
|
index: 3
|
|
m_Buffers:
|
|
- type: 1
|
|
size: 640000
|
|
layout:
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 2
|
|
element: 0
|
|
- name: size
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 2
|
|
element: 1
|
|
- name: position
|
|
type: 3
|
|
offset:
|
|
bucket: 128000
|
|
structure: 8
|
|
element: 0
|
|
- name: age
|
|
type: 1
|
|
offset:
|
|
bucket: 128000
|
|
structure: 8
|
|
element: 3
|
|
- name: velocity
|
|
type: 3
|
|
offset:
|
|
bucket: 128000
|
|
structure: 8
|
|
element: 4
|
|
- name: alive
|
|
type: 17
|
|
offset:
|
|
bucket: 128000
|
|
structure: 8
|
|
element: 7
|
|
capacity: 64000
|
|
stride: 4
|
|
- type: 1
|
|
size: 16
|
|
layout:
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 1
|
|
element: 0
|
|
- name: size
|
|
type: 1
|
|
offset:
|
|
bucket: 4
|
|
structure: 1
|
|
element: 0
|
|
- name: age
|
|
type: 1
|
|
offset:
|
|
bucket: 8
|
|
structure: 2
|
|
element: 0
|
|
- name: alive
|
|
type: 17
|
|
offset:
|
|
bucket: 8
|
|
structure: 2
|
|
element: 1
|
|
capacity: 4
|
|
stride: 4
|
|
- type: 1
|
|
size: 28
|
|
layout:
|
|
- name: position
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 4
|
|
element: 0
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 16
|
|
structure: 1
|
|
element: 0
|
|
- name: alive
|
|
type: 17
|
|
offset:
|
|
bucket: 20
|
|
structure: 2
|
|
element: 0
|
|
- name: age
|
|
type: 1
|
|
offset:
|
|
bucket: 20
|
|
structure: 2
|
|
element: 1
|
|
capacity: 4
|
|
stride: 4
|
|
- type: 1
|
|
size: 2432000
|
|
layout:
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 1
|
|
element: 0
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 128000
|
|
structure: 16
|
|
element: 0
|
|
- name: position
|
|
type: 3
|
|
offset:
|
|
bucket: 128000
|
|
structure: 16
|
|
element: 4
|
|
- name: targetPosition
|
|
type: 3
|
|
offset:
|
|
bucket: 128000
|
|
structure: 16
|
|
element: 8
|
|
- name: ChunkPosition
|
|
type: 2
|
|
offset:
|
|
bucket: 128000
|
|
structure: 16
|
|
element: 12
|
|
- name: alive
|
|
type: 17
|
|
offset:
|
|
bucket: 2176000
|
|
structure: 2
|
|
element: 0
|
|
- name: age
|
|
type: 1
|
|
offset:
|
|
bucket: 2176000
|
|
structure: 2
|
|
element: 1
|
|
capacity: 128000
|
|
stride: 4
|
|
- type: 1
|
|
size: 352
|
|
layout:
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: size
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 3
|
|
- name: angleZ
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 4
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 256
|
|
structure: 1
|
|
element: 0
|
|
- name: alive
|
|
type: 17
|
|
offset:
|
|
bucket: 288
|
|
structure: 2
|
|
element: 0
|
|
- name: age
|
|
type: 1
|
|
offset:
|
|
bucket: 288
|
|
structure: 2
|
|
element: 1
|
|
capacity: 32
|
|
stride: 4
|
|
- type: 1
|
|
size: 17920
|
|
layout:
|
|
- name: position
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: alive
|
|
type: 17
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 3
|
|
- name: age
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 4
|
|
- name: velocity
|
|
type: 3
|
|
offset:
|
|
bucket: 10240
|
|
structure: 4
|
|
element: 0
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 15360
|
|
structure: 1
|
|
element: 0
|
|
- name: size
|
|
type: 1
|
|
offset:
|
|
bucket: 16640
|
|
structure: 1
|
|
element: 0
|
|
capacity: 1280
|
|
stride: 4
|
|
- type: 1
|
|
size: 96
|
|
layout:
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 1
|
|
element: 0
|
|
- name: alive
|
|
type: 17
|
|
offset:
|
|
bucket: 32
|
|
structure: 2
|
|
element: 0
|
|
- name: age
|
|
type: 1
|
|
offset:
|
|
bucket: 32
|
|
structure: 2
|
|
element: 1
|
|
capacity: 32
|
|
stride: 4
|
|
- type: 1
|
|
size: 16896
|
|
layout:
|
|
- name: position
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: scaleX
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 3
|
|
- name: scaleY
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 4
|
|
- name: scaleZ
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 5
|
|
- name: particleId
|
|
type: 6
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 6
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 12288
|
|
structure: 1
|
|
element: 0
|
|
- name: alive
|
|
type: 17
|
|
offset:
|
|
bucket: 13824
|
|
structure: 2
|
|
element: 0
|
|
- name: age
|
|
type: 1
|
|
offset:
|
|
bucket: 13824
|
|
structure: 2
|
|
element: 1
|
|
capacity: 1536
|
|
stride: 4
|
|
- type: 1
|
|
size: 1664000
|
|
layout:
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 4
|
|
element: 0
|
|
- name: size
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 4
|
|
element: 3
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 512000
|
|
structure: 1
|
|
element: 0
|
|
- name: position
|
|
type: 3
|
|
offset:
|
|
bucket: 640000
|
|
structure: 4
|
|
element: 0
|
|
- name: alive
|
|
type: 17
|
|
offset:
|
|
bucket: 640000
|
|
structure: 4
|
|
element: 3
|
|
- name: velocity
|
|
type: 3
|
|
offset:
|
|
bucket: 1152000
|
|
structure: 4
|
|
element: 0
|
|
- name: age
|
|
type: 1
|
|
offset:
|
|
bucket: 1152000
|
|
structure: 4
|
|
element: 3
|
|
capacity: 128000
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 1
|
|
element: 0
|
|
capacity: 1
|
|
stride: 4
|
|
- type: 4
|
|
size: 64000
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 1
|
|
element: 0
|
|
capacity: 1
|
|
stride: 4
|
|
- type: 4
|
|
size: 1
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 4
|
|
size: 1
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 0
|
|
size: 1
|
|
layout: []
|
|
capacity: 0
|
|
stride: 8
|
|
- type: 0
|
|
size: 1
|
|
layout: []
|
|
capacity: 0
|
|
stride: 8
|
|
- type: 1
|
|
size: 1
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 1
|
|
element: 0
|
|
capacity: 1
|
|
stride: 4
|
|
- type: 4
|
|
size: 1
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 8
|
|
layout:
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 3
|
|
- name: targetPosition
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 4
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 7
|
|
capacity: 1
|
|
stride: 4
|
|
- type: 4
|
|
size: 128000
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 1
|
|
element: 0
|
|
capacity: 1
|
|
stride: 4
|
|
- type: 4
|
|
size: 32
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 4
|
|
size: 32
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 0
|
|
size: 32
|
|
layout: []
|
|
capacity: 0
|
|
stride: 8
|
|
- type: 0
|
|
size: 32
|
|
layout: []
|
|
capacity: 0
|
|
stride: 8
|
|
- type: 1
|
|
size: 1
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 1
|
|
element: 0
|
|
capacity: 1
|
|
stride: 4
|
|
- type: 4
|
|
size: 1280
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 1
|
|
element: 0
|
|
capacity: 1
|
|
stride: 4
|
|
- type: 4
|
|
size: 32
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 1
|
|
element: 0
|
|
capacity: 1
|
|
stride: 4
|
|
- type: 4
|
|
size: 1512
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 1
|
|
element: 0
|
|
capacity: 1
|
|
stride: 4
|
|
- type: 4
|
|
size: 128000
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 1
|
|
size: 1
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
- type: 4
|
|
size: 128000
|
|
layout: []
|
|
capacity: 0
|
|
stride: 4
|
|
m_TemporaryBuffers: []
|
|
m_CPUBuffers:
|
|
- capacity: 1
|
|
stride: 8
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 1
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 2
|
|
- name: targetPosition
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 5
|
|
initialData:
|
|
data: 000000000000803f0000803f0000803f0000803f000000000000000000000000
|
|
- capacity: 1
|
|
stride: 8
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 1
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 2
|
|
- name: targetPosition
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 5
|
|
initialData:
|
|
data: 000000000000803f0000803f0000803f0000803f000000000000000000000000
|
|
- capacity: 1
|
|
stride: 8
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 1
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 2
|
|
- name: targetPosition
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 5
|
|
initialData:
|
|
data: 000000000000803f0000803f0000803f0000803f000000000000000000000000
|
|
- capacity: 1
|
|
stride: 8
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 1
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 2
|
|
- name: targetPosition
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 5
|
|
initialData:
|
|
data: 000000000000803f0000803f0000803f0000803f000000000000000000000000
|
|
- capacity: 1
|
|
stride: 8
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 1
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 2
|
|
- name: targetPosition
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 5
|
|
initialData:
|
|
data: 000000000000803f0000803f0000803f0000803f000000000000000000000000
|
|
- capacity: 1
|
|
stride: 8
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 1
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 2
|
|
- name: targetPosition
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 5
|
|
initialData:
|
|
data: 000000000000803f0000803f0000803f0000803f000000000000000000000000
|
|
- capacity: 1
|
|
stride: 8
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 1
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 2
|
|
- name: targetPosition
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 5
|
|
initialData:
|
|
data: 000000000000803f0000803f0000803f0000803f000000000000000000000000
|
|
- capacity: 1
|
|
stride: 8
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 1
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 2
|
|
- name: targetPosition
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 5
|
|
initialData:
|
|
data: 000000000000803f0000803f0000803f0000803f000000000000000000000000
|
|
- capacity: 1
|
|
stride: 8
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 1
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 2
|
|
- name: targetPosition
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 5
|
|
initialData:
|
|
data: 000000000000803f0000803f0000803f0000803f000000000000000000000000
|
|
- capacity: 1
|
|
stride: 8
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 1
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 2
|
|
- name: targetPosition
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 5
|
|
initialData:
|
|
data: 000000000000803f0000803f0000803f0000803f000000000000000000000000
|
|
- capacity: 1
|
|
stride: 8
|
|
layout:
|
|
- name: spawnCount
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 0
|
|
- name: lifetime
|
|
type: 1
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 1
|
|
- name: color
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 2
|
|
- name: targetPosition
|
|
type: 3
|
|
offset:
|
|
bucket: 0
|
|
structure: 8
|
|
element: 5
|
|
initialData:
|
|
data: 000000000000803f0000803f0000803f0000803f000000000000000000000000
|
|
m_Events:
|
|
- name: OnPlay
|
|
playSystems: 0100000002000000030000000400000005000000
|
|
stopSystems:
|
|
- name: OnStop
|
|
playSystems:
|
|
stopSystems: 06000000070000000800000009000000
|
|
- name: PowerDown
|
|
playSystems: 0900000008000000
|
|
stopSystems: 000000000500000004000000030000000200000001000000
|
|
- name: TakeHit
|
|
playSystems: 0700000000000000
|
|
stopSystems:
|
|
m_RuntimeVersion: 10
|
|
m_RendererSettings:
|
|
motionVectorGenerationMode: 0
|
|
shadowCastingMode: 1
|
|
receiveShadows: 0
|
|
reflectionProbeUsage: 0
|
|
lightProbeUsage: 0
|
|
m_CullingFlags: 3
|
|
m_UpdateMode: 0
|
|
m_PreWarmDeltaTime: 0.1
|
|
m_PreWarmStepCount: 20
|
|
m_InitialEventName: OnPlay
|
|
m_Systems:
|
|
- type: 0
|
|
flags: 0
|
|
capacity: 0
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: spawner_output
|
|
index: 1
|
|
values: []
|
|
tasks:
|
|
- type: 268435458
|
|
buffers: []
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: nb
|
|
index: 259
|
|
- nameId: period
|
|
index: 236
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: -1
|
|
- type: 268435461
|
|
buffers: []
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: targetPosition
|
|
index: 243
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: -1
|
|
- type: 268435461
|
|
buffers: []
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: lifetime
|
|
index: 245
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: -1
|
|
- type: 268435461
|
|
buffers: []
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: color
|
|
index: 242
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: -1
|
|
- type: 268435460
|
|
buffers: []
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: LoopCount
|
|
index: 18
|
|
- nameId: LoopDuration
|
|
index: 196
|
|
- nameId: Delay
|
|
index: 23
|
|
params: []
|
|
processor: {fileID: 11500000, guid: 6f6b8e2489fd4ea47b25d989c51b9f76, type: 3}
|
|
shaderSourceIndex: -1
|
|
- type: 0
|
|
flags: 0
|
|
capacity: 0
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: spawner_output
|
|
index: 2
|
|
values: []
|
|
tasks:
|
|
- type: 268435456
|
|
buffers: []
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: Rate
|
|
index: 211
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: -1
|
|
- type: 0
|
|
flags: 0
|
|
capacity: 0
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: spawner_output
|
|
index: 3
|
|
values: []
|
|
tasks:
|
|
- type: 268435456
|
|
buffers: []
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: Rate
|
|
index: 215
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: -1
|
|
- type: 0
|
|
flags: 0
|
|
capacity: 0
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: spawner_output
|
|
index: 4
|
|
values: []
|
|
tasks:
|
|
- type: 268435456
|
|
buffers: []
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: Rate
|
|
index: 72
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: -1
|
|
- type: 0
|
|
flags: 0
|
|
capacity: 0
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: spawner_output
|
|
index: 5
|
|
values: []
|
|
tasks:
|
|
- type: 268435456
|
|
buffers: []
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: Rate
|
|
index: 193
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: -1
|
|
- type: 0
|
|
flags: 0
|
|
capacity: 0
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: spawner_output
|
|
index: 6
|
|
values: []
|
|
tasks:
|
|
- type: 268435459
|
|
buffers: []
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: nb
|
|
index: 195
|
|
- nameId: period
|
|
index: 226
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: -1
|
|
- type: 0
|
|
flags: 0
|
|
capacity: 0
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: spawner_output
|
|
index: 7
|
|
- nameId: spawner_input_OnPlay
|
|
index: 1
|
|
values: []
|
|
tasks:
|
|
- type: 268435457
|
|
buffers: []
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: Count
|
|
index: 202
|
|
- nameId: Delay
|
|
index: 226
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: -1
|
|
- type: 0
|
|
flags: 0
|
|
capacity: 0
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: spawner_output
|
|
index: 8
|
|
values: []
|
|
tasks:
|
|
- type: 268435457
|
|
buffers: []
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: Count
|
|
index: 69
|
|
- nameId: Delay
|
|
index: 226
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: -1
|
|
- type: 0
|
|
flags: 0
|
|
capacity: 0
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: spawner_output
|
|
index: 9
|
|
values: []
|
|
tasks:
|
|
- type: 268435457
|
|
buffers: []
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: Count
|
|
index: 69
|
|
- nameId: Delay
|
|
index: 226
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: -1
|
|
- type: 0
|
|
flags: 0
|
|
capacity: 0
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: spawner_output
|
|
index: 10
|
|
values: []
|
|
tasks:
|
|
- type: 268435457
|
|
buffers: []
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: Count
|
|
index: 228
|
|
- nameId: Delay
|
|
index: 226
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: -1
|
|
- type: 1
|
|
flags: 1
|
|
capacity: 64000
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 0
|
|
- nameId: sourceAttributeBuffer
|
|
index: 9
|
|
- nameId: deadList
|
|
index: 10
|
|
- nameId: deadListCount
|
|
index: 11
|
|
- nameId: spawner_input
|
|
index: 10
|
|
values:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 208
|
|
tasks:
|
|
- type: 536870912
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 0
|
|
- nameId: deadListIn
|
|
index: 10
|
|
- nameId: deadListCount
|
|
index: 11
|
|
- nameId: sourceAttributeBuffer
|
|
index: 9
|
|
temporaryBuffers: []
|
|
values: []
|
|
params:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 208
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 0
|
|
- type: 805306368
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 0
|
|
- nameId: deadListOut
|
|
index: 10
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: InvFieldTransform_a
|
|
index: 225
|
|
- nameId: FieldTransform_a
|
|
index: 176
|
|
- nameId: deltaTime_a
|
|
index: 198
|
|
- nameId: uniform_a
|
|
index: 190
|
|
- nameId: VectorField_a
|
|
index: 224
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 1
|
|
- type: 1073741826
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 0
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: uniform_a
|
|
index: 133
|
|
- nameId: Color_b
|
|
index: 204
|
|
- nameId: gradient
|
|
index: 227
|
|
- nameId: mainTexture
|
|
index: 260
|
|
params:
|
|
- nameId: sortPriority
|
|
index: 0
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 2
|
|
- type: 1
|
|
flags: 3
|
|
capacity: 1
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 1
|
|
- nameId: sourceAttributeBuffer
|
|
index: 12
|
|
- nameId: deadList
|
|
index: 13
|
|
- nameId: deadListCount
|
|
index: 14
|
|
- nameId: spawner_input
|
|
index: 9
|
|
- nameId: indirectBuffer
|
|
index: 15
|
|
- nameId: sortBufferA
|
|
index: 16
|
|
- nameId: sortBufferB
|
|
index: 17
|
|
values:
|
|
- nameId: bounds_center
|
|
index: 229
|
|
- nameId: bounds_size
|
|
index: 230
|
|
tasks:
|
|
- type: 536870912
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 1
|
|
- nameId: deadListIn
|
|
index: 13
|
|
- nameId: deadListCount
|
|
index: 14
|
|
- nameId: sourceAttributeBuffer
|
|
index: 12
|
|
temporaryBuffers: []
|
|
values: []
|
|
params:
|
|
- nameId: bounds_center
|
|
index: 229
|
|
- nameId: bounds_size
|
|
index: 230
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 4
|
|
- type: 805306368
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 1
|
|
- nameId: deadListOut
|
|
index: 13
|
|
- nameId: indirectBuffer
|
|
index: 15
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: uniform_a
|
|
index: 184
|
|
- nameId: deltaTime_b
|
|
index: 198
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 3
|
|
- type: 805306369
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 1
|
|
- nameId: inputBuffer
|
|
index: 15
|
|
- nameId: outputBuffer
|
|
index: 16
|
|
- nameId: deadListCount
|
|
index: 14
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: localToWorld
|
|
index: 20
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 29
|
|
- type: 1073741828
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 1
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: Alpha_a
|
|
index: 263
|
|
- nameId: uvBias
|
|
index: 279
|
|
- nameId: distortionBlurMap
|
|
index: 271
|
|
params:
|
|
- nameId: mesh
|
|
index: 209
|
|
- nameId: subMeshMask
|
|
index: 231
|
|
- nameId: sortPriority
|
|
index: 0
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 5
|
|
- type: 1073741826
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 1
|
|
- nameId: indirectBuffer
|
|
index: 15
|
|
- nameId: deadListCount
|
|
index: 14
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: Alpha_b
|
|
index: 276
|
|
- nameId: mainTexture
|
|
index: 268
|
|
params:
|
|
- nameId: sortPriority
|
|
index: 0
|
|
- nameId: indirectDraw
|
|
index: 1
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 6
|
|
- type: 1073741826
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 1
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: gradient_b
|
|
index: 257
|
|
- nameId: mainTexture
|
|
index: 237
|
|
params:
|
|
- nameId: sortPriority
|
|
index: 0
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 7
|
|
- type: 1
|
|
flags: 1
|
|
capacity: 1
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 2
|
|
- nameId: sourceAttributeBuffer
|
|
index: 18
|
|
- nameId: deadList
|
|
index: 19
|
|
- nameId: deadListCount
|
|
index: 20
|
|
- nameId: spawner_input
|
|
index: 8
|
|
values:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 201
|
|
tasks:
|
|
- type: 536870912
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 2
|
|
- nameId: deadListIn
|
|
index: 19
|
|
- nameId: deadListCount
|
|
index: 20
|
|
- nameId: sourceAttributeBuffer
|
|
index: 18
|
|
temporaryBuffers: []
|
|
values: []
|
|
params:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 201
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 8
|
|
- type: 805306368
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 2
|
|
- nameId: deadListOut
|
|
index: 19
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: deltaTime_a
|
|
index: 198
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 9
|
|
- type: 1073741826
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 2
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: Color_b
|
|
index: 239
|
|
- nameId: uniform_a
|
|
index: 13
|
|
- nameId: uniform_b
|
|
index: 6
|
|
- nameId: uniform_c
|
|
index: 1
|
|
- nameId: uniform_d
|
|
index: 11
|
|
- nameId: uniform_e
|
|
index: 83
|
|
- nameId: uniform_f
|
|
index: 113
|
|
- nameId: mainTexture
|
|
index: 246
|
|
params:
|
|
- nameId: sortPriority
|
|
index: 0
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 10
|
|
- type: 1
|
|
flags: 1
|
|
capacity: 128000
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 3
|
|
- nameId: sourceAttributeBuffer
|
|
index: 21
|
|
- nameId: deadList
|
|
index: 22
|
|
- nameId: deadListCount
|
|
index: 23
|
|
- nameId: spawner_input
|
|
index: 7
|
|
values:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 234
|
|
tasks:
|
|
- type: 536870912
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 3
|
|
- nameId: deadListIn
|
|
index: 22
|
|
- nameId: deadListCount
|
|
index: 23
|
|
- nameId: sourceAttributeBuffer
|
|
index: 21
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: uniform_a
|
|
index: 13
|
|
- nameId: uniform_b
|
|
index: 6
|
|
- nameId: uniform_c
|
|
index: 1
|
|
- nameId: uniform_d
|
|
index: 11
|
|
params:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 234
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 11
|
|
- type: 805306368
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 3
|
|
- nameId: deadListOut
|
|
index: 22
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: deltaTime_a
|
|
index: 198
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 12
|
|
- type: 1073741826
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 3
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: uniform_a
|
|
index: 118
|
|
- nameId: uniform_b
|
|
index: 119
|
|
- nameId: Color_c
|
|
index: 252
|
|
- nameId: Alpha_d
|
|
index: 254
|
|
- nameId: Blend_e
|
|
index: 261
|
|
- nameId: Color_f
|
|
index: 253
|
|
- nameId: uniform_c
|
|
index: 83
|
|
- nameId: uniform_d
|
|
index: 113
|
|
- nameId: attributeMap_a
|
|
index: 224
|
|
- nameId: attributeMap_b
|
|
index: 224
|
|
params:
|
|
- nameId: sortPriority
|
|
index: -1
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 13
|
|
- type: 1
|
|
flags: 3
|
|
capacity: 32
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 4
|
|
- nameId: sourceAttributeBuffer
|
|
index: 24
|
|
- nameId: deadList
|
|
index: 25
|
|
- nameId: deadListCount
|
|
index: 26
|
|
- nameId: spawner_input
|
|
index: 6
|
|
- nameId: indirectBuffer
|
|
index: 27
|
|
- nameId: sortBufferA
|
|
index: 28
|
|
- nameId: sortBufferB
|
|
index: 29
|
|
values:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 234
|
|
tasks:
|
|
- type: 536870912
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 4
|
|
- nameId: deadListIn
|
|
index: 25
|
|
- nameId: deadListCount
|
|
index: 26
|
|
- nameId: sourceAttributeBuffer
|
|
index: 24
|
|
temporaryBuffers: []
|
|
values: []
|
|
params:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 234
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 14
|
|
- type: 805306368
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 4
|
|
- nameId: deadListOut
|
|
index: 25
|
|
- nameId: indirectBuffer
|
|
index: 27
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: deltaTime_a
|
|
index: 198
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 15
|
|
- type: 805306369
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 4
|
|
- nameId: inputBuffer
|
|
index: 27
|
|
- nameId: outputBuffer
|
|
index: 28
|
|
- nameId: deadListCount
|
|
index: 26
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: localToWorld
|
|
index: 20
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 30
|
|
- type: 1073741826
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 4
|
|
- nameId: indirectBuffer
|
|
index: 27
|
|
- nameId: deadListCount
|
|
index: 26
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: Size_b
|
|
index: 247
|
|
- nameId: uniform_a
|
|
index: 154
|
|
- nameId: uniform_b
|
|
index: 13
|
|
- nameId: uniform_c
|
|
index: 6
|
|
- nameId: uniform_d
|
|
index: 1
|
|
- nameId: uniform_e
|
|
index: 11
|
|
- nameId: uniform_f
|
|
index: 107
|
|
- nameId: Color_e
|
|
index: 241
|
|
- nameId: Color_f
|
|
index: 240
|
|
- nameId: uniform_g
|
|
index: 83
|
|
- nameId: uniform_h
|
|
index: 113
|
|
- nameId: mainTexture
|
|
index: 235
|
|
params:
|
|
- nameId: sortPriority
|
|
index: 0
|
|
- nameId: indirectDraw
|
|
index: 1
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 16
|
|
- type: 1
|
|
flags: 1
|
|
capacity: 1280
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 5
|
|
- nameId: sourceAttributeBuffer
|
|
index: 30
|
|
- nameId: deadList
|
|
index: 31
|
|
- nameId: deadListCount
|
|
index: 32
|
|
- nameId: spawner_input
|
|
index: 5
|
|
values:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 208
|
|
tasks:
|
|
- type: 536870912
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 5
|
|
- nameId: deadListIn
|
|
index: 31
|
|
- nameId: deadListCount
|
|
index: 32
|
|
- nameId: sourceAttributeBuffer
|
|
index: 30
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: ArcSphere_sphere_radius_a
|
|
index: 244
|
|
params:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 208
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 17
|
|
- type: 805306368
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 5
|
|
- nameId: deadListOut
|
|
index: 31
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: deltaTime_a
|
|
index: 198
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 18
|
|
- type: 1073741826
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 5
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: Size_b
|
|
index: 274
|
|
- nameId: uniform_a
|
|
index: 83
|
|
- nameId: uniform_b
|
|
index: 113
|
|
- nameId: mainTexture
|
|
index: 260
|
|
params:
|
|
- nameId: sortPriority
|
|
index: 0
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 19
|
|
- type: 1
|
|
flags: 1
|
|
capacity: 32
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 6
|
|
- nameId: sourceAttributeBuffer
|
|
index: 33
|
|
- nameId: deadList
|
|
index: 34
|
|
- nameId: deadListCount
|
|
index: 35
|
|
- nameId: spawner_input
|
|
index: 4
|
|
values:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 208
|
|
tasks:
|
|
- type: 536870912
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 6
|
|
- nameId: deadListIn
|
|
index: 34
|
|
- nameId: deadListCount
|
|
index: 35
|
|
- nameId: sourceAttributeBuffer
|
|
index: 33
|
|
temporaryBuffers: []
|
|
values: []
|
|
params:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 208
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 20
|
|
- type: 805306368
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 6
|
|
- nameId: deadListOut
|
|
index: 34
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: deltaTime_a
|
|
index: 198
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 21
|
|
- type: 1073741826
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 6
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: Color_a
|
|
index: 272
|
|
- nameId: Color_b
|
|
index: 270
|
|
- nameId: uniform_a
|
|
index: 83
|
|
- nameId: uniform_b
|
|
index: 113
|
|
- nameId: uniform_c
|
|
index: 13
|
|
- nameId: uniform_d
|
|
index: 6
|
|
- nameId: uniform_e
|
|
index: 1
|
|
- nameId: uniform_f
|
|
index: 11
|
|
- nameId: mainTexture
|
|
index: 246
|
|
params:
|
|
- nameId: sortPriority
|
|
index: 0
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 22
|
|
- type: 1
|
|
flags: 1
|
|
capacity: 1512
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 7
|
|
- nameId: sourceAttributeBuffer
|
|
index: 36
|
|
- nameId: deadList
|
|
index: 37
|
|
- nameId: deadListCount
|
|
index: 38
|
|
- nameId: spawner_input
|
|
index: 3
|
|
values:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 19
|
|
tasks:
|
|
- type: 536870912
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 7
|
|
- nameId: deadListIn
|
|
index: 37
|
|
- nameId: deadListCount
|
|
index: 38
|
|
- nameId: sourceAttributeBuffer
|
|
index: 36
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: ArcSphere_sphere_radius_c
|
|
index: 264
|
|
params:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 19
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 23
|
|
- type: 805306368
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 7
|
|
- nameId: deadListOut
|
|
index: 37
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: deltaTime_a
|
|
index: 198
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 24
|
|
- type: 1073741828
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 7
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: uniform_a
|
|
index: 50
|
|
- nameId: uniform_b
|
|
index: 29
|
|
- nameId: uniform_c
|
|
index: 40
|
|
- nameId: uniform_d
|
|
index: 144
|
|
- nameId: SamplePosition_c
|
|
index: 223
|
|
- nameId: valueScale_c
|
|
index: 220
|
|
- nameId: Scale_x_e
|
|
index: 216
|
|
- nameId: Scale_y_e
|
|
index: 214
|
|
- nameId: Scale_z_e
|
|
index: 212
|
|
- nameId: Scale_f
|
|
index: 210
|
|
- nameId: uniform_e
|
|
index: 83
|
|
- nameId: uniform_f
|
|
index: 113
|
|
- nameId: attributeMap_c
|
|
index: 224
|
|
- nameId: mainTexture
|
|
index: 280
|
|
params:
|
|
- nameId: mesh
|
|
index: 213
|
|
- nameId: subMeshMask
|
|
index: 231
|
|
- nameId: sortPriority
|
|
index: 3
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 28
|
|
- type: 1
|
|
flags: 3
|
|
capacity: 128000
|
|
layer: 4294967295
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 8
|
|
- nameId: sourceAttributeBuffer
|
|
index: 39
|
|
- nameId: deadList
|
|
index: 40
|
|
- nameId: deadListCount
|
|
index: 41
|
|
- nameId: spawner_input
|
|
index: 2
|
|
- nameId: indirectBuffer
|
|
index: 42
|
|
values:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 234
|
|
tasks:
|
|
- type: 536870912
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 8
|
|
- nameId: deadListIn
|
|
index: 40
|
|
- nameId: deadListCount
|
|
index: 41
|
|
- nameId: sourceAttributeBuffer
|
|
index: 39
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: ArcTorus_majorRadius_d
|
|
index: 139
|
|
- nameId: r_d
|
|
index: 256
|
|
params:
|
|
- nameId: bounds_center
|
|
index: 22
|
|
- nameId: bounds_size
|
|
index: 234
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 25
|
|
- type: 805306368
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 8
|
|
- nameId: deadListOut
|
|
index: 40
|
|
- nameId: indirectBuffer
|
|
index: 42
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: InvFieldTransform_a
|
|
index: 205
|
|
- nameId: FieldTransform_a
|
|
index: 159
|
|
- nameId: Intensity_a
|
|
index: 200
|
|
- nameId: Drag_a
|
|
index: 206
|
|
- nameId: deltaTime_a
|
|
index: 198
|
|
- nameId: uniform_a
|
|
index: 83
|
|
- nameId: uniform_b
|
|
index: 113
|
|
- nameId: uniform_c
|
|
index: 13
|
|
- nameId: uniform_d
|
|
index: 6
|
|
- nameId: uniform_e
|
|
index: 1
|
|
- nameId: uniform_f
|
|
index: 11
|
|
- nameId: VectorField_a
|
|
index: 224
|
|
params: []
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 26
|
|
- type: 1073741826
|
|
buffers:
|
|
- nameId: attributeBuffer
|
|
index: 8
|
|
- nameId: indirectBuffer
|
|
index: 42
|
|
- nameId: deadListCount
|
|
index: 41
|
|
temporaryBuffers: []
|
|
values:
|
|
- nameId: gradient
|
|
index: 194
|
|
- nameId: mainTexture
|
|
index: 207
|
|
params:
|
|
- nameId: sortPriority
|
|
index: -2
|
|
- nameId: indirectDraw
|
|
index: 1
|
|
processor: {fileID: 0}
|
|
shaderSourceIndex: 27
|
|
--- !u!114 &8926484042661620398
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 330e0fca1717dde4aaa144f48232aa64, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots: []
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661620399}
|
|
m_ExposedName: Resolution
|
|
m_Exposed: 0
|
|
m_Order: 1
|
|
m_Category: Electricity
|
|
m_Min:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Max:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_IsOutput: 0
|
|
m_Tooltip: Number of particles per ark
|
|
m_Nodes:
|
|
- m_Id: 2
|
|
linkedSlots:
|
|
- outputSlot: {fileID: 8926484042661620399}
|
|
inputSlot: {fileID: 8926484042661623693}
|
|
position: {x: 1186, y: -549}
|
|
expandedSlots: []
|
|
expanded: 0
|
|
--- !u!114 &8926484042661620399
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 4d246e354feb93041a837a9ef59437cb, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661620399}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661620398}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 500
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: o
|
|
m_serializedType:
|
|
m_SerializableType: System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623693}
|
|
--- !u!114 &8926484042661620428
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 330e0fca1717dde4aaa144f48232aa64, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots: []
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661620429}
|
|
m_ExposedName: Hit
|
|
m_Exposed: 1
|
|
m_Order: 0
|
|
m_Category: Public Parameters
|
|
m_Min:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject:
|
|
m_Max:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 1
|
|
m_IsOutput: 0
|
|
m_Tooltip: Core intensity when hit (0 is calm, 1 is excited)
|
|
m_Nodes:
|
|
- m_Id: 26
|
|
linkedSlots:
|
|
- outputSlot: {fileID: 8926484042661620429}
|
|
inputSlot: {fileID: 8926484042661623694}
|
|
position: {x: 1229, y: -513}
|
|
expandedSlots: []
|
|
expanded: 0
|
|
- m_Id: 49
|
|
linkedSlots:
|
|
- outputSlot: {fileID: 8926484042661620429}
|
|
inputSlot: {fileID: 8926484042661623733}
|
|
position: {x: 1237, y: -1248}
|
|
expandedSlots: []
|
|
expanded: 0
|
|
- m_Id: 51
|
|
linkedSlots:
|
|
- outputSlot: {fileID: 8926484042661620429}
|
|
inputSlot: {fileID: 8926484042661623486}
|
|
position: {x: -134, y: -1052}
|
|
expandedSlots: []
|
|
expanded: 0
|
|
--- !u!114 &8926484042661620429
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661620429}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661620428}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: o
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623486}
|
|
- {fileID: 8926484042661623694}
|
|
- {fileID: 8926484042661623733}
|
|
--- !u!114 &8926484042661620430
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 330e0fca1717dde4aaa144f48232aa64, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots: []
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661620431}
|
|
m_ExposedName: Power
|
|
m_Exposed: 1
|
|
m_Order: 2
|
|
m_Category: Public Parameters
|
|
m_Min:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject:
|
|
m_Max:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 1
|
|
m_IsOutput: 0
|
|
m_Tooltip: Core power (1 is full, 0 is depleted)
|
|
m_Nodes:
|
|
- m_Id: 32
|
|
linkedSlots:
|
|
- outputSlot: {fileID: 8926484042661620431}
|
|
inputSlot: {fileID: 8926484042661623734}
|
|
position: {x: 1253, y: -1205}
|
|
expandedSlots: []
|
|
expanded: 0
|
|
- m_Id: 40
|
|
linkedSlots:
|
|
- outputSlot: {fileID: 8926484042661620431}
|
|
inputSlot: {fileID: 8926484042661623236}
|
|
position: {x: -132, y: -1165}
|
|
expandedSlots: []
|
|
expanded: 0
|
|
- m_Id: 41
|
|
linkedSlots:
|
|
- outputSlot: {fileID: 8926484042661620431}
|
|
inputSlot: {fileID: 8926484042661623355}
|
|
- outputSlot: {fileID: 8926484042661620431}
|
|
inputSlot: {fileID: 8926484042661623376}
|
|
position: {x: -215, y: -713}
|
|
expandedSlots: []
|
|
expanded: 1
|
|
- m_Id: 43
|
|
linkedSlots:
|
|
- outputSlot: {fileID: 8926484042661620431}
|
|
inputSlot: {fileID: 8926484042661623695}
|
|
position: {x: 1224, y: -478}
|
|
expandedSlots: []
|
|
expanded: 0
|
|
--- !u!114 &8926484042661620431
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661620431}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661620430}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 1
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: o
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623236}
|
|
- {fileID: 8926484042661623355}
|
|
- {fileID: 8926484042661623376}
|
|
- {fileID: 8926484042661623695}
|
|
- {fileID: 8926484042661623734}
|
|
--- !u!114 &8926484042661620464
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 330e0fca1717dde4aaa144f48232aa64, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots: []
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661620465}
|
|
m_ExposedName: TopCeiling
|
|
m_Exposed: 0
|
|
m_Order: 4
|
|
m_Category: Electricity
|
|
m_Min:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Max:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_IsOutput: 0
|
|
m_Tooltip:
|
|
m_Nodes:
|
|
- m_Id: 1
|
|
linkedSlots:
|
|
- outputSlot: {fileID: 8926484042661620465}
|
|
inputSlot: {fileID: 8926484042661623696}
|
|
position: {x: 1194, y: -426}
|
|
expandedSlots: []
|
|
expanded: 0
|
|
--- !u!114 &8926484042661620465
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 5265657162cc1a241bba03a3b0476d99, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children:
|
|
- {fileID: 8926484042661620466}
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661620465}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661620464}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor,
|
|
Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
|
|
m_SerializableObject: '{"position":{"x":-5.208862603467423e-7,"y":10.68910026550293,"z":-0.0000018274770354764769}}'
|
|
m_Space: 0
|
|
m_Property:
|
|
name: o
|
|
m_serializedType:
|
|
m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor,
|
|
Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623696}
|
|
--- !u!114 &8926484042661620466
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: ac39bd03fca81b849929b9c966f1836a, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661620465}
|
|
m_Children:
|
|
- {fileID: 8926484042661620467}
|
|
- {fileID: 8926484042661620468}
|
|
- {fileID: 8926484042661620469}
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661620465}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: position
|
|
m_serializedType:
|
|
m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: The position.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 1
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661620467
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661620466}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661620465}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: x
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661620468
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661620466}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661620465}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: y
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661620469
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661620466}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661620465}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: z
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661620470
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 330e0fca1717dde4aaa144f48232aa64, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots: []
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661620471}
|
|
m_ExposedName: BottomFloor
|
|
m_Exposed: 0
|
|
m_Order: 5
|
|
m_Category: Electricity
|
|
m_Min:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Max:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_IsOutput: 0
|
|
m_Tooltip:
|
|
m_Nodes:
|
|
- m_Id: 1
|
|
linkedSlots:
|
|
- outputSlot: {fileID: 8926484042661620471}
|
|
inputSlot: {fileID: 8926484042661623701}
|
|
position: {x: 1182, y: -388}
|
|
expandedSlots: []
|
|
expanded: 0
|
|
--- !u!114 &8926484042661620471
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 5265657162cc1a241bba03a3b0476d99, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children:
|
|
- {fileID: 8926484042661620472}
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661620471}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661620470}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor,
|
|
Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
|
|
m_SerializableObject: '{"position":{"x":-5.209085429669358e-7,"y":-9.36138916015625,"z":0.0000019872197754011724}}'
|
|
m_Space: 0
|
|
m_Property:
|
|
name: o
|
|
m_serializedType:
|
|
m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor,
|
|
Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623701}
|
|
--- !u!114 &8926484042661620472
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: ac39bd03fca81b849929b9c966f1836a, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661620471}
|
|
m_Children:
|
|
- {fileID: 8926484042661620473}
|
|
- {fileID: 8926484042661620474}
|
|
- {fileID: 8926484042661620475}
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661620471}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: position
|
|
m_serializedType:
|
|
m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: The position.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 1
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661620473
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661620472}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661620471}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: x
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661620474
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661620472}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661620471}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: y
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661620475
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661620472}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661620471}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: z
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661620476
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 1
|
|
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: 330e0fca1717dde4aaa144f48232aa64, type: 3}
|
|
m_Name: VFXParameter
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots: []
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661620477}
|
|
m_ExposedName: Spread
|
|
m_Exposed: 0
|
|
m_Order: 3
|
|
m_Category: Electricity
|
|
m_Min:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Max:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_IsOutput: 0
|
|
m_Tooltip:
|
|
m_Nodes:
|
|
- m_Id: 1
|
|
linkedSlots:
|
|
- outputSlot: {fileID: 8926484042661620477}
|
|
inputSlot: {fileID: 8926484042661623706}
|
|
position: {x: 1194, y: -351}
|
|
expandedSlots: []
|
|
expanded: 0
|
|
--- !u!114 &8926484042661620477
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 1
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name: VFXSlotFloat
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661620477}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661620476}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 4.42
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: o
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623706}
|
|
--- !u!114 &8926484042661623213
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 1fb2f8fde2589884fae38ab8bc886b6f, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 424, y: -1269}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots:
|
|
- {fileID: 8926484042661623214}
|
|
- {fileID: 8926484042661623218}
|
|
- {fileID: 8926484042661623219}
|
|
- {fileID: 8926484042661623220}
|
|
- {fileID: 8926484042661623221}
|
|
- {fileID: 8926484042661623222}
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661623223}
|
|
type: 1
|
|
dimensions: 1
|
|
--- !u!114 &8926484042661623214
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: ac39bd03fca81b849929b9c966f1836a, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children:
|
|
- {fileID: 8926484042661623215}
|
|
- {fileID: 8926484042661623216}
|
|
- {fileID: 8926484042661623217}
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623214}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623213}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
m_SerializableObject: '{"x":0.0,"y":0.0,"z":0.0}'
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: coordinate
|
|
m_serializedType:
|
|
m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the coordinate in the noise field to take the sample from.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623228}
|
|
--- !u!114 &8926484042661623215
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623214}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623214}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: x
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623216
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623214}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623214}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: y
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623217
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623214}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623214}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: z
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623218
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623218}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623213}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 1
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: frequency
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the period in which the noise is sampled. Higher frequencies
|
|
result in more frequent noise change.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623219
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 4d246e354feb93041a837a9ef59437cb, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623219}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623213}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 7
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: octaves
|
|
m_serializedType:
|
|
m_SerializableType: System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 0
|
|
m_Min: 1
|
|
m_Max: 8
|
|
m_Tooltip:
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the number of layers of noise. More octaves create a more varied
|
|
look, but are also more expensive to calculate.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623220
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623220}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623213}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0.75
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: roughness
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 0
|
|
m_Min: 0
|
|
m_Max: 1
|
|
m_Tooltip:
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: 'Sets the scaling factor applied to each octave (also known as persistence.) '
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623221
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623221}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623213}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 2
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: lacunarity
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 1
|
|
m_Min: 0
|
|
m_Max: Infinity
|
|
m_Tooltip:
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the rate of change of the frequency for each successive octave.
|
|
A lacunarity value of 1 results in each octave having the same frequency.
|
|
Higher values result in more details, and values below 1 produce less details.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623222
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623222}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623213}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: amplitude
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the magnitude of the noise. Higher amplitudes result in a greater
|
|
range of the noise value.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623483}
|
|
--- !u!114 &8926484042661623223
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: ac39bd03fca81b849929b9c966f1836a, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children:
|
|
- {fileID: 8926484042661623224}
|
|
- {fileID: 8926484042661623225}
|
|
- {fileID: 8926484042661623226}
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623223}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623213}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
m_SerializableObject: '{"x":0.0,"y":0.0,"z":0.0}'
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: Noise
|
|
m_serializedType:
|
|
m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Outputs the calculated noise vector.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623755}
|
|
- {fileID: 8926484042661623725}
|
|
--- !u!114 &8926484042661623224
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623223}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623223}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: x
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623225
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623223}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623223}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: y
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623226
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623223}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623223}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: z
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623227
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 7d33fb94df928ef4c986f97607706b82, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 170, y: -1303}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots: []
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661623228}
|
|
m_expressionOp: 7
|
|
--- !u!114 &8926484042661623228
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623228}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623227}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: TotalTime
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623214}
|
|
--- !u!114 &8926484042661623234
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f8bcc906a6d398c46b18826714448709, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 19, y: -1204}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots:
|
|
- {fileID: 8926484042661623235}
|
|
- {fileID: 8926484042661623236}
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661623237}
|
|
--- !u!114 &8926484042661623235
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: c117b74c5c58db542bffe25c78fe92db, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623235}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623234}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: UnityEngine.AnimationCurve, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
m_SerializableObject: '{"frames":[{"time":0.003231048583984375,"value":0.0,"inTangent":-0.20456504821777345,"outTangent":-0.20456504821777345,"tangentMode":0,"leftTangentMode":0,"rightTangentMode":0,"broken":false},{"time":0.026951558887958528,"value":0.4462986886501312,"inTangent":-0.24860204756259919,"outTangent":-0.24860204756259919,"tangentMode":0,"leftTangentMode":0,"rightTangentMode":0,"broken":false},{"time":1.0,"value":0.0,"inTangent":0.0,"outTangent":0.0,"tangentMode":0,"leftTangentMode":0,"rightTangentMode":0,"broken":false}],"preWrapMode":8,"postWrapMode":8,"version":1}'
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: curve
|
|
m_serializedType:
|
|
m_SerializableType: UnityEngine.AnimationCurve, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the curve to sample from.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623236
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623236}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623234}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: time
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the time along the curve to take a sample from.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661620431}
|
|
--- !u!114 &8926484042661623237
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623237}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623234}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: s
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Outputs the sampled value from the curve at the specified time.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623481}
|
|
--- !u!114 &8926484042661623353
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f8bcc906a6d398c46b18826714448709, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: -31, y: -814}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots:
|
|
- {fileID: 8926484042661623354}
|
|
- {fileID: 8926484042661623355}
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661623356}
|
|
--- !u!114 &8926484042661623354
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: c117b74c5c58db542bffe25c78fe92db, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623354}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623353}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: UnityEngine.AnimationCurve, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
m_SerializableObject: '{"frames":[{"time":0.0,"value":0.0250244140625,"inTangent":1.0533068180084229,"outTangent":1.0533068180084229,"tangentMode":0,"leftTangentMode":0,"rightTangentMode":0,"broken":false},{"time":0.02280527912080288,"value":0.3465474247932434,"inTangent":1.0458804368972779,"outTangent":1.0458804368972779,"tangentMode":0,"leftTangentMode":0,"rightTangentMode":0,"broken":false},{"time":1.0,"value":0.9986076354980469,"inTangent":0.07660403847694397,"outTangent":0.07660403847694397,"tangentMode":0,"leftTangentMode":0,"rightTangentMode":0,"broken":false}],"preWrapMode":8,"postWrapMode":8,"version":1}'
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: curve
|
|
m_serializedType:
|
|
m_SerializableType: UnityEngine.AnimationCurve, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the curve to sample from.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623355
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623355}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623353}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: time
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the time along the curve to take a sample from.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661620431}
|
|
--- !u!114 &8926484042661623356
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623356}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623353}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: s
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Outputs the sampled value from the curve at the specified time.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623371}
|
|
--- !u!114 &8926484042661623357
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: a30aeb734589f22468d3ed89a2ecc09c, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 193, y: -705}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots:
|
|
- {fileID: 8926484042661623358}
|
|
- {fileID: 8926484042661623359}
|
|
- {fileID: 8926484042661623360}
|
|
- {fileID: 8926484042661623361}
|
|
- {fileID: 8926484042661623362}
|
|
- {fileID: 8926484042661623363}
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661623366}
|
|
- {fileID: 8926484042661623367}
|
|
type: 1
|
|
dimensions: 0
|
|
--- !u!114 &8926484042661623358
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623358}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623357}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: coordinate
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the coordinate in the noise field to take the sample from.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623369}
|
|
--- !u!114 &8926484042661623359
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623359}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623357}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 1
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: frequency
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the period in which the noise is sampled. Higher frequencies
|
|
result in more frequent noise change.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623360
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 4d246e354feb93041a837a9ef59437cb, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623360}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623357}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 7
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: octaves
|
|
m_serializedType:
|
|
m_SerializableType: System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 0
|
|
m_Min: 1
|
|
m_Max: 8
|
|
m_Tooltip:
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the number of layers of noise. More octaves create a more varied
|
|
look, but are also more expensive to calculate.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623361
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623361}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623357}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0.75
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: roughness
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 0
|
|
m_Min: 0
|
|
m_Max: 1
|
|
m_Tooltip:
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: 'Sets the scaling factor applied to each octave (also known as persistence.) '
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623362
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623362}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623357}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 2
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: lacunarity
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 1
|
|
m_Min: 0
|
|
m_Max: Infinity
|
|
m_Tooltip:
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the rate of change of the frequency for each successive octave.
|
|
A lacunarity value of 1 results in each octave having the same frequency.
|
|
Higher values result in more details, and values below 1 produce less details.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623363
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 1b2b751071c7fc14f9fa503163991826, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children:
|
|
- {fileID: 8926484042661623364}
|
|
- {fileID: 8926484042661623365}
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623363}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623357}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
m_SerializableObject: '{"x":-1.0,"y":1.0}'
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: range
|
|
m_serializedType:
|
|
m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the range within which the noise is calculated.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623364
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623363}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623363}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: x
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623377}
|
|
--- !u!114 &8926484042661623365
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623363}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623363}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: y
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623380}
|
|
--- !u!114 &8926484042661623366
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623366}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623357}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: Noise
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Outputs the calculated noise value.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623372}
|
|
--- !u!114 &8926484042661623367
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623367}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623357}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: Derivatives
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Outputs the rate of change of the noise.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 1
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623368
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 7d33fb94df928ef4c986f97607706b82, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 51, y: -664}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots: []
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661623369}
|
|
m_expressionOp: 7
|
|
--- !u!114 &8926484042661623369
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623369}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623368}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: TotalTime
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623358}
|
|
--- !u!114 &8926484042661623370
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: c7acf5424f3655744af4b8f63298fa0f, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 608, y: -699}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots:
|
|
- {fileID: 8926484042661623371}
|
|
- {fileID: 8926484042661623372}
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661623373}
|
|
m_Operands:
|
|
- name: a
|
|
type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
- name: b
|
|
type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
--- !u!114 &8926484042661623371
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623371}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623370}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: a
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623356}
|
|
--- !u!114 &8926484042661623372
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623372}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623370}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: b
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623366}
|
|
--- !u!114 &8926484042661623373
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623373}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623370}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name:
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623759}
|
|
- {fileID: 8926484042661623724}
|
|
--- !u!114 &8926484042661623374
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f8bcc906a6d398c46b18826714448709, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: -208, y: -559}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots:
|
|
- {fileID: 8926484042661623375}
|
|
- {fileID: 8926484042661623376}
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661623377}
|
|
--- !u!114 &8926484042661623375
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: c117b74c5c58db542bffe25c78fe92db, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623375}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623374}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: UnityEngine.AnimationCurve, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
m_SerializableObject: '{"frames":[{"time":0.0,"value":0.0,"inTangent":-1.3028045892715455,"outTangent":-1.3028045892715455,"tangentMode":0,"leftTangentMode":0,"rightTangentMode":0,"broken":false},{"time":0.009781403467059136,"value":0.5641040205955505,"inTangent":-1.27427339553833,"outTangent":-1.27427339553833,"tangentMode":0,"leftTangentMode":0,"rightTangentMode":0,"broken":false},{"time":1.0,"value":0.008509963750839234,"inTangent":-0.5610822439193726,"outTangent":-0.5610822439193726,"tangentMode":0,"leftTangentMode":1,"rightTangentMode":1,"broken":false}],"preWrapMode":8,"postWrapMode":8,"version":1}'
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: curve
|
|
m_serializedType:
|
|
m_SerializableType: UnityEngine.AnimationCurve, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the curve to sample from.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623376
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623376}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623374}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: time
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the time along the curve to take a sample from.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661620431}
|
|
--- !u!114 &8926484042661623377
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623377}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623374}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: s
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Outputs the sampled value from the curve at the specified time.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623379}
|
|
- {fileID: 8926484042661623364}
|
|
--- !u!114 &8926484042661623378
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: ed61682dd0ce22343910fec4ca3f8e9b, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 17, y: -465}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 1
|
|
m_InputSlots:
|
|
- {fileID: 8926484042661623379}
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661623380}
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
--- !u!114 &8926484042661623379
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623379}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623378}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: x
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623377}
|
|
--- !u!114 &8926484042661623380
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623380}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623378}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name:
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623365}
|
|
--- !u!114 &8926484042661623480
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: c7acf5424f3655744af4b8f63298fa0f, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 249, y: -1140}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots:
|
|
- {fileID: 8926484042661623481}
|
|
- {fileID: 8926484042661623482}
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661623483}
|
|
m_Operands:
|
|
- name: a
|
|
type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
- name: b
|
|
type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
--- !u!114 &8926484042661623481
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623481}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623480}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: a
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623237}
|
|
--- !u!114 &8926484042661623482
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623482}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623480}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: b
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623487}
|
|
--- !u!114 &8926484042661623483
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623483}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623480}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name:
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623222}
|
|
--- !u!114 &8926484042661623484
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f8bcc906a6d398c46b18826714448709, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: -7, y: -1097}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots:
|
|
- {fileID: 8926484042661623485}
|
|
- {fileID: 8926484042661623486}
|
|
m_OutputSlots:
|
|
- {fileID: 8926484042661623487}
|
|
--- !u!114 &8926484042661623485
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: c117b74c5c58db542bffe25c78fe92db, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623485}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623484}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: UnityEngine.AnimationCurve, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
m_SerializableObject: '{"frames":[{"time":0.0,"value":0.0,"inTangent":0.3315580487251282,"outTangent":0.3315580487251282,"tangentMode":0,"leftTangentMode":0,"rightTangentMode":0,"broken":false},{"time":1.0,"value":1.9924852848052979,"inTangent":2.0,"outTangent":2.0,"tangentMode":0,"leftTangentMode":0,"rightTangentMode":0,"broken":false}],"preWrapMode":8,"postWrapMode":8,"version":1}'
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: curve
|
|
m_serializedType:
|
|
m_SerializableType: UnityEngine.AnimationCurve, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the curve to sample from.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623486
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623486}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623484}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: time
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Sets the time along the curve to take a sample from.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661620429}
|
|
--- !u!114 &8926484042661623487
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623487}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623484}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: s
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Outputs the sampled value from the curve at the specified time.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 1
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623482}
|
|
--- !u!114 &8926484042661623624
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 9207a95457a3f994581249dbe0a3409d, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 2339, y: -1293}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots: []
|
|
m_OutputSlots: []
|
|
m_Label:
|
|
m_Data: {fileID: 0}
|
|
m_InputFlowSlot:
|
|
- link: []
|
|
- link:
|
|
- context: {fileID: 8926484042661623631}
|
|
slotIndex: 0
|
|
m_OutputFlowSlot:
|
|
- link: []
|
|
m_Subgraph: {fileID: 8926484042661614526, guid: 049cc134d7f1f16409be8d1a6c6ed112,
|
|
type: 3}
|
|
m_InputFlowNames:
|
|
- OnStop
|
|
- PowerDown
|
|
--- !u!114 &8926484042661623631
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 2461f61b3c026d54db1951a4e17ab20e, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 1917, y: -2051}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots: []
|
|
m_OutputSlots: []
|
|
m_Label:
|
|
m_Data: {fileID: 0}
|
|
m_InputFlowSlot:
|
|
- link: []
|
|
m_OutputFlowSlot:
|
|
- link:
|
|
- context: {fileID: 8926484042661623624}
|
|
slotIndex: 1
|
|
- context: {fileID: 8926484042661623732}
|
|
slotIndex: 1
|
|
- context: {fileID: 8926484042661623692}
|
|
slotIndex: 1
|
|
eventName: PowerDown
|
|
--- !u!114 &8926484042661623692
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 9207a95457a3f994581249dbe0a3409d, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 1412, y: -591}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots:
|
|
- {fileID: 8926484042661623693}
|
|
- {fileID: 8926484042661623694}
|
|
- {fileID: 8926484042661623695}
|
|
- {fileID: 8926484042661623696}
|
|
- {fileID: 8926484042661623701}
|
|
- {fileID: 8926484042661623706}
|
|
- {fileID: 8926484042661623725}
|
|
- {fileID: 8926484042661623724}
|
|
m_OutputSlots: []
|
|
m_Label:
|
|
m_Data: {fileID: 0}
|
|
m_InputFlowSlot:
|
|
- link: []
|
|
- link:
|
|
- context: {fileID: 8926484042661623631}
|
|
slotIndex: 0
|
|
- link:
|
|
- context: {fileID: 8926484042661623760}
|
|
slotIndex: 0
|
|
m_OutputFlowSlot:
|
|
- link: []
|
|
m_Subgraph: {fileID: 8926484042661614526, guid: e18ff24922338944aac6f6eb1ca45c56,
|
|
type: 3}
|
|
m_InputFlowNames:
|
|
- OnStop
|
|
- PowerDown
|
|
- TakeHit
|
|
--- !u!114 &8926484042661623693
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 4d246e354feb93041a837a9ef59437cb, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623693}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623692}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 500
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: Resolution
|
|
m_serializedType:
|
|
m_SerializableType: System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Number of particles per ark
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661620399}
|
|
--- !u!114 &8926484042661623694
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623694}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623692}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: Hit
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Core intensity when hit (0 is calm, 1 is excited)
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
- m_Type: 0
|
|
m_Min: 0
|
|
m_Max: 1
|
|
m_Tooltip:
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661620429}
|
|
--- !u!114 &8926484042661623695
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623695}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623692}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 1
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: Power
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Core power (1 is full, 0 is depleted)
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
- m_Type: 0
|
|
m_Min: 0
|
|
m_Max: 1
|
|
m_Tooltip:
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661620431}
|
|
--- !u!114 &8926484042661623696
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 5265657162cc1a241bba03a3b0476d99, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children:
|
|
- {fileID: 8926484042661623697}
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623696}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623692}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor,
|
|
Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
|
|
m_SerializableObject: '{"position":{"x":-5.208862603467423e-7,"y":10.68910026550293,"z":-0.0000018274770354764769}}'
|
|
m_Space: 0
|
|
m_Property:
|
|
name: TopCeiling
|
|
m_serializedType:
|
|
m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor,
|
|
Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661620465}
|
|
--- !u!114 &8926484042661623697
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: ac39bd03fca81b849929b9c966f1836a, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623696}
|
|
m_Children:
|
|
- {fileID: 8926484042661623698}
|
|
- {fileID: 8926484042661623699}
|
|
- {fileID: 8926484042661623700}
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623696}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: position
|
|
m_serializedType:
|
|
m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: The position.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623698
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623697}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623696}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: x
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623699
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623697}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623696}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: y
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623700
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623697}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623696}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: z
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623701
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 5265657162cc1a241bba03a3b0476d99, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children:
|
|
- {fileID: 8926484042661623702}
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623701}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623692}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor,
|
|
Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
|
|
m_SerializableObject: '{"position":{"x":-5.209085429669358e-7,"y":-9.36138916015625,"z":0.0000019872197754011724}}'
|
|
m_Space: 0
|
|
m_Property:
|
|
name: BottomFloor
|
|
m_serializedType:
|
|
m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor,
|
|
Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661620471}
|
|
--- !u!114 &8926484042661623702
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: ac39bd03fca81b849929b9c966f1836a, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623701}
|
|
m_Children:
|
|
- {fileID: 8926484042661623703}
|
|
- {fileID: 8926484042661623704}
|
|
- {fileID: 8926484042661623705}
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623701}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: position
|
|
m_serializedType:
|
|
m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: The position.
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623703
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623702}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623701}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: x
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623704
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623702}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623701}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: y
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623705
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623702}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623701}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: z
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623706
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623706}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623692}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 4.42
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: Spread
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661620477}
|
|
--- !u!114 &8926484042661623724
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623724}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623692}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: Nucleus Scale
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623373}
|
|
--- !u!114 &8926484042661623725
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: ac39bd03fca81b849929b9c966f1836a, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children:
|
|
- {fileID: 8926484042661623726}
|
|
- {fileID: 8926484042661623727}
|
|
- {fileID: 8926484042661623728}
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623725}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623692}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
m_SerializableObject: '{"x":0.0,"y":0.0,"z":0.0}'
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: Nucleus Shake Offset
|
|
m_serializedType:
|
|
m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623223}
|
|
--- !u!114 &8926484042661623726
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623725}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623725}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: x
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623727
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623725}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623725}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: y
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623728
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623725}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623725}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: z
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623732
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 9207a95457a3f994581249dbe0a3409d, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 1407, y: -1319}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots:
|
|
- {fileID: 8926484042661623733}
|
|
- {fileID: 8926484042661623734}
|
|
- {fileID: 8926484042661623755}
|
|
- {fileID: 8926484042661623759}
|
|
m_OutputSlots: []
|
|
m_Label:
|
|
m_Data: {fileID: 0}
|
|
m_InputFlowSlot:
|
|
- link: []
|
|
- link:
|
|
- context: {fileID: 8926484042661623631}
|
|
slotIndex: 0
|
|
m_OutputFlowSlot:
|
|
- link: []
|
|
m_Subgraph: {fileID: 8926484042661614526, guid: d19bed95ca138a74882c90863f5bef14,
|
|
type: 3}
|
|
m_InputFlowNames:
|
|
- OnPlay
|
|
- PowerDown
|
|
--- !u!114 &8926484042661623733
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623733}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623732}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: Hit
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Core intensity when hit (0 is calm, 1 is excited)
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
- m_Type: 0
|
|
m_Min: 0
|
|
m_Max: 1
|
|
m_Tooltip:
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661620429}
|
|
--- !u!114 &8926484042661623734
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623734}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623732}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 1
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: Power
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes:
|
|
- m_Type: 3
|
|
m_Min: -Infinity
|
|
m_Max: Infinity
|
|
m_Tooltip: Core power (1 is full, 0 is depleted)
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
- m_Type: 0
|
|
m_Min: 0
|
|
m_Max: 1
|
|
m_Tooltip:
|
|
m_Regex:
|
|
m_RegexMaxLength: 0
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661620431}
|
|
--- !u!114 &8926484042661623755
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: ac39bd03fca81b849929b9c966f1836a, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children:
|
|
- {fileID: 8926484042661623756}
|
|
- {fileID: 8926484042661623757}
|
|
- {fileID: 8926484042661623758}
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623755}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623732}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
m_SerializableObject: '{"x":0.0,"y":0.0,"z":0.0}'
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: Nucleus Shake Offset
|
|
m_serializedType:
|
|
m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0,
|
|
Culture=neutral, PublicKeyToken=null
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623223}
|
|
--- !u!114 &8926484042661623756
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623755}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623755}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: x
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623757
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623755}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623755}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: y
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623758
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 8926484042661623755}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623755}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 0}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType:
|
|
m_SerializableObject:
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: z
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots: []
|
|
--- !u!114 &8926484042661623759
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: f780aa281814f9842a7c076d436932e7, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 0}
|
|
m_Children: []
|
|
m_UIPosition: {x: 0, y: 0}
|
|
m_UICollapsed: 1
|
|
m_UISuperCollapsed: 0
|
|
m_MasterSlot: {fileID: 8926484042661623759}
|
|
m_MasterData:
|
|
m_Owner: {fileID: 8926484042661623732}
|
|
m_Value:
|
|
m_Type:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
m_SerializableObject: 0
|
|
m_Space: 2147483647
|
|
m_Property:
|
|
name: Nucleus Shake
|
|
m_serializedType:
|
|
m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral,
|
|
PublicKeyToken=b77a5c561934e089
|
|
attributes: []
|
|
m_Direction: 0
|
|
m_LinkedSlots:
|
|
- {fileID: 8926484042661623373}
|
|
--- !u!114 &8926484042661623760
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
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: 2461f61b3c026d54db1951a4e17ab20e, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_Parent: {fileID: 114350483966674976}
|
|
m_Children: []
|
|
m_UIPosition: {x: 1737, y: -833}
|
|
m_UICollapsed: 0
|
|
m_UISuperCollapsed: 0
|
|
m_InputSlots: []
|
|
m_OutputSlots: []
|
|
m_Label:
|
|
m_Data: {fileID: 0}
|
|
m_InputFlowSlot:
|
|
- link: []
|
|
m_OutputFlowSlot:
|
|
- link:
|
|
- context: {fileID: 8926484042661623692}
|
|
slotIndex: 2
|
|
eventName: TakeHit
|