ComputeShader.SetFloats()

Originally I have in

C#

_floatArray = new float[2];
_floatArray[0] = 1f;
_floatArray[1] = 0.5f;

Compute Shader

float FloatArray[2];

And use ComputeShader.SetFloats() to pass the values from C# to Compute Shader.
Reading the values in Compute Shader, I found that only FloatArray[0] has the value. So FloatArray[1] will equals to 0.

Unity dev (Marton E.) replied me that:

Continue reading “ComputeShader.SetFloats()”

Deform MeshCollider with Compute Shader

If you want to do something like this:

 

In C# : You need a for loop which
-> iterates a few ten-thousands vertices, and then
-> for each vertex, you need to calculate the distance between each bead…

All these instructions are run 1 by 1 on CPU. You can imagine the time needed for this.

——–

But with compute shader, those several ten-thousands iterations can be done “at the same time” in GPU (it depends how you setup the data). And the result data will be transferred back to CPU, and directly apply to Mesh.vertices array.

And this is what you can see in this video, the fps stays above 70.

SRP studies

Overview

https://docs.unity3d.com/2017.2/Documentation/Manual/ScriptableRenderPipeline.html#APIOverview

Unity C++ code C#/shader code (MIT open source)
Culling
Render set of objects with filter/sort/params/batch
Internal graphics platform abstraction

Camera setup
Light setup
Shadows setup
Frame render pass structure & logicShader/compute code

Continue reading “SRP studies”

w component

I have been so confusing about the w component for ages, until I read this:
Explaining Homogeneous Coordinates & Projective Geometry

So I quickly made a simple to shader to test it out:
20170910

To summarize, w component is the

The W dimension is the distance from the projector to the screen(object).

when w > 1, the object looks far (smaller)
when w = 1, the size remains the same
when w = 0, it’s actually covering the whole screen

This is the reason why we have make sure the w component is correct when we are doing _Object2World and _World2Object

Also a interesting point to note from the blog post:

If W=1, then it is a point light. If W=0, then it is a directional light.

(Thanks Kemal for the tutorial links!)

 

Shader Model and features

2.5: derivatives
3.0: 2.5 + interpolators10 + samplelod + fragcoord (also contains fragdepth)
3.5: 3.0 + interpolators15 + mrt4 + + integers + 2darray + instancing
4.0: 3.5 + [mrt8] + geometry
4.5: 3.5 + compute + randomwrite (so it means it has no 4.0 features)
4.6: 4.0 + [cubearray] + tesshw + tessellation (so it means it has no 4.5 features)
5.0: 4.0 + 4.5 + 4.6 + [interpolators32] (it has everything)

[Pink] : Mobile won’t implies it

info from @Aras