Perguntas sobre renderização de acesso no UDK


7

Também perguntei sobre isso nos fóruns do UDK , mas não tive muita sorte em obter respostas. Basicamente, tenho alguma experiência com o modding UT3, mas estou apenas começando com o UDK e tenho algumas perguntas sobre o grau de controle sobre a renderização que você possui.

  1. Entendo que, apesar da presença de vários arquivos de shader HLSL na distribuição do UDK (com a extensão .usf), não há como implementar seus próprios shaders fora do editor de material; isto está correto? (Conheço o nó Custom no editor de materiais, mas é muito limitado e difícil de usar, exceto a lógica mais simples.)

  2. Entendo que o UE3 emprega renderização diferida. Eu sei que você pode acessar a cor e a profundidade do pixel atual em um processo posterior. No entanto, existe alguma maneira de acessar esses ou outros atributos do buffer G de uma maneira mais geral? (Normais, posição, valores em pixels vizinhos ...)

  3. Os destinos de renderização são suportados de uma maneira geral? Por uma questão de argumento, seria possível configurar uma câmera para renderizar profundidade a partir de um ponto de vista alternativo e, em seguida, fazer comparações de profundidade no estilo de mapa de sombras ao renderizar a vista principal?

  4. É possível substituir todos os materiais no cliente (em massa), como aqueles que estão sendo usados ​​para o terreno ou a geometria BSP no nível atual? (Para implementar modos de visão alternativos e coisas dessa natureza.)

As ferramentas que acompanham o UDK são, obviamente, muito polidas, e é difícil vencer o Scaleform e o SpeedTree gratuitos, mas estou começando a pensar que a plataforma é um ajuste terrível para quem quer ir além do arrastar e soltar edição de material em termos de gráficos. Sinto que tenho muito mais controle sobre a renderização em um mod de mecanismo de origem, por exemplo.


Gostaria muito de ouvir de alguém com experiência no UDK sobre essas questões
Jcurrie33

Respostas:


4
  1. Eu realmente não vejo muita coisa que não possa ser feita com o MaterialEditor. Você pode fazer quase tudo o que precisa. Alguém poderia argumentar que o editor de material não está gerando o código shader ideal, mas o shader-compiler faz um ótimo trabalho ao otimizar o código gerado automaticamente aqui. Então, apenas tente. Muitos jogos AAA foram desenvolvidos com este conjunto de ferramentas e muitos deles funcionaram completamente com materiais construídos com este editor. Mas, para responder à sua pergunta: Não, isso não é possível com o UDK comum.

  2. UE3 não usa renderização adiada. O sistema de sombreamento usa um tipo de técnica adiada em cima do renderizador para frente. Mas a renderpipeline não é adiada, portanto, nenhum G-Buffer ou algo assim está disponível. Mais informações sobre isso: http://www.unrealtechnology.com/Downloads/Slides/xfest-gfx.ppt Infelizmente, não consegui encontrar outra documentação disponível ao público dos internos do UE3 com uma pesquisa rápida, então espero que esta apresentação fornece uma boa visão geral. O acesso de pixels vizinhos é possível imediatamente. Dê uma olhada no pós-efeito DOF ou Bloom. Não tenho certeza se isso está implenado em código ou por meio do Material-Editor, mas se estiver no MaterialEditor, você poderá encontrar um exemplo de trabalho para isso.

  3. Você deve dar uma olhada no SceneCaptureActors. Elas podem ser usadas para material de renderização em textura, mas não tenho certeza de quantas possibilidades de ajuste você tem para os atores do UDK prontos para o uso. Você pode usar essa textura renderizada em um material. Infelizmente, seu caso específico (renderizando a profundidade) não é suportado no UDK imediatamente.

  4. Não, isso não é possível, mas você pode fazer uma solução alternativa usando os Parâmetros do material que são tratados no material (para que um material contenha o sombreador nos dois modos). Você pode alterar os parâmetros do Material via Kismet, o que permitiria fazer exatamente o que você precisa.

