i tried :(
This commit is contained in:
parent
2bfe79358b
commit
abde290ebe
|
@ -416,11 +416,11 @@ PrefabInstance:
|
||||||
m_Modifications:
|
m_Modifications:
|
||||||
- target: {fileID: 320690117028550720, guid: 99a6ff8b9591949439b620b13bd249a4, type: 3}
|
- target: {fileID: 320690117028550720, guid: 99a6ff8b9591949439b620b13bd249a4, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: -2.8340137
|
value: -15.03
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 320690117028550720, guid: 99a6ff8b9591949439b620b13bd249a4, type: 3}
|
- target: {fileID: 320690117028550720, guid: 99a6ff8b9591949439b620b13bd249a4, type: 3}
|
||||||
propertyPath: m_LocalPosition.y
|
propertyPath: m_LocalPosition.y
|
||||||
value: -3.6601481
|
value: -8.88
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 320690117028550720, guid: 99a6ff8b9591949439b620b13bd249a4, type: 3}
|
- target: {fileID: 320690117028550720, guid: 99a6ff8b9591949439b620b13bd249a4, type: 3}
|
||||||
propertyPath: m_LocalPosition.z
|
propertyPath: m_LocalPosition.z
|
||||||
|
@ -881,11 +881,11 @@ PrefabInstance:
|
||||||
m_Modifications:
|
m_Modifications:
|
||||||
- target: {fileID: 320690117028550720, guid: 30e0cc55a67f02d4f92b2677ec4b1511, type: 3}
|
- target: {fileID: 320690117028550720, guid: 30e0cc55a67f02d4f92b2677ec4b1511, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: -0.7082175
|
value: -12.904203
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 320690117028550720, guid: 30e0cc55a67f02d4f92b2677ec4b1511, type: 3}
|
- target: {fileID: 320690117028550720, guid: 30e0cc55a67f02d4f92b2677ec4b1511, type: 3}
|
||||||
propertyPath: m_LocalPosition.y
|
propertyPath: m_LocalPosition.y
|
||||||
value: -0.44170734
|
value: -5.661559
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 320690117028550720, guid: 30e0cc55a67f02d4f92b2677ec4b1511, type: 3}
|
- target: {fileID: 320690117028550720, guid: 30e0cc55a67f02d4f92b2677ec4b1511, type: 3}
|
||||||
propertyPath: m_LocalPosition.z
|
propertyPath: m_LocalPosition.z
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using ComputeShaderUtility;
|
using ComputeShaderUtility;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Rendering;
|
using UnityEngine.Rendering;
|
||||||
|
@ -12,6 +13,12 @@ public struct Droplet
|
||||||
public uint airborne;
|
public uint airborne;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public struct Cum
|
||||||
|
{
|
||||||
|
public Vector3 dir;
|
||||||
|
public float power;
|
||||||
|
}
|
||||||
|
|
||||||
public class BloodComputeShader : MonoBehaviour
|
public class BloodComputeShader : MonoBehaviour
|
||||||
{
|
{
|
||||||
public static BloodComputeShader Instance { get; private set; }
|
public static BloodComputeShader Instance { get; private set; }
|
||||||
|
@ -142,7 +149,7 @@ public class BloodComputeShader : MonoBehaviour
|
||||||
}
|
}
|
||||||
|
|
||||||
bool putBuffer = false;
|
bool putBuffer = false;
|
||||||
uint[] bufferData = new uint[] {0,0};
|
uint[] bufferData = new uint[] { 0, 0 };
|
||||||
|
|
||||||
if (readbackRequest.done)
|
if (readbackRequest.done)
|
||||||
{
|
{
|
||||||
|
@ -167,8 +174,9 @@ public class BloodComputeShader : MonoBehaviour
|
||||||
}
|
}
|
||||||
|
|
||||||
// Blood hitting the floor
|
// Blood hitting the floor
|
||||||
if (bufferData[1] > 0) {
|
if (bufferData[1] > 0)
|
||||||
splatterVolume += bufferData[1]/25.0f;
|
{
|
||||||
|
splatterVolume += bufferData[1] / 25.0f;
|
||||||
|
|
||||||
// Debug.Log("splat x" + bufferData[1]);
|
// Debug.Log("splat x" + bufferData[1]);
|
||||||
|
|
||||||
|
@ -179,7 +187,8 @@ public class BloodComputeShader : MonoBehaviour
|
||||||
RequestAsyncReadback();
|
RequestAsyncReadback();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (putBuffer) {
|
if (putBuffer)
|
||||||
|
{
|
||||||
numParticlesConsumedBuffer.SetData(bufferData);
|
numParticlesConsumedBuffer.SetData(bufferData);
|
||||||
bloodCompute.SetBuffer(UpdateDustKernel, "numParticlesConsumed", numParticlesConsumedBuffer);
|
bloodCompute.SetBuffer(UpdateDustKernel, "numParticlesConsumed", numParticlesConsumedBuffer);
|
||||||
|
|
||||||
|
@ -226,7 +235,6 @@ public class BloodComputeShader : MonoBehaviour
|
||||||
uint i = bufferLookPointer;
|
uint i = bufferLookPointer;
|
||||||
int found = 0;
|
int found = 0;
|
||||||
|
|
||||||
Droplet[] particles = new Droplet[numParticles];
|
|
||||||
var as_Particles = freeBloodReadRequest.GetData<Droplet>().ToArray();
|
var as_Particles = freeBloodReadRequest.GetData<Droplet>().ToArray();
|
||||||
int length = as_Particles.Length;
|
int length = as_Particles.Length;
|
||||||
// particleBuffer.GetData(particles);
|
// particleBuffer.GetData(particles);
|
||||||
|
@ -260,13 +268,13 @@ public class BloodComputeShader : MonoBehaviour
|
||||||
// Test for race conditions
|
// Test for race conditions
|
||||||
// yield return new WaitForSeconds(1.0f);
|
// yield return new WaitForSeconds(1.0f);
|
||||||
|
|
||||||
bloodCompute.SetFloat("particleVel", power/4.0f);
|
bloodCompute.SetFloat("particleVel", power / 4.0f);
|
||||||
bloodCompute.SetVector("particleInitPos", loc);
|
bloodCompute.SetVector("particleInitPos", loc);
|
||||||
bloodCompute.SetInt("particlesToInitialize", found);
|
bloodCompute.SetInt("particlesToInitialize", found);
|
||||||
|
|
||||||
Vector3 pow = Random.insideUnitSphere * power;
|
Vector3 pow = Random.insideUnitSphere * power;
|
||||||
pow.z = Mathf.Abs(pow.z);
|
pow.z = Mathf.Abs(pow.z);
|
||||||
bloodCompute.SetVector("initialVelocity",pow);
|
bloodCompute.SetVector("initialVelocity", pow);
|
||||||
|
|
||||||
ComputeHelper.Dispatch(bloodCompute, amount, 1, 1, InitDustKernel);
|
ComputeHelper.Dispatch(bloodCompute, amount, 1, 1, InitDustKernel);
|
||||||
|
|
||||||
|
@ -275,6 +283,80 @@ public class BloodComputeShader : MonoBehaviour
|
||||||
yield return null;
|
yield return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void createBloodButBetter(Vector3 pos, int amount, float power, Cum[] dirs)
|
||||||
|
{
|
||||||
|
StartCoroutine(penisBlood2(pos, amount, power, dirs));
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerator penisBlood2(Vector3 loc, int amount, float power, Cum[] dirs)
|
||||||
|
{
|
||||||
|
RequestAllBloodStates();
|
||||||
|
|
||||||
|
// Wait until we get the state of all the particles from the gpu
|
||||||
|
while (!freeBloodReadRequest.done)
|
||||||
|
{
|
||||||
|
yield return new WaitForEndOfFrame();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find N particles which are disabled
|
||||||
|
|
||||||
|
uint i = bufferLookPointer;
|
||||||
|
int found = 0;
|
||||||
|
|
||||||
|
var as_Particles = freeBloodReadRequest.GetData<Droplet>().ToArray();
|
||||||
|
int length = as_Particles.Length;
|
||||||
|
// particleBuffer.GetData(particles);
|
||||||
|
|
||||||
|
uint[] particleIndeces = new uint[amount];
|
||||||
|
|
||||||
|
// oof
|
||||||
|
while (i < numParticles)
|
||||||
|
{
|
||||||
|
if (as_Particles[i % (length - 1)].enabled == 0)
|
||||||
|
{ // Found unused particle
|
||||||
|
particleIndeces[found] = i;
|
||||||
|
found++;
|
||||||
|
|
||||||
|
if (found >= amount)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
bufferLookPointer = (uint)((bufferLookPointer + amount) % numParticles);
|
||||||
|
|
||||||
|
// Debug.Log(string.Join(", ", particleIndeces));
|
||||||
|
|
||||||
|
|
||||||
|
// Test for race conditions
|
||||||
|
// yield return new WaitForSeconds(1.0f);
|
||||||
|
|
||||||
|
bloodCompute.SetVector("particleInitPos", loc);
|
||||||
|
|
||||||
|
int particlesPerLoad = found / dirs.Length;
|
||||||
|
|
||||||
|
for (int idx = 0; idx < dirs.Length; idx++)
|
||||||
|
{
|
||||||
|
Vector3 pow = dirs[idx].dir * power;
|
||||||
|
pow.z = Mathf.Abs(pow.z);
|
||||||
|
bloodCompute.SetVector("initialVelocity", pow);
|
||||||
|
|
||||||
|
bloodCompute.SetFloat("particleVel", dirs[idx].power);
|
||||||
|
bloodCompute.SetInt("particlesToInitialize", particlesPerLoad);
|
||||||
|
|
||||||
|
// send data to gpu
|
||||||
|
freeParticleBuffer.SetData(particleIndeces.Take<uint>(particlesPerLoad).ToArray());
|
||||||
|
bloodCompute.SetBuffer(InitDustKernel, "freeParticles", freeParticleBuffer);
|
||||||
|
|
||||||
|
ComputeHelper.Dispatch(bloodCompute, amount, 1, 1, InitDustKernel);
|
||||||
|
}
|
||||||
|
|
||||||
|
activeParticles += found;
|
||||||
|
|
||||||
|
yield return null;
|
||||||
|
}
|
||||||
|
|
||||||
void OnDestroy()
|
void OnDestroy()
|
||||||
{
|
{
|
||||||
ComputeHelper.Release(particleBuffer, positionBuffer, argsBuffer, numParticlesConsumedBuffer, freeParticleBuffer);
|
ComputeHelper.Release(particleBuffer, positionBuffer, argsBuffer, numParticlesConsumedBuffer, freeParticleBuffer);
|
||||||
|
@ -282,6 +364,13 @@ public class BloodComputeShader : MonoBehaviour
|
||||||
|
|
||||||
public void createBloodTest(int amount)
|
public void createBloodTest(int amount)
|
||||||
{
|
{
|
||||||
createBlood(Vector3.zero, amount, 10.0f);
|
// createBlood(Vector3.zero, amount, 10.0f);
|
||||||
|
Cum[] dirs = {
|
||||||
|
// Random.insideUnitSphere,
|
||||||
|
new Cum {dir= Vector3.zero, power= 10.0f},
|
||||||
|
new Cum {dir= Random.insideUnitSphere, power= 2.5f}
|
||||||
|
};
|
||||||
|
|
||||||
|
createBloodButBetter(Vector3.zero, amount, 10.0f, dirs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue