#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
یک لشکر سرباز رو در نظر بگیرید که به دو قسمت تقسیم میشه
در این صورت قدرت این لشکر دیگه مثل سابق نیست!
در این صورت قدرت این لشکر دیگه مثل سابق نیست!
Forwarded from MHD
میخواستم بدونم شیدر بدنه های ماشین csr2 چجوری کار میکنه و الگوریتمش چیه که هم باکیفیته و هم پردازش کمتری داره
Forwarded from Deleted Account
اگر کسی هست که کمکم کنه واقعا ازش ممنون می شم!
Forwarded from Deleted Account
خب فایل شیدر ؟ من شیدر نویس نیستم اگه می شه فایل شیدرو بفرست دوست عزیز
Forwarded from Kamali
Shader "Custom/Transparent"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader
{
Tags {"RenderType"="Transparent" "Queue"="Transparent"}
LOD 200
Pass {
ColorMask 0
}
// Render normally
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
ColorMask RGB
CGPROGRAM
#pragma surface surf Standard fullforwardshadows alpha:fade
#pragma target 3.0
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Standard"
}
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader
{
Tags {"RenderType"="Transparent" "Queue"="Transparent"}
LOD 200
Pass {
ColorMask 0
}
// Render normally
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
ColorMask RGB
CGPROGRAM
#pragma surface surf Standard fullforwardshadows alpha:fade
#pragma target 3.0
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Standard"
}
Forwarded from Kamali
Shader "Kamaly/TransparentCubeMap" {
Properties {
_MainTex("Main Map", 2D) = ""{}
_Cube("Reflection Map", Cube) = "" {}
_reflectionAmount("Reflection amount", Range (0.0,1.0)) = 0.3
}
SubShader {
Tags {"RenderType"="Transparent" "Queue"="Transparent"}
LOD 200
Pass {
ColorMask 0
}
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
ColorMask RGB
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
// User-specified uniforms
uniform samplerCUBE _Cube;
uniform sampler _MainTex;
uniform fixed _reflectionAmount;
struct vertexInput {
float4 vertex : POSITION;
float3 normal : NORMAL;
float2 uv : TEXCOORD;
};
struct vertexOutput {
float4 pos : SV_POSITION;
float3 normalDir : TEXCOORD0;
float3 viewDir : TEXCOORD1;
float2 uv : TEXCOORD2;
};
vertexOutput vert(vertexInput input)
{
vertexOutput output;
output.uv = input.uv;
float4x4 modelMatrix = unity_ObjectToWorld;
float4x4 modelMatrixInverse = unity_WorldToObject;
// دیگه نمی خواد در unity_Scale.w ضربش کنیم
// چون ما بردارهای تبدیل شده رو نرمالایز می کنیم (بردار یکه)
output.viewDir = mul(modelMatrix, input.vertex).xyz
- _WorldSpaceCameraPos;
output.normalDir = normalize(
mul(float4(input.normal, 0.0), modelMatrixInverse).xyz);
output.pos = UnityObjectToClipPos(input.vertex);
return output;
}
float4 frag(vertexOutput input) : COLOR
{
float3 reflectedDir =
reflect(input.viewDir, normalize(input.normalDir));
return lerp(tex2D(_MainTex,input.uv),texCUBE(_Cube, reflectedDir),_reflectionAmount);
}
ENDCG
}
}
}
Properties {
_MainTex("Main Map", 2D) = ""{}
_Cube("Reflection Map", Cube) = "" {}
_reflectionAmount("Reflection amount", Range (0.0,1.0)) = 0.3
}
SubShader {
Tags {"RenderType"="Transparent" "Queue"="Transparent"}
LOD 200
Pass {
ColorMask 0
}
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
ColorMask RGB
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
// User-specified uniforms
uniform samplerCUBE _Cube;
uniform sampler _MainTex;
uniform fixed _reflectionAmount;
struct vertexInput {
float4 vertex : POSITION;
float3 normal : NORMAL;
float2 uv : TEXCOORD;
};
struct vertexOutput {
float4 pos : SV_POSITION;
float3 normalDir : TEXCOORD0;
float3 viewDir : TEXCOORD1;
float2 uv : TEXCOORD2;
};
vertexOutput vert(vertexInput input)
{
vertexOutput output;
output.uv = input.uv;
float4x4 modelMatrix = unity_ObjectToWorld;
float4x4 modelMatrixInverse = unity_WorldToObject;
// دیگه نمی خواد در unity_Scale.w ضربش کنیم
// چون ما بردارهای تبدیل شده رو نرمالایز می کنیم (بردار یکه)
output.viewDir = mul(modelMatrix, input.vertex).xyz
- _WorldSpaceCameraPos;
output.normalDir = normalize(
mul(float4(input.normal, 0.0), modelMatrixInverse).xyz);
output.pos = UnityObjectToClipPos(input.vertex);
return output;
}
float4 frag(vertexOutput input) : COLOR
{
float3 reflectedDir =
reflect(input.viewDir, normalize(input.normalDir));
return lerp(tex2D(_MainTex,input.uv),texCUBE(_Cube, reflectedDir),_reflectionAmount);
}
ENDCG
}
}
}
👍1