Все для Unity3d> HBAO+ не находит свой dll файл Unity5.6 - Форум>
Страница 1 из 11
Форум » Unity » Вопросы » HBAO+ не находит свой dll файл Unity5.6 (Почему?)
HBAO+ не находит свой dll файл Unity5.6
pouДата: Суббота, 18.02.2017, 16:53 | Сообщение # 1
Новый писатель
Группа: Пользователи
Сообщений: 12
Статус: Offline
hbao+ от NVidia требует спец. плагин, в 5.5 версии все ок, но вот 5.6 пишет ощибку "DllNotFoundExeption: HBAO_Plugin.X64". Вот строки скрипта using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
using System;

[ExecuteInEditMode][RequireComponent(typeof(Camera))]
public class HBAOPlus : MonoBehaviour
{
    public enum BlurRadiusMode
    {
        BLUR_RADIUS_2,
        BLUR_RADIUS_4,
        BLUR_RADIUS_8,
    }

     [SerializeField]private Shader fetchDepthShader; // Use a dummy shader to explicitly binds the _CameraDepthTexture SRV to a register.
     [SerializeField]private Shader renderAoShader;

    private bool useNormalTexture = false; //Not working.

    public float radius = 0.2f;
    public float bias;
    public float powerExponent = 1.0f;
    public bool enableBlur = true;
    public float blurSharpness = 1.0f;
    public BlurRadiusMode blurRadiusMode;

    private static Material fetchDepthMaterial;
    private static Material renderAoMaterial;

    private RenderTexture output;
    private RenderTexture normals;

    // For lack of a better way to do this... 
#if UNITY_5_5_OR_NEWER
    private const string PluginName = "HBAO_Plugin.x64";
#else
    private const string PluginName = "HBAO_Plugin.Win32";
#endif

    private Camera _camera;
    private Camera Camera 
    {
        get 
        {
            if (_camera == null) 
            {
                _camera = GetComponent<Camera> ();
            }
            return _camera;
        }
    }

    // The block of code below is a neat trick to allow for calling into the debug console from C++
    [DllImport("HBAO_Plugin.x64")]
    private static extern void LinkDebug([MarshalAs(UnmanagedType.FunctionPtr)]IntPtr debugCal);

    [UnmanagedFunctionPointer(CallingConvention.StdCall)]
    private delegate void DebugLog(string log);

    private static readonly DebugLog debugLog = DebugWrapper;
    private static readonly IntPtr functionPointer = Marshal.GetFunctionPointerForDelegate(debugLog);

    private static void DebugWrapper(string log) { Debug.Log(log); }

    [DllImport("HBAO_Plugin.x64", CallingConvention = CallingConvention.StdCall)]
    private static extern int GetEventID();

    [DllImport("HBAO_Plugin.x64", CallingConvention = CallingConvention.StdCall)]
    private static extern void SetAoParameters( float Radius,
                                                float Bias,
                                                float PowerExponent,
                                                bool EnableBlur,
                                                int BlurRadiusMode,
                                                float BlurSharpness,
                                                int BlendMode );

    [DllImport("HBAO_Plugin.x64", CallingConvention = CallingConvention.StdCall)]
    private static extern void SetInputData(    float MetersToViewSpaceUnits,
                                                float[] pProjectionMatrix,
                                                float[] pWorldToViewMatrix, 
                                                float height, 
                                                float width,
                                                float topLeftX,
                                                float topLeftY,
                                                float minDepth,
                                                float maxDepth,
                                                bool useNormals );

    [DllImport("HBAO_Plugin.x64", CallingConvention = CallingConvention.StdCall)]
    private static extern void SetNormalsData(IntPtr pNormalsTexture);

    [DllImport("HBAO_Plugin.x64", CallingConvention = CallingConvention.StdCall)]
    private static extern void SetOutputData(IntPtr pOutputTexture);

    private void Start()
    {
        LinkDebug(functionPointer); // Hook our c++ plugin into Unitys console log.
    }

