Unity HDRP - CustomRenderTexture не работает? - PullRequest
0 голосов
/ 18 января 2020

Я пытаюсь нарисовать текстуру мышью. Координаты мыши передаются шейдеру, который выводит текстуру рендеринга (я пробовал как обычные RenterTexture, так и CustomRenderTexture, на которые напрямую влияет материал), и это, похоже, не работает. По материалу я могу сказать, что ввод мыши получен, но ничего не видно на рендертекстуре.

Я начинаю подозревать, что рендертекстуры не полностью работают в HDRP? Надеясь, что кто-то может указать на то, что может быть реальной проблемой.

Я на Unity 2019.3.0f3, шейдеры - это HDRP Unlit Graph

Это мой сценарий:

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

public class DrawWithMouse : MonoBehaviour
{
    public Camera _camera;
    public CustomRenderTexture _splatmap;

    public Material _drawMaterial;

    private RaycastHit _hit;

    [Range(1, 100)]
    public float _brushSize = 1f;
    [Range(0, 10)]
    public float _brushStrength = 1f;

    private readonly float m_GUIsize = 256;
    private readonly int m_RenderTexSize = 1024;

    void Start()
    {
        _splatmap = new CustomRenderTexture(m_RenderTexSize, m_RenderTexSize, RenderTextureFormat.ARGBFloat, RenderTextureReadWrite.Linear)
        {
            name = "splatmap_CRT_generated",
            initializationColor = Color.black,
            initializationSource = CustomRenderTextureInitializationSource.Material,
            initializationMaterial = _drawMaterial,
            material = _drawMaterial,
            doubleBuffered = true,
            updateMode = CustomRenderTextureUpdateMode.OnDemand
        };

        _drawMaterial.SetVector("_DrawColor", Color.red);
        _drawMaterial.SetTexture("_SplatMap", _splatmap);
    }

    void Update()
    {
        if (Input.GetKey(KeyCode.Mouse0))
        {
            if (Physics.Raycast(_camera.ScreenPointToRay(Input.mousePosition), out _hit, 100f))
            {
                _drawMaterial.SetVector("_InputPoint", new Vector4(_hit.textureCoord.x, _hit.textureCoord.y, 0, 0));
                _drawMaterial.SetFloat("_BrushStrength", _brushStrength);
                _drawMaterial.SetFloat("_BrushSize", _brushSize);
            }
        }
    }


    private void OnGUI()
    {
        GUI.DrawTexture(new Rect(0, 0, m_GUIsize, m_GUIsize), _splatmap, ScaleMode.StretchToFill, false, 1);
    }

}
...