UnityShader 는 이미지 중첩 을 사용 하여 운동 의 모호 함 을 실현 합 니 다.
5115 단어 UnityShader운동 이 모호 하 다
1.이 코드 는 카메라 에 걸 어 카 메 라 를 움 직 이게 한다.
using UnityEngine;
using System.Collections;
public class Translating : MonoBehaviour {
public float speed = 10.0f;
public Vector3 startPoint = Vector3.zero;
public Vector3 endPoint = Vector3.zero;
public Vector3 lookAt = Vector3.zero;
public bool pingpong = true;
private Vector3 curEndPoint = Vector3.zero;
// Use this for initialization
void Start () {
transform.position = startPoint;
curEndPoint = endPoint;
}
// Update is called once per frame
void Update () {
transform.position = Vector3.Slerp(transform.position, curEndPoint, Time.deltaTime * speed);
transform.LookAt(lookAt);
if (pingpong) {
if (Vector3.Distance(transform.position, curEndPoint) < 0.001f) {
curEndPoint = Vector3.Distance(curEndPoint, endPoint) < Vector3.Distance(curEndPoint, startPoint) ? startPoint : endPoint;
}
}
}
}
2.이 코드 는 카메라 에 걸 려 있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MotionBlur : PostEffectsBase
{
public Shader MotionBlurShader;
private Material _motionBlurMaterial = null;
public Material Material
{
get
{
_motionBlurMaterial = CheckShaderAndCreateMaterial(MotionBlurShader, _motionBlurMaterial);
return _motionBlurMaterial;
}
}
// , , , , 0.9
[Range(0.0f, 0.9f)] public float BlurAmount = 0.5f;
// RenderTexture ,
private RenderTexture _accumulationTexture;
// , ,
void OnDisable()
{
DestroyImmediate(_accumulationTexture);
}
void OnRenderImage(RenderTexture src, RenderTexture dest)
{
if (Material != null)
{
// _accumulationTexture ,
// ,
if (_accumulationTexture == null || _accumulationTexture.width != src.width ||
_accumulationTexture.height != src.height)
{
// _accumulationTexture
DestroyImmediate(_accumulationTexture);
//
_accumulationTexture = new RenderTexture(src.width, src.height, 0);
// , Hierarchy ,
_accumulationTexture.hideFlags = HideFlags.HideAndDontSave;
// _accumulationTexture
Graphics.Blit(src, _accumulationTexture);
}
// ,
// OnRenderImage , _accumulationTexture , _accumulationTexture
_accumulationTexture.MarkRestoreExpected();
//
Material.SetFloat("_BlurAmount", 1.0f - BlurAmount);
// _accumulationTexture
Graphics.Blit(src, _accumulationTexture, Material);
//
Graphics.Blit(_accumulationTexture, dest);
}
else
{
Graphics.Blit(src, dest);
}
}
}
3.이 Shader 는 코드 2 에 값 을 부여 합 니 다.
Shader "Unity Shaders Book/Chapter 12/MotionBlur"
{
Properties
{
_MainTex ("Base (RGB)", 2D) = "white" {}
//
_BlurAmount("Blur Amount", Float) = 1.0
}
SubShader
{
CGINCLUDE
#include "UnityCG.cginc"
sampler2D _MainTex;
fixed _BlurAmount;
//
struct v2f {
float4 pos : SV_POSITION;
half2 uv : TEXCOORD0;
};
v2f vert(appdata_img v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord;
return o;
}
// , RGB
fixed4 fragRGB(v2f i) : SV_Target{
// A _BlurAmount,
return fixed4(tex2D(_MainTex, i.uv).rgb, _BlurAmount);
}
// , A
half4 fragA(v2f i) : SV_Target{
// , ,
return tex2D(_MainTex, i.uv);
}
ENDCG
ZTest Always Cull Off Zwrite Off
// Pass, RGB
Pass
{
Blend SrcAlpha OneMinusSrcAlpha
ColorMask RGB
CGPROGRAM
#pragma vertex vert
#pragma fragment fragRGB
ENDCG
}
// Pass, A
Pass
{
Blend One Zero
ColorMask A
CGPROGRAM
#pragma vertex vert
#pragma fragment fragA
ENDCG
}
}
Fallback Off
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
UnityShader 는 이미지 중첩 을 사용 하여 운동 의 모호 함 을 실현 합 니 다.본 논문 의 사례 는 유 니 티 Shader 가 운동 의 모호 함 을 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다. 1.이 코드 는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.