    private void OnEnable() 
    {
        if (renderAoMaterial == null)   renderAoMaterial    = new Material(renderAoShader);
        if (fetchDepthMaterial == null) fetchDepthMaterial = new Material(fetchDepthShader);
    }

    private void OnDisable()
    {
        if (renderAoMaterial != null)   DestroyImmediate(renderAoMaterial);
        if (fetchDepthMaterial != null) DestroyImmediate(fetchDepthMaterial);

        if (output != null)     DestroyImmediate(output);
        if (normals != null) DestroyImmediate(normals);
    }

    private void Update()
    {
        Camera.depthTextureMode |= DepthTextureMode.Depth;

        if (useNormalTexture)
        {
            Camera.depthTextureMode |= DepthTextureMode.DepthNormals;  
        }
    }

    // Perform AO immediately after opaque rendering.
    
    [ImageEffectOpaque]private void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        if (output == null || output.width != Screen.width || output.height != Screen.height)
        {
            output = new RenderTexture(Screen.width, Screen.height, 0);
            output.Create(); // Must call create or ptr will be null.
            SetOutputData(output.GetNativeTexturePtr());
        } 

        if (useNormalTexture)
        {
            if (normals == null || normals.width != Screen.width || normals.height != Screen.height)
            {
                normals = new RenderTexture(Screen.width, Screen.height, 0, RenderTextureFormat.ARGBHalf);
                normals.Create(); // Must call create or ptr will be null.
                SetNormalsData(normals.GetNativeTexturePtr());
            }

            fetchDepthMaterial.SetMatrix("_Camera2World", Camera.cameraToWorldMatrix);
            Graphics.Blit(null, normals, fetchDepthMaterial, 0);
        }

        SetAoParameters(radius, bias, powerExponent, enableBlur, (int)blurRadiusMode, blurSharpness, 0);

        // Convert matrices to float arrays.
        float[] projMatrixArr = new float[16];
        float[] viewMatrixArr = new float[16];
        {
            Matrix4x4 projMatrix = GL.GetGPUProjectionMatrix(Camera.projectionMatrix, false);
            Matrix4x4 viewMatrix = Camera.cameraToWorldMatrix;// transform.worldToLocalMatrix;
            for (int i = 0; i < 16; i++)
            {
                projMatrixArr = projMatrix;
                viewMatrixArr = viewMatrix
;
            }
        }

        SetInputData(1.0f, projMatrixArr, viewMatrixArr, (float)Screen.height, (float)Screen.width, 0, 0, 0.0f, 1.0f, useNormalTexture);
        
        fetchDepthMaterial.SetPass(1); // Here Unity will bind the _CameraDepthTexture SRV used in this shader to the explicit register t99, which we can fetch in our plugin using ID3D11DeviceContext::PSGetShaderResources(...)
        
        // Call our render method from the AO plugin.
        GL.IssuePluginEvent(GetEventID());

        renderAoMaterial.SetTexture("_AoResult", output);
        renderAoMaterial.SetTexture("_MainTex", source);
        Graphics.Blit(source, destination, renderAoMaterial);
    }
}

Добавлено (18.02.2017, 16:42)
---------------------------------------------
ошибка поч в текст не влезла поэтому пишу здесь "DllNotFoundExeption: HBAO_Plugin.x64"

Добавлено (18.02.2017, 16:53)
---------------------------------------------
https://docs.unity3d.com/Manual/NativePluginInterface.html для тех кто не разбирается в этих плагинах, но хочет помочь


I'm rich bi*ch
 
Форум » Unity » Вопросы » HBAO+ не находит свой dll файл Unity5.6 (Почему?)
Страница 1 из 11
Поиск:
Свернуть
Развернуть
Необходима авторизация
0
ТОП-5 САЙТА
НОВЫЕ ИГРЫ
ГОРЯЧИЕ ТЕМЫ
СЛУЧАЙНЫЕ ФАЙЛЫ