Na minha opinião, não há muito que você não possa fazer com o UE3 em termos de renderização. A edição do material de arrastar e soltar e o design centrado no editor de níveis podem não ser o que um programador espera, mas é exatamente o que os caras do conteúdo estão precisando. Isso provou ser uma solução muito boa no final do dia. É claro que isso exige que os criadores de conteúdo conheçam o sistema e suas limitações.

Você deve tentar e criar o que precisa usando as ferramentas fornecidas pelo UDK. Estou muito positivo de que você será capaz de conseguir o que deseja.


Obrigado pela resposta. re: # 1 - Isso não responde à minha pergunta. re: # 2 - Você tem alguma citação ou mais alguma informação? re: # 3 - Eu sei sobre as classes de ator do SceneCapture *, mas parece que elas se limitam a capturar uma visão "normal" da cena. Eu perguntei especificamente sobre ser capaz de fazer uma comparação de profundidade projetiva. Eu certamente tentei obter o que quero das ferramentas disponíveis no UDK, e foi exatamente assim que formulei esta lista de perguntas.
Neverender

Sim, você está certo ... Eu fui arrastado e comecei a divagar :), desculpe por isso ... Eu editei minha resposta, então espero que seja de mais ajuda para você.
DarthCoder

Obrigado pela informação adicional. Entendo de onde você vem quando diz que o editor de material é versátil o suficiente para a maioria das coisas. É lamentável que pareça que eu não vou conseguir realizar essa ideia usando o UDK. Injetar casos especiais em cada material não é realmente uma abordagem viável.
Neverender

1

Percebi que provavelmente deveria atualizar isso, caso alguém que lesse isso deixasse de clicar no tópico nos fóruns do UDK. Foi-me dito por um moderador que tudo o que eu quero fazer é impossível sem modificações no mecanismo.

1) Infelizmente, o nó personalizado é a única maneira de obter o HLSL nos materiais do UDK.

2) O UE3 não adia totalmente, portanto apenas a cor e a profundidade estão disponíveis nos efeitos pós-processo. Atualmente, não existe um nó que permita acessar a posição no pixel atual, mas seria muito útil (e esse cálculo é feito em muitos shaders, como o filtro de sombras).

3) A renderização a partir de pontos de vista alternativos é suportada por capturas de cenas, mas o único atributo que pode ser capturado é a cor.

4) Isso só é possível com alterações no código do mecanismo.

Basicamente, tudo o que você está perguntando exige acesso total à fonte UE3.

Citação: http://forums.epicgames.com/showthread.php?p=27609556#post27609556


0

Pelo que você está perguntando, eu não sugeriria o UDK. Você não tem acesso nativo.

Mesmo que o UDK fornecesse acesso de script ao que você está pedindo, seria incrivelmente lento, pois o UnrealScript não é o mais rápido dos idiomas.

Irreal não usa renderização adiada. Onde você ouviu isso? Alguns licenciados implementaram renderização diferida; mas, originalmente, ele não é fornecido com ele.

Fora isso, eu não sou um cara gráfico :)


Você não tem acesso à origem UE3 ou às classes nativas, como os licenciados 'adequados', por isso não pode fazer muito hackers profundos no mecanismo em si. Mas o DLLBind ( udn.epicgames.com/Three/DLLBind.html ) permite escrever código nativo e chamá-lo a partir do UnrealScript, o que deve ser suficiente para fins de otimização.

Obrigado pela resposta; no entanto, tenho certeza de que a maior parte do que eu quero alcançar pode ser hipoteticamente implementada no UnrealScript do ponto de vista de desempenho. O desempenho das duas primeiras coisas sobre as quais perguntei dependeria principalmente dos shaders usados, não do UnrealScript. Para o terceiro e o quarto, seria ideal que eu pudesse solicitar que a cena fosse renderizada novamente em um destino de renderização especificado, com um material específico que substituísse todos os materiais padrão da cena. Nenhuma parte seria particularmente intensiva em scripts; a carga de trabalho ainda cairia no motor.
Neverender
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.