Shader의 27번째 부분을 파동 방정식과 Custom Render Texture로 파문을 그릴 때가 많지 않아요.
쉐더를 할 시간이 얼마 안 남았어요.
하마터면 Shader를 할 뻔했다.쉐더를 할 시간이 많지 않을 것 같아서요.
100부까지 열심히 하겠습니다.10년이 걸려도 돼요.
100편의 글을 배웠다면 초보자라도 이해할 수 있을 것 같아요.
이렇게 하는 거야.
※ 초보자는 필기 레벨로 기록
기술 보도로는 도움이 안 될 것 같습니다.
미리 준비하다
아래 참조
Shader 파트 1Unite 2017 애니메이션을 볼 때가 많지 않아요. (기초지식~종이 스크레이퍼로 색깔 바꾸기)
데모
Inspector를 조금 조작해야 해요. 확인했어요.
CustomRenderTexture
Custom의 RenderTexture가 가능한 것 같습니다.
일단 RenderTexture가 뭐였죠?그래서 찾아봤는데
다음과 같은 기술이 있다.
【인용원】: Render Texture
A Render Texture is a type of Texture that Unity creates and updates at run time.
용도가 여러 가지가 있는 것 같아요.
카메라의 그림 결과를 부 모니터에 상영합니다
비디오를 스크린으로 붙여넣을 수 있습니다.
Custom RenderTexture로 돌아가기
그 RenderTexture를 확장할 수 있습니다.
Texture 그리기 작업은 Shader에서 확장 가능
복잡한 계산 처리를 거친 Texture를 사용할 수 있습니다.
【참조 링크】: Custom RenderTexture를 사용하여 물결 모양 만들기
Shader 샘플
먼저 Custom RenderTexture에 사용된 Shader입니다.
Shader "Custom/CustomRenderRipple"
{
Properties
{
_S2("PhaseVelocity^2", Range(0.0, 0.5)) = 0.2
_Attenuation("Attenuation", Range(0.0, 1.0)) = 0.999
_DeltaUV("Delta UV", Float) = 0.1
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex CustomRenderTextureVertexShader //専用の定義済みvertexシェーダ関数
#pragma fragment frag
#include "UnityCustomRenderTexture.cginc" //専用のcgincファイル
half _S2;
half _Attenuation;
float _DeltaUV;
sampler2D _MainTex;
float4 frag(v2f_customrendertexture i) : SV_Target
{
float2 uv = i.globalTexcoord;
// 1pxあたりの単位を計算する
float du = 1.0 / _CustomRenderTextureWidth;
float dv = 1.0 / _CustomRenderTextureHeight;
float2 duv = float2(du, dv) * _DeltaUV;
// 現在の位置のテクセルをフェッチ
float2 c = tex2D(_SelfTexture2D, uv);
//波動方程式
//h(t + 1) = 2h + c(h(x + 1) + h(x - 1) + h(y + 1) + h(y - 1) - 4h) - h(t - 1)
//今回、h(t + 1)は次のフレームでの波の高さを表す
//R,Gをそれぞれ高さとして使用
float k = (2.0 * c.r) - c.g; //2h - h(t - 1) を先に計算
float p = (k + _S2 * ( //_S2は係数 位相の変化する速度
tex2D(_SelfTexture2D, uv + duv.x).r +
tex2D(_SelfTexture2D, uv - duv.x).r +
tex2D(_SelfTexture2D, uv + duv.y).r +
tex2D(_SelfTexture2D, uv - duv.y).r - 4.0 * c.r)
) * _Attenuation; //減衰係数
// 現在の状態をテクスチャのR成分に、ひとつ前の(過去の)状態をG成分に書き込む。
return float4(p, c.r, 0, 0);
}
ENDCG
}
}
}
위대한 다음 참고 링크의 전체 내용Custom RenderTexture용 cginc를 준비했습니다.
이를 사용하여 RenderTexture를 확장할 수 있습니다.
상세한 설정도 아래 링크에 상세하게 기재되어 있으니 놓치지 마세요.
【참조 링크】: Custom RenderTexture를 사용하여 물결 모양 만들기
파동 방정식에 관해서는 다음 영상을 만 번 정도 보면 이해할 수 있을 것 같다.
나는 5000번 보고 이해한 상태로 계속 전진하기로 했다.
Custom RenderTexture를 소재로 하는 Texture
방금 제작된 커스텀 렌더텍처를 소재로 한 텍스터.
단지 종이 파쇄 블레이드를 텍스처로 처리하기 때문에 매우 간단하다.
Shader 샘플
Shader "Custom/RippleSimulation"
{
Properties
{
_CustomRendererTex("Custom Renderer Texture", 2D) = "gray" {}
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
sampler2D _CustomRendererTex;
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
fixed4 frag(v2f i) : SV_Target
{
//カスタムレンダーテクスチャーのピクセル情報を使用
return tex2D(_CustomRendererTex, i.uv);
}
ENDCG
}
}
}
이후 위 Shader가 적용된 재료를 Plane으로 설정하면 된다.참조 링크
수면을 만들어 봤어요.
CustomRenderTexture
Unity 2017.1 기능을 사용한 Custom RenderTexture
WaveShooter
Reference
이 문제에 관하여(Shader의 27번째 부분을 파동 방정식과 Custom Render Texture로 파문을 그릴 때가 많지 않아요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kento_o/articles/300954cbd453da텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)