BRO_TIGER
@BRO_TIGER
Indie Developer (C#, JS)

Проблемы Precomputed Realtime GI, или же артефакты шейдера?

5a50e41ea665f066207629.png

Доброго времени суток Тостер! Сегодня я столкнулся с проблемой освещения и довольно странными "Артефактами" на объектах. Дело было так: Я оптимизировал сцену путем - Комбинируем в один объект, даем материал и красим в разные цвета с помощью скрипта и упрощённого шейдера и таким образом я снизил число Батчей и Вызовов отрисовуки. После того как я оптимизировал сцену я начал запекать всю эту сцену методом Precomputed Realtime GI (Global Illumination) так как посчитал что предварительное вычисление освещения в сцене не навредит производительности и наведёт свою атмосферу (Результат выше))

Единственное нарекание которое я заметил это "артефакты" на определённом скомбинированном объекте - Деревянных ящиках... Я не знаю кто точно замешан в этом дерзком преступлении, поэтому прошу помощи может кто-то сталкивался с этим?

Пример "артефактов":

5a50e6e2c9118069316274.png5a50e6f7b84bb457322011.png

Настройки света и запекания:

5a50e8e9c22a6694254534.png

И таких куча в сцене и почти каждый ящик с этой проблемой...
Код шейдера и сам скрипт ниже...

Код Шейдера - Спойлер
Shader "Custom/VertexColors" {
	Properties 
	{
	    _Shininess("Shininess", Range (0.03, 1)) = 0.078125
	}
	SubShader {
	    Tags { "RenderType" = "Opaque" }
		CGPROGRAM
		#pragma surface surf BlinnPhong vertex:vert

		half _Shininess;

		struct Input{
			half2 uv_MainTex;
			fixed3 vertColors;
		};

		void vert (inout appdata_full v, out Input o) {
		    o.vertColors = v.color.rgb;
			o.uv_MainTex = v.texcoord;
		}

		void surf (Input IN, inout SurfaceOutput o)
		{
		    o.Albedo = IN.vertColors.rgb;
			o.Specular = 1;
			o.Gloss = _Shininess;
		}
		ENDCG
	}
	FallBack "Specular"
}
Скрипт на изменение цветов [C#]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[ExecuteInEditMode]
public class UpdateVerts : MonoBehaviour
{
    public Color newColor = Color.grey;


	void Update ()
    {
        Mesh mesh = GetComponent<MeshFilter>().mesh;

        Color[] colors = new Color[mesh.vertices.Length];

        for(int i = 0; i < mesh.vertices.Length; i++)
        {
            colors[i] = newColor;
        }

        mesh.colors = colors;
	}
}


Заранее огромное Спасибо, за любую помощь в этой теме!
  • Вопрос задан
  • 139 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы