挑战UnityShader学习之七_Reflection Probe 实现镜面反射效果

大神的作品是这样的

大神的解释是这样的

可是我们死活都弄不出同样的效果,好像镜头怎么移动,整个反射面一直不变,而且放大好多倍,比例一直不对

-

加了一个QQ群,一哥们说看完乐乐姐的书《入门精要》,不知道该看啥,求推荐新书

我是真心希望他真的看完

反正我是看了3遍,只看到了个皮毛

-

光说不练,其实和光看懂了,差不多

-

实现镜面反射效果

(仅仅记录一下过程吧,参考了另一个大神)

即使有程序经验,而这些经验如果不能让你更容易分辨事非(程序界 + 非程序界的人还都多很多),这江湖还是比github少了很多纯粹,欲踩平这坑还是有点难

就算你把这些坑都踩了个遍,对你的程序水平,也不会有太大长进

又如果你和我一样喜欢分享,你把这些不怎么样的程序对外发布

结果就是这个江湖现在的样子,也不是今天才变糊的,“基因” + 环境注定只能越来越糊

暂时无解

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ProbeReflection : MonoBehaviour
{
    public GameObject reflectionPlane;

    private ReflectionProbe probe;

    void Start()
    {
        this.probe = GetComponent<ReflectionProbe>();
    }

    void Update()
    {
        if(reflectionPlane == null)
        {
            return;
        }

        Camera camera = Camera.main;

        if(camera == null)
        {
            return;
        }

        float probeY = reflectionPlane.transform.position.y - camera.transform.position.y;

        this.probe.transform.position = new Vector3(
            camera.transform.position.x,
            reflectionPlane.transform.position.y + probeY,
            camera.transform.position.z
        );
    }
}

其他不多说了,自己脑补吧

 

再多说两句吧

Shader用的 puppet_master大神的代码,代码量很多,要自行挑选核心

(我还是粘贴一下吧)

struct v2f
			{

				float4 vertex : SV_POSITION;

				float3 reflectionDir : TEXCOORD0;
				float4 worldPos : TEXCOORD1;
			};

			sampler2D _MainTex;
			float4 _MainTex_ST;
			
			v2f vert (appdata_base v)
			{
				v2f o;

				o.vertex = UnityObjectToClipPos(v.vertex);

				float3 worldNormal = UnityObjectToWorldNormal(v.normal);

				float3 worldViewDir = WorldSpaceViewDir(v.vertex);

				o.reflectionDir = reflect(-worldViewDir, worldNormal);
				o.worldPos = UnityObjectToClipPos(v.vertex);//不重要,暂时没用到。。。。
				return o;
			}
			
			fixed4 frag (v2f i) : SV_Target
			{
				half4 rgbm = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, i.reflectionDir);

				half3 color = DecodeHDR(rgbm, unity_SpecCube0_HDR);

				return half4(color, 1.0);
			}

再再说2句吧

一定要用realtime

一定要用realtime

一定要用realtime

- 反推一下,什么情况下你能用bake

1.你初学

你连realtime都没练好,你觉得+上Unity官方的鸡肋例子,+上大神的魔改代码,你能用好bake??

2.老师,视频里说的

我……%……!@!&!*!@

3.你领导说的

不可和大厂比较,其实大部分职场里,我碰到的领导,小公司的领导,都是学过一两年美术或程序,然后直接转领导的,不敢说全部,大部分根本就没学透。所以努力做领导吧,干实事不实际

4.你灰常有经验,写了虚幻3多年

虚幻3有realtime吗??

5.你是一个程序爱好者

这就是为什么网上realtime bake傻傻分不清的原因

6.毕设作业要交

得了,别太认真

7.我要考虑“效率”,“优化”

其实你最优先考虑的,应该是你自己,别太忧国忧民

==================

你就举一个例子,能用bake的让我瞧瞧嘛

我这里用了 realtime,还是不能事实更新,还做不到镜面效果,还很多坑

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值