Forwarded from Kamali
باید با استفاده از رندر تکسچر ، uv coordinate رو distort کنید
تو شیدرتوی معادل رندر تکسچر همون بافر ها هستند که باهاش می تونید هر چیزی رو ذخیره کنید که بعداً ازش استفاده کنید
تو شیدرتوی معادل رندر تکسچر همون بافر ها هستند که باهاش می تونید هر چیزی رو ذخیره کنید که بعداً ازش استفاده کنید
Forwarded from Shader Laboratory
برای ساخت فلو مپ یک uv coodinate لازم داریم
Forwarded from Kamali
بعد تو فتوشاپ با استفاده از smudge tool می تونید distortion به uv coordinate بدید
#pragma kernel TesterKernel
RWTexture2D<float4> Result;
[numthreads(8, 8, 1)]
void TesterKernel(uint2 id : SV_DispatchThreadID)
{
float2 iResolution=float2(1024,1024); //texture resolution
Result[id] = float4(id/iResolution,0,1);
}
RWTexture2D<float4> Result;
[numthreads(8, 8, 1)]
void TesterKernel(uint2 id : SV_DispatchThreadID)
{
float2 iResolution=float2(1024,1024); //texture resolution
Result[id] = float4(id/iResolution,0,1);
}
using UnityEngine;
[ExecuteInEditMode]
public class Test : MonoBehaviour
{
[SerializeField] ComputeShader _compute;
RenderTexture _buffer;
const int kSize = 512;
void OnDestroy()
{
if (_buffer != null)
if (Application.isPlaying)
Destroy(_buffer);
else
DestroyImmediate(_buffer);
}
void OnRenderImage(RenderTexture source, RenderTexture destination)
{
if (_buffer == null)
{
_buffer = new RenderTexture(kSize, kSize, 0);
_buffer.enableRandomWrite = true;
_buffer.filterMode = FilterMode.Point;
_buffer.hideFlags = HideFlags.DontSave;
_buffer.Create();
}
var kernel = _compute.FindKernel("TesterKernel");
_compute.SetTexture(kernel, "Result", _buffer);
_compute.Dispatch(kernel, kSize / 8, kSize / 8, 1);
Graphics.Blit(_buffer, destination);
}
}
[ExecuteInEditMode]
public class Test : MonoBehaviour
{
[SerializeField] ComputeShader _compute;
RenderTexture _buffer;
const int kSize = 512;
void OnDestroy()
{
if (_buffer != null)
if (Application.isPlaying)
Destroy(_buffer);
else
DestroyImmediate(_buffer);
}
void OnRenderImage(RenderTexture source, RenderTexture destination)
{
if (_buffer == null)
{
_buffer = new RenderTexture(kSize, kSize, 0);
_buffer.enableRandomWrite = true;
_buffer.filterMode = FilterMode.Point;
_buffer.hideFlags = HideFlags.DontSave;
_buffer.Create();
}
var kernel = _compute.FindKernel("TesterKernel");
_compute.SetTexture(kernel, "Result", _buffer);
_compute.Dispatch(kernel, kSize / 8, kSize / 8, 1);
Graphics.Blit(_buffer, destination);
}
}
#pragma kernel TesterKernel
RWTexture2D<float4> Result;
float4 drawline(float2 uv)
{
float Thickness = 0.02;
float LineSideA = step((uv.x+Thickness)+uv.y,0.5);
float LineSideB = step((uv.x-Thickness)+uv.y,0.5);
return float4(1,1,1,1)*LineSideB-LineSideA;
}
[numthreads(8, 8, 1)]
void TesterKernel(uint2 id : SV_DispatchThreadID)
{
float2 iResolution=float2(1024,1024); //texture resolution
Result[id] = drawline(id/iResolution);
}
RWTexture2D<float4> Result;
float4 drawline(float2 uv)
{
float Thickness = 0.02;
float LineSideA = step((uv.x+Thickness)+uv.y,0.5);
float LineSideB = step((uv.x-Thickness)+uv.y,0.5);
return float4(1,1,1,1)*LineSideB-LineSideA;
}
[numthreads(8, 8, 1)]
void TesterKernel(uint2 id : SV_DispatchThreadID)
{
float2 iResolution=float2(1024,1024); //texture resolution
Result[id] = drawline(id/iResolution);
}
Forwarded from Mostafa
سلام
یه سوال داشتم
چرا میگن تو نوشتن شیدر بهتره که از if استفاده نشه؟
یه سوال داشتم
چرا میگن تو نوشتن شیدر بهتره که از if استفاده نشه؟
Forwarded from Kamali
چون GPU در حالت عادی به صورت موازی عمل می کنه اما اگر از if-else statement استفاده کنید دیگه موازی عمل نمی کنه!
یکسری از Thread ها از بلوک IF عبور می کنند و باقی اونا از بلوک ELSE به خاطر همین دیگه مثل قبل با هم پیش نمیرن و باعث میشه سرعتشون کند بشه
یکسری از Thread ها از بلوک IF عبور می کنند و باقی اونا از بلوک ELSE به خاطر همین دیگه مثل قبل با هم پیش نمیرن و باعث میشه سرعتشون کند بشه
Forwarded from Kamali
یک لشکر سرباز رو در نظر بگیرید که به دو قسمت تقسیم میشه
در این صورت قدرت این لشکر دیگه مثل سابق نیست!
در این صورت قدرت این لشکر دیگه مثل سابق نیست!