这是今天在研究CommandBuffer时无意间想到的一种玩法。效果挺有意思的,原理也很简单。就是将摄像机渲染出RenderTexture赋值给模型材质,而这个模型又被摄像机渲染到RT上……如此往复,形成这种分形的效果。
代码都很简单:
using UnityEngine;
public class SS_12 : MonoBehaviour
{
public Material mat;
public RenderTexture colorBuf;
public Transform trans;
private void Update()
{
mat.SetTexture("_RT", colorBuf);
Rot();
}
float time = 0;
public float cd = 1;
void Rot()
{
if (time > cd)
{
time = 0;
trans.Rotate(Vector3.up, 10);
}
else
{
time += Time.deltaTime;
}
}
}
Shader "MyShader/SS_12" {
SubShader {
ZTest Always
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata {
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f {
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD0;
};
sampler2D _RT;
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(_RT,i.uv);
}
ENDCG
}
}
}
然后在场景中放在2个Plane,其中一个的材质设置为SS_12,并抬高0.01。
还要创建一个摄像机Camera,放到MainCamera下,并将一张RT放到TargetTexture中。
再将SS_12挂在MainCamera下并设置参数。
最后在编辑器中的样子:
PS:如果用的是SRP,有个地方要设置一下(这个问题困扰了我半天,碰运气碰出来了-_-!)。
扫描二维码关注公众号,回复:
11443416 查看本文章
返回目录:https://blog.csdn.net/yzy1987523/article/details/106